3358 www.Sina.com/http://www.Sina.com /后端只负责开发接口、处理业务逻辑、提供数据前端关注交互,调用接口来进行交互前端呈现逻辑禁止在多个接口之间调用。 前后各有自己的开发流程、构建工具、测试集合,前后端关注点分离、相对独立松散耦合。前后端分离规范原则后端创建维护界面文档,包括界面角色、界面路径、请求类型、条目、参与、示例等,位于文档顶部或底部后端如有变更,及时更新接口文档; 后端基于接口文档进行接口开发,开发完成后可以利用postman、eolinker等接口规范工具进行自检; 前端可以基于接口文档进行前端开发,利用Mock平台构建虚拟数据进行接口渲染; 开发完成后,前后进行接口调整,调整完成后向测试仪提交测试。 http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /任何事务只要需要被引用就是一个资源,并且对于每一个资源都是唯一的urre
规范原则
例如,/stops/clothess/jackets表示商店/衣服/上衣,但不在/末尾。
开发流程
例如,/clothes-shops/jackets/short-sleeves表示服装店/上衣/短袖。
Restful接口规范
/clothes-shops/jackets/short-sleeves? color=红色page=1pageSize=10。
使用/查看资源级别时,级别不能太深。 3-5水平就可以了。 可以使用吗?/streets/3/clothes-shops/2/jackets/short-sleeves/1 (id为3的街道下id为2的服装店上衣中id为1的短袖)等查询参数代理的实体导航
可以使用Get /jackets/short-sleeves吗? 代替streetId=3shopId=2sleeveId=1。
URI命
URI应该用名词而不是动词来表示,因为它只用于表示资源的名称,不应该包含资源的操作。 此外,使用的名词经常与数据库中的表名相对应。 一般来说,数据库中的表是同类记录的“集合”,因此API中的名词也应该使用多个。
例如,获取衣服的信息。 用/clothes-shops/jackets/short-sleeves/id表示。 不是/clothes-shops/jackets/getshortsleeveinfo吗? 用id=xxx这样来表达。
名规范
使用“/”表示资源的层级关系
Get /street/clothes-shops? 检测streetId=1大街1的所有服装店
Get /street/clothes-shops/Id? streetId=1检测街1指定id的服装店
使用“-”增强URI的可读性
POST /street/clothes-shops? streetId=1大街1新建服装店
y;"> PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。PUT /street/clothes-shops/Id?streetId=1 更新街道1指定id的服装店信息(客户端提供服装店所有信息)
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
PATCH /street/clothes-shops/Id?streetId=1 更新街道1指定id的服装店信息(客户端提供服装店部分信息)
DELETE(DELETE):从服务器删除资源。
DELETE /street/clothes-shops/Id?streetId=1 删除街道1指定id的服装店信息
接口返回规范
接口返回使用自定义的Response类;如
返回码status规范
接口成功返回200时或者302跳转时status返回success,否则返回faild,用于前端判断提示信息的显示
返回code、message规范
接口调用正常code返回200,message返回成功;接口需要重定向code返回302,message返回重定向;接口异常时code和message的返回:API 可能抛出两类异常:业务异常和非业务异常。业务异常由自己的业务代码抛出,表示一个用例的前置条件不满足、业务规则冲突等,比如参数校验不通过、权限校验失败。非业务类异常表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。
业务类异常通常自定义code和message,code尽量使用http规范里的错误码表示,message返回的信息尽量表明业务类异常的原因,http常用异常请点击:http规范常用异常表示;
常用的http状态码及使用场景:
状态码
使用场景
400 bad request
常用在参数校验
401 unauthorized
未经验证的用户,常见于未登录。如果经过验证后依然没权限,应该 403(即 authentication 和 authorization 的区别)
403 forbidden
无权限
404 not found
资源不存在
500 internal server error
非业务类异常
503 service unavaliable
由容器抛出,自己的代码不要抛这个异常
code返回500表示非业务类异常,mesage统一返回“服务器端错误,请稍后再试”。
返回result规范
针对不同的http method请求操作的result的返回:http method请求类型
result返回
GET
单个对象、集合
POST
新增成功的对象
PUT/PATCH
更新成功的对象
DELETE
空
单个对象使用json格式,集合使用json数组格式;Json格式的规范:
时间用时间戳或是“yyyy-MM-dd HH:mm:ss”这种格式;Boolean类型,JSON数据传输中一律使用1/0来标示,1为是/True,0为否/False;返回的对象里面如果某个字段没有值的话也要用null来表示,而不能对象里没有该字段;返回的集合如果没有值用空数组表示;Json数据尽量简单轻量,尽量避免多级json;分页的情况返回的result需要分页的表示如下:
result:{
"paging":{"limit":10,"page":0,"total":729},
"data":[{},{},{}...]
}