
RESTful 规范的 HTTP 接口是一种基于 REST(Representational State Transfer)架构风格设计的 API,它利用 HTTP 协议的各种特性(如方法、状态码、URL 结构等)来实现资源的统一接口访问。RESTful 接口的核心是将系统中的所有事物抽象为资源,并通过标准化的 HTTP 方法对这些资源进行操作。
RESTful API 是遵循 REST 架构风格的 HTTP 接口
资源导向
所有内容都被抽象为资源(如用户、订单、文章),通过 URL 标识(如 /users/123)。
统一接口
使用标准的 HTTP 方法操作资源:
GET:获取资源POST:创建资源PUT:更新资源(全量)PATCH:更新资源(部分)DELETE:删除资源无状态
每个请求都是独立的,服务器不存储客户端的会话状态。
分层系统
客户端无需关心数据存储或处理的具体层级(如数据库、缓存等)。
幂等性设计
GET、PUT、DELETE操作应具备幂等性(多次请求结果相同)。
假设我们有一个博客系统,其 RESTful 接口可能设计为:
| 操作 | URL | HTTP 方法 | 说明 |
|---|---|---|---|
| 获取所有文章 | /api/articles |
GET |
返回文章列表 |
| 获取单篇文章 | /api/articles/123 |
GET |
返回 ID 为 123 的文章 |
| 创建新文章 | /api/articles |
POST |
创建一篇新文章 |
| 更新文章内容 | /api/articles/123 |
PUT/PATCH |
更新 ID 为 123 的文章 |
| 删除文章 | /api/articles/123 |
DELETE |
删除 ID 为 123 的文章 |
| 获取文章评论 | /api/articles/123/comments |
GET |
返回文章 123 的评论列表 |
ETag、Cache-Control)可提高性能。非 RESTful 接口可能这样设计:
GET /api/getAllUsers(获取用户)
POST /api/deleteUser?id=123(删除用户)
这种设计依赖自定义方法名,不符合 HTTP 语义。
RESTful 则统一使用标准 HTTP 方法:
GET /api/users(获取用户)
DELETE /api/users/123(删除用户)
/api/getUserInfo ,应改为 GET /api/users/{id}。 200 OK表示所有请求结果,应使用更具体的状态码(如 404 Not Found、400 Bad Request)。/api/users/123/orders/456/products ,可简化为/api/products/456 。/api/users?page=1&limit=10 )。/v1/api/...)。非 RESTful(动词导向):
plaintext
POST /api/addUser
POST /api/modifyUserInfo
POST /api/deleteUser
GET /api/fetchUserList
RESTful(资源导向):
plaintext
POST /api/users # 创建用户
PUT /api/users/123 # 更新用户
DELETE /api/users/123 # 删除用户
GET /api/users # 获取用户列表
RESTful 强制使用 HTTP 状态码表示操作结果:
200 OK:请求成功201 Created:资源创建成功400 Bad Request:参数错误401 Unauthorized:未授权404 Not Found:资源不存在409 Conflict:资源冲突(如重复创建)非 RESTful 接口可能全部返回200,然后在响应体中自定义错误码,增加理解成本。
RESTful 要求每个请求包含所有必要信息,服务器不存储会话状态:
GET请求可被浏览器缓存)。RESTful 接口基于标准 HTTP 方法,任何语言或框架都能轻松实现:
假设需要扩展 “用户订单” 功能:
非 RESTful:可能需要新增GET /api/fetchUserOrders
RESTful:直接复用已有接口模式:
plaintext
GET /api/users/123/orders # 获取用户 123 的订单
POST /api/users/123/orders # 创建新订单
虽然乍一看 “动词 + 操作” 更直观,但现实世界更倾向于 “资源 + 动作” 的模式:
addUser, addAdmin, addGuest),而 REST 只需关注资源本身( POST /users)。RESTful 规范的核心价值在于:通过标准化降低沟通成本,通过约束提升系统质量。它让 API 设计从 “个性化定制” 转变为 “遵循通用模式”,就像交通规则一样,虽然初期需要适应,但最终会带来更高的效率和更少的混乱。
如果你的项目有以下特点,强烈建议采用 RESTful: