概述本文分享API接口设计规范,供开发者参考。规范是死的,但人是活的。我希望我制定的规范不会被打脸。路由命名规范ActionPrefixRemarksGetgetget{XXX}Getgetget{XXX}ListAddaddadd{XXX}Modifyupdateupdate{XXX}Savesavesave{XXX}Deletedeletedelete{XXX}Uploaduploadupload{XXX}Sendsendsend{XXX}Requestmethod请求方法说明GET获取数据POST添加新数据PUT更新数据DELETE删除数据请求参数后的参数Queryurl?存储请求接口的参数数据。Header请求头,存放公共参数、requestId、token、加密字段等。BodyBody主体,存放请求接口的参数数据。公共参数APP请求参数说明备注网络网络WIFI、4Gooperator运营商联通/移动平台平台iOS、安卓系统系统ios13.3、android9device设备型号iPhoneXR、小米9udid设备唯一标示apiVersionAPI版本号v1.1、v1.2WEB终端请求参数说明备注appKeyAuthorizationKeyString调用者需要向服务器申请appKey(请求时使用)和secretKey(加密时使用)。安全规范敏感参数加密处理登录密码和支付密码,传输前需要加密。建议使用非对称加密。其他规范的参数命名约定建议使用驼峰命名,首字母小写。requestId建议携带唯一标识,用于跟踪问题。返回参数参数类型说明备注codeNumber结果码success=1
failure=-1
未登录=401
无权限=403showMsgString显示信息系统忙,稍后再试errorMsgString错误信息为方便研发定位问题dataObject数据JSON格式如果有分页数据返回,格式如下:{"code":1,"showMsg":"success","errorMsg":"","data":{"list":[],"pagination":{"total":100,"currentPage":1,"prePageCount":10}}}安全规范敏感数据脱敏处理用户手机号、用户邮箱、身份证号、支付账号、邮寄地址等进行了脱敏处理,部分数据进行了*处理。命名其他标准化属性名称时,建议使用驼峰式,首字母小写。当属性值为空时,严格按类型返回默认值。如果金额类型/时间日期类型的属性值仅用于显示,建议后台返回一个可以显示的字符串。建议后端同时返回业务逻辑的状态码和对应的副本。调用者不需要的属性,不返回。签名设计和签名验证没有明确的规范。你可以自己做。可以选择使用对称加密、非对称加密、单向哈希加密等方式,分享原签名验证,供参考。Go签名验证PHP签名验证日志平台设计日志平台有利于故障定位和日志统计分析。可以使用ELK组件搭建日志平台,使用Logstash收集日志文件,使用Elasticsearch引擎进行搜索分析,最后展示在Kibana平台上。幂等设计我们不能保证每次调用接口都会返回一个结果,必须考虑到网络异常的发生。例如,当创建订单时,我们需要减少库存。此时接口超时,调用方重试。存货会不会再扣一次?这类问题有两种解决方案:1、服务端提供相应的查询接口,请求超时后调用方查询。如果找到,则表示请求处理成功。如果没有找到,则进入失败流程。2、调用方只需要重试,服务端保证一次请求和多次请求的结果相同。对于第二种方案,服务器的接口需要支持幂等性。大致的设计思路是这样的:在调用接口之前,调用接口时先获取一个全局唯一的令牌(Token),将Token放在Header头中,解析Header头,验证是否是有效的Token,直接返回完成业务逻辑无效则失败最后将业务结果与Token关联存储,设置重试时过期时间不要重新获取Token。用上次的Token总结总结一下限流设计,断路器设计,降级设计。这些我就不多说了,因为大部分都是用不到的,这些功能基本都是在网关用的时候加上的。暂时能想到的就这些了。标准化不是一成不变的。如果发现不对,及时调整。你接口的输入输出Key是驼峰命名还是下划线命名?欢迎留言。推荐阅读一线技术经理在做什么?一个人得到提升,不仅仅是能力,而是信任一起学习
