开发规范
统一的API风格和规范对于提高开发效率、易用性和可维护性非常重要,可以使开发者更容易地理解和使用API,从而提高整个项目的质量和成功率。
- 可读性:遵循统一的规范和风格使API更容易阅读和理解。开发者在阅读API文档或查看端点时,可以更快地理解它们的作用和用法
- 一致性:统一的API风格和规范有助于提高整个应用程序的一致性。这使得开发者在使用不同的API时能够更快地适应和理解它们的行为
- 易用性:统一的API风格和规范提高了API的易用性,因为开发者只需了解一种规范即可与整个API进行交互
- 提高开发效率:当API遵循统一的风格和规范时,开发者可以减少在不同端点(系统/模块)之间进行上下文切换的时间。这可以提高开发者的工作效率,并减少错误和遗漏的可能性
- 可维护性:遵循统一的API风格和规范使得代码更容易维护。当需要对API进行更改或扩展时,遵循统一的规范可以确保这些更改不会导致混乱或不一致的行为
- 更好的协作:在团队开发中,统一的API风格和规范有助于确保每个团队成员都遵循相同的约定,从而提高协作效率
- 易于扩展:统一的API风格和规范可以使得API更易于扩展,因为开发者在添加新功能时可以遵循现有的约定,确保与现有API的兼容性
命名规范
分类 | 规范项 | 规范 | 描述 | 示例 |
---|---|---|---|---|
数据库 | 数据库名 | 单数+中划线/下划线 | 如果包含多个单词,除了最后一个,其他建议使用缩写 | hw-telemetry |
表名 & ORM类名 单复数 |
表名复数 模型类单数 |
|
|
|
表名连接词 | 下划线 | 中划线可能导致SQL异常,需额外处理 例如) 执行 SELECT * FROM temp_01-01-000001,会产生异常(SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-01-000001' at line 1),需要写成 SELECT * FROM `temp_01-01-000001` |
||
列名连接词 | 下划线 | |||
页面导航 | 资源/模块单复数 | 复数 |
|
资源集合:/users, /articles, /products 特定操作:/login, /signup, /search |
连接词 | 中划线 |
|
使用中划线:https://example.com/user-profile 使用下划线:https://example.com/user_profile(不推荐) |
|
AJAX请求URL(flask) | 带斜杠 | 避免重定向(只针对flask应用,其他语言和框架根据情况设置) | [GET] http://127.0.0.1:666/api/v1.0/sys-users/ | |
API | 资源/模块单复数 | 复数 |
|
@app.route('/users', methods=['GET']) |
连接词 | 中划线 | 中划线使得URL更易于阅读和理解,因为它们在视觉上清晰地将单词分隔开,请参考Google URL规范 | @app.route('/devices/sync-from', methods=['POST']) | |
URL参数 & 数据key | 小写+下划线 | |||
URL是否以斜杠结束 (flask) |
是 |
|
||
协作开发 | Postman使用 | Postman使用 |
|
以上命名请全部使用小写,另外也不推荐驼峰(/sysUser)或直接拼接(/sysuser)的命名方式。
API接口规范
在RESTful规范的基础上,对API接口URL和交互数据格式进行了定制化和规范化。
列表查询
查询某个数据模型的全部数据列表
Method | GET | |
URL | http://{{server_url}}/api/v1.0/{resources}/ | |
Payload | - | |
Return | 包含状态和数据列表/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 |
请求失败有两种情况
|
单个查询
查询某个数据模型的指定数据
Method | GET | |
URL | http://{{server_url}}/api/v1.0/{resources}/[pk]/ | |
Payload | - | |
Return | 包含状态和数据列表/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 |
条件查询
包含分页、搜索、排序等的条件查询
Method | POST | |
URL |
http://{{server_url}}/api/v1.0/{resources}/pss/ http://{{server_url}}/api/v1.0/{resources}/query_pss/ |
|
Payload | 分页/搜索/排序等查询条件 | |
|
||
Return | 包含状态和数据列表/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 采用POST的方式,以更好的组织请求条件数据 |
添加
添加数据
Method | POST | |
URL | http://{{server_url}}/api/v1.0/{resources}/ | |
Payload | 要添加的json数据对象 | |
|
||
Return | 包含状态和添加成功以后的模型数据/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 |
删除
删除指定的数据
Method | DELETE | |
URL | http://{{server_url}}/api/v1.0/{resources}/[pk]/ | |
Payload | - | |
Return | 包含状态和删除成功以后的模型数据/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 在URL中指定要删除的主键信息 |
修改
修改指定的数据,分为局部修改和全量替换
局部修改
只对传递的数据中指定的属性进行更新,数据中没有的属性保持不变
Method | PATCH | |
URL |
http://{{server_url}}/api/v1.0/{resources}/ http://{{server_url}}/api/v1.0/{resources}/[pk]/ |
|
Payload | 包含主键信息的要修改数据的json对象 | |
|
||
Return | 包含状态和修改成功以后的模型数据/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 主键既可以放在URL中,也可以放在Payload中,URL中的主键优先级高于Payload中的主键(主键放在Payload中,可能会简化client端的API调用) |
全量替换
以替换的方式对数据进行替换,如果属性不存在则置空
Method | PUT | |
URL |
http://{{server_url}}/api/v1.0/{resources}/ http://{{server_url}}/api/v1.0/{resources}/[pk]/ |
|
Payload | 包含主键信息的要修改的全量数据json对象 | |
|
||
Return | 包含状态和修改成功以后的模型数据/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 除非场景特殊,一般通过PATCH的方式进行更新即可 |
多数据查询
一次查询多个模型的所有数据
Method | GET | |
URL |
http://{{server_url}}/api/v1.0/{resources}/multi/ http://{{server_url}}/api/v1.0/{resources}/query_multiple/ |
|
Payload | - | |
Return | 包含状态和数据列表/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 主要为了减少请求次数,方便前端使用 |
批量添加
批量添加数据
Method | POST | |
URL | http://{{server_url}}/api/v1.0/{resources}/bulk/ | |
Payload | 要批量添加的json数据对象列表 | |
|
||
Return | 包含状态和添加的模型数据列表(Payload中的)/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 整个操作为一个原子操作(全部成功/全部失败) |
批量删除
批量删除指定的数据
Method | DELETE | |
URL | http://{{server_url}}/api/v1.0/{resources}/bulk/[ids]/ | |
Payload | 要批量删除的数据对象列表,列表中的项可以是主键值也可以是查询条件组成的对象 | |
|
||
Return | 包含状态和删除成功的数量/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 |
|
批量修改(局部)
批量修改数据
Method | PATCH | |
URL | http://{{server_url}}/api/v1.0/{resources}/bulk/ | |
Payload | 要批量修改的json数据对象列表 | |
|
||
Return | 包含状态和修改的模型数据列表(Payload中的)/异常信息的json对象 | |
-成功 |
|
|
-失败 |
|
|
备注 | 整个操作为一个原子操作(全部成功/全部失败),如果数据在数据库中不存在,则会跳过 |
以上API请求和结果中的数据字段key统一使用下划线连接