RESTful API 中的状态码详解

阅读时长 6 分钟读完

RESTful API 是一种基于 HTTP 协议的 API 设计风格,它通过 HTTP 请求的方式提供数据服务,而状态码是 RESTful API 的一个重要组成部分。状态码不仅是服务器与客户端之间通信的一种标识,还是一种包含具体信息的协议元素,有助于加快问题定位和解决。

本文将详细讲解 RESTful API 中的状态码,包括它们的含义、分类、与 HTTP 协议的关系以及常见的使用情形,以帮助前端开发者更有效地理解和使用 RESTful API,提高开发效率。

状态码的含义和分类

状态码是服务器返回给客户端的一个数字值,用于指示请求的状态。状态码由 3 位数字组成,第一位数字表示状态码的类型,后两位数字表示具体的状态。

根据 HTTP 协议,状态码可以分为五类:

  • 1xx(信息性状态码):服务器接收请求,需要客户端继续操作。
  • 2xx(成功状态码):请求成功,服务器已经成功地接收、理解和处理请求。
  • 3xx(重定向状态码):需要完成进一步的操作以完成请求。
  • 4xx(客户端错误状态码):请求包含错误语法或无法完成请求。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生错误。

下面将分别介绍这些状态码的具体含义和用途。

1xx(信息性状态码)

1xx 状态码用于表示服务器已经接收请求,但需要客户端进一步操作才能完成请求。常见的 1xx 状态码如下:

  • 100(Continue):表示客户端可以继续发送请求体。
  • 101(Switching Protocols):表示服务器正在切换协议,通常是将 HTTP 协议切换为 WebSocket 协议。

2xx(成功状态码)

2xx 状态码表示服务器成功接收、理解并处理了请求。常见的 2xx 状态码如下:

  • 200(OK):表示请求已经成功处理,并返回对应资源的内容。
  • 201(Created):表示请求已经成功处理,并且在服务器上创建了新的资源。
  • 204(No Content):表示请求已经成功处理,但没有返回任何响应体的内容。

3xx(重定向状态码)

3xx 状态码表示需要进一步操作才能完成请求。常见的 3xx 状态码如下:

  • 301(Moved Permanently):表示所请求的资源已被永久移动到新的 URI,客户端应该使用新的 URI 重新发送请求。
  • 302(Found):表示所请求的资源已被暂时移动到新的 URI,客户端应该使用新的 URI 重新发送请求。
  • 304(Not Modified):表示客户端请求的资源没有被修改,可以从本地缓存中获取。
  • 307(Temporary Redirect):与 302 类似,但是客户端不应该把请求方法改变为 GET。

4xx(客户端错误状态码)

4xx 状态码表示客户端发送的请求有错误或者不被服务器所接受。常见的 4xx 状态码如下:

  • 400(Bad Request):请求参数有误或者请求体格式不正确。
  • 401(Unauthorized):表示客户端需要认证才能获取所请求的资源。
  • 403(Forbidden):表示客户端没有权限访问所请求的资源。
  • 404(Not Found):表示请求所访问的资源不存在。

5xx(服务器错误状态码)

5xx 状态码表示服务器在处理请求的过程中出现了错误。常见的 5xx 状态码如下:

  • 500(Internal Server Error):表示服务器内部发生了错误,无法处理客户端的请求。

RESTful API 中状态码的使用

前面已经介绍了 RESTful API 中常见的状态码含义和分类,下面将讲述这些状态码在实际开发中的应用场景和使用方法。

200(OK)

200 状态码表示请求成功完成,并返回对应资源的内容,是最常用的状态码之一。当客户端发出 GET 请求时,服务器正常返回请求的数据时应该返回该状态码。

201(Created)

201 状态码表示请求已成功处理,并在服务器上创建了新的资源。一般情况下,该状态码返回一个新创建的资源的 URI,并通过 Location 头部字段返回。

示例代码如下:

204(No Content)

204 状态码表示请求已经成功处理,但没有返回任何响应体的内容。一般用于客户端要求服务器执行某些操作,但是不需要返回数据的场景。

示例代码如下:

400(Bad Request)

400 状态码表示客户端请求的数据有误,或者请求体格式不符合要求。通常返回一个错误描述,用于指导客户端针对错误进行修复。开发者可以在开发时加入一定的数据验证和格式化处理,来避免出现 400 错误。

示例代码如下:

401(Unauthorized)

401 状态码表示客户端需要认证才能获取所请求的资源。服务器往往在返回该状态码时,会提示客户端进行认证或者提供有效的凭证。常用于需要特定权限或者访问令牌的 API 接口。

示例代码如下:

403(Forbidden)

403 状态码表示客户端没有权限访问所请求的资源。通常情况下,服务器不能提供更具体的错误信息,因为这将使得攻击者更容易猜测如何攻击服务器。可以通过设置特定的 HTTP 头部信息来限制某些接口的访问权限。

示例代码如下:

404(Not Found)

404 状态码表示客户端请求的资源不存在。服务器往往在返回该状态码时,会提示客户端需要请求的资源不存在。可以通过设置正则表达式和路由过滤信息来确保客户端请求资源的准确性和查找效率。

示例代码如下:

500(Internal Server Error)

500 状态码表示服务器内部发生了错误,无法处理客户端的请求。通常情况下,服务器端需要记录该错误的相关信息,并向客户端返回 Error 对象以供客户端定位该问题。

示例代码如下:

总结

本文详细讲解了 RESTful API 中状态码的含义、分类、应用场景和使用方法。开发者可以根据实际情况选择合适的状态码,并通过 HTTP 协议传递相关信息,以便客户端更加有效地使用 API 接口和进行调试。同时,通过对状态码的深入了解,也可以提高前端开发者的技术水平和开发效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a51bca48841e989418e642

纠错
反馈