3行代碼寫出8個(gè)接口,開掛了?
互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù) 2T 有特別禮包
肯定有不少人會(huì)想:這怎么可能呢? 就算用幾乎零配置的 SpringBoot,寫一個(gè)最簡單的接口也得有 3 行代碼啊! 那 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è)接口: 用最常用的查詢請(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,
"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 被多包裹了一層?給數(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": {
"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”,送你一份驚喜禮包。 類似微信朋友圈的動(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寫操作需要對(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ù)不迷茫!小編到你上高速。
正文結(jié)束
1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事
2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個(gè)學(xué)校畢業(yè)的?
3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧
5.清華大學(xué):2021 元宇宙研究報(bào)告!





