本文简单介绍了设计REST API时,返回的响应应该设置什么样的状态码

响应状态码

在涉及REST风格的API时,使用适当和Http响应状态码是很重要的,这样可以提高API消费者(客户端)对API响应信息的理解

状态码分为5大类

  • 1xx:临时响应
  • 2xx:成功
  • 3xx:重定向
  • 4xx:请求错误
  • 5xx:服务器错误

每类的详细

状态码 | HTTP方法 | 响应体内容 | 含义 | Status text
:---------------: | :--------------: | :--------------: | :--------------:
1xx | | | |
2xx | | | |
200 | GET,PUT | 资源 | 操作成功 | OK
201 | POST | 资源,元数据 | 资源创建成功 | Created
202 | POST,PUT,DELETE,PATCH | N/A | 请求已被接受 | Accepted
204 | DELETE,PUT,PATCH | N/A | 操作已经执行成功,但是响应体没有数据返回。多用于多次修改同一个资源时填写表单的情况下 | No Content
205 | POST | N/A | 操作已经执行成功,但是响应体没有数据返回。多用于创建资源时填写表单的情况下。请看下面解释与204的区别 |
3xx | | | |
301 | GET | uri链接 | 资源已被移除(永久重定向) | Moved permamently
302 | GET | uri链接 | 重定向(临时重定向),http/1.0 的产物 | Found
303 | GET | uri链接 | 重定向(临时重定向),同302,http/1.1的产物,浏览器会根据返回的uri,自动请求该uri | See Other
304 | GET | N/A | 资源没有被修改,使用时header必须带上If-Modified_Since或者If-None-Match | Not Modified
307 | GET | uri链接 | 重定向(临时重定向),同302,http/1.1的产物,浏览器会根据返回的uri,自动请求该uri | Temporary Redirect
4xx | | | |
400 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 参数列表错误(缺少,格式不匹配)
401 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 未授权
403 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 访问受限,授权过期
404 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 资源,服务未找到
405 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 不允许的http方法
409 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 资源冲突,或者资源被锁定
415 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 不支持的数据(媒体)类型
429 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 请求过多被限制
5xx | | | |
500 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 服务器内部错误/应用系统内部错误
501 | GET,POST,PUT,DELETE,PATCH | 错误提示(消息) | 接口未实现

附加说明:N/A 代表不适用


接口文档

  • 简单说明
  • 访问地址
  • 请求方式
  • 返回结果
  • 返回结果的字段说明
  • 错误代码
  • 更新记录

状态码的详解

HTTP响应状态码主要分为这几种大类:

  • 1xx:临时响应
  • 2xx:成功
  • 3xx:重定向
  • 4xx:请求错误
  • 5xx:服务器错误

204

请求执行成功,但是响应体没有数据返回,浏览器不用刷新页面也不用跳转页面,所以如果是表单页面,那么表单里填写的数据将不会被清除。另外一点,即使是标签,如果a标签里的链接返回的是204,那么页面也是不会发生跳转。同时返回204也是代表客户端和服务器端的状态(指该资源状态)已经同步

205 (204与205区别)

请求执行成功,但是响应体没有数据返回,浏览器清空表单数据,方便用户再次填写新数据。

304(304与204区别)

注意与204的区别,204情况下是返回空文档,并且该文档会替换上次缓存的文件,因此会有文档/文件没有加载的情况(如没有加载jQuery文件因此提示无$函数等)。而304是使用上次缓存


其他需要注意的地方

这里谈谈REST其他需要注意的地方,注意,以下内容不是标准。

PUT与PATCH区别

我们都知道,更新操作可以通过PUT与PATCH方式提交请求,但是问题来了,PUT和PATCH有什么区别呢?
PUT,正如其词,就是把一大堆数据PUT到服务端,使用PUT更新资源时,需要把资源的所有属性都要提交到服务端。
PATCH,补丁,碎片,可以知道,使用PATCH更新资源时,只需要把资源的部分属性/信息提交到服务端即可。

关于URI设计

  • 从属关系使用嵌套形式,即articles/1/comments,articles/1/comments/2
  • 筛选使用查询键值对的形式,即?key=value,articles?title=first_api

关于各种框架对REST的支持与实现

本节内容打算放到另一篇文章讲
未完待续…

整理自
整理自
整理自
整理自