写在最前
本文大量引用归纳《RESTful API 最佳实践》一文,如需深入理解可以参考此文。
概念
REST(Representational State Transfer)全称是表述性状态转移。是目前最流行的 API 设计规范,用于 Web 数据接口的设计。
URI设计原则
1.动词+宾语
动词通常就是五种 HTTP 方法,对应 CRUD 操作。
GET:读取(Read)
POST:新建(Create)
PUT:更新(Update)
PATCH:更新(Update),通常是部分更新
DELETE:删除(Delete)
根据 HTTP 规范,动词一律大写。
2.动词的覆盖
当客户端仅支持Post和Get时,使用Post 模拟其他三种操作,加上X-HTTP-Method-Override属性标志具体属性
3.宾语必须是名词,且最好是复数名词
4.避免多级 URL,以查询代替,如:GET /authors/12/categories/2,需要改成这样的格式GET /authors/12?categories=2
状态码
1.2xx 状态码:200成功,201 Created,202 Accept,204 资源不存在
2.4xx状态码表示客户端错误,主要有下面几种。
400 Bad Request:服务器不理解客户端的请求,未做任何处理。
401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。
403 Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限。
404 Not Found:所请求的资源不存在,或不可用。
405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。
410 Gone:所请求的资源已从这个地址转移,不再可用。
415 Unsupported Media Type:客户端要求的返回格式不支持。比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。
422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。
429 Too Many Requests:客户端的请求次数超过限额
3.5xx状态码表示服务端错误。500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。503 Service Unavailable:服务器无法处理请求,一般用于网站维护状态。
返回数据
1.一般返回Json对象而不是纯文本
2.发生错误时,返回正确的错误状态码,而不是返回200,把错误包装在Json对象中
3.可以返回api的样例,例:集成swaggerUI或者类似http://api.github.com