[English](https://github.com/Tencent/APIJSON/blob/master/Document-English.md)
# APIJSON éç¨ææ¡£
æ¬ææ¯éç¨ææ¡£ï¼åªå APIJSON åè®®æå
³ï¼å C#, Go, Java, JavaScript, PHP, Python, TypeScript çå¼åè¯è¨æ å
³ã
å
·ä½å¼åè¯è¨ç¸å
³ç é
ç½®ãè¿è¡ãé¨ç½² çææ¡£è§å个ç¸å
³é¡¹ç®çææ¡£ï¼å¯ä»¥å¨é¦é¡µç¹å»å¯¹åºè¯è¨çå
¥å£æ¥æ¥çã
https://github.com/Tencent/APIJSON

å端å¼åè
å¯ä»¥å
ç [徿å
¥é¨æç¨1](http://apijson.cn/doc/zh/) æ [徿å
¥é¨æç¨2](https://hanxu2018.github.io/APIJSON-DOC/) ï¼åæ¬ææ¡£æåºå
¥çç¹ä»¥æ¬ææ¡£ä¸ºåãä¾å¦æ£åå¹é
key? å·²åºå¼ï¼ç¨ key~ æ¿ä»£ï¼ä¾å¦ "@column":"store_id,sum(amt):totAmt" ä¸éå· , æè¯¯ï¼åºè¯¥ç¨åå· ; éå¼ SQL 彿°ï¼æ¹ä¸º "@column":"store_id;sum(amt):totAmt"ï¼
* ### [1.示ä¾](#1)
* ### [2.对æ¯ä¼ ç»æ¹å¼](#2)
* [2.1 å¼åæµç¨](#2.1)
* [2.2 å端请æ±](#2.2)
* [2.3 å端æä½](#2.3)
* [2.4 å端解æ](#2.4)
* [2.5 对åºä¸åéæ±ç请æ±](#2.5)
* [2.6 对åºä¸å请æ±çç»æ](#2.6)
* ### [3.设计è§è](#3)
* [3.1 æä½æ¹æ³](#3.1)
* [3.2 åè½ç¬¦](#3.2)
##
1.示ä¾
#### è·åç¨æ·
请æ±ï¼
{
"User":{
"id":38710
 }
}
[ç¹å»è¿éæµè¯](http://apijson.cn:8080/get/{"User":{"id":38710}})
è¿åï¼
{
"User":{
"id":38710,
"sex":0,
"name":"TommyLemon",
"tag":"Android&Java",
"head":"http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
"date":1485948110000,
"pictureList":[
"http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
"http://common.cnblogs.com/images/icon_weibo_24.png"
]
},
"code":200,
"msg":"success"
}
[GIF] APIJSON åç§å表对象æ¥è¯¢ï¼ç®åæ¥è¯¢ãç»è®¡ãåç»ãæåºãèåãæ¯è¾ãçéåæ®µãåæ®µå«å ç

#### è·åç¨æ·å表
请æ±ï¼
{
"[]":{
 "count":3,       //åªè¦3个
 "User":{
  "@column":"id,name" //åªè¦id,nameè¿ä¸¤ä¸ªå段
 }
}
}
[ç¹å»è¿éæµè¯](http://apijson.cn:8080/get/{"[]":{"count":3,"User":{"@column":"id,name"}}})
è¿åï¼
{
"[]":[
{
"User":{
"id":38710,
"name":"TommyLemon"
}
},
{
"User":{
"id":70793,
"name":"Strong"
}
},
{
"User":{
"id":82001,
"name":"Android"
}
}
],
"code":200,
"msg":"success"
}
[GIF] APIJSON åç§å表æ°ç»æ¥è¯¢ï¼ç®åæ¥è¯¢ãç»è®¡ãåç»ãæåºãèåãåé¡µãæ¯è¾ãæç´¢ãæ£åãæ¡ä»¶ç»å ç

#### è·å卿ååå¸è
ç¨æ·
请æ±ï¼
{
"Moment":{
},
"User":{
"id@":"Moment/userId" //User.id = Moment.userId
}
}
[ç¹å»è¿éæµè¯](http://apijson.cn:8080/get/{"Moment":{},"User":{"id@":"Moment%252FuserId"}})
è¿åï¼
{
"Moment":{
"id":12,
"userId":70793,
"date":"2017-02-08 16:06:11.0",
"content":"1111534034"
},
"User":{
"id":70793,
"sex":0,
"name":"Strong",
"tag":"djdj",
"head":"http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000",
"contactIdList":[
38710,
82002
],
"date":"2017-02-01 19:21:50.0"
},
"code":200,
"msg":"success"
}
#### è·å类似微信æååç卿å表
请æ±ï¼
{
"[]":{ //请æ±ä¸ä¸ªæ°ç»
"page":0,           //æ°ç»æ¡ä»¶
"count":2,
"Moment":{           //请æ±ä¸ä¸ªå为Momentç对象
"content$":"%a%"      //对象æ¡ä»¶ï¼æç´¢contentä¸å
å«aç卿
},
"User":{
  "id@":"/Moment/userId",    //User.id = Moment.userId 缺çå¼ç¨èµå¼è·¯å¾ï¼ä»æå¤å®¹å¨çç¶å®¹å¨è·¯å¾å¼å§
"@column":"id,name,head"   //æå®è¿ååæ®µ
},
"Comment[]":{ //请æ±ä¸ä¸ªå为Commentçæ°ç»ï¼å¹¶å»é¤Commentå
è£
"count":2,
"Comment":{
"momentId@":"[]/Moment/id" //Comment.momentId = Moment.id 宿´å¼ç¨èµå¼è·¯å¾
}
}
}
}
[ç¹å»è¿éæµè¯](http://apijson.cn:8080/get/{"[]":{"page":0,"count":2,"Moment":{"content$":"%2525a%2525"},"User":{"id@":"%252FMoment%252FuserId","@column":"id,name,head"},"Comment[]":{"count":2,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})
è¿åï¼
{
"[]":[
{
"Moment":{
"id":15,
"userId":70793,
"date":1486541171000,
"content":"APIJSON is a JSON Transmission Structure Protocolâ¦",
"praiseUserIdList":[
82055,
82002,
82001
],
"pictureList":[
"http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000",
"http://common.cnblogs.com/images/icon_weibo_24.png"
]
},
"User":{
"id":70793,
"name":"Strong",
"head":"http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000"
},
"Comment[]":[
{
"id":176,
"toId":166,
"userId":38710,
"momentId":15,
"date":1490444883000,
"content":"thank you"
},
{
"id":1490863469638,
"toId":0,
"userId":82002,
"momentId":15,
"date":1490863469000,
"content":"Just do it"
}
]
},
{
"Moment":{
"id":58,
"userId":90814,
"date":1485947671000,
"content":"This is a Content...-435",
"praiseUserIdList":[
38710,
82003,
82005,
93793,
82006,
82044,
82001
],
"pictureList":[
"http://static.oschina.net/uploads/img/201604/22172507_aMmH.jpg"
]
},
"User":{
"id":90814,
"name":7,
"head":"http://static.oschina.net/uploads/user/51/102723_50.jpg?t=1449212504000"
},
"Comment[]":[
{
"id":13,
"toId":0,
"userId":82005,
"momentId":58,
"date":1485948050000,
"content":"This is a Content...-13"
},
{
"id":77,
"toId":13,
"userId":93793,
"momentId":58,
"date":1485948050000,
"content":"This is a Content...-77"
}
]
}
],
"code":200,
"msg":"success"
}
[GIF] APIJSON åç§å¤è¡¨å
³èæ¥è¯¢ï¼ä¸å¯¹ä¸ãä¸å¯¹å¤ãå¤å¯¹ä¸ãåç§æ¡ä»¶ ç

[GIF] APIJSON åç§ JOINï¼< LEFT JOIN, & INNER JOIN ç

[GIF] APIJSON åç§åæ¥è¯¢ï¼@from@ FROM, key@ =, key>@ >, key{}@ IN, key}{@ EXISTS ç

[GIF] APIJSON é¨ååè½æ¼ç¤ºéåï¼ç±æµ
å
¥æ·±ãç±ç®åå°å¤æ

[å¨çº¿æµè¯](http://apijson.cn/api)
## 2.对æ¯ä¼ ç»RESTfulæ¹å¼
### 2.1 å¼åæµç¨
å¼åæµç¨ | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
æ¥å£ä¼ è¾ | çå端ç¼è¾æ¥å£ï¼ç¶åæ´æ°ææ¡£ï¼å端åæç
§ææ¡£ç¼è¾è¯·æ±åè§£æä»£ç | å端æç
§èªå·±çéæ±ç¼è¾è¯·æ±åè§£æä»£ç ã
æ²¡ææ¥å£ï¼æ´ä¸éè¦ææ¡£ï¼å端åä¹ä¸ç¨åå端æ²éæ¥å£æææ¡£é®é¢äºï¼
å
¼å®¹æ§ç | å端å¢å æ°æ¥å£ï¼ç¨v2表示第2çæ¥å£ï¼ç¶åæ´æ°ææ¡£ | ä»ä¹é½ä¸ç¨åï¼
### 2.2 å端请æ±
åç«¯è¯·æ± | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
è¦æ± | å端æç
§ææ¡£å¨å¯¹åºURLå颿¼æ¥é®å¼å¯¹ | å端æç
§èªå·±çéæ±å¨åºå®URLåæ¼æ¥JSON
URL | ä¸åç请æ±å¯¹åºä¸åçURLï¼åºæ¬ä¸æå¤å°ä¸ªä¸åç请æ±å°±å¾æå¤å°ä¸ªæ¥å£URL | ç¸åçæä½æ¹æ³(å¢å æ¹æ¥)é½ç¨åä¸ä¸ªURLï¼
大é¨å请æ±é½ç¨7个éç¨æ¥å£URLçå
¶ä¸ä¸ä¸ª
é®å¼å¯¹ | key=value | key:value
ç»æ | åä¸ä¸ªURLå
table_nameåªè½æä¸ä¸ª
base_url/get/table_name?
key0=value0&key1=value1... | åä¸ä¸ªURLåTableNameå¯ä¼ ä»»ææ°é个
base_url/get/
{
TableName0:{
key0:value0,
key1:value1,
...
},
TableName1:{
...
}
...
}
### 2.3 å端æä½
å端æä½ | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
è§£æåè¿å | ååºé®å¼å¯¹ï¼æé®å¼å¯¹ä½ä¸ºæ¡ä»¶ç¨é¢è®¾ççæ¹å¼å»æ¥è¯¢æ°æ®åºï¼æåå°è£
JSONå¹¶è¿åç»å端 | æParser#parseæ¹æ³çè¿åå¼è¿åç»å端就è¡
è¿åJSONç»æçè®¾å®æ¹å¼ | ç±å端设å®ï¼å端ä¸è½ä¿®æ¹ | ç±å端设å®ï¼å端ä¸è½ä¿®æ¹
### 2.4 å端解æ
å端解æ | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
æ¥çæ¹å¼ | æ¥ææ¡£æé®åç«¯ï¼æçè¯·æ±æååçæ¥å¿ | ç请æ±å°±è¡ï¼ææ±å³æå¾ï¼ä¸ç¨æ¥ãä¸ç¨é®ãä¸ç¨çãä¹å¯ä»¥çè¯·æ±æååçæ¥å¿
è§£ææ¹æ³ | ç¨JSONè§£æå¨æ¥è§£æJSONObject | å¯ä»¥ç¨JSONResponseè§£æJSONObjectï¼æä½¿ç¨ä¼ ç»æ¹å¼
### 2.5 å端对åºä¸åéæ±ç请æ±
å端çè¯·æ± | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
User | base_url/get/user?id=38710 | [base_url/get/
{
"User":{
"id":38710
}
}](http://apijson.cn:8080/get/{"User":{"id":38710}})
Momentå对åºçUser | å两次请æ±
Moment:
base_url/get/moment?userId=38710
User:
base_url/get/user?id=38710 | [base_url/get/
{
"Moment":{
"userId":38710
},
"User":{
"id":38710
}
}](http://apijson.cn:8080/get/{"Moment":{"userId":38710},"User":{"id":38710}})
Userå表 | base_url/get/user/list?
page=0&count=3&sex=0 | [base_url/get/
{
"User[]":{
"page":0,
"count":3,
"User":{
"sex":0
}
}
}](http://apijson.cn:8080/get/{"User[]":{"page":0,"count":3,"User":{"sex":0}}})
Momentå表ï¼
æ¯ä¸ªMomentå
æ¬
1.åå¸è
User
2.å3æ¡Comment | Momentéå¿
é¡»æ
1.User对象
2.Commentæ°ç»
base_url/get/moment/list?
page=0&count=3&commentCount=3 | [base_url/get/
{
"[]":{
"page":0,
"count":3,
"Moment":{},
"User":{
"id@":"/Moment/userId"
},
"Comment[]":{
"count":3,
"Comment":{
"momentId@":"[]/Moment/id"
}
}
}
}](http://apijson.cn:8080/get/{"[]":{"page":0,"count":3,"Moment":{},"User":{"id@":"%252FMoment%252FuserId"},"Comment[]":{"count":3,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})
Useråå¸çMomentå表ï¼
æ¯ä¸ªMomentå
æ¬
1.åå¸è
User
2.å3æ¡Comment | 1.Momentéå¿
é¡»æUser对象åCommentæ°ç»
2.åæ®µåå¿
é¡»æ¥æ¥å£ææ¡£ï¼ä¾å¦è¯è®ºæ°éåæ®µåå¯è½æ¯
commentCount,comment_countæè
ç®åcmt_countçåç§å¥è©åæ³...
base_url/get/moment/list?
page=0&count=3
&commentCount=3&userId=38710 | æä»¥ä¸å ç§æ¹å¼:
â æä»¥ä¸è¯·æ±éç
"Moment":{}, "User":{"id@":"/Moment/userId"}
æ¹ä¸º
["Moment":{"userId":38710}, "User":{"id":38710}](http://apijson.cn:8080/get/{"[]":{"page":0,"count":3,"Moment":{"userId":38710},"User":{"id":38710},"Comment[]":{"count":3,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})
â¡ ææUseræ¾å¨ä¸é¢çæå¤å±çå»éå¤çUser
[base_url/get/
{
"User":{
"id":38710
},
"[]":{
"page":0,
"count":3,
"Moment":{
"userId":38710
},
"Comment[]":{
"count":3,
"Comment":{
"momentId@":"[]/Moment/id"
}
}
}
}](http://apijson.cn:8080/get/{"User":{"id":38710},"[]":{"page":0,"count":3,"Moment":{"userId":38710},"Comment[]":{"count":3,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})
â¢ å¦æUserä¹åå·²ç»è·åå°äºï¼è¿å¯ä»¥ä¸ä¼ Useræ¥èç请æ±åè¿åæ°æ®çæµéå¹¶æåé度
[base_url/get/
{
"[]":{
"page":0,
"count":3,
"Moment":{
"userId":38710
},
"Comment[]":{
"count":3,
"Comment":{
"momentId@":"[]/Moment/id"
}
}
}
}](http://apijson.cn:8080/get/{"[]":{"page":0,"count":3,"Moment":{"userId":38710},"Comment[]":{"count":3,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})
### 2.6 å端对åºä¸å请æ±çè¿åç»æ
å端çè¿åç»æ | ä¼ ç»æ¹å¼ | APIJSON
-------- | ------------ | ------------
User | {
"data":{
"id":38710,
"name":"xxx",
...
},
"code":200,
"msg":"success"
} | {
"User":{
"id":38710,
"name":"xxx",
...
},
"code":200,
"msg":"success"
}
Momentå对åºçUser | åå«è¿å两次请æ±çç»æï¼è·åå°MomentåååºuserIdä½ä¸ºUserçidæ¡ä»¶å»æ¥è¯¢User
Moment:
{
"data":{
"id":235,
"content":"xxx",
...
},
"code":200,
"msg":"success"
}
User:
{
"data":{
"id":38710,
"name":"xxx",
...
},
"code":200,
"msg":"success"
} | 䏿¬¡æ§è¿åï¼æ²¡æä¼ ç»æ¹å¼å¯¼è´ç é¿æ¶é´çå¾
ç»æãä¸¤æ¬¡ç»æé´å
³èã线ç¨å¤æ¬¡åæ¢ çé®é¢
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"User":{
"id":38710,
"name":"xxx",
...
},
"code":200,
"msg":"success"
}
Userå表 | {
"data":[
{
"id":38710,
"name":"xxx",
...
},
{
"id":82001,
...
},
...
],
"code":200,
"msg":"success"
} | {
"User[]":[
{
"id":38710,
"name":"xxx",
...
},
{
"id":82001,
...
},
...
],
"code":200,
"msg":"success"
}
Momentåè¡¨ï¼æ¯ä¸ªMomentå
æ¬åå¸è
Useråå3æ¡Comment | Momentéå¿
é¡»æ
1.User对象
2.Commentæ°ç»
{
"data":[
{
"id":235,
"content":"xxx",
...,
"User":{
...
},
"Comment":[
...
]
},
{
"id":301,
"content":"xxx",
...,
"User":{
...
},
...
},
...
],
"code":200,
"msg":"success"
} | 1.é«çµæ´»ï¼å¯ä»»æç»å
2.ä½è¦åï¼é»è¾å¾æ¸
æ°
{
"[]":[
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"User":{
...
},
"Comment[]":[
...
]
},
{
"Moment":{
"id":301,
"content":"xxx",
...
},
"User":{
...
},
...
},
...
],
"code":200,
"msg":"success"
}
Useråå¸çMomentåè¡¨ï¼æ¯ä¸ªMomentå
æ¬åå¸è
Useråå3æ¡Comment | 1.大ééå¤Userï¼æµªè´¹æµéåæå¡å¨æ§è½
2.ä¼åå¾ç¹çï¼éè¦å端æ©å±æ¥å£ãåå¥½ææ¡£ï¼å端/å端åé
åä¼å
{
"data":[
{
"id":235,
"content":"xxx",
...,
"User":{
"id":38710,
"name":"Tommy"
...
},
"Comment":[
...
]
...
},
{
"id":470,
"content":"xxx",
...,
"User":{
"id":38710,
"name":"Tommy"
...
},
"Comment":[
...
]
...
},
{
"id":511,
"content":"xxx",
...,
"User":{
"id":38710,
"name":"Tommy"
...
},
"Comment":[
...
]
...
},
{
"id":595,
"content":"xxx",
...,
"User":{
"id":38710,
"name":"Tommy"
...
},
"Comment":[
...
]
...
},
...
],
"code":200,
"msg":"success"
} | 以ä¸ä¸åè¯·æ±æ¹å¼çç»æ:
â 常è§è¯·æ±
{
"[]":[
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"User":{
"id":38710,
"name":"Tommy"
...
},
"Comment[]":[
...
]
},
...
],
"code":200,
"msg":"success"
}
â¡ çå»éå¤çUser
{
"User":{
"id":38710,
"name":"Tommy",
...
},
"[]":[
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"Comment[]":[
...
]
},
...
],
"code":200,
"msg":"success"
}
â¢ ä¸æ¥è¯¢å·²è·åå°çUser
{
"[]":[
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"Comment[]":[
...
]
},
...
],
"code":200,
"msg":"success"
}
1.base_urlæåºå°åï¼ä¸è¬æ¯é¡¶çº§ååï¼å
¶å®åæ¯url齿¯å¨base_urlåæ©å±ãå¦base_url:http://apijson.cn:8080/ ï¼å¯¹åºçGET忝url:http://apijson.cn:8080/get/ ãä¸åã
2.请æ±ä¸çkeyævalueä»»æä¸ä¸ªä¸ºnull弿¶ï¼è¿ä¸ª key:valueé®å¼å¯¹ 被è§ä¸ºæ æãä¸åã
3.请æ±ä¸ç / éè¦è½¬ä¹ãJSONRequest.javaå·²ç»ç¨URLEncoder.encode转ä¹ï¼ä¸éè¦ååï¼ä½å¦ææ¯æµè§å¨æPostmançç´æ¥è¾å
¥url/requestï¼éè¦ærequestä¸çææ / 齿¹æ %252F ãä¸åã
4.codeï¼æè¿åç»æä¸çç¶æç ï¼200表示æåï¼å
¶å®é½æ¯é误ç ï¼å¼å
¨é¨é½æ¯HTTPæ åç¶æç ãä¸åã
5.msgï¼æè¿åç»æä¸çç¶æä¿¡æ¯ï¼å¯¹æåç»ææé误åå ç详ç»è¯´æãä¸åã
6.codeåmsgæ»æ¯å¨è¿åç»æçåä¸å±çº§æå¯¹åºç°ã对ææè¯·æ±çè¿åç»æé½ä¼å¨æå¤å±æä¸å¯¹æ»ç»å¼codeåmsgãä¸åã
7.idçåæ®µå¯¹åºçå¼ä»
ä¾è¯´æï¼ä¸ä¸å®æ¯æ°æ®åºéåå¨çï¼è¯·æ±éç¨çæ¯çå®åå¨çå¼ãä¸åã
## 3.设计è§è
### 3.1 æä½æ¹æ³
Â æ¹æ³å说æ | URL | Request | Response
------------ | ------------ | ------------ | ------------
GET:
æ®éè·åæ°æ®ï¼
å¯ç¨æµè§å¨è°è¯ | base_url/get/ | {
TableName:{
â¦
}
}
{â¦}å
为éå¶æ¡ä»¶
ä¾å¦è·åä¸ä¸ª id = 235 ç Momentï¼
[{
"Moment":{
"id":235
}
}](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fget&type=JSON&json={"Moment"%3A{"id"%3A235}})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`SELECT * FROM Moment WHERE id=235 LIMIT 1` | {
TableName:{
...
},
"code":200,
"msg":"success"
}
ä¾å¦
{
"Moment":{
"id":235,
"userId":38710,
"content":"APIJSON,let interfaces and documents go to hell !"
},
"code":200,
"msg":"success"
}
HEAD:
æ®éè·åæ°éï¼
å¯ç¨æµè§å¨è°è¯ | base_url/head/ | {
TableName:{
â¦
}
}
{â¦}å
为éå¶æ¡ä»¶
ä¾å¦è·åä¸ä¸ª id = 38710 ç User æåå¸ç Moment æ»æ°ï¼
[{
"Moment":{
"userId":38710
}
}](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fhead&type=JSON&json={"Moment"%3A{"userId"%3A38710}})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`SELECT count(*) FROM Moment WHERE userId=38710 LIMIT 1` | {
TableName:{
"code":200,
"msg":"success",
"count":10
},
"code":200,
"msg":"success"
}
ä¾å¦
{
"Moment":{
"code":200,
"msg":"success",
"count":10
},
"code":200,
"msg":"success"
}
GETS:
å®å
¨/ç§å¯è·åæ°æ®ï¼
ç¨äºè·åé±å
ç
对å®å
¨æ§è¦æ±é«çæ°æ® | base_url/gets/ | æå¤å±å ä¸ä¸ª "tag":tagï¼ä¾å¦ ["tag":"Privacy"](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fgets&type=JSON&json={"tag"%3A"Privacy","Privacy"%3A{"id"%3A82001}})ï¼å
¶å®åGET | åGET
HEADS:
å®å
¨/ç§å¯è·åæ°éï¼
ç¨äºè·åé¶è¡å¡æ°éç
对å®å
¨æ§è¦æ±é«çæ°æ®æ»æ° | base_url/heads/ | æå¤å±å ä¸ä¸ª "tag":tagï¼ä¾å¦ ["tag":"Verify"](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fheads&type=JSON&json={"tag"%3A"Verify","Verify"%3A{"phone"%3A13000082001}})ï¼å
¶å®åHEAD | åHEAD
POST:
æ°å¢æ°æ® | base_url/post/ | å个ï¼
{
TableName:{
â¦
},
"tag":tag
}
{â¦}ä¸idç±å端çæï¼ä¸è½ä¼
ä¾å¦å½åç»å½ç¨æ· 38710 åå¸ä¸ä¸ªæ° Commentï¼
[{
"Comment":{
"momentId":12,
"content":"APIJSON,let interfaces and documents go to hell !"
},
"tag":"Comment"
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fpost&type=JSON&json={"Comment":{"momentId":12,"content":"APIJSON,let%20interfaces%20and%20documents%20go%20to%20hell%20!"},"tag":"Comment"})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`INSERT INTO Comment(userId,momentId,content) VALUES(38710,12,'APIJSON,let interfaces and documents go to hell !')`
æ¹éï¼
{
TableName\[]:\[{
â¦
}, {
â¦
}
â¦
],
"tag":tag
}
{â¦}ä¸idç±å端çæï¼ä¸è½ä¼
ä¾å¦å½åç»å½ç¨æ· 82001 åå¸ 2 个 Commentï¼
[{
"Comment[]":[{
"momentId":12,
"content":"APIJSON,let interfaces and documents go to hell !"
}, {
"momentId":15,
"content":"APIJSON is a JSON transmision protocol."
}],
"tag":"Comment:[]"
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fpost&type=JSON&json={"Comment[]":[{"momentId":12,"content":"APIJSON,let%20interfaces%20and%20documents%20go%20to%20hell%20!"},{"momentId":15,"content":"APIJSON%20is%20a%20JSON%20transmision%20protocol."}],"tag":"Comment:[]"})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`INSERT INTO Comment(userId,momentId,content) VALUES(82001,12,'APIJSON,let interfaces and documents go to hell !');`
`INSERT INTO Comment(userId,momentId,content) VALUES(82001,15,'APIJSON is a JSON transmision protocol.');` | å个ï¼
{
TableName:{
"code":200,
"msg":"success",
"id":38710
},
"code":200,
"msg":"success"
}
ä¾å¦
{
"Comment":{
"code":200,
"msg":"success",
"id":120
},
"code":200,
"msg":"success"
}
æ¹éï¼
{
TableName:{
"code":200,
"msg":"success",
"count":5,
"id[]":[1, 2, 3, 4, 5]
},
"code":200,
"msg":"success"
}
ä¾å¦
{
"Comment":{
"code":200,
"msg":"success",
"count":2,
"id[]":\[1, 2]
},
"code":200,
"msg":"success"
}
PUT:
ä¿®æ¹æ°æ®ï¼
åªä¿®æ¹æä¼ çåæ®µ | base_url/put/ | {
TableName:{
"id":id,
â¦
},
"tag":tag
}
{â¦} ä¸ id æ id{} è³å°ä¼ ä¸ä¸ª
ä¾å¦å½åç»å½ç¨æ· 82001 ä¿®æ¹ id = 235 ç Moment ç contentï¼
[{
"Moment":{
"id":235,
"content":"APIJSON,let interfaces and documents go to hell !"
},
"tag":"Moment"
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fput&type=JSON&json={"Moment":{"id":235,"content":"APIJSON,let%20interfaces%20and%20documents%20go%20to%20hell%20!"},"tag":"Moment"})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`UPDATE Moment SET content='APIJSON,let interfaces and documents go to hell !' WHERE id=235 AND userId=82001 LIMIT 1`
æ¹éé¤äº id{}:\[] ä¹å¯ç±»ä¼¼æ¹é POSTï¼åªæ¯æ¯ä¸ª {...} éé¢é½å¿
é¡»æ idã
"tag":"Comment[]" 对åºå¯¹è±¡ "Comment":{"id{}":[1,2,3]}ï¼è¡¨ç¤ºæå®è®°å½å
¨é¨ç»ä¸è®¾ç½®ï¼
"tag":"Comment:[]" å¤äºåå·ï¼å¯¹åºæ°ç» "Comment[]":[{"id":1},{"id":2},{"id":3}]ï¼è¡¨ç¤ºæ¯é¡¹åç¬è®¾ç½® | åPOST
DELETE:
å 餿°æ® | base_url/delete/ | {
TableName:{
"id":id
},
"tag":tag
}
{â¦} ä¸ id æ id{} è³å°ä¼ ä¸ä¸ªï¼ä¸è¬åªä¼ id æ id{}
ä¾å¦å½åç»å½ç¨æ· 82001 æ¹éå é¤ id = 100,110,120 ç Commentï¼
[{
"Comment":{
"id{}":[100,110,120]
},
"tag":"Comment[]"
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fdelete&type=JSON&json={"Comment":{"id{}":[100,110,120]},"tag":"Comment[]"})
åç«¯æ ¡éªéè¿åèªå¨è§£æä¸º SQL å¹¶æ§è¡ï¼
`DELETE FROM Comment WHERE id IN(100,110,120) AND userId=82001 LIMIT 3` | {
TableName:{
"code":200,
"msg":"success",
"id[]":[100,110,120]
"count":3
},
"code":200,
"msg":"success"
}
ä¾å¦
{
"Comment":{
"code":200,
"msg":"success",
"id[]":[100,110,120],
"count":3
},
"code":200,
"msg":"success"
}
以䏿¥å£çç®åå½¢å¼:
base_url/{method}/{tag} | GET: æ®éè·åæ°æ®
base_url/get/{tag}
HEAD: æ®éè·åæ°é
base_url/head/{tag}
GETS: å®å
¨/ç§å¯è·åæ°æ®
base_url/gets/{tag}
HEADS: å®å
¨/ç§å¯è·åæ°é
base_url/heads/{tag}
POST: æ°å¢æ°æ®
base_url/post/{tag}
PUT: ä¿®æ¹æ°æ® base_url/put/{tag}
DELETE: å 餿°æ®
base_url/delete/{tag} | ä¾å¦å®å
¨/ç§å¯è·åä¸ä¸ª id = 82001 ç Privacyï¼
[base_url/gets/Privacy/
{"id":82001}](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fgets%2FPrivacy&type=JSON&json={"id"%3A82001})
ç¸å½äº
[base_url/gets/
{"tag":"Privacy", "Privacy":{"id":82001}}](http://apijson.cn/api/?url=http%3A%2F%2Fapijson.cn%3A8080%2Fgets&type=JSON&json={"tag"%3A"Privacy","Privacy"%3A{"id"%3A82001}})
ä¾å¦æ¹éä¿®æ¹ id = 114, 124 ç Comment ç contentï¼
[base_url/put/Comemnt[]/
{
"id{}":[114,124],
"content":"test multi put"
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fput%2FComment[]&type=JSON&json={"id{}"%3A[114,124],"content"%3A"test%20multi%20put"})
ç¸å½äº
[base_url/put/
{
"tag":"Comment[]",
"Comment":{
"id{}":[114,124],
"content":"test multi put"
}
}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fput&type=JSON&json={"tag"%3A"Comment[]","Comment"%3A{"id{}"%3A[114,124],"content"%3A"test%20multi%20put"}}) | å以ä¸å¯¹åºçæ¹æ³
1.TableNameæè¦æ¥è¯¢çæ°æ®åºè¡¨Tableçåç§°å符串ã第ä¸ä¸ªå符为大å忝ï¼å©ä¸çå符è¦ç¬¦åè±è¯åæ¯ãæ°åãä¸å线ä¸çä»»ä½ä¸ç§ã对åºçå¼çç±»å为JSONObjectï¼ç»ææ¯ {...}ï¼é颿¾çæ¯Tableçåæ®µ(åå)ãä¸åã
2."tag":tag åé¢çtagæ¯éGETãHEAD请æ±ä¸å¹é
请æ±çJSONç»æçæ è¯ï¼ä¸è¬æ¯è¦æ¥è¯¢çTableçåç§°ï¼ç±å端Requestè¡¨ä¸æå®ãä¸åã
3.GETãHEADè¯·æ±æ¯å¼æ¾è¯·æ±ï¼å¯ä»»æç»åä»»æåµå¥ãå
¶å®è¯·æ±ä¸ºåéå¶çå®å
¨/ç§å¯è¯·æ±ï¼å¯¹åºç æ¹æ³ï¼methodï¼, æ è¯ï¼tagï¼, çæ¬ï¼versionï¼, ç»æï¼structureï¼ é½å¿
é¡»å å端Requestè¡¨ä¸ææå®ç ä¸ä¸å¯¹åºï¼å¦å请æ±å°ä¸è¢«éè¿ãversion ä¸ä¼ ã为 null æ <=0 é½ä¼ä½¿ç¨æé«çæ¬ï¼ä¼ äºå
¶å®ææå¼åä¼ä½¿ç¨ææ¥è¿å®çæä½çæ¬ãä¸åã
4.GETSä¸GETãHEADSä¸HEADåå«ä¸ºåä¸ç±»åçæä½æ¹æ³ï¼è¯·æ±ç¨æä¸åä½è¿åç»æç¸åãä¸åã
5.å¨HTTPéä¿¡ä¸ï¼èªå¨åæ¥å£(get,gets,head,heads,post,put,delete) å
¨ç¨HTTP POST请æ±ãä¸åã
6.ææJSONObjecté½è§ä¸ºå®¹å¨(æè
æä»¶å¤¹)ï¼ç»æä¸º {...} ï¼éé¢å¯ä»¥æ¾æ®é对象æå容å¨ãä¸åã
7.æ¯ä¸ªå¯¹è±¡é½æä¸ä¸ªå¯ä¸çè·¯å¾(æè
å«å°å)ï¼å设对象å为refKeyï¼åç¨ key0/key1/.../refKey 表示ãä¸åã
### 3.2 åè½ç¬¦
åè½ | é®å¼å¯¹æ ¼å¼ | 使ç¨ç¤ºä¾
------------ | ------------ | ------------
æ¥è¯¢æ°ç» | "key[]":{}ï¼å颿¯ JSONObjectï¼key å¯çç¥ãå½ key åéé¢ç Table åç¸åæ¶ï¼Table ä¼è¢«æååºæ¥ï¼å³ {Table:{Content}} ä¼è¢«è½¬å为 {Content} | [{"User[]":{"User":{}}}](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{}}})ï¼æ¥è¯¢ä¸ä¸ª User æ°ç»ãè¿é key å Table å齿¯ Userï¼User ä¼è¢«æååºæ¥ï¼å³ {"User":{"id", ...}} ä¼è¢«è½¬å为 {"id", ...}ï¼å¦æè¦è¿ä¸æ¥æå User ä¸ç idï¼å¯ä»¥æ User[] æ¹ä¸º User-id[]ï¼å
¶ä¸ - ç¨æ¥åéè·¯å¾ä¸æ¶åç key
å¹é
é项èå´ | "key{}":[]ï¼å颿¯ JSONArrayï¼ä½ä¸º key å¯åçå¼çé项 | ["id{}":[38710,82001,70793]](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"id{}":[38710,82001,70793]}}})ï¼å¯¹åº SQL æ¯`id IN(38710,82001,70793)`ï¼æ¥è¯¢ id 符å 38710,82001,70793 ä¸ä»»æä¸ä¸ªçä¸ä¸ª User æ°ç»
å¹é
æ¡ä»¶èå´ | "key{}":"æ¡ä»¶0,æ¡ä»¶1..."ï¼æ¡ä»¶ä¸º SQL 表达å¼å符串ï¼å¯è¿è¡æ°åæ¯è¾è¿ç®ç | ["id{}":"<=80000,\>90000"](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"id{}":"<=80000,\>90000"}}})ï¼å¯¹åº SQL æ¯`id<=80000 OR id>90000`ï¼æ¥è¯¢ id 符å id\<=80000 \| id>90000 çä¸ä¸ª User æ°ç»
å
å«é项èå´ | "key<\>":value => "key<\>":[value]ï¼key 对åºå¼çç±»åå¿
须为 JSONArrayï¼value å¼ç±»ååªè½ä¸º Boolean, Number, String ä¸çä¸ç§ | ["contactIdList<\>":38710](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"contactIdList<\>":38710}}})ï¼å¯¹åºSQLæ¯`json_contains(contactIdList,38710)`ï¼æ¥è¯¢ contactIdList å
å« 38710 çä¸ä¸ª User æ°ç»
夿æ¯å¦åå¨ | "key}{@":{
"from":"Table",
"Table":{ ... }
}
å
¶ä¸ï¼
}{ 表示 EXISTSï¼
key ç¨æ¥æ è¯æ¯åªä¸ªå¤æï¼
@ å颿¯ åæ¥è¯¢ 对象ï¼å
·ä½è§ä¸æ¹ åæ¥è¯¢ ç说æã | ["id}{@":{
"from":"Comment",
"Comment":{
"momentId":15
}
}](http://apijson.cn:8080/get/{"User":{"id}{@":{"from":"Comment","Comment":{"momentId":15}}}})
WHERE EXISTS(SELECT * FROM Comment WHERE momentId=15)
è¿ç¨è°ç¨å½æ° | "key()":"彿°è¡¨è¾¾å¼"ï¼å½æ°è¡¨è¾¾å¼ä¸º function(key0,key1...)ï¼ä¼è°ç¨å端对åºç彿° function(JSONObject request, String key0, String key1...)ï¼å®ç° åæ°æ ¡éªãæ°å¼è®¡ç®ãæ°æ®åæ¥ãæ¶æ¯æ¨éãåæ®µæ¼æ¥ãç»æåæ¢ çç¹å®çä¸å¡é»è¾å¤çï¼
å¯ä½¿ç¨ - å + 表示ä¼å
级ï¼è§£æ key-() > è§£æå½å对象 > è§£æ key() > è§£æå对象 > è§£æ key+() | ["isPraised()":"isContain(praiseUserIdList,userId)"](http://apijson.cn:8080/get/{"Moment":{"id":301,"isPraised()":"isContain(praiseUserIdList,userId)"}})ï¼ä¼è°ç¨è¿ç¨å½æ° [boolean isContain(JSONObject request, String array, String value)](https://github.com/APIJSON/apijson-framework/blob/master/src/main/java/apijson/framework/APIJSONFunctionParser.java#L361-L374) ï¼ç¶åå为 "isPraised":true è¿ç§ï¼å设ç¹èµç¨æ· id å表å
å«äº userIdï¼å³è¿ä¸ª User ç¹äºèµï¼
åå¨è¿ç¨ | "@key()":"SQL彿°è¡¨è¾¾å¼"ï¼å½æ°è¡¨è¾¾å¼ä¸º
function(key0,key1...)
ä¼è°ç¨åç«¯æ°æ®åºå¯¹åºçåå¨è¿ç¨ SQL 彿°
function(String key0, String key1...)
é¤äºåæ°ä¼æåèµå¼ï¼å
¶å®å è¿ç¨å½æ° ä¸è´ | ["@limit":10,
"@offset":0,
"@procedure()":"getCommentByUserId(id,@limit,@offset)"](http://apijson.cn:8080/get/{"User":{"@limit":10,"@offset":0,"@procedure()":"getCommentByUserId(id,@limit,@offset)"}})
ä¼è½¬ä¸º
`getCommentByUserId(38710,10,0)`
æ¥è°ç¨åå¨è¿ç¨ SQL 彿°
`getCommentByUserId(IN id bigint, IN limit int, IN offset int)`
ç¶åå为
"procedure":{
"count":-1,
"update":false,
"list":[]
}
å
¶ä¸ count æ¯æåæä½å½±åè®°å½è¡æ°ï¼-1 è¡¨ç¤ºä¸æ¯åæä½ï¼update æ¯ææ¯å¦ä¸ºåæä½ï¼å¢å æ¹ï¼ï¼list 为è¿åç»æé
å¼ç¨èµå¼ | "key@":"key0/key1/.../refKey"ï¼å¼ç¨è·¯å¾ä¸ºç¨ / åéçå符串ã以 / å¼å¤´çæ¯ç¼ºçå¼ç¨è·¯å¾ï¼ä»å£°æ key æå¤å®¹å¨çç¶å®¹å¨è·¯å¾å¼å§ï¼å
¶å®æ¯å®æ´å¼ç¨è·¯å¾ï¼ä»æå¤å±å¼å§ã
被å¼ç¨ç refKey å¿
é¡»å¨å£°æ key çä¸é¢ã妿坹 refKey ç容卿å®äºè¿ååæ®µï¼å被å¼ç¨ç refKey å¿
é¡»åå¨ @column 对åºçå¼å
ï¼ä¾å¦ "@column":"refKey,key1,..." | ["Moment":{
"userId":38710
},
"User":{
"id@":"/Moment/userId"
}](http://apijson.cn:8080/get/{"Moment":{"userId":38710},"User":{"id@":"%252FMoment%252FuserId"}})
User å
ç id å¼ç¨äºä¸ User å级ç Moment å
ç userIdï¼
å³ User.id = Moment.userIdï¼è¯·æ±å®æå
"id@":"/Moment/userId" ä¼åæ "id":38710
åæ¥è¯¢ | "key@":{
"range":"ALL",
"from":"Table", // å¯çç¥ï¼é»è®¤ä¸ºé¦ä¸ªè¡¨å¯¹è±¡ key å
"Table":{ ... }
}
å
¶ä¸ï¼
range å¯ä¸º ALL,ANYï¼
from ä¸ºç®æ 表 Table çåç§°ï¼
@ åé¢ç对象类似æ°ç»å¯¹è±¡ï¼å¯ä½¿ç¨ count å join çåè½ã | ["id@":{
"from":"Comment", // å¯çç¥
"Comment":{
"@column":"min(userId)"
}
}](http://apijson.cn:8080/get/{"User":{"id@":{"from":"Comment","Comment":{"@column":"min(userId)"}}}})
WHERE id=(SELECT min(userId) FROM Comment)
æ¨¡ç³æç´¢ | `"key$":"SQLæç´¢è¡¨è¾¾å¼"` => `"key$":["SQLæç´¢è¡¨è¾¾å¼"]`ï¼ä»»æ SQL æç´¢è¡¨è¾¾å¼å符串ï¼å¦ %key%(å
å« key), key%(以 key å¼å§), %k%e%y%(å
å«åæ¯ k,e,y) çï¼% 表示任æå符 | ["name$":"%m%"](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"name$":"%2525m%2525"}}})ï¼å¯¹åº SQL æ¯`name LIKE '%m%'`ï¼æ¥è¯¢ name å
å« "m" çä¸ä¸ª User æ°ç»
æ£åå¹é
| "key~":"æ£å表达å¼" => "key~":["æ£å表达å¼"]ï¼ä»»ææ£å表达å¼å符串ï¼å¦ ^[0-9]+$ ï¼*~ 忽ç¥å¤§å°åï¼å¯ç¨äºé«çº§æç´¢ | ["name~":"^[0-9]+$"](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"name~":"^[0-9]%252B$"}}})ï¼å¯¹åº SQL æ¯`name REGEXP '^[0-9]+$'`ï¼æ¥è¯¢ name ä¸å符å
¨ä¸ºæ°åçä¸ä¸ª User æ°ç»
è¿ç»èå´ | "key%":"start,end" => "key%":["start,end"]ï¼å
¶ä¸ start å end é½åªè½ä¸º Number, String ä¸çä¸ç§ï¼å¦ "2017-01-01,2019-01-01" ï¼["1,90000", "82001,100000"] ï¼å¯ç¨äºè¿ç»èå´å
ççé | ["date%":"2017-10-01,2018-10-01"](http://apijson.cn:8080/get/{"User[]":{"count":3,"User":{"date%2525":"2017-10-01,2018-10-01"}}})ï¼å¯¹åºSQLæ¯`date BETWEEN '2017-10-01' AND '2018-10-01'`ï¼æ¥è¯¢å¨2017-10-01å2018-10-01æé´æ³¨åçç¨æ·çä¸ä¸ªUseræ°ç»
æ°å»ºå«å | "name:alias"ï¼name æ å°ä¸º aliasï¼ç¨ alias æ¿ä»£ nameãå¯ç¨äº column,Table,SQL 彿° çãåªç¨äº GET ç±»åãHEAD ç±»åçè¯·æ± | ["@column":"toId:parentId"](http://apijson.cn:8080/get/{"Comment":{"@column":"id,toId:parentId","id":51}})ï¼å¯¹åº SQL æ¯`toId AS parentId`ï¼å°æ¥è¯¢çåæ®µ toId å为 parentId è¿å
å¢å æ æ©å± | "key+":Objectï¼Objectçç±»åç±keyæå®ï¼ä¸ç±»å为 Number,String,JSONArray ä¸çä¸ç§ãå¦ 82001,"apijson",["url0","url1"] çãåªç¨äº PUT è¯·æ± | "praiseUserIdList+":[82001]ï¼å¯¹åº SQL æ¯`json_insert(praiseUserIdList,82001)`ï¼æ·»å ä¸ä¸ªç¹èµç¨æ· idï¼å³è¿ä¸ªç¨æ·ç¹äºèµ
åå° æ å»é¤ | "key-":Objectï¼ä¸"key+"ç¸å | "balance-":100.00ï¼å¯¹åºSQLæ¯`balance = balance - 100.00`ï¼ä½é¢åå°100.00ï¼å³è±è´¹äº100å
æ¯è¾è¿ç® | >, <, >=, <= æ¯è¾è¿ç®ç¬¦ï¼ç¨äº
â æä¾ "id{}":"<=90000" è¿ç§æ¡ä»¶èå´çç®ååæ³
â¡ å®ç°åæ¥è¯¢ç¸å
³æ¯è¾è¿ç®
䏿¯æ "key=":Object å "key!=":Object è¿ä¸¤ç§åæ³ï¼ç´æ¥ç¨æ´ç®åç "key":Object å "key!":Object æ¿ä»£ã | â ["id<=":90000](http://apijson.cn:8080/get/{"[]":{"User":{"id<=":90000}}})ï¼å¯¹åº SQL æ¯`id<=90000`ï¼æ¥è¯¢ç¬¦åid<=90000çä¸ä¸ªUseræ°ç»
â¡ ["id>@":{
"from":"Comment",
"Comment":{
"@column":"min(userId)"
}
}](http://apijson.cn:8080/get/{"User":{"id>@":{"from":"Comment","Comment":{"@column":"min(userId)"}}}})
WHERE id>(SELECT min(userId) FROM Comment)
é»è¾è¿ç® | &, \|, ! é»è¾è¿ç®ç¬¦ï¼å¯¹åºæ°æ®åº SQL ä¸ç AND, OR, NOTã
横æçºµä¸ï¼åä¸é®å¼å¯¹çå¼å
æ¡ä»¶é»è®¤ \| æè¿æ¥ï¼å¯ä»¥å¨ key åå é»è¾è¿ç®ç¬¦æ¥å
·ä½æå®ï¼ä¸åé®å¼å¯¹çæ¡ä»¶é»è®¤ & ä¸è¿æ¥ï¼å¯ä»¥ç¨ä¸é¢è¯´æç对象å
³é®è¯ @combine æ¥å
·ä½æå®ã
â & å¯ç¨äº "key&{}":"æ¡ä»¶"ç
â¡ \| å¯ç¨äº "key\|{}":"æ¡ä»¶", "key\|{}":[]çï¼ä¸è¬å¯çç¥
⢠! å¯åç¬ä½¿ç¨ï¼å¦ "key!":Objectï¼ä¹å¯å &,\| 䏿 ·é
åå
¶ä»åè½ç¬¦ä½¿ç¨
"key!":null æ æï¼null å¼ä¼å¯¼è´æ´ä¸ªé®å¼å¯¹è¢«å¿½ç¥è§£æï¼å¯ä»¥ç¨ "key{}":"!=null" æ¿ä»£ï¼
"key":null åçï¼ç¨ "key{}":"=null" æ¿ä»£ã | â ["id&{}":">80000,<=90000"](http://apijson.cn:8080/head/{"User":{"id&{}":">80000,<=90000"}})ï¼å¯¹åºSQLæ¯`id>80000 AND id<=90000`ï¼å³id满足id>80000 & id<=90000
â¡ ["id\|{}":">90000,<=80000"](http://apijson.cn:8080/head/{"User":{"id\|{}":">90000,<=80000"}})ï¼å "id{}":">90000,<=80000"ï¼å¯¹åº SQL æ¯`id>90000 OR id<=80000`ï¼å³ id 满足 id>90000 \| id<=80000
⢠["id!{}":[82001,38710]](http://apijson.cn:8080/head/{"User":{"id!{}":[82001,38710]}})ï¼å¯¹åº SQL æ¯`id NOT IN(82001,38710)`ï¼å³ id 满足 ! (id=82001 \| id=38710)ï¼å¯è¿æ»¤é»ååçæ¶æ¯
æ°ç»å
³é®è¯ï¼å¯èªå®ä¹ | "key":Objectï¼key为 "[]":{} ä¸ {} å
çå
³é®è¯ï¼Object çç±»åç± key æå®
â "count":5ï¼æ¥è¯¢æ°éï¼0 表示æå¤§å¼ï¼é»è®¤å¼ä¸º 10ï¼é»è®¤æå¤§å¼ä¸º 100
â¡ "page":1ï¼æ¥è¯¢é¡µç ï¼ä» 0 å¼å§ï¼é»è®¤å¼ä¸º 0ï¼é»è®¤æå¤§å¼ä¸º 100ï¼ä¸è¬å count ä¸èµ·ç¨
⢠"query":2ï¼æ¥è¯¢å
容
0-对象ï¼1-æ»æ°åå页详æ
ï¼2-æ°æ®ãæ»æ°åå页详æ
æ»æ°å
³é®è¯ä¸º totalï¼å页详æ
å
³é®è¯ä¸º infoï¼
å®ä»¬é½å query å级ï¼éè¿å¼ç¨èµå¼å¾å°èªå®ä¹ key:value é®å¼å¯¹ï¼ä¸ä¼ åè¿åé»è®¤é®å¼å¯¹ï¼ä¾å¦
"total@":"/[]/total", "info@":"/[]/info"
è¿équeryåtotalä»
为GETç±»åçè¯·æ±æä¾æ¹ä¾¿ï¼
ä¸è¬å¯ç´æ¥ç¨HEADç±»åç请æ±è·åæ»æ°
⣠"join":"&/Table0,\"join":{
"&/Table0":{}, // æ¯æ ON å¤ä¸ªå段å
³è,
"\ "key0":value0, // å
¶å®ONæ¡ä»¶
"key2":value2,
...
"@combine":"...", // å
¶å®ONæ¡ä»¶çç»åæ¹å¼
"@column":"...", // å¤å± SELECT
"@group":"...", // å¤å± GROUP BY
"@having":"..." // å¤å± HAVING
}
}
å¤è¡¨è¿æ¥æ¹å¼ï¼
"@" - APP JOIN
"\<" - LEFT JOIN
">" - RIGHT JOIN
"&" - INNER JOIN
"\|" - FULL JOIN
"!" - OUTER JOIN
"*" - CROSS JOIN
"^" - SIDE JOIN
"(" - ANTI JOIN
")" - FOREIGN JOIN
å
¶ä¸ @ APP JOIN 为åºç¨å±è¿è¡¨ï¼ä¼ä»å·²æ¥åºç主表éå徿æå¯è¡¨ key@ å
³èç主表å
ç refKey ä½ä¸ºä¸ä¸ªæ°ç» refKeys: [value0, value1...]ï¼ç¶åæåæ¥å¯è¡¨ count 次æ¥è¯¢ key=$refKey ç SQL ç¨ key IN($refKeys) çæ¹å¼åå¹¶ä¸ºä¸æ¡ SQL æ¥ä¼åæ§è½ï¼
å
¶å® JOIN 齿¯ SQL JOINï¼å
·ä½åè½å MySQL,PostgreSQL çæ°æ®åºç JOIN ä¸ä¸å¯¹åº
`"join":"`"MainTable":{},`
`"ViceTable":{"key@":"/MainTable/refKey"}`
ä¼å¯¹åºçæ
`MainTable LEFT JOIN ViceTable`
`ON ViceTable.key=MainTable.refKey` AND å
¶å®ONæ¡ä»¶
é¤äº = çä»·å
³èï¼ä¹æ¯æ ! ä¸çå
³èã\> \< \>= \<= çæ¯è¾å
³èå $ ~ {} <> çå
¶å®å¤æå
³èæ¹å¼
⤠"otherKey":Objectï¼èªå®ä¹å
³é®è¯ï¼åç§°å以ä¸ç³»ç»å
³é®è¯ä¸ä¸æ ·ï¼ä¸åæ ·è¿åä¸ä¼ çå¼ | â æ¥è¯¢Useræ°ç»ï¼æå¤5个ï¼
["count":5](http://apijson.cn:8080/get/{"[]":{"count":5,"User":{}}})
å¯¹åº SQL æ¯`LIMIT 5`
â¡ æ¥è¯¢ç¬¬3页çUseræ°ç»ï¼æ¯é¡µ5个ï¼
["count":5,
"page":3](http://apijson.cn:8080/get/{"[]":{"count":5,"page":3,"User":{}}})
å¯¹åº SQL æ¯`LIMIT 5 OFFSET 15`
⢠æ¥è¯¢Useræ°ç»å对åºçUseræ»æ°ï¼
["[]":{
"query":2,
"User":{}
},
"total@":"/[]/total", // å¯çç¥
"info@":"/[]/info" // å¯çç¥](http://apijson.cn:8080/get/{"[]":{"query":2,"count":5,"User":{}},"total@":"%252F[]%252Ftotal","info@":"%252F[]%252Finfo"})
è¿åçæ°æ®ä¸ï¼æ»æ°åå页详æ
ç»æä¸ºï¼
"total":139, // æ»æ°
"info":{ // å页详æ
"total":139, // æ»æ°
"count":5, // æ¯é¡µæ°é
"page":0, // å½å页ç
"max":27, // æå¤§é¡µç
"more":true, // æ¯å¦è¿ææ´å¤
"first":true, // æ¯å¦ä¸ºé¦é¡µ
"last":false // æ¯å¦ä¸ºå°¾é¡µ
}
⣠Moment INNER JOIN User LEFT JOIN Commentï¼
["[]":{
"join":"&/User/id@,\ "Moment":{
"@group":"id" // 主å¯è¡¨ä¸æ¯ä¸å¯¹ä¸ï¼è¦å»é¤é夿°æ®
},
"User":{
"name~":"t",
"id@":"/Moment/userId"
},
"Comment":{
"momentId@":"/Moment/id"
}
}](http://apijson.cn/api/?type=JSON&url=http://apijson.cn:8080/get&json=%7B%22%5B%5D%22:%7B%22count%22:5,%22join%22:%22%26%2FUser%2Fid@,%3C%2FComment%22,%22Moment%22:%7B%22@column%22:%22id,userId,content%22,%22@group%22:%22id%22%7D,%22User%22:%7B%22name~%22:%22t%22,%22id@%22:%22%2FMoment%2FuserId%22,%22@column%22:%22id,name,head%22%7D,%22Comment%22:%7B%22momentId@%22:%22%2FMoment%2Fid%22,%22@column%22:%22id,momentId,content%22%7D%7D%7D)
⤠æ¯ä¸å±é½å å½åç¨æ·åï¼
["User":{},
"[]":{
"name@":"User/name", // èªå®ä¹å
³é®è¯
"Moment":{}
}](http://apijson.cn:8080/get/{"User":{},"[]":{"name@":"User%252Fname","Moment":{}}})
对象å
³é®è¯ï¼å¯èªå®ä¹ | "@key":Objectï¼@key 为 Table:{} ä¸ {} å
çå
³é®è¯ï¼Object çç±»åç± @key æå®
â "@combine":"key0 \| (key1 & (key2 \| !key3))..."ï¼æ¡ä»¶ç»åæ¹å¼ï¼æç»æ
(å
¶å®keyæ¡ä»¶ AND è¿æ¥) AND (key0æ¡ä»¶ OR (key1æ¡ä»¶ AND (key2æ¡ä»¶ OR (NOT key3æ¡ä»¶))))
è¿ç§æ¹å¼è¿æ¥ï¼å
¶ä¸ "å
¶å®key" æ¯æä¸ @combine å¨åä¸å¯¹è±¡ï¼ä¸æªè¢«å®å£°æçæ¡ä»¶ keyï¼é»è®¤é½æ¯ & è¿æ¥ã注æä¸è¦ç¼ºå°æå¤ä½ä»»ä½ä¸ä¸ªç©ºæ ¼ã
â¡ "@column":"column;function(arg)..."ï¼è¿ååæ®µ
⢠"@order":"column0+,column1-..."ï¼æåºæ¹å¼
⣠"@group":"column0,column1..."ï¼åç»æ¹å¼ã妿 @column é声æäº Table ç idï¼å id ä¹å¿
é¡»å¨ @group ä¸å£°æï¼å
¶å®æ
åµä¸å¿
须满足è³å°ä¸ä¸ªæ¡ä»¶:
1.åç»ç key å¨ @column é声æ
2.Table 主é®å¨ @group ä¸å£°æ
⤠"@having":"function0(...)?value0;function1(...)?value1;function2(...)?value2..." // OR è¿æ¥ï¼æ
"@having&":"function0(...)?value0;function1(...)?value1;function2(...)?value2..." // AND è¿æ¥ï¼æ
"@having":{
"h0":"function0(...)?value0",
"h1":function1(...)?value1",
"h2":function2(...)?value2...",
"@combine":"h0 & (h1 \| !h2)" // ä»»æç»åï¼éå¿
ä¼
}
SQL 彿°æ¡ä»¶ï¼ä¸è¬å @group ä¸èµ·ç¨ï¼å½æ°ä¸è¬å¨ @column é声æ
⥠"@schema":"sys"ï¼éå空é´(æ°æ®åºå/模å¼)ï¼éé»è®¤çå¼å¯éè¿å®æ¥æå®ï¼å¯ä»¥å¨æå¤å±ä½ä¸ºå
¨å±é»è®¤é
ç½®
⦠"@database":"POSTGRESQL"ï¼æ°æ®åºç±»åï¼éé»è®¤çå¼å¯éè¿å®æ¥æå®ï¼å¯ä»¥å¨æå¤å±ä½ä¸ºå
¨å±é»è®¤é
ç½®
â§ "@datasource":"DRUID"ï¼è·¨æ°æ®æºï¼éé»è®¤çå¼å¯éè¿å®æ¥æå®ï¼å¯ä»¥å¨æå¤å±ä½ä¸ºå
¨å±é»è®¤é
ç½®
⨠"@json":"key0,key1..."ï¼è½¬ä¸º JSON æ ¼å¼è¿åï¼ç¬¦å JSONObject å转为 {...}ï¼ç¬¦å JSONArray å转为 \[...]
â© "@role":"OWNER"ï¼æ¥è®¿è§è²ï¼å
æ¬
UNKNOWN,LOGIN,CONTACT,CIRCLE,OWNER,ADMINï¼
å¯ä»¥å¨æå¤å±ä½ä¸ºå
¨å±é»è®¤é
ç½®ï¼
å¯èªå®ä¹å
¶å®è§è²å¹¶éå Verifier.verify çç¸å
³æ¹æ³æ¥èªå®ä¹æ ¡éª
⪠"@explain":trueï¼æ§è½åæï¼å¯ä»¥å¨æå¤å±ä½ä¸ºå
¨å±é»è®¤é
ç½®
â« "@raw":"key0,key1..."ï¼å
¶ä¸ key0, key1 é½å¯¹åºæé®å¼å¯¹
"key0":"SQLçæ®µæSQLçæ®µçå«å",
"key1":"SQLçæ®µæSQLçæ®µçå«å"
èªå®ä¹åå§SQLçæ®µï¼å¯æ©å±åµå¥SQL彿°ç夿è¯å¥ï¼å¿
é¡»æ¯å端已é
ç½®çï¼åªæå
¶å®åè½ç¬¦é½åä¸å°æèèï¼è°¨æ
使ç¨ï¼æ³¨æé² SQL 注å
¥
⬠"@null":"key1,key2..."ï¼ç©ºå¼é®å¼å¯¹ï¼èªå¨æå
¥ key1:null, key2:null ... å¹¶ä½ä¸ºææé®å¼å¯¹æ§è¡ï¼ä½ä¸ºæ¡ä»¶æ¶å¯¹åº SQL æ¯ `WHERE tag IS NULL`ï¼ä½ä¸ºå¼æ¶å¯¹åº SQL æ¯ `SET tag = NULL`
â "@otherKey":Objectï¼èªå®ä¹å
³é®è¯ï¼åç§°å以ä¸ç³»ç»å
³é®è¯ä¸ä¸æ ·ï¼ä¸åæ ·è¿åä¸ä¼ çå¼ | â æç´¢ name æ tag ä»»ä½ä¸ä¸ªå段å
å«å符 a ç User å表ï¼
["name~":"a",
"tag~":"a",
"@combine":"name~ \| tag~"](http://apijson.cn:8080/get/{"User[]":{"count":10,"User":{"@column":"id,name,tag","name~":"a","tag~":"a","@combine":"name~%20%7C%20tag~"}}})
对åºSQLæ¯`name REGEXP 'a' OR tag REGEXP 'a'`
â¡ åªæ¥è¯¢ id,sex,name è¿å åå¹¶ä¸è¯·æ±ç»æä¹æç
§è¿ä¸ªé¡ºåºï¼
["@column":"id,sex,name"](http://apijson.cn:8080/get/{"User":{"@column":"id,sex,name","id":38710}})
å¯¹åº SQL æ¯`SELECT id,sex,name`
⢠æ¥è¯¢æ name éåºãid é»è®¤é¡ºåº æåºç User æ°ç»ï¼
["@order":"name-,id"](http://apijson.cn:8080/get/{"[]":{"count":10,"User":{"@column":"name,id","@order":"name-,id"}}})
å¯¹åº SQL æ¯`ORDER BY name DESC,id`
⣠æ¥è¯¢æ userId åç»ç Moment æ°ç»ï¼
["@group":"userId,id"](http://apijson.cn:8080/get/{"[]":{"count":10,"Moment":%7B"@column":"userId,id","@group":"userId,id"}}})
å¯¹åº SQL æ¯`GROUP BY userId,id`
⤠æ¥è¯¢ æ userId åç»ãid æå¤§å¼>=100 ç Moment æ°ç»ï¼
["@column":"userId;max(id)",
"@group":"userId",
"@having":"max(id)>=100"](http://apijson.cn:8080/get/{"[]":{"count":10,"Moment":{"@column":"userId%253Bmax(id)","@group":"userId","@having":"max(id)>=100"}}})
å¯¹åº SQL æ¯`SELECT userId,max(id) ... GROUP BY userId HAVING max(id)>=100`
è¿å¯ä»¥æå®å½æ°è¿ååï¼
["@column":"userId;max(id):maxId",
"@group":"userId",
"@having":"(maxId)>=100"](http://apijson.cn:8080/get/{"[]":{"count":10,"Moment":{"@column":"userId%253Bmax(id):maxId","@group":"userId","@having":"(maxId)>=100"}}})
å¯¹åº SQL æ¯`SELECT userId,max(id) AS maxId ... GROUP BY userId HAVING (maxId)>=100`
⥠æ¥è¯¢ sys å
ç User 表ï¼
["@schema":"sys"](http://apijson.cn:8080/get/{"User":{"@schema":"sys"}})
å¯¹åº SQL æ¯`FROM sys.User`
⦠æ¥è¯¢ PostgreSQL æ°æ®åºç User 表ï¼
["@database":"POSTGRESQL"](http://apijson.cn:8080/get/{"User":{"@database":"POSTGRESQL","@explain":true}})
â§ ä½¿ç¨ Druid è¿æ¥æ± æ¥è¯¢ User 表ï¼
["@datasource":"DRUID"](http://apijson.cn:8080/get/{"User":{"@datasource":"DRUID"}})
â¨ å° VARCHAR åç¬¦ä¸²åæ®µ get 转为 JSONArray è¿åï¼
["@json":"get"](http://apijson.cn:8080/get/{"Access":{"@json":"get"}})
â© æ¥è¯¢å½åç¨æ·ç卿ï¼
["@role":"OWNER"](http://apijson.cn:8080/get/{"[]":{"Moment":{"@role":"OWNER"}}})
⪠å¼å¯æ§è½åæï¼
["@explain":true](http://apijson.cn:8080/get/{"[]":{"Moment":{"@explain":true}}})
å¯¹åº SQL æ¯`EXPLAIN`
â« ç»è®¡æè¿ä¸å¨å¶æ° userId çæ°é
["@column":"date;left(date,10):day;sum(if(userId%2=0,1,0))",
"@group":"day",
"@having":"to_days(now())-to_days(\`date\`)<=7",
"@raw":"@column,@having"](http://apijson.cn:8080/get/{"[]":{"Moment":{"@column":"date%3bleft(date,10):day%3bsum(if(userId%252=0,1,0))","@group":"day","@having":"to_days(now())-to_days(\`date\`)<=7","@raw":"@column,@having"}}})
å¯¹åº SQL æ¯``SELECT date, left(date,10) AS day, sum(if(userId%2=0,1,0)) ... GROUP BY day HAVING to_days(now())-to_days(`date`)<=7``
⬠æç¨æ·çæ ç¾è®¾ç½®ä¸ºç©º
["@null":"tag"](http://apijson.cn/api/?type=JSON&url=http://apijson.cn:8080/put/User&json={%22id%22:82001,%22@null%22:%22tag%22,%22@explain%22:true})
â ä»pictureList è·å第 0 å¼ å¾çï¼
["@position":0, // èªå®ä¹å
³é®è¯
"firstPicture()":"getFromArray(pictureList,@position)"](http://apijson.cn:8080/get/{"User":{"id":38710,"@position":0,"firstPicture()":"getFromArray(pictureList,@position)"}})
å
¨å±å
³é®è¯ | 为æå¤å±å¯¹è±¡ {} å
çå
³é®è¯ãå
¶ä¸ @databaseï¼@schema, @datasource, @role, @explain åºæ¬å对象å
³é®è¯ï¼è§ä¸æ¹è¯´æï¼åºå«æ¯å
¨å±å
³é®è¯ä¼æ¯ä¸ªè¡¨å¯¹è±¡ä¸æ²¡ææ¶èªå¨æ¾å
¥ï¼ä½ä¸ºé»è®¤å¼ã
â "tag":"Table"ï¼åé¢ç tag æ¯é GETãHEAD 请æ±ä¸å¹é
请æ±ç JSON ç»æçæ è¯ï¼ä¸è¬æ¯è¦æ¥è¯¢ç Table çåç§°æè¯¥å称对åºçæ°ç» Table[] æ Table:[]ï¼ç±å端 Request è¡¨ä¸æå®ã
â¡ "version":1ï¼æ¥å£çæ¬ï¼version ä¸ä¼ ã为 null æ <=0 é½ä¼ä½¿ç¨æé«çæ¬ï¼ä¼ äºå
¶å®ææå¼åä¼ä½¿ç¨ææ¥è¿å®çæä½çæ¬ï¼ç±å端 Request è¡¨ä¸æå®ã
⢠"format":trueï¼æ ¼å¼åè¿å Response JSON ç keyï¼ä¸è¬æ¯å° TableName 转为 tableName, TableName[] 转为 tableNameList, Table:alias 转为 alias, TableName-key[] 转为 tableNameKeyList çå°é©¼å³°æ ¼å¼ã | â æ¥éç§ä¿¡æ¯ï¼
[{"tag":"Privacy","Privacy":{"id":82001}}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fgets&type=JSON&json={%22tag%22:%22Privacy%22,%22Privacy%22:{%22id%22:82001}})
⡠使ç¨ç¬¬ 1 çæ¥å£æ¥éç§ä¿¡æ¯ï¼
[{"version":1,"tag":"Privacy","Privacy":{"id":82001}}](http://apijson.cn/api?url=http%3A%2F%2Fapijson.cn%3A8080%2Fgets&type=JSON&json={%22version%22:1,%22tag%22:%22Privacy%22,%22Privacy%22:{%22id%22:82001}})
â¢ æ ¼å¼åæå忥å£è¿å JSON ä¸ç keyï¼
[{
"format":true,
"[]":{
"page":0,
"count":3,
"Moment":{},
"User":{
"id@":"/Moment/userId"
},
"Comment[]":{
"count":3,
"Comment":{
"momentId@":"[]/Moment/id"
}
}
}
}](http://apijson.cn:8080/get/{"format":true,"[]":{"page":0,"count":3,"Moment":{},"User":{"id@":"%252FMoment%252FuserId"},"Comment[]":{"count":3,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}})