├── LICENSE
├── README.html
├── README.md
├── _config.yml
└── app
├── Http
├── Controllers
│ └── Api
│ │ └── RouterController.php
└── routes.php
├── Models
└── App.php
└── Services
└── ApiServer
├── App.php
├── Error.php
├── Response
├── BaseResponse.php
├── Demo.php
└── InterfaceResponse.php
└── Server.php
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 叶子坑(http://flc.ren | http://flc.io)
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.html:
--------------------------------------------------------------------------------
1 |
API服务端架构代码
1081 |
1110 | 1. 部署说明
1111 |
1112 | 现有API基于laravel框架开发,本次介绍也针对laravel。可根据文档自行调整,以适用其他框架下使用
1113 |
1114 | 1.1. 数据库相关
1115 | 执行如下SQL语句
1116 | CREATE TABLE `prefix_apps` (
1117 | `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '自增长',
1118 | `app_id` VARCHAR(60) NOT NULL COMMENT 'appid',
1119 | `app_secret` VARCHAR(100) NOT NULL COMMENT '密钥',
1120 | `app_name` VARCHAR(200) NOT NULL COMMENT 'app名称',
1121 | `app_desc` TEXT COMMENT '描述',
1122 | `status` TINYINT(2) DEFAULT '0' COMMENT '生效状态',
1123 | `created_at` INT(10) NOT NULL DEFAULT '0' COMMENT '创建时间',
1124 | `updated_at` INT(10) NOT NULL DEFAULT '0' COMMENT '更新时间',
1125 | PRIMARY KEY (`id`),
1126 | UNIQUE KEY `app_id` (`app_id`),
1127 | KEY `status` (`status`)
1128 | ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='应用表';
1129 |
1130 |
1131 |
1132 | 1.2. 目录相关
1133 |
1134 |
1135 |
1136 | 标题 |
1137 | 路径 |
1138 |
1139 |
1140 |
1141 |
1142 | API核心目录 |
1143 | app/Services/ApiServer/ |
1144 |
1145 |
1146 | API接口目录 |
1147 | app/Services/ApiServer/Response/ |
1148 |
1149 |
1150 | apps数据库模型 |
1151 | app/Models/App.php |
1152 |
1153 |
1154 | 路由配置 |
1155 | app/Http/routes.php |
1156 |
1157 |
1158 | API入口控制器 |
1159 | app/Http/Controllers/Api/RouterController.php |
1160 |
1161 |
1162 |
1163 | 2. API文档及开发规范
1164 | 2.1. API调用协议
1165 | 2.1.1. 请求地址及请求方式
1166 |
1167 | 请求地址:/api/router
;
1168 | 请求方式:POST
/GET
1169 |
1170 | 2.1.2. 公共参数
1171 |
1172 |
1173 |
1174 | 参数名 |
1175 | 类型 |
1176 | 是否必须 |
1177 | 描述 |
1178 |
1179 |
1180 |
1181 |
1182 | app_id |
1183 | string |
1184 | 是 |
1185 | 应用ID |
1186 |
1187 |
1188 | method |
1189 | string |
1190 | 是 |
1191 | 接口名称 |
1192 |
1193 |
1194 | format |
1195 | string |
1196 | 否 |
1197 | 回调格式,默认:json(目前仅支持) |
1198 |
1199 |
1200 | sign_method |
1201 | string |
1202 | 否 |
1203 | 签名类型,默认:md5(目前仅支持) |
1204 |
1205 |
1206 | nonce |
1207 | string |
1208 | 是 |
1209 | 随机字符串,长度1-32位任意字符 |
1210 |
1211 |
1212 | sign |
1213 | string |
1214 | 是 |
1215 | 签名字符串,参考签名规则 |
1216 |
1217 |
1218 |
1219 | 2.1.3. 业务参数
1220 |
1221 | API调用除了必须包含公共参数外,如果API本身有业务级的参数也必须传入,每个API的业务级参数请考API文档说明。
1222 |
1223 | 2.1.4. 签名规则
1224 |
1225 | - 对所有API请求参数(包括公共参数和请求参数,但除去
sign
参数),根据参数名称的ASCII码表的顺序排序。如:foo=1, bar=2, foo_bar=3, foobar=4
排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4
。
1226 | - 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4。
1227 | - 把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要。如果使用
MD5
算法,则需要在拼装的字符串前后加上app的secret
后,再进行摘要,如:md5(secret+bar2foo1foo_bar3foobar4+secret)
1228 | - 将摘要得到的字节结果使用大写表示
1229 |
1230 | 2.1.5. 返回结果
1231 | // 成功
1232 | {
1233 | "status": true,
1234 | "code": "200",
1235 | "msg": "成功",
1236 | "data": {
1237 | "time": "2016-08-02 12:07:09"
1238 | }
1239 | }
1240 |
1241 | // 失败
1242 | {
1243 | "status": false,
1244 | "code": "1001",
1245 | "msg": "[app_id]缺失"
1246 | }
1247 |
1248 |
1249 |
1250 | 2.2. API开发规范
1251 | 2.2.1. API接口命名规范(method)
1252 |
1253 | - 接口名称统一小写字母
1254 | - 多单词用
.
隔开
1255 | - 对应的类文件(目录:
app/Services/ApiServer/Response/
);以接口名去.
,再首字母大写作为类名及文件名。如接口名:user.add
,对应的类文件及类名为:UserAdd
1256 | - 接口命名规范
1257 | - 命名字母按功能或模块从大到小划分,依次编写;如后台用户修改密码:’admin.user.password.update’
1258 | - 字母最后单词为操作。查询:
get
;新增:add
;更新:update
;删除:delete
;上传:upload
;等
1259 |
1260 |
1261 |
1262 | 2.2.2. 错误码
1263 |
1264 | 错误码配置:app/Services/ApiServer/Error.php
1265 |
1266 | 命名规范:
1267 |
1268 |
1269 |
1270 | 类型 |
1271 | 长度 |
1272 | 说明 |
1273 |
1274 |
1275 |
1276 |
1277 | 系统码 |
1278 | 3 |
1279 | 同http状态码 |
1280 |
1281 |
1282 | 公共错误码 |
1283 | 4 |
1284 | 公共参数错误相关的错误码 |
1285 |
1286 |
1287 | 业务错误码 |
1288 | 6+ |
1289 | 2位业务码+4位错误码,不足补位 |
1290 |
1291 |
1292 |
1293 | 现有错误码:
1294 |
1295 |
1296 |
1297 | 错误码 |
1298 | 错误内容 |
1299 |
1300 |
1301 |
1302 |
1303 | 200 |
1304 | 成功 |
1305 |
1306 |
1307 | 400 |
1308 | 未知错误 |
1309 |
1310 |
1311 | 401 |
1312 | 无此权限 |
1313 |
1314 |
1315 | 500 |
1316 | 服务器异常 |
1317 |
1318 |
1319 | 1001 |
1320 | [app_id]缺失 |
1321 |
1322 |
1323 | 1002 |
1324 | [app_id]不存在或无权限 |
1325 |
1326 |
1327 | 1003 |
1328 | [method]缺失 |
1329 |
1330 |
1331 | 1004 |
1332 | [format]错误 |
1333 |
1334 |
1335 | 1005 |
1336 | [sign_method]错误 |
1337 |
1338 |
1339 | 1006 |
1340 | [sign]缺失 |
1341 |
1342 |
1343 | 1007 |
1344 | [sign]签名错误 |
1345 |
1346 |
1347 | 1008 |
1348 | [method]方法不存在 |
1349 |
1350 |
1351 | 1009 |
1352 | run方法不存在,请联系管理员 |
1353 |
1354 |
1355 | 1010 |
1356 | [nonce]缺失 |
1357 |
1358 |
1359 | 1011 |
1360 | [nonce]必须为字符串 |
1361 |
1362 |
1363 | 1012 |
1364 | [nonce]长度必须为1-32位 |
1365 |
1366 |
1367 |
1368 | 2.2.3. API DEMO 示例
1369 | 文件路径:app/Services/ApiServer/Response/Demo.php
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # API服务端架构代码
2 |
3 | [](https://996.icu)
4 | [](https://github.com/996icu/996.ICU/blob/master/LICENSE)
5 |
6 | ## 1. 部署说明
7 |
8 | > 现有API基于laravel框架开发,本次介绍也针对laravel。可根据文档自行调整,以适用其他框架下使用
9 |
10 | ### 1.1. 数据库相关
11 |
12 | 执行如下SQL语句
13 |
14 | ```sql
15 | CREATE TABLE `prefix_apps` (
16 | `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '自增长',
17 | `app_id` VARCHAR(60) NOT NULL COMMENT 'appid',
18 | `app_secret` VARCHAR(100) NOT NULL COMMENT '密钥',
19 | `app_name` VARCHAR(200) NOT NULL COMMENT 'app名称',
20 | `app_desc` TEXT COMMENT '描述',
21 | `status` TINYINT(2) DEFAULT '0' COMMENT '生效状态',
22 | `created_at` INT(10) NOT NULL DEFAULT '0' COMMENT '创建时间',
23 | `updated_at` INT(10) NOT NULL DEFAULT '0' COMMENT '更新时间',
24 | PRIMARY KEY (`id`),
25 | UNIQUE KEY `app_id` (`app_id`),
26 | KEY `status` (`status`)
27 | ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='应用表';
28 | ```
29 |
30 | ### 1.2. 目录相关
31 |
32 | |标题|路径|
33 | |----|----|
34 | |API核心目录|`app/Services/ApiServer/`|
35 | |API接口目录|`app/Services/ApiServer/Response/`|
36 | |apps数据库模型|`app/Models/App.php`|
37 | |路由配置|`app/Http/routes.php`|
38 | |API入口控制器|`app/Http/Controllers/Api/RouterController.php`|
39 |
40 | ## 2. API文档及开发规范
41 |
42 | ### 2.1. API调用协议
43 |
44 | #### 2.1.1. 请求地址及请求方式
45 |
46 | > 请求地址:`/api/router`;
47 | >
48 | > 请求方式:`POST`/`GET`
49 |
50 | #### 2.1.2. 公共参数
51 |
52 | |参数名|类型|是否必须|描述|
53 | |----|----|----|----|
54 | |app_id|string|是|应用ID|
55 | |method|string|是|接口名称|
56 | |format|string|否|回调格式,默认:json(目前仅支持)|
57 | |sign_method|string|否|签名类型,默认:md5(目前仅支持)|
58 | |nonce|string|是|随机字符串,长度1-32位任意字符|
59 | |sign|string|是|签名字符串,参考[签名规则](#签名规则)|
60 |
61 | #### 2.1.3. 业务参数
62 |
63 | > API调用除了必须包含公共参数外,如果API本身有业务级的参数也必须传入,每个API的业务级参数请考API文档说明。
64 |
65 | #### 2.1.4. 签名规则
66 |
67 | - 对所有API请求参数(包括公共参数和请求参数,但除去`sign`参数),根据参数名称的ASCII码表的顺序排序。如:`foo=1, bar=2, foo_bar=3, foobar=4`排序后的顺序是`bar=2, foo=1, foo_bar=3, foobar=4`。
68 | - 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4。
69 | - 把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要。如果使用`MD5`算法,则需要在拼装的字符串前后加上app的`secret`后,再进行摘要,如:md5(secret+bar2foo1foo_bar3foobar4+secret)
70 | - 将摘要得到的字节结果使用大写表示
71 |
72 | #### 2.1.5. 返回结果
73 |
74 | ```json
75 | // 成功
76 | {
77 | "status": true,
78 | "code": "200",
79 | "msg": "成功",
80 | "data": {
81 | "time": "2016-08-02 12:07:09"
82 | }
83 | }
84 |
85 | // 失败
86 | {
87 | "status": false,
88 | "code": "1001",
89 | "msg": "[app_id]缺失"
90 | }
91 | ```
92 |
93 | ### 2.2. API开发规范
94 |
95 | #### 2.2.1. API接口命名规范(method)
96 |
97 | - 接口名称统一小写字母
98 | - 多单词用`.`隔开
99 | - 对应的类文件(目录:`app/Services/ApiServer/Response/`);以接口名去`.`,再首字母大写作为类名及文件名。如接口名:`user.add`,对应的类文件及类名为:`UserAdd`
100 | - 接口命名规范
101 | - 命名字母按功能或模块从大到小划分,依次编写;如后台用户修改密码:'admin.user.password.update'
102 | - 字母最后单词为操作。查询:`get`;新增:`add`;更新:`update`;删除:`delete`;上传:`upload`;等
103 |
104 | #### 2.2.2. 错误码
105 |
106 | > 错误码配置:`app/Services/ApiServer/Error.php`
107 |
108 | 命名规范:
109 |
110 | |类型|长度|说明|
111 | |----|----|----|
112 | |系统码|3|同`http状态码`|
113 | |公共错误码|4|公共参数错误相关的错误码|
114 | |业务错误码|6+|2位业务码+4位错误码,不足补位|
115 |
116 | 现有错误码:
117 |
118 | |错误码|错误内容|
119 | |----|----|
120 | |200|成功|
121 | |400|未知错误|
122 | |401|无此权限|
123 | |500|服务器异常|
124 | |1001|[app_id]缺失|
125 | |1002|[app_id]不存在或无权限|
126 | |1003|[method]缺失|
127 | |1004|[format]错误|
128 | |1005|[sign_method]错误|
129 | |1006|[sign]缺失|
130 | |1007|[sign]签名错误|
131 | |1008|[method]方法不存在|
132 | |1009|run方法不存在,请联系管理员|
133 | |1010|[nonce]缺失|
134 | |1011|[nonce]必须为字符串|
135 | |1012|[nonce]长度必须为1-32位|
136 |
137 | #### 2.2.3. API DEMO 示例
138 |
139 | 文件路径:`app/Services/ApiServer/Response/Demo.php`
140 |
141 |
142 | ## 捐赠
143 |
144 | 如果你觉得本扩展对你有帮助,请捐赠以表支持,谢谢~~
145 |
146 |