<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>

          后端開(kāi)掛:3行代碼 = 8個(gè)接口

          共 8249字,需瀏覽 17分鐘

           ·

          2021-11-12 12:12

          今日推薦

          扔掉 Postman,一個(gè)工具全部搞定,真香!

          為啥查詢那么慢?

          還在直接用JWT做鑒權(quán)?JJWT真香

          推薦 15 款常用開(kāi)發(fā)工具

          干掉 navicat:這款 DB 管理工具才是y(永)y(遠(yuǎn))d(的)s(神)

          肯定有不少人會(huì)想:這怎么可能呢?

          就算用幾乎零配置的 SpringBoot,寫(xiě)一個(gè)最簡(jiǎn)單的接口也得有 3 行代碼啊!

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

          那 8 個(gè)沒(méi)啥用的 Hello World 接口就得 24 行代碼了!

          這還沒(méi)算拼 SQL 連 JDBC 或者調(diào)用 ORM 庫(kù) 的代碼呢!

          更不用說(shuō)還要寫(xiě) XML 配置 的其它庫(kù)了!

          沒(méi)錯(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è)接口了!

          那么我是怎么解決的呢?

          同一種類型的請(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 來(lái)操作一張表,例如用戶表 User,代碼寫(xiě) 3 行就夠了:

          //注冊(cè)表并添加權(quán)限,用默認(rèn)配置??
          @MethodAccess??
          public?class?User?{??
          //內(nèi)容一般僅供表字段說(shuō)明及 Android App 開(kāi)發(fā)使用,服務(wù)端不用的可不寫(xiě)。??
          }??
          ??
          //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[] 來(lái)去掉吧:

          表單:

          {??
          ????"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è)人資料界面:

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

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

          {??
          ????"[]":?{??
          ????????"count":?3,?//只要3個(gè)??
          ????????"page":?2,??//要第2頁(yè)的??
          ????????"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":?"測(cè)試新增評(píng)論"??
          ????},??
          ????"tag":?"Comment"??
          }??

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

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

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

          {??
          ????"Comment":?{??
          ????????"id":?22,??
          ????????"content":?"測(cè)試修改評(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":?"測(cè)試批量修改評(píng)論"??
          ????},??
          ????"tag":?"Comment[]"??
          }??

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

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

          寫(xiě)操作需要對(duì)應(yīng)的權(quán)限,就是用 3 行代碼配置的,請(qǐng)求報(bào)錯(cuò):

          圖片

          登錄后角色自動(dòng)變?yōu)?LOGIN(可傳@role 來(lái)自定義),符合 Comment 的 POST 權(quán)限配置,成功:

          圖片

          回想下,代碼才寫(xiě)了 3 行,就實(shí)現(xiàn)了包括增刪改查等各種操作的 8 個(gè)接口以及這么多種查詢!

          事實(shí)上用 APIJSON 根本就不用自己寫(xiě)接口!這 3 行代碼其實(shí)是為了做權(quán)限管理!

          像個(gè)人博客、非商業(yè)的新聞資訊網(wǎng)站這種可以沒(méi)有權(quán)限控制的,

          改下全局配置,不做權(quán)限校驗(yàn),那就連一行代碼都不用寫(xiě)了?。?!

          圖片


          來(lái)源:my.oschina.net/tommylemon/blog/1574430

          推薦文章


          1、一款高顏值的 SpringBoot+JPA 博客項(xiàng)目
          2、超優(yōu) Vue+Element+Spring 中后端解決方案
          3、推薦幾個(gè)支付項(xiàng)目!
          4、推薦一個(gè) Java 企業(yè)信息化系統(tǒng)
          5、一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問(wèn)答/社交網(wǎng)絡(luò)/博客)
          瀏覽 43
          點(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>
                  日本不卡久久 | 最新爱爱视频网站 | 色婷婷视频在线观看免费 | 亚洲成人精品导航 | 天天日天天草 |