APIJSON è§åå路线å¾
### æ°å¢åè½
é¨ååè½æè¿°å¯å¨ [APIAuto](https://github.com/TommyLemon/APIAuto) 䏿¥ç
è´¦å· 13000002020 å¯ç 123456
http://apijson.cn/api
##### åºæ¬åå
1.ä¸å®è¦æç¸å
³çåºç¨åºæ¯ï¼ä¸è½æ¯ä¼ªéæ±ï¼æå¥½ä¸¾ä¾è¯´æ
2.è½ç¨ è¿ç¨å½æ° æè
@raw çç°æåè½å¾å¥½å°å®ç°çï¼é½ä¸æ°å¢ï¼é¿å
åä½
3.ä¸å½±åç°æåè½ç使ç¨ï¼ä¸è½è®©ç°æåè½ä¸å¯ç¨æè
ä½¿ç¨æ´å¤æ
#### æ°å¢æ¯æåå é¤
20230106 æ´æ°ï¼å·²æ¯æï¼æè°¢ @cloudAndMonkey çè´¡ç®
https://github.com/Tencent/APIJSON/pull/493
ä¸è¬å¯¹äºäºèç½é¡¹ç®ï¼æ°æ®é常éè¦ï¼åºæ¬ä¸ä¼ç©çå é¤ï¼
åªæ¯ç¨ is_deleted çåæ®µæ¥æ è®°å·²å é¤ï¼ç¶å CRUD æ¶é»è®¤è¿æ»¤å·²æ è®°çè®°å½ã
è¿ä¸ªåè½é常å¿
è¦ï¼å¯ä»¥éè¿éå SQLConfig.isFakeDelete() æ¥æ è®°ï¼
ç¶å妿 trueï¼åæ DELETE æ¹ä¸º PUT å¹¶ä¸éè¿éå
SQLConfig.onFakeDelete(Map map) æ¥æ°å¢æ¡ä»¶ï¼
GET: map.put("deleted", 0)
PUT: map.put("deleted", 0)
DELETE: map.put("deleted", 1)
POST: ç¨ä¸ä¸ï¼ä¸å¤ç
å½ç¶ä¹å¯ä»¥åå ä¸ä¸ªå 餿¶é´ deletedTime ä¹ç±»çã
è¿å¯ä»¥å¨ apijson-framework 屿¯æ Access 表æ°å¢å段 deletedKey, deletedValue, notDeletedValueï¼
ç¶å读表èªå¨é
ç½®æ¯å¦ä¸ºåå é¤ StringUtil.isNotEmpty(deletedKey, true) ï¼æ¯åå 餿¶ put ç¸åºé®å¼å¯¹ã
#### æ°å¢æ¯æ @having&
20220328 æ´æ°ï¼5.0.0 å·²æ¯æ
https://github.com/Tencent/APIJSON/releases/tag/5.0.0
æ¥å®ç°å
鍿¡ä»¶ AND è¿æ¥ï¼åæ¥ç @having ç± AND è¿æ¥å为 OR è¿æ¥ï¼ä¿æ 横æçºµä¸ çç»ä¸è§åã
@having! å¿
é¡»æ§ä¸å¤§ï¼å¯éè¿å转å
鍿¡ä»¶æ¥å®ç°ï¼ä½å¦æå®ç°ç®åãä¸ä¸å½±å忥çåè½ï¼åå¯ä»¥é¡ºä¾¿å ä¸ã
#### æ°å¢æ¯æ @column!
20210415 æ´æ°ï¼å·²æä¾å段æä»¶ [apijson-column](https://github.com/APIJSON/apijson-column)ï¼æ¯æ åæ®µåæ å° å !key åéåæ®µã
è¿ä¸ªåªå¨ [apijson-framework](https://github.com/APIJSON/apijson-framework) æ¯æï¼éè¦é
ç½®æ¯ä¸ªæ¥å£çæ¬ãæ¯å¼ è¡¨ææ¥æçå
¨é¨å段ï¼ç¶åæé¤æ @column! çã
坿°å¢ä¸ä¸ª VersionedColumn è¡¨è®°å½æ¥ä»£æ¿ HashMap 代ç é
ç½®ã
éè¦æ³¨æçæ¯ï¼å¯è½åç«¯ä¼ å鿢æ @column åæ @column! ï¼ç¢°å°è¿ç§æ
åµï¼
å¦ææ²¡æéååæ®µå°±å¿½ç¥ @column! ï¼åªè®© @column çæï¼
妿ææéååæ®µï¼åæå¼å¸¸ï¼è½¬ä¸ºé误ç åé误信æ¯è¿åã
#### æ°å¢æ¯æ TSQL ç @explain
20220809 æ´æ°ï¼å·²æ¯æ Oracle ç EXPLAINï¼æè°¢ @ifooling çè´¡ç®
https://github.com/Tencent/APIJSON/pull/434
ç®å APIJSON æ¯æ [Oracle](https://github.com/APIJSON/APIJSON-Demo/tree/master/Oracle), [SQL Server](https://github.com/APIJSON/APIJSON-Demo/tree/master/SQLServer), DB2 è¿ 3 ç§ TSQL æ°æ®åºã
使¯ "@explain": true 使ç¨çæ¯ SET STATISTICS PROFILE ON(å
·ä½è§ [AbstractSQLConfig](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) å [AbstrctSQLExecutor](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstrctSQLExecutor.java))
æ§è¡åå±
ç¶æ¯ SELECT æ¥å°çæ¾å¨é»è®¤ç ResultSetï¼æ§è½åææ¾å¨ moreResultï¼
å 为è¿ä¸ªé®é¢ç®å以ä¸ä¸¤ä¸ªæ°æ®åºçæ§è½åæ @explain å®é
å¹¶ä¸å¯ç¨ï¼éè¦æ¹ç¨å
¶å®æ¹å¼æè§£å³ç°ææ¹å¼ç bugã
#### æ°å¢æ¯æ page ä» 1 å¼å§
ç®ååªè½ä» 0 å¼å§ï¼å®é
ä½¿ç¨ 1 æ´å¹¿æ³ï¼èä¸è¿æ¹é¢ç¨æ·ä¹ æ¯å¾å¼ºï¼æ¯æå®ææ¬ä¹ä¸é«ã
[Parser](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Parser.java) æ°å¢ DEFAULT_QUERY_PAGE å getDefaultQueryPageï¼
ä¸ DEFAULT_QUERY_COUNT å getDefaultQueryCount ç»ä¸ï¼
æ¹ä¾¿åç«¯ç´æ¥ç¨é¡µç çå¼ä¼ åï¼ä»¥å info.page ç弿¥æ¸²æé¡µç ã
å»ºè®®å¨ [AbstractParser](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java)ï¼[AbstractSQLConfig](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) ç¨å° page çå°æ¹å¤æ getDefaultQueryPageï¼åå
¼å®¹å¤çã
#### æ°å¢æ¯æåå¸å¼
"@url": "http://apijson.cn:8080/get"
```js
{
"User": {
"@url": "http://apijson.cn:8080/get" //转åç»å
¶å®æå¡å¨æ§è¡
},
"[]": {
"Comment": {
"userId@": "User/id"
}
},
"@explain": true
}
```
èèå°å¼ç¨èµå¼çä¾èµå
³ç³»è¦ä¿æå
å顺åºï¼å¿
须忥é»å¡å¤çã
æè®¸å¯ä»¥å ä¸ä¸ª ~ åç¼è¡¨ç¤ºå¼æ¥ï¼ä¾å¦ "@url": "\~http://apijson.cn:8080/get"ï¼ç±è°ç¨æ¹ä¿è¯æ²¡æè¢«ä¸æ¹å¯¹è±¡ä¾èµã
#### æ°å¢æ¯æ Union
è½ç¶å¯ä»¥éè¿ INNER JOIN + æ¡ä»¶ OR è¿æ¥æ¥æ¿ä»£å®çåè½ï¼ä½æ²¡æ³è¾¾å°å®è½ç¨ç´¢å¼çæ§è½ã
æ¯æ UNION 徿å¿
è¦ï¼ä½ UNION ALL å 乿²¡æéæ±ï¼å¦æå®ç°ç®åãä¸ä¸å½±å忥çåè½ï¼åå¯ä»¥é¡ºä¾¿å ä¸ã
"@union": Integer // 0 - ä¸ä½¿ç¨ï¼1 - UNIONï¼2 - UNION ALL
```js
{
"[]": {
"User": {
"name~": "a",
"tag~": "a",
"@combine": "name~,tag~",
"@union": 1 //å° @combine ä¸ç N 个 OR è¿æ¥åæ®µç¨ UNION æ¿æ¢ï¼åæ¬ä¸æ¡ SQL éè¦æåæ N æ¡ SQL æ¥ UNION
}
},
"@explain": true
}
```
çæç SQL
```sql
SELECT * FROM `sys`.`apijson_user` WHERE ( (`name` REGEXP BINARY 'a') OR (`tag` REGEXP BINARY 'a') ) LIMIT 10 OFFSET 0
```
éè¦å为
```sql
SELECT * FROM `sys`.`apijson_user` WHERE ( (`name` REGEXP BINARY 'a') )
UNION
SELECT * FROM `sys`.`apijson_user` WHERE ( (`tag` REGEXP BINARY 'a') )
LIMIT 10 OFFSET 0
```
#### æ°å¢æ¯æ With
20221126 æ´æ°ï¼å·²æ¯æï¼æè°¢ @cloudAndMonkey çè´¡ç®
https://github.com/Tencent/APIJSON/pull/481
å¯ä»¥åå°åæ¥è¯¢æ§è¡æ¬¡æ°ï¼æé«æ§è½ã
```js
{ //ççå
³æ³¨ç人æè¿æä»ä¹å¨æï¼å享ãè¯è®ºï¼
"sql@": {
"with": true, //çæ WITH(SELECT id ...) AS `sql`
"from": "User",
"User": {
"@column": "id",
"@role": "CONTACT"
}
},
"Moment[]": {
"Moment": {
"userId{}@": "sql",
"@order": "date-"
}
},
"Comment[]": {
"Comment": {
"userId{}@": "sql",
"@order": "date-"
}
},
"@explain": true
}
```
çæç SQL
```sql
SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0
```
å
```sql
SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0
```
éè¦å为
```sql
WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql`
SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0
```
å
```sql
WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql`
SELECT * FROM `sys`.`Comment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0
```
#### æ°å¢æ¯æ Case
ãæ´æ°ï¼ä¸ç¨å®ç°äºï¼ç´æ¥æ SQL çè¯æ³å CASE WHENï¼ç¶åç¨ @rawã
å®ç°è¿ç¨å½æ°ä¹ä¸æ¹ä¾¿ç SQL å
åæ®µè½¬æ¢ CASE WHEN THEN ï¼
ææ¶è¿æ²¡ææ³å¥½å¦ä½è®¾è®¡ãå¦ææ¯ SQL 忥çåæ³ï¼åæç¹ç¹çã
#### æ°å¢æ¯æ id ä¸å
¶å®åæ®µåæ¶ä½ä¸ºå¢å æ¹æ¡ä»¶
AbstractVerifier.IS_UPDATE_MUST_HAVE_ID_CONDITION = false
å°±åæ¶æ¯æ idãå
¶å®æ¡ä»¶å é¤
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L84-L86
ä½å 为 Operation 没æ AT_LEAST_ONE/ANY_ONE è¿æ ·çæä½ï¼
æä»¥å¦æåªé
ç½®ä¸æ¡è§åï¼åªè½å
许 MUST é
ç½®ä¼ ä¸ç§æ¡ä»¶ï¼ä¸è½åç¬ä¼ id/å
¶å®å段ã
妿é½ä¼ äºï¼å 为 id 强å¶ä½ä¸º AND æ¡ä»¶ï¼æä»¥ä¸è½åå
¶å®æ¡ä»¶ ORï¼
å¯ä»¥é
置两æ¡ä¸åè§åï¼ç¨ä¸åç tag 对åºä½¿ç¨ä¸åçæ¡ä»¶ã
method: DELETE
éè¿ id å é¤
```
tag: Comment-by-id // å½ç¶åæ Comment:id çå
¶å®ä»»ä½ä¸ç¬¦åè¡¨åæ ¼å¼çåç§°é½å¯
structure: ... "MUST":"id" ...
```
éè¿ date æ¡ä»¶å é¤
```
tag: Comment-by-date
structure: ... "MUST":"date" ...
```
妿æ³åªé
ç½®ä¸æ¡è§åï¼å Operation å ä¸ AT_LEAST_ONE/ANY_ONE ï¼ç¶åé
ç½®
```
tag: Comment
structure: ... "AT_LEAST_ONE":"id,date" ... // è³å°ä¼ å
¶ä¸ä¸ä¸ª
```
æ
```
tag: Comment
structure: ... "ANY_ONE":"id,date" ... // å¿
é¡»ä¼ å
¶ä¸ä¸ä¸ªï¼ä¸è½åæ¶ä¼ 2 个以ä¸
```
AT_LEAST_ONE/ANY_ONE å
¶ä¸ä¸ä¸ªä¹å¯ä»¥éè¿æ©å± MUST æ¥å®ç°ï¼ç®åçè¿ç§æ¹å¼æ´å¥½ï¼
"MUST":"id | date,å
¶å®" éè¿ | ææ¥è¡¨ç¤ºå
¶ä¸ä»»ä½ä¸ä¸ªï¼æ³¨æå·¦å³ä¸å®è¦åæä¸ä¸ªç©ºæ ¼ï¼å 为å¯è½æ "name|$" "id|{}" çå
å« "|" ç key
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Operation.java
è¿å¯ä»¥è®¾ç½®æ´å¤æç表达æ¹å¼
```
"MUST":"1:id | date,å
¶å®" // id, date å¿
é¡»ä¼ å
¶ä¸ä¸ä¸ªï¼ä¸ä¸è½å¤ä¼
"MUST":">=2:id | momentId|{} | date>=,å
¶å®" // id, momentId|{}, date>= å¿
é¡»è³å°å
¶ä¸ 2 个
"MUST":"2+:id | momentId|{} | date>=,å
¶å®" // id, momentId|{}, date>= å¿
é¡»è³å°å
¶ä¸ 2 ä¸ªï¼æ¿ä»£ >= 2ï¼æ´æ¹ä¾¿è§£æï¼å¹¶ä¸ä¸ç¨èè >1, != 2 çå
¶å®åç§ä¸çå¼
"MUST":"2-:id | momentId|{} | date>=,å
¶å®" // id, momentId|{}, date>= æå¤ä¼ å
¶ä¸ 2 ä¸ªï¼æ¿ä»£ <= 2
```
è¿æ ·çè¯å°±ä¸ç¨å Operation äºï¼ä¸è¿ AbstractVerifier ä»ç¶è¦å¤çä¸ REFUSE å MUST çäºæ¥å
³ç³»
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L1012-L1042
##### éæ±æ¥æºåå
·ä½è®¨è®º
https://github.com/Tencent/APIJSON/pull/493#issuecomment-1373376359
#### ... //欢è¿è¡¥å
### 强åå®å
¨
APIJSON æä¾äºåç§å®å
¨æºå¶ï¼å¯å¨ç®åçåºç¡ä¸æ°å¢ææ¹è¿ã
20220504 æ´æ°ï¼æ°å¢æä»¶ apijson-routerï¼å¯æ§å°å¯¹å
¬ç½æ´é²ç±» RESTful ç®åæ¥å£ï¼å
é¨è½¬æ APIJSON æ ¼å¼è¯·æ±æ¥æ§è¡ã
https://github.com/APIJSON/apijson-router
#### é²è¶ææä½
ç®åæ RBAC èªå¨åæé管çã
APIJSONORM æä¾ [@MethodAccess](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/MethodAccess.java) 注解æ¥é
ç½®
[apijson-framework](https://github.com/APIJSON/apijson-framework) åä½¿ç¨ [Access 表](https://github.com/APIJSON/APIJSON-Demo/blob/master/MySQL/single/sys_Access.sql) è®°å½æ¥é
ç½®
å¨ [AbstractVerifier](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java) ä¸ï¼åå®çå®ã强å¶å¹é
ã
#### é² SQL 注å
¥
ç®åæ é¢ç¼è¯ + ç½åå æ ¡éªæºå¶ãå
·ä½è§ [AbstractSQLExecutor](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java) å [AbstractSQLConfig](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) ã
#### 鲿¶æè¯·æ±
ç®åæéæµæºå¶ï¼getMaxQueryCount, getMaxUpdateCount, getMaxObjectCount, getMaxSQLCount, getMaxQueryDepth çã
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Parser.java
#### ... //欢è¿è¡¥å
### æé«æ§è½
20200205 æ´æ°ï¼æè¿ç忬¡å¤§å¹
æåæ§è½ç¸å
³ä¼åå Release
[æ°å¢æ¯æ ClickHouseãçªå£å½æ° OVERãåå¼å· `key`ãåå¼å· 'value'ï¼å¤§å¹
æåå表æ°ç»æ¥è¯¢æ§è½](https://github.com/Tencent/APIJSON/releases/tag/4.8.0)
[4.6.0ãæ§è½ã大å¹
æåæ°ç»å
主表æ¥è¯¢æ§è½](https://github.com/Tencent/APIJSON/releases/tag/4.6.0)
[4.4.5ãæ§è½ã大å¹
æåå¢å æ¹çæ§è½](https://github.com/Tencent/APIJSON/releases/tag/4.4.5)
#### è§£æ JSON
ä¼å [AbstractParser](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java) å [AbstractObjectParser](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractObjectParser.java) è§£æ JSON æ§è½ã
#### å°è£
JSON
ä¼å [AbstractSQLExecutor](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java) å°è£
JSON æ§è½ã
#### æ¼æ¥ SQL
ä¼å [AbstractSQLConfig](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java) æ¼æ¥ SQL æ§è½ã
[å®ååè½](https://github.com/Tencent/APIJSON/blob/master/Roadmap.md#%E5%AE%8C%E5%96%84%E5%8A%9F%E8%83%BD) ä¸ Union å With 乿¯ä¼å SQL æ§è½çæ¹å¼ã
#### 读åç¼å
20230105 æ´æ°ï¼æ°å¢ Redis ç¼å Demo
https://github.com/APIJSON/APIJSON-Demo/commit/060a10e56818b31ab332770815467af9f052c261
å¨ [AbstractParser](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java) 使ç¨äº HashMap queryResultMap å已解æçå¯¹è±¡ãæ»æ°çæ°æ®ã
å¨ [AbstractSQLExecutor](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java) 使ç¨äº HashMap cacheMap åå·²éè¿ SQL æ¥åºçç»æéã
#### ... //欢è¿è¡¥å
### å¢å¼ºç¨³å®
APIJSON 代ç ç»è¿åä¸åæè½¯ä»¶ [æºä¼Pinpoint](https://www.sourcebrella.com/) çè´¨æ£ï¼æ¥å说æ APIJSON é常å¯é ã
https://github.com/Tencent/APIJSON/issues/48
使们éè¦åæ¥ååï¼å°½å¯è½åå° 99.999% å¯é 度ï¼éä½ä½¿ç¨é£é©ï¼è®©ç¨æ·æ¾å¿åå®å¿ã
20200205 æ´æ°ï¼å·²ç»è§£å³äº [æºä¼ç§æ](https://www.sourcebrella.com) 以䏿¥åä¸ç大é¨åé®é¢ å [å¥å®ä¿¡ä»£ç å«å£«](https://github.com/QiAnXinCodeSafe) åç°çé¨åé®é¢
https://github.com/Tencent/APIJSON/issues/created_by/QiAnXinCodeSafe
#### åå° Bug
##### [APIAuto](https://github.com/TommyLemon/APIAuto) ä¸ç»è®¡ç bug
è´¦å· 13000002000 å¯ç 123456
http://apijson.cn/api
##### å
¶å®åç°ç Bug
https://github.com/Tencent/APIJSON/issues?q=is%3Aissue+is%3Aopen+label%3Abug
#### å®åæµè¯
##### å¨ APIAuto-æºå¨å¦ä¹ èªå¨åæ¥å£ç®¡çå¹³å° ä¸ä¼ æ´å¤ãæ´å
¨é¢ãæ´ç»è´çæµè¯ç¨ä¾ã卿忰ç
http://apijson.cn/api
##### å¨ UnitAuto-æºå¨å¦ä¹ èªå¨ååå
æµè¯å¹³å° ä¸ä¼ æ´å¤ãæ´å
¨é¢ãæ´ç»è´çæµè¯ç¨ä¾ã卿忰ç
http://apijson.cn/unit
### å®åææ¡£
20211112 æ´æ°ï¼å·²å¨å®ç½é¨ç½²ææ¡£ http://apijson.cn/doc/zh
20200205 æ´æ°ï¼æè¿å®ååæ´æ°äºéç¨ææ¡£ãä¸æææ¡£ã徿å
¥é¨ææ¡£çï¼è¿å¯¹é¦é¡µå¼å¯¼ææ¡£å äºå¯¼èªç®å½
https://github.com/Tencent/APIJSON/blob/master/Navigation.md
#### ä¸æææ¡£
##### éç¨ææ¡£
https://github.com/Tencent/APIJSON/blob/master/Document.md
##### é
ç½®ä¸é¨ç½²
https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server
##### ... //欢è¿è¡¥å
#### English Document
Translation for Chinese document.
https://github.com/Tencent/APIJSON/blob/master/README-English.md
https://github.com/Tencent/APIJSON/blob/master/Document-English.md
https://github.com/ruoranw/APIJSONdocs
### 丰å¯å¨è¾¹
#### æ°å¢æå®ååç§è¯è¨ ORM åº
Go, Node(js/ts), C#, PHP, Kotlin, Ruby çã
https://github.com/Tencent/APIJSON#%E7%94%9F%E6%80%81%E9%A1%B9%E7%9B%AE
#### æ°å¢æå®å Demo
JavaScript å端ï¼TypeScript å端ï¼å¾®ä¿¡çå°ç¨åºï¼
Android 客æ·ç«¯ï¼iOS 客æ·ç«¯ï¼C# 游æå®¢æ·ç«¯çã
Java, C#, PHP, Node, Python çå端 Demo åæ°æ®ã
https://github.com/APIJSON/APIJSON-Demo
#### æ°å¢æ©å±
ç®å宿¹æ apijson-column, apijson-router 两个æä»¶
##### 1.åºäºææ´å [APIJSONORM](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM) æ [apijson-framework](https://github.com/APIJSON/apijson-framework) æ¥å®ç°çåº/æ¡æ¶
##### 2.æ©å± [APIJSONORM](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM) æ [apijson-framework](https://github.com/APIJSON/apijson-framework) åè½çæä»¶
å¯ä»¥éè¿æ©å±å¯¹è±¡å
³é®è¯ @keyï¼æ°ç»å
³é®è¯ keyï¼è¿ç¨å½æ°ï¼éåé¨åæ¹æ³çæ¥å®ç°ã
##### 3.å端/客æ·ç«¯ å°è£
/è§£æ APIJSON çåº/æ¡æ¶
å 为 APIJSON åºäº JSONï¼å¤§é¨åæ
åµä¸é½å¯ä»¥ç´æ¥ç¨ fastjson ç JSON å°è£
/è§£æåºæå
¶å®å·¥å
·çï¼
åªæ¯ APIJSON æé¨ååè½éè¦å¨ key éæ¾ [], @ çç¹æ®ç¬¦å·ï¼è¿å [] å¨æäºæ
åµä¸ä¸æ¹ä¾¿è§£æï¼
ç®åå¯ä½¿ç¨ "format": true 让åç«¯æ ¼å¼ååè¿åï¼ä½ä¹ä¼å¯¹æå¡å¨æ§è½æä¸äºæèï¼
妿 å端/客æ·ç«¯ æå¯¹åºçæ ¼å¼åå·¥å
·çï¼ä¾å¦ [apijson-orm](https://github.com/APIJSON/apijson-orm) å¯ä¾ Android ä½¿ç¨ formatï¼ï¼éæ©å°±ä¼æ´å¤ä¸äºã
##### ... //欢è¿è¡¥å
### æ¨å¹¿ä½¿ç¨
#### 为 APIJSON ç¼å/å表 å客/æç« /èµè®¯ ç
https://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90
20200205 æ´æ°ï¼æè¿é¦é¡µç¸å
³æ¨èæ°å¢äº 1 ç¯å®æ¹åçæç« å 6 ç¯ç¨æ·åçæç«
https://github.com/Tencent/APIJSON/blob/master/README.md#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90
#### ç»è®°æ£å¨ä½¿ç¨ APIJSON çå
¬å¸æé¡¹ç®
https://github.com/Tencent/APIJSON/issues/73
#### å¨ç¤¾äº¤ææ¯ç¾¤ã论åçè天æè¯è®ºæ¶æ¨è APIJSON
#### ... //欢è¿è¡¥å