<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行代碼寫(xiě)出8個(gè)接口,開(kāi)掛了?

          共 7628字,需瀏覽 16分鐘

           ·

          2021-11-14 02:23

          肯定有不少人會(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)源 |?https://my.oschina.net/tommylemon/blog/1574430

          推薦閱讀:

          世界的真實(shí)格局分析,地球人類社會(huì)底層運(yùn)行原理

          不是你需要中臺(tái),而是一名合格的架構(gòu)師(附各大廠中臺(tái)建設(shè)PPT)

          企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺(tái)實(shí)踐】華為大數(shù)據(jù)中臺(tái)架構(gòu)分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細(xì)280頁(yè)Docker實(shí)戰(zhàn)文檔!開(kāi)放下載

          華為大數(shù)據(jù)解決方案(PPT)

          瀏覽 50
          點(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>
                  大香蕉最新视频 | 成人7777 | 牛牛高清无码在线观看视频 | 九九精品久久久久久久久无码人妻 | 夜夜躁狠狠躁日日躁XX |