REST API 规约
【参考】RESTfull架构定义:
(1)每一个URI代表一种资源; (2)客户端和服务器之间,传递这种资源的某种表现层; (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
【推荐】URI 正确设计应不包含动词,因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应放在HTTP协议中。
反例: GET /posts/show/1 正例: POST /accounts/1/transfer/500/to/2 PUT /posts/1 { ....}
【推荐】URI 资源名词应是复数形式,针对增删改查使用正确的HTTP 动作
正例: GET /zoos:列出所有动物园 POST /zoos:新建一个动物园 GET /zoos/${ID}:获取某个指定动物园的信息 PUT /zoos/${id}:更新某个指定动物园的信息(提供该动物园的全部信息) PATCH /zoos/${ID}:更新某个指定动物园的信息(提供该动物园的部分信息) DELETE /zoos/${ID}:删除某个动物园 GET /zoos/${ID}/animals:列出某个指定动物园的所有动物 DELETE /zoos/${ID}/animals/ID:删除某个指定动物园的指定动物
【推荐】过滤信息,如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
正例: ?limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?page=2&per_page=100:指定第几页,以及每页的记录数。 ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?animal_type_id=1:指定筛选条件
【推荐】服务器应向用户返回的状态码和提示信息,2xx 代表成功; 3xx 重定向 ; 4xx 请求错误 ; 5xx 服务端错误
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
【推荐】服务器应采用无状态机制,认证授权应考虑使用JWT、OAUTH2
【推荐】服务器返回的数据格式,应该尽量使用JSON,避免使用XML。