Skip to content

RESTful API 介绍 ​

🧩 一、REST 概念简介 ​

REST(Representational State Transfer) 是一种 软件架构风格,由 Roy Fielding 在 2000 年的博士论文中提出。 它并不是一种协议或标准,而是一组设计原则,用于构建 可扩展、易维护、结构清晰 的 Web API。

基于 REST 设计原则开发的 API,我们称之为 RESTful API。

🌍 二、REST 的核心思想 ​

“一切皆资源(Everything is a Resource)”

在 REST 中,服务器上所有可以被操作的对象都被视为资源,每个资源由一个 唯一的 URI(统一资源标识符)表示。

例如:

资源URI 示例
所有用户/users
某个用户/users/123
某个用户的文章/users/123/posts

🚦 三、HTTP 方法与操作对应关系 ​

RESTful API 使用 HTTP 的标准动词来描述对资源的操作:

HTTP 方法语义常用场景
GET获取资源获取单个或多个对象
POST创建资源新增一条数据
PUT更新资源(整体替换)覆盖式更新
PATCH更新资源(部分更新)修改部分字段
DELETE删除资源删除对象

📘 示例:

GET     /users           → 获取所有用户
GET     /users/123       → 获取ID为123的用户
POST    /users           → 创建新用户
PUT     /users/123       → 更新ID为123的用户(全量)
PATCH   /users/123       → 更新ID为123的用户(部分)
DELETE  /users/123       → 删除ID为123的用户

🧱 四、RESTful API 设计规范 ​

1. 资源路径命名规则 ​

  • 使用名词而不是动词 ✅ /users ❌ /getUsers
  • 使用复数形式表示集合 ✅ /books ❌ /book
  • 使用层级结构表示资源关系 ✅ /users/123/posts/456/comments

2. 请求与响应格式 ​

建议使用 JSON 作为主要格式:

json
{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com"
}

响应头中应指定:

Content-Type: application/json

3. 状态码规范化 ​

状态码含义示例
200 OK请求成功成功返回数据
201 Created创建成功POST 新建资源成功
204 No Content删除或更新成功,无返回体DELETE 成功
400 Bad Request请求参数错误缺少必填字段
401 Unauthorized未认证需要登录
403 Forbidden无权限拒绝访问
404 Not Found资源不存在ID 不存在
500 Internal Server Error服务器错误后端异常

4. 过滤、排序与分页 ​

使用 查询参数 处理:

GET /users?role=admin&status=active
GET /posts?sort=-created_at&page=2&limit=10

5. 超媒体(HATEOAS) ​

响应中包含可操作的链接,让客户端根据链接继续访问资源:

json
{
  "id": 1,
  "name": "Alice",
  "links": [
    {"rel": "self", "href": "/users/1"},
    {"rel": "posts", "href": "/users/1/posts"}
  ]
}

⚙️ 六、一个完整示例(以用户系统为例) ​

请求:

POST /users
Content-Type: application/json

{
  "name": "Alice",
  "email": "alice@example.com"
}

响应:

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

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com"
}

🔒 七、安全与认证 ​

RESTful API 常使用以下认证方式:

  • Token 认证(JWT)
  • OAuth 2.0
  • API Key
  • HTTPS 加密传输

示例:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...

🧭 八、RESTful 与传统接口的区别 ​

对比项RESTful API传统接口
URL 风格以资源为中心以动作为中心
方法使用标准 HTTP 动词一般只用 POST
状态码有语义的响应码通常用200+自定义code
可读性语义清晰接口复杂
维护性高低

🧩 九、延伸:REST 与 GraphQL、gRPC 对比 ​

特性RESTGraphQLgRPC
传输格式JSONJSONProtobuf
调用方式HTTPHTTPHTTP/2
优势简单通用查询灵活高性能、类型安全
缺点请求次数多复杂学习成本高

学而不思则罔,思而不学则殆。