RESTful 语法规范详解

在我们编写接口时,有一种语法风格规范,RESTful风格语法是http作者提出的一种。

RESTful 是一种基于 REST(Representational State Transfer)架构的 API 设计规范,广泛用于 Web 服务的设计和实现。它依赖于标准的 HTTP 协议,并使用资源的表述来提供服务。

RESTful的资源表现形式是XML或者JSON

1. 核心原则

2. URI 设计规范

示例:

3. HTTP 方法与状态码

RESTful API 使用标准的 HTTP 方法和状态码来表示请求的结果。

4. 请求与响应格式

通常,RESTful API 使用 JSON 格式进行数据交换,因为它易于解析和人类可读。

请求示例:

创建新用户的 POST 请求:

POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "name": "John Doe",
  "email": "[email protected]",
  "password": "securepassword"
}

响应示例:

HTTP/1.1 201 Created
Location: /users/123
Content-Type: application/json

{
  "id": 123,
  "name": "John Doe",
  "email": "[email protected]"
}

5. 分页与过滤

RESTful API 应该支持分页和过滤,以避免一次性返回大量数据。

示例:

获取第 2 页,每页 10 个用户:

GET /users?page=2&limit=10

按状态过滤用户:

GET /users?status=active

6. 版本控制

为了保持兼容性和灵活性,RESTful API 通常包含版本信息。

示例:

通过 URL 进行版本控制:

GET /v1/users

通过请求头进行版本控制:

GET /users
Accept: application/vnd.example.v1+json

7. 安全性

8. 示例应用场景

示例 1: 获取所有文章

GET /articles HTTP/1.1
Host: api.example.com

响应:

HTTP/1.1 200 OK
Content-Type: application/json

[
  {
    "id": 1,
    "title": "Introduction to RESTful APIs",
    "author": "Alice"
  },
  {
    "id": 2,
    "title": "Advanced RESTful Design",
    "author": "Bob"
  }
]

示例 2: 创建新文章

POST /articles HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "title": "New API Features",
  "content": "Details about the new features in our API.",
  "author": "Charlie"
}

响应:

HTTP/1.1 201 Created
Location: /articles/3
Content-Type: application/json

{
  "id": 3,
  "title": "New API Features",
  "author": "Charlie"
}

RESTful 语法通过统一的接口和资源表述,使 API 设计更直观、标准化,便于客户端与服务器的交互。

其它补充

http介绍

HTTP(Hypertext Transfer Protocol)本质上是一种半双工协议。这意味着在一次 HTTP 请求-响应周期中,通信是单向的:客户端(通常是浏览器或应用程序)发送请求,服务器接收到请求后处理并返回响应。在这个过程中,通信的方向是先从客户端到服务器,再从服务器到客户端,双方不能同时发送和接收数据。

半双工特性:

HTTP/2 和 HTTP/3 的改进

尽管传统的 HTTP/1.1 是半双工的,HTTP/2 和 HTTP/3 在这方面引入了一些改进,使其具有类似全双工的能力:

全双工特性:

因此,传统的 HTTP 协议是半双工的,而 HTTP/2 和 HTTP/3 通过引入多路复用等技术部分缓解了半双工的限制,但严格来说,HTTP 本身仍然不是完全的全双工协议。

http常用状态码集合

以下是 HTTP 状态码的表格分类:

类别 状态码 名称 描述
1xx 信息响应 100 Continue 客户端应继续发送请求的剩余部分。
101 Switching Protocols 服务器根据客户端请求切换协议。
2xx 成功响应 200 OK 请求成功。
201 Created 请求已成功,并在服务器上创建了新的资源。
202 Accepted 请求已被接受,但尚未处理。
204 No Content 请求成功,但没有返回内容。
3xx 重定向 301 Moved Permanently 资源已被永久移动到新的 URI。
302 Found 资源临时被移动到另一个 URI。
304 Not Modified 资源未被修改,可以使用缓存版本。
4xx 客户端错误 400 Bad Request 服务器无法理解请求的语法。
401 Unauthorized 请求未通过身份验证。
403 Forbidden 服务器拒绝请求。
404 Not Found 资源未找到。
405 Method Not Allowed 请求方法不被允许。
408 Request Timeout 服务器在等待请求时超时。
5xx 服务器错误 500 Internal Server Error 服务器遇到错误,无法完成请求。
501 Not Implemented 服务器不支持请求所需的功能。
502 Bad Gateway 服务器作为网关或代理,从上游服务器收到无效响应。
503 Service Unavailable 服务器当前无法处理请求,通常是暂时的。
504 Gateway Timeout 服务器作为网关或代理,未能及时从上游服务器接收到响应。