这篇文章分享 API 接口设计规范,目的是提供给研发人员作参考。android
规范是死的,人是活的,但愿本身定的规范,不要被打脸。ios
动做 | 前缀 | 备注 |
---|---|---|
获取 | get | get{XXX} |
获取 | get | get{XXX}List |
新增 | add | add{XXX} |
修改 | update | update{XXX} |
保存 | save | save{XXX} |
删除 | delete | delete{XXX} |
上传 | upload | upload{XXX} |
发送 | send | send{XXX} |
请求方式 | 描述 |
---|---|
GET | 获取数据 |
POST | 新增数据 |
PUT | 更新数据 |
DELETE | 删除数据 |
url?后面的参数,存放请求接口的参数数据。后端
请求头,存放公共参数、requestId、token、加密字段等。api
Body 体,存放请求接口的参数数据。安全
APP 端请求网络
参数 | 说明 | 备注 |
---|---|---|
network | 网络 | WIFI、4G |
operator | 运营商 | 中国联通/移动 |
platform | 平台 | iOS、Android |
system | 系统 | ios 13.三、android 9 |
device | 设备型号 | iPhone XR、小米9 |
udid | 设备惟一标示 | |
apiVersion | API 版本号 | v1.一、v1.2 |
WEB 端请求app
参数 | 说明 | 备注 |
---|---|---|
appKey | 受权Key | 字符串 |
调用方需向服务方申请 appKey(请求时使用) 和 secretKey(加密时使用)。tcp
敏感参数加密处理加密
登陆密码、支付密码,需加密后传输,建议使用非对称加密
。url
参数 | 类型 | 说明 | 备注 |
---|---|---|---|
code | Number | 结果码 | 成功=1 失败=-1 未登陆=401 无权限=403 |
showMsg | String | 显示信息 | 系统繁忙,稍后重试 |
errorMsg | String | 错误信息 | 便于研发定位问题 |
data | Object | 数据 | JSON 格式 |
如有分页数据返回的,格式以下:
{ "code": 1, "showMsg": "success", "errorMsg": "", "data": { "list": [], "pagination": { "total": 100, "currentPage": 1, "prePageCount": 10 } } }
敏感数据脱敏处理
用户手机号、用户邮箱、身份证号、支付帐号、邮寄地址等要进行脱敏,部分数据加 * 号处理。
签名验证没有肯定的规范,本身制定就行,能够选择使用 对称加密
、非对称加密
、单向散列加密
等,分享下原来写的签名验证,供参考。
日志平台有利于故障定位和日志统计分析。
日志平台的搭建可使用的是 ELK
组件,使用 Logstash
进行收集日志文件,使用 Elasticsearch
引擎进行搜索分析,最终在 Kibana
平台展现出来。
咱们没法保证接口的每一次调用都是有返回结果的,要考虑到出现网络异常的状况。
举个例子,订单建立时,咱们须要去减库存,这时接口发生了超时,调用方进行了重试,这时是否会多扣一次库存?
解决这类问题有 2 种方案:
1、服务方提供相应的查询接口,调用方在请求超时后进行查询,若是查到了,表示请求处理成功了,没查到就走失败流程。
2、调用方只管重试,服务方保证一次和屡次的请求结果是同样的。
对于第二种方案,就须要服务方的接口支持幂等性。
大体设计思路是这样的:
限流设计、熔断设计、降级设计,这些就很少说了,由于大部分都用不到,当用上了基本上也都在网关中加这些功能。
暂时就想到这么多,规范这东西不是一成不变的,发现有不妥的及时调整吧。
大家接口的输入输出 Key,命名是用驼峰仍是下划线?欢迎留言。