当前位置: 首页 > news >正文

HTTP API接口设计规范

1. 所有请求使用POST方法

  • 使用post,相对于get的query string,可以支持复杂类型的请求参数。例如日常项目中碰到get请求参数为数组类型的情况。

  • 便于对请求和响应统一做签名、加密、日志等处理

2. URL规则

  • URL中只能含有英文,使用英文单词或简称,不要使用汉语拼音

  • 所有字符使用小写字母

  • 多个单词之前使用连字符-分隔,如third-login, 不要使用thirdlogin,thirdLoginthird_login

  • URL的path部分使用 系统/模块/操作 的格式,如 ims/video/list

    • 系统,表示这个接口是微服务中的哪个服务,可使用简称
    • 模块,表示系统的子模块。模块名字使用名词全称,且使用单数形式
    • 操作,表示具体的接口,使用动词+名词的形式,需要考虑单复数。比如add-user,list-users,delete-users

3. HTTP头部

  • 将具体业务无关的数据放在HTTP headers
  • 后端系统可以在不涉及请求和响应体的情况下,处理一些公用逻辑

4. 请求和响应体

  • 使用utf-8编码
  • JSON格式
  • 如果需要加密,可以将正常的JSON加密后用base64编码

5. HTTP状态码

  • 业务的处理结果不体现在http状态码,由响应体的错误码字段表示
  • 只是有部分http状态码表示业务无关的响应,例如
    • 200: 业务已处理,但是处理成功还是失败由响应体表示
    • 400: 错误的请求,多用在请求参数验证。客户端开发要保证向服务器提交正确格式的请求
    • 401: 认证失败,一般没有token或者没有token过期
    • 403: 没有权限调用这个接口。客户端应该隐藏用户无权限的操作
    • 500: 服务器异常

6. 字段命名

  • JSON来自javascript语言,所以字段命名遵循javascript语言,使用 lowerCamelCase 小骆驼拼写法
  • 不要使用下划线链接的 snake_case

7. 数据类型

常用数据类型映射

  • bool:映射为 string,使用Y表示true,N表示false
  • int: 映射为number
  • long: 映射为string,因为js的number类型能处理的数值范围不够,实际项目中会导致各种奇怪的问题
  • float, double, decimal: 映射为string
  • 日期、时间:映射为string

注意:

  • 表示ID概念的字段,统一使用string
  • 数据传输时,如果某个字段为空值,直接省略这个字段不传,减少网络开销
  • 响应体业务数据包含多个数据结构时,优先使用嵌套格式,例如下面这个用户创建的消息
 "item": {"num_iid": "520813250866","title": "三刃木折叠刀过安检创意迷你钥匙扣钥匙刀军刀随身多功能小刀包邮","desc_short": "","price": 25.8,"total_price": 0,"suggestive_price": 0,"orginal_price": "25.80","nick": "欢乐购客栈","num": "832","min_num": 0,"detail_url": "http://item.taobao.com/item.htm?id=520813250866","pic_url": "//img.alicdn.com/imgextra/i4/2596264565/TB2p30elFXXXXXQXpXXXXXXXXXX_!!2596264565.jpg","brand": "三刃木","brandId": "4036703","rootCatId": "50013886","cid": "50014822","favcount": "4824","fanscount": "1469","crumbs": [],"created_time": "","modified_time": "","delist_time": "",

8. 响应体格式

  • code 业务处理的错误码,使用简短的能够体现错误种类的英文单词表示,使用大写字母,使用下划线分隔单词。不建议用数字表示错误码,用数字表示需要额外维护错误码表。

 

http://www.lryc.cn/news/59192.html

相关文章:

  • 数据一致性校验(pt-table-checksum)
  • Talk预告 | 新加坡国立大学郑奘巍 AAAI‘23 杰出论文:大批量学习算法加速推荐系统训练
  • 肖 sir_就业课__004项目流程(H模型)
  • snipaste 截图工具——可以使图片悬浮在任何软件上,方便对比
  • Docker 快速部署Springboot项目
  • 【LeetCode: 剑指 Offer II 112. 最长递增路径 | 递归 | DFS | 深度优先遍历 | 记忆化缓存表】
  • hive 入门 一般用于正式环境 修改元数据(二)
  • 在RedHat系统上使用firewall-cmd命令可以将端口打开
  • 分享(五):免费可用的多种类 API 大全集合整理
  • 8.1 假设验证的基本概念
  • C语言基础
  • Docker教程:如何将Helix QAC创建为一个容器并运行?
  • 1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理
  • 记一次内存泄漏问题的排查
  • QML控件--Drawer
  • PHY- PHY芯片概述
  • 【C++】如何获取当前正在运行的函数的名称?
  • 42.原型对象 prototype
  • python 读写txt方法
  • 香橙派pi5下,debian,docker19.03.9版本runc容器逃逸
  • Thinkphp6.0中间件.上
  • 十进制到八进制的转换
  • 【从零开始学Skynet】基础篇(四):网络模块常用API
  • 怎么免费制作logo?logo免费设计在线生成,从此设计不求人
  • 【目标检测】目标检测遇上知识图谱:Object detection meets knowledge graphs论文解读与复现
  • IDEA重复下载SNAPSHOT包问题
  • 【Unity入门】12.MonoBehaviour事件函数
  • 1.3 Docker Compose-详细介绍
  • 数据分析:麦当劳食品营养数据探索并可视化
  • ES6标准