<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3行代碼寫出8個(gè)接口,開掛了?

          共 20848字,需瀏覽 42分鐘

           ·

          2021-11-14 02:48

          點(diǎn)擊關(guān)注公眾號(hào),回復(fù)“2T”獲取2TB學(xué)習(xí)資源!

          互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù) 2T 有特別禮包

          來自:https://my.oschina.net/tommylemon/blog/1574430
          上一篇:呵呵,你這是在背面試題吧?ThreadLocal使用中會(huì)有那些坑?
          肯定有不少人會(huì)想:這怎么可能呢?
          就算用幾乎零配置的 SpringBoot,寫一個(gè)最簡單的接口也得有 3 行代碼啊!

          @RequestMapping("test/{request}")
          public String test(@PathVariable String request) {
              return request + ": Hello World";
          }

          那 8 個(gè)沒啥用的 Hello World 接口就得 24 行代碼了!
          這還沒算拼 SQL 連 JDBC 或者調(diào)用 ORM 庫 的代碼呢!
          更不用說還要寫 XML 配置 的其它庫了!
          沒錯(cuò),用傳統(tǒng)方式就是這樣。
          獲取一個(gè)用戶:
          base_url/get/user
          獲取一個(gè)用戶列表:
          base_url/get/user/list
          獲取一個(gè)評(píng)論:
          base_url/get/comment
          獲取一個(gè)評(píng)論列表:
          base_url/get/comment/list
          ...
          僅僅是查詢,一張表(對(duì)應(yīng)客戶端的 model)就要兩個(gè)接口了,如果再加上增刪改,批量改批量刪,還有統(tǒng)計(jì),那就得有 8 個(gè)接口了!
          那么我是怎么解決的呢?搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)回復(fù)“2T”,送你一份驚喜禮包。
          同一種類型的請(qǐng)求都只用一個(gè)接口:

          增 base_url/post

          刪(包括批量) base_url/delete

          改(包括批量) base_url/put

          查(包括列表) base_url/get

          統(tǒng)計(jì) base_url/head

          用最常用的查詢請(qǐng)求舉例:
          獲取一個(gè)用戶:
          base_url/get/
          獲取一個(gè)用戶列表:
          base_url/get/
          獲取一個(gè)評(píng)論:
          base_url/get
          獲取一個(gè)評(píng)論列表:
          base_url/get
          ...
          都是用同一個(gè)接口!我是怎么做到的呢?
          APIJSON,對(duì),就它!
          我們用 APIJSON 來操作一張表,例如用戶表 User,代碼寫 3 行就夠了:搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)回復(fù)“2T”,送你一份驚喜禮包。

          //注冊表并添加權(quán)限,用默認(rèn)配置
          @MethodAccess
          public class User {
          //內(nèi)容一般僅供表字段說明及 Android App 開發(fā)使用,服務(wù)端不用的可不寫。
          }

          //Verifier 內(nèi)添加權(quán)限
          accessMap.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));

          或者可以再定制下 POST 請(qǐng)求的角色權(quán)限:

          @MethodAccess(
            POST = {UNKNOWN, ADMIN} //只允許未登錄角色和管理員角色新增 User,默認(rèn)配置是 {LOGIN, ADMIN}
          )
          public class User {}

          然后運(yùn)行下 Server 工程就可以請(qǐng)求了:
          URL:http://apijson.cn:8080/get
          表單:

          {
              "User": {
                  "id": 82001
              }

          返回:
          {
              "User": {
                  "id": 82001,
                  "sex": 0,
                  "name""Test",
                  "tag""APIJSON User",
                  "head""http://static.oschina.net/uploads/user/19/39085_50.jpg",
                  "contactIdList": [
                      82004,
                      82021,
                      70793
                  ],
                  "pictureList": [
                      "http://common.cnblogs.com/images/icon_weibo_24.png"
                  ],
                  "date""2017-02-01 19:21:50.0"
              },
              "code": 200,
              "msg""success"
          }
          上面只是查了一個(gè) User,如果我們要查女性用戶列表,可以這樣:
          URL:http://apijson.cn:8080/get
          表單:

          {
              "[]": { //數(shù)組
                  "User": {
                      "sex": 1, //性別為女
                      "@column""id,name" //只需要id,name這兩個(gè)字段
                  }
              }
          }

          返回:

          {
              "[]": [
                  {
                      "User": {
                          "id": 82002,
                          "name""Happy~"
                      }
                  },
                  {
                      "User": {
                          "id": 82003,
                          "name""Wechat"
                      }
                  },
                  {
                      "User": {
                          "id": 82005,
                          "name""Jan"
                      }
                  }
              ],
              "code": 200,
              "msg""success"
          }

          User 被多包裹了一層?給數(shù)組命名為 User[] 來去掉吧:搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)回復(fù)“2T”,送你一份驚喜禮包。
          表單:

          {
              "User[]": { //提取User
                  "User": {
                      "sex": 1, //性別為女
                      "@column""id,name" //只需要id,name這兩個(gè)字段
                  }
              }

          返回:

          {
              "User[]": [
                  {
                      "id": 82002,
                      "name""Happy~"
                  },
                  {
                      "id": 82003,
                      "name""Wechat"
                  },
                  {
                      "id": 82005,
                      "name""Jan"
                  }
              ],
              "code": 200,
              "msg""success"
          }

          還要進(jìn)一步提取名字?User-name[] 滿足你:
          表單:

          {
              "User-name[]": { //提取User.name
                  "User": {
                      "sex": 1, //性別為女
                      "@column""name" //只需要name這個(gè)字段
                  }
              }
          }

          返回:

          {
              "User-name[]": [
                  "Happy~",
                  "Wechat",
                  "Jan",
                  "Meria",
                  "Tommy"
              ],
              "code"200,
              "msg""success"
          }

          但如果是含多張表關(guān)聯(lián)的數(shù)組,就不要去掉了哦:
          表單:

          {
              "[]": {
                  "Comment": {}, //評(píng)論
                  "User": {      //發(fā)布評(píng)論的用戶
                      "id@""/Comment/userId" //User.id = Comment.userId
                  }
              }
          }

          返回:

          {
              "[]": [
                  {
                      "Comment": {
                          "id": 3,
                          "toId": 0,
                          "userId": 82002,
                          "momentId": 15,
                          "date""2017-02-01 19:20:50.0",
                          "content""This is a Content...-3"
                      },
                      "User": {
                          "id": 82002,
                          "sex": 1,
                          "name""Happy~",
                          "tag""iOS",
                          "head""http://static.oschina.net/uploads/user/1174/2348263_50.png?t=1439773471000",
                          "contactIdList": [
                              82005,
                              82001,
                              38710
                          ],
                          "pictureList": [],
                          "date""2017-02-01 19:21:50.0"
                      }
                  },
                  {
                      "Comment": {
                          "id": 4,
                          "toId": 0,
                          "userId": 38710,
                          "momentId": 470,
                          "date""2017-02-01 19:20:50.0",
                          "content""This is a Content...-4"
                      },
                      "User": {
                          "id": 38710,
                          "sex": 0,
                          "name""TommyLemon",
                          "tag""Android&Java",
                          "head""http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
                          "contactIdList": [
                              82003,
                              82005
                          ],
                          "pictureList": [
                              "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
                              "http://common.cnblogs.com/images/icon_weibo_24.png"
                          ],
                          "date""2017-02-01 19:21:50.0"
                      }
                  }
              ],
              "code": 200,
              "msg""success"
          }

          還有動(dòng)態(tài) Moment 和它的點(diǎn)贊用戶列表:

          {
              "Moment": {},
              "User[]": {
                  "User": {
                      "id{}@""Moment/praiseUserIdList" //id在點(diǎn)贊列表praiseUserIdList內(nèi)
                  }
              }
          }

          類似微信個(gè)人資料界面:搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)回復(fù)“2T”,送你一份驚喜禮包。

          {
              "User": {},
              "Moment[]": { //朋友圈照片列表
                  "Moment": {
                      "@order":"date-", //按發(fā)布時(shí)間date倒序排列
                      "userId@""User/id"
                  }
              }
          }

          類似微信朋友圈的動(dòng)態(tài)列表:

          {
              "[]": {
                  "count": 3, //只要3個(gè)
                  "page": 2,  //要第2頁的
                  "Moment": {},
                  "User": {
                      "id@""/Moment/userId"
                  },
                  "Comment[]": {
                      "Comment": {
                          "momentId@""[]/Moment/id"
                      }
                  }
              }

          ...
          任意結(jié)構(gòu),任意內(nèi)容,任意組合,
          想要什么 JSON 結(jié)構(gòu)、字段內(nèi)容、表關(guān)聯(lián)組合查詢都可以完全自定義!

          "key[]":{}                                         // 查詢數(shù)組

          "key{}":[1,2,3]                                    // 匹配選項(xiàng)范圍

          "key{}":"<=10,length(key)>1..."                    // 匹配條件范圍

          "key()":"function(arg0,arg1...)"                   // 遠(yuǎn)程調(diào)用函數(shù)

          "key@":"key0/key1.../targetKey"                    // 引用賦值

          "key$":"%abc%"                                     // 模糊搜索

          "key?":"^[0-9]+$"                                  // 正則匹配

          "key+":[1]                                         // 增加/擴(kuò)展

          "key-":888.88                                     // 減少/去除 

          "name:alias"                                      // 新建別名

          "@column":"id,sex,name"                           // 返回字段

          "@group":"userId"                                 // 分組方式

          "@having":"max(id)>=100"                          // 聚合函數(shù)

          "@order":"date-,name+"                            // 排序方式

          以上都是查詢請(qǐng)求,再試試 增刪改 和 統(tǒng)計(jì) :
          增: http://apijson.cn:8080/post

          {
              "Comment": {
                  "userId": 82001,
                  "momentId": 15,
                  "content""測試新增評(píng)論"
              },
              "tag""Comment"
          }

          刪: http://apijson.cn:8080/delete

          {
              "Comment": {
                  "id": 1510394480987
              },
              "tag""Comment"
          }

          改: http://apijson.cn:8080/put

          {
              "Comment": {
                  "id": 22,
                  "content""測試修改評(píng)論"
              },
              "tag""Comment"
          }

          批量刪: http://apijson.cn:8080/delete

          {
              "Comment": {
                  "id{}": [1510394480987, 1510394804925]
              },
              "tag""Comment[]"
          }

          批量改: http://apijson.cn:8080/put

          {
              "Comment": {
                  "id{}": [22, 114],
                  "content""測試批量修改評(píng)論"
              },
              "tag""Comment[]"
          }

          統(tǒng)計(jì): http://apijson.cn:8080/head

          {
              "Comment": {
                  "content$""%測試%" //內(nèi)容包含 測試 兩個(gè)字
              }
          }

          寫操作需要對(duì)應(yīng)的權(quán)限,就是用 3 行代碼配置的,請(qǐng)求報(bào)錯(cuò):
          登錄后角色自動(dòng)變?yōu)?LOGIN(可傳@role 來自定義),符合 Comment 的 POST 權(quán)限配置,成功:
          回想下,代碼才寫了 3 行,就實(shí)現(xiàn)了包括增刪改查等各種操作的 8 個(gè)接口以及這么多種查詢!
          事實(shí)上用 APIJSON 根本就不用自己寫接口!這 3 行代碼其實(shí)是為了做權(quán)限管理!
          像個(gè)人博客、非商業(yè)的新聞資訊網(wǎng)站這種可以沒有權(quán)限控制的,
          改下全局配置,不做權(quán)限校驗(yàn),那就連一行代碼都不用寫了!!!

          感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。

              · END ·
          最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全


          正文結(jié)束


          推薦閱讀 ↓↓↓

          1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事

          2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個(gè)學(xué)校畢業(yè)的?

          3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

          4.程序員一般可以從什么平臺(tái)接私活?

          5.清華大學(xué):2021 元宇宙研究報(bào)告!

          6.為什么國內(nèi) 996 干不過國外的 955呢?

          7.這封“領(lǐng)導(dǎo)痛批95后下屬”的郵件,句句扎心!

          8.15張圖看懂瞎忙和高效的區(qū)別!


          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产福利在线永久视频 | 免费在线观看黄色视频 | 青青青青青欧美在线观视频观看 | 美日韩一级 | 国语少妇高潮在线观看 |