Restful接口定义规则

2020-02-27  本文已影响0人  一根线条

一,HTTP方法及含义

方法名 含义
GET 获取资源
POST 创建资源
PUT 更新资源
DELETE 删除资源。RPC标准文档中规定该方法的请求体在语义上没有意义

二,URL定义规则

路径举例

GET /students/{id}   #ID不能为空的情况
GET /students?sortby=name&order=asc&offset=10&limit=5  #取出所有数据并分页
GET /classes/{calssId}/students  #取出指定班级下的所有学生(可以添加其他条件)
GET /classes/students #参数比较复杂,如:具备某些条件班级下的符合某些条件的学生。查询参数在body中

对于其它的增、删、改也都遵循同样的规则,如:

PUT /students/{id}  #更新单个资源(数据在body中)
POST /students     #新建资源(数据在body中)

三,是否带上版本

例如:

/api/customers/1234
还是
/api/v2.2/customers/1234

对于是否加版本号的问题,大致有两种论述

1,支持者

保持接口的向后兼容是一件十分困难或者说费精力的事情,而在URI中加入版本信息则避免了向后兼容,另外通过过期提示,重定向,文档等手段也能降低用户迁移到新的接口上的成本。

2,反对者

1) 不同API版本支持的资源类型是不一样的,当用户从一个版本切换到另外一个版本时原有的代码很有可能不能正常工作,这无疑加大了用户迁移的成本。

2) Restful服务中的URI对应着相应的资源,用户在请求某个URL时他们期望得到的是某个资源,而版本和资源的概念没有任何关系,因此在URI中加入版本会让用户混淆。(另外版本也不应用来指定资源的表现形式,例如json,xml)

3) 版本的加入会让整个Restful服务变得混乱,除非重写整个服务,否则你就会经常碰到这样的情况:一些低版本的资源指向了一些高版本的资源,如果不修改前者,那么很可能新的客户端代码会出错,如果修改前者,很可能旧的客户端代码会出错。)

版本号添加原则
1,如果接口是开放对外服务的,这样的接口加上版本。
2,如果接口是内部小范围使用且确定可控制,接口更新别人也会跟上,则可考虑不加。
但,总的来说还是建议加上版本号。对于新版本的发布一般是在接口输入输出参数变化时才会有。

四,请求响应结果

建议定义统一的响应结构,如:

public class MResult<T>{
  private Integer code ; //接口执行响应码
  private String msg ;  //响应码对于的消息
  private T data ;  //响应结果[真正的数据]
}

常用的响应码

响应码 含义
200 OK 接口调用正常返回
201 CREATED 资源已被成功创建
204 No Content 资源删除成功
401 Unauthorized 未认证
403 Forbidden 不允许的,服务端正常解析和请求,但调用被回绝(例如参数验证不对)
404 Not Found 操作的资源不存在
500 Internal Server Error 接口执行异常

https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design

上一篇下一篇

猜你喜欢

热点阅读