RESTful API 是一种基于 REST(Representational State Transfer)架构风格的 Web 服务设计规范。它并不是一个标准,而是一个设计理念,旨在通过简洁、易于理解的方式设计 Web 服务接口。
RESTful API 设计遵循以下几个核心原则:
-
无状态性 (Stateless) :
- 每个请求都必须包含足够的信息,以便服务端理解和处理该请求。每个请求都独立,服务器不会存储客户端的状态。
- 例如,服务器不存储上次客户端请求的信息,客户端必须在每个请求中提供所需的所有信息(如认证凭证)。
-
客户端-服务器 (Client-Server) :
- 客户端和服务器应该解耦,客户端只关心如何展示数据,服务器则负责存储数据和业务逻辑处理。
- 客户端不需要知道服务器内部的实现细节,服务器也不需要知道客户端的具体展示方式。
-
统一接口 (Uniform Interface) :
-
RESTful API 定义了统一的接口,通过 HTTP 协议的标准方法(如 GET、POST、PUT、DELETE 等)来进行操作。
-
URI(Uniform Resource Identifier)是 RESTful API 中的核心,通过 URL 进行资源的标识和访问。
-
常见的 RESTful 方法:
- GET:读取数据(例如获取某个资源或数据列表)
- POST:创建数据(例如提交表单或新增资源)
- PUT:更新数据(例如更新资源)
- DELETE:删除数据(例如删除资源)
所有的操作都通过操作资源的 HTTP 方法来进行。每个方法对应了对资源的不同操作 例如:
- GET /books:请求所有书籍的列表(检索资源)。
- GET /books/123:请求书籍 ID 为 123 的资源(检索单一资源)。
- POST /books:提交新的书籍信息来创建书籍(创建资源)。
- PUT /books/123:更新 ID 为 123 的书籍信息(更新资源)。
- DELETE /books/123:删除 ID 为 123 的书籍(删除资源)
-
-
资源导向 (Resources) :
- 在 REST 中,所有的对象(或数据)被视为“资源”,通过唯一的 URL 来标识。
- 每个资源通过 HTTP 方法进行操作。通常,资源是指数据模型或实体(如用户、商品、订单等),它们可以通过 URL 进行访问。
- 例如,
https://api.example.com/users可能表示用户列表,https://api.example.com/users/1可能表示用户 ID 为 1 的资源。
-
表现层(Representation) :
- 客户端与服务器之间传递的是资源的表现(即资源的不同视图),而不是资源本身。
- 资源可以有多种表现形式,如 JSON、XML、HTML 等,最常见的是 JSON 格式。
-
可缓存性 (Cacheable) :
- 由于 REST 是基于 HTTP 协议的,HTTP 本身提供了缓存机制(如缓存头信息)。通过合理利用缓存,可以提高 API 性能和响应速度。
- 对于可以缓存的响应,客户端可以缓存结果,减少与服务器的交互。
-
分层系统 (Layered System) :
- RESTful 系统可以通过多个层次来实现,比如客户端与服务器之间可以通过中间层(如负载均衡、代理服务器)进行交互,透明地提供扩展性。
- 客户端不必直接与数据库或数据存储交互,而是通过中间层来完成操作。
RESTful API 的设计规范
-
资源 URI 设计
-
URI 应该直观地反映资源的结构,遵循名词复数形式,通常使用
/分隔资源。 -
例如:
/users:表示用户列表。/users/{id}:表示单个用户资源,其中{id}是用户的唯一标识符。/posts/{postId}/comments:表示某个帖子下的评论资源。
-
-
HTTP 方法的使用
-
使用标准的 HTTP 方法来执行对资源的操作:
- GET /users:获取所有用户信息。
- POST /users:创建新的用户。
- GET /users/{id} :获取某个特定用户的信息。
- PUT /users/{id} :更新某个特定用户的信息。
- DELETE /users/{id} :删除某个特定用户。
-
-
响应状态码
-
返回标准的 HTTP 状态码,以指示请求的成功或失败:
- 200 OK:请求成功(常见于 GET、PUT、DELETE)。
- 201 Created:资源成功创建(常见于 POST 请求)。
- 400 Bad Request:请求无效或格式错误。
- 404 Not Found:请求的资源不存在。
- 500 Internal Server Error:服务器内部错误。
-
-
请求和响应格式
-
请求和响应通常使用 JSON 格式,除非另有要求(如
application/xml)。应确保请求体和响应体有清晰的结构,通常是对象或数组。 -
请求示例(POST 请求创建用户) :
json { "name": "John Doe", "email": "john@example.com", "age": 30 } -
响应示例(GET 请求获取用户信息) :
json { "id": 1, "name": "John Doe", "email": "john@example.com", "age": 30 }
-