在当今的互联网世界中,不同系统之间的数据交互和通信是构建现代应用的核心需求。无论是移动应用、Web 平台,还是微服务架构,RESTful API 都扮演着桥梁的角色。它以其简洁性、灵活性和可扩展性,成为开发者构建分布式系统的首选方案。本文将从基础概念到实际应用,一步步拆解 RESTful API 的设计与实现,助你掌握这一关键技术。
REST(Representational State Transfer) 是一种架构风格,由 Roy Fielding 在 2000 年提出。其核心思想是通过统一的接口(如 HTTP 协议)操作资源,以 资源为中心 设计 API。RESTful API 是遵循 REST 原则的 API,具有以下特点:
/users/123
。GET
、POST
、PUT
、DELETE
等动词操作资源。Accept
头指定。/getUser?id=123
→ 正确示例:/users/123
/users/123/orders
表示用户 123 的所有订单。/api/v1/users
。方法 | 语义 | 幂等性 | 示例 |
---|---|---|---|
GET | 获取资源 | 是 | GET /users |
POST | 创建资源 | 否 | POST /users |
PUT | 替换整个资源 | 是 | PUT /users/123 |
PATCH | 部分更新资源 | 否 | PATCH /users/123 |
DELETE | 删除资源 | 是 | DELETE /users/123 |
2xx 成功:200 OK
(通用成功)、201 Created
(资源已创建)。
4xx 客户端错误:400 Bad Request
(请求无效)、404 Not Found
(资源不存在)。
5xx 服务端错误:500 Internal Server Error
(服务器内部错误)。
响应体标准化:统一返回 JSON 格式,包含数据、状态码和错误信息:
{
"status": 200,
"data": { "id": 123, "name": "Alice" },
"error": null
}
/users
)、文章(/articles
)、评论(/comments
)。GET /users/{id}/articles
POST /articles
PATCH /articles/{id}
DELETE /comments/{id}
const express = require('express');
const app = express();
app.use(express.json());
// 获取所有用户
app.get('/api/v1/users', (req, res) => {
const users = db.getUsers(); // 从数据库查询
res.status(200).json({ status: 200, data: users });
});
// 创建新用户
app.post('/api/v1/users', (req, res) => {
const newUser = req.body;
db.createUser(newUser);
res.status(201).json({ status: 201, data: newUser });
});
// 获取用户数据
fetch('https://api.example.com/users/123')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
// 提交新文章
fetch('https://api.example.com/articles', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ title: 'Hello REST', content: '...' })
});
Authorization: Bearer <token>
)。GET /articles?page=2&limit=10&sort=-createdAt&filter[category]=tech
page
:页码limit
:每页数量sort
:排序(-
表示降序)filter
:过滤条件在响应中嵌入相关操作的链接,客户端通过链接发现 API 功能:
{
"id": 123,
"name": "Alice",
"_links": {
"self": { "href": "/users/123" },
"articles": { "href": "/users/123/articles" }
}
}
/getUserArticlesByCategory?userId=123&category=tech
改进:/users/123/articles?category=tech
/api/v1/users
Accept: application/vnd.example.v1+json
gzip
压缩响应体。N+1
问题。RESTful API 的简洁性和通用性使其成为现代应用开发的基石。通过遵循资源化设计、合理使用 HTTP 语义和状态码,开发者可以构建出高效、易维护的接口。然而,技术选型需结合实际场景:对需要灵活查询的场景,GraphQL 可能是更好的选择;对高并发微服务,gRPC 则更具优势。掌握 RESTful API 的设计精髓,将助你在复杂系统中游刃有余。