RESTful API 设计:最佳实践、架构和真实案例的完整指南(2026)
Source: Dev.to
介绍
现代软件系统在连接 Web 应用、移动应用和后端服务时,极度依赖 API。在众多 API 架构中,RESTful API 仍是构建可扩展后端系统最广泛使用的标准。
如果你使用 Node.js、Python、Java 或任何现代框架来构建后端服务,了解 REST API 设计原则和最佳实践对于创建可维护且可扩展的应用至关重要。
您将学到
- 什么是 RESTful API
- REST 架构原则
- REST API 设计的最佳实践
- 真实案例 API 示例
- HTTP 方法与状态码
- API 版本控制与分页
- 安全性与身份验证
通过本指南,您将了解如何设计像 Stripe、GitHub 和 Shopify 那样的可投入生产的 REST API。
Source: …
RESTful API 基础
RESTful API(表述性状态转移 API)是一种 Web 服务架构,使用标准的 HTTP 协议实现客户端与服务器之间的通信。
- 起源 – 由 Roy Fielding 于 2000 年在其博士论文中提出。
- 核心思想 – 通过 URL 暴露资源,客户端使用 HTTP 方法对资源进行操作。
常用 HTTP 方法
| 方法 | 用途 |
|---|---|
| GET | 检索资源 |
| POST | 创建新资源 |
| PUT | 替换资源 |
| PATCH | 部分更新资源 |
| DELETE | 删除资源 |
示例端点
GET /users
POST /users
GET /users/123
PATCH /users/123
DELETE /users/123
每个端点代表一个 资源;HTTP 方法决定了所执行的操作。
为什么 REST 成为行业标准
- 使用标准的 HTTP 协议 → 易于实现和理解。
- 无状态 架构 → 在多台服务器上实现水平扩展。
- 可被以下对象消费:
- Web 应用程序
- 移动应用
- 微服务
- 物联网设备
可托管 REST API 的语言和运行时
- Node.js
- Java
- Python
- Go
- Ruby
- PHP
架构约束
-
客户端‑服务器分离
- 客户端:UI,用户交互。
- 服务器:业务逻辑,数据库操作,身份验证。
-
无状态性 – 每个请求必须包含处理所需的全部信息。
GET /orders Authorization: Bearer <token> -
面向资源的 URL – 使用名词,而非动词。
错误示例:
/createUser,/updateOrder
正确示例:POST /users,PATCH /orders/:id,DELETE /products/:id
HTTP 状态码
| Code | 含义 |
|---|---|
| 200 | 成功(OK) |
| 201 | 资源已创建 |
| 204 | 无内容 |
| 400 | 错误请求 |
| 401 | 未授权 |
| 403 | 禁止 |
| 404 | 未找到 |
| 500 | 服务器错误 |
示例响应
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"data": {
"id": "123",
"name": "Pulkit Singh"
}
}
设计博客平台 API
帖子 API
| 方法 | 端点 |
|---|---|
| GET | /api/v1/posts |
| GET | /api/v1/posts/:id |
| POST | /api/v1/posts |
| PATCH | /api/v1/posts/:id |
| DELETE | /api/v1/posts/:id |
评论 API
| 方法 | 端点 |
|---|---|
| GET | /api/v1/posts/:postId/comments |
| POST | /api/v1/posts/:postId/comments |
用户 API
| 方法 | 端点 |
|---|---|
| GET | /api/v1/users |
| POST | /api/v1/users |
| GET | /api/v1/users/:id |
查询参数:过滤、排序和分页
- 分页:
GET /products?page=2&limit=20 - 排序:
GET /products?sort=price - 过滤:
GET /products?category=electronics
典型的分页响应
{
"data": [ /* array of items */ ],
"pagination": {
"page": 2,
"limit": 20,
"total": 200
}
}
分页对于大数据集的性能至关重要。
API 版本控制
-
防止破坏现有客户端。
-
推荐的 URL 格式:
/api/v1/users /api/v2/users
好处
- 向后兼容
- 安全的功能升级
- 更易维护
一致的响应结构
-
成功
{ "success": true, "message": "Users fetched successfully", "data": [ /* … */ ] } -
错误
{ "success": false, "error": "User not found" }
安全与身份验证
- 常用方法:
Authorization: Bearer <token>(Google、GitHub 以及许多 SaaS API 使用)。 - 最佳实践
- 验证所有输入
- 实施速率限制
- 强制使用 HTTPS
- 清理请求数据
示例 Express 路由
router.get("/users", getUsers);
router.get("/users/:id", getUser);
router.post("/users", createUser);
router.patch("/users/:id", updateUser);
router.delete("/users/:id", deleteUser);
示例控制器
export const getUsers = async (req, res) => {
const users = await User.find();
res.json({
success: true,
data: users
});
};
检查清单:设计可扩展的 REST API
- ✅ 在 URL 中使用名词
- ✅ 正确使用 HTTP 方法
- ✅ 返回适当的状态码
- ✅ 实现分页
- ✅ 为 API 进行版本管理
- ✅ 保持响应结构一致
- ✅ 使用身份验证保护端点
- ✅ 验证请求负载
- ✅ 使用 Swagger/OpenAPI 编写文档
- ✅ 实施速率限制
常见需避免的陷阱
| 陷阱 | 为何会成为问题 |
|---|---|
| 在端点 URL 中使用动词 | 违反 REST 规范,使 URL 难以阅读 |
| 忽视正确的 HTTP 状态码 | 客户端无法可靠地解释响应 |
| 响应格式不一致 | 增加客户端解析的复杂度 |
| 未提供分页 | 导致性能瓶颈 |
| 缺乏版本控制 | 迫使现有使用者面对破坏性更改 |
| 缺少身份验证/校验 | 导致安全漏洞 |
嵌套资源
解决这些问题可确保您的 API 可维护且可扩展。
RESTful API 仍然是现代 Web 应用的支柱。通过遵循 REST 架构原则、使用正确的 HTTP 方法、实现分页以及保持一致的响应,开发者可以构建高效可扩展的 API,并提供出色的开发者体验。
无论您是在构建初创产品、SaaS 平台,还是微服务架构,掌握 REST API 设计都将显著提升您的后端开发技能。
如果您遵循本指南中描述的实践,您的 API 将保持简洁、可扩展、安全,并且易于全球开发者集成。