RESTful API 三大基石:资源、表示、无状态 —— 概念梳理 + 实战示例一次掌握

作者:API传播员 · 2025-11-09 · 阅读时间:7分钟

APIs 已成为现代网络的重要组成部分,为客户端通过互联网访问和操作资源提供了一种简单而一致的方式。无论是在构建 Web 应用程序、移动应用程序还是 微服务,掌握设计和实现高效 API 的能力,都是每位开发者的重要技能。

本文将深入探讨 RESTful API 的核心概念,包括资源、表示(Representation)和无状态性。这些概念构成了 REST 架构风格的基础,而 REST 是一种被广泛采用的架构模式,用于构建可扩展且可靠的 API。通过理解这些核心要素,您将能够更好地设计和实现满足用户需求的 API。

💡 想让指标可衡量、团队节奏更透明?「开发任务管理系统 KPI」提示词可帮你基于 AI 超级提示词,快速制定与业务成果对齐的 KPI,兼顾用户参与度与业务成果!


一、什么是 REST 中的资源?📦

在 REST 中,资源是表示特定数据项(如用户、产品或订单)的基本构建块。每个资源都通过 URI(统一资源标识符)唯一标识,URI 是访问和操作资源的唯一地址。

RESTful API 将资源视为独立的实体,可以通过 HTTP 方法(如 GET、POST、PUT 和 DELETE)进行访问和操作。例如,一个用户资源可能对应 URI /users/123,其中 123 是该用户的唯一标识符。

🛠️ 写完 URI 设计别忘了跑「代码优化」提示词,一键诊断慢查询与重复请求,让接口响应提速 30 %!

关键点

  • 资源不限于数据库数据,也可以是图像、视频或其他服务
  • 资源应是自包含的,可通过 RESTful API 直接操作

二、如何通过 URI 操作资源?🔧

客户端使用不同 HTTP 方法对资源进行操作:

方法 语义 示例
GET 检索资源 GET /users/123
POST 创建新资源 POST /users
PUT 更新现有资源 PUT /users/123
DELETE 删除资源 DELETE /users/123

三、资源在 REST API 设计中的重要性 ✨

  1. 可重复使用性:资源可在多个端点复用,提升 API 效率
  2. 灵活性:易于扩展以支持新功能,无需破坏现有客户端
  3. 直观性:URI 即语义,降低学习成本

四、什么是 REST 中的表示(Representation)?🎨

表示是对资源进行编码以便在互联网上传输的方式。通常包括:

  • 资源数据(如用户属性)
  • 元数据(如格式信息)

支持格式:JSON、XML、HTML 等
内容协商:客户端通过 Accept 头部指定偏好,服务器通过 Content-Type 返回实际格式

示例

Accept: application/json, application/xml;q=0.9

表示客户端优先 JSON,也可接受 XML(优先级较低)。

📖 想给同事一份秒懂的接口文档?「代码文档生成器」可自动生成标准化字段描述、请求/响应示例与错误码,让协作零阻力!


五、内容协商实战 🔍

客户端请求

GET /users/123
Accept: application/json

服务器响应

HTTP/1.1 200 OK
Content-Type: application/json

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

关键点:表示应自包含,包含理解和操作资源所需的所有信息。


六、什么是 REST 中的无状态性?🚫💾

无状态性指每个请求都必须包含理解和执行该请求所需的所有信息,服务器不存储任何客户端上下文。

优势

  • 可扩展性:服务器无需保存状态,易于水平扩展
  • 可靠性:简化故障恢复,任何节点均可处理请求
  • 可缓存性:无状态请求更容易被缓存,提升性能

七、无状态性如何提升可扩展性和可靠性?⚡

  1. 负载均衡:任何服务器均可处理请求,无需粘性会话
  2. 故障恢复:节点故障时,请求可被其他节点无缝接管
  3. 简化设计:无需状态同步,降低系统复杂度

八、Python 实战:资源、表示、无状态 🔥

from flask import Flask, request, jsonify

app = Flask(__name__)

users = {
    1: {"id": 1, "name": "Alice", "email": "alice@example.com"},
    2: {"id": 2, "name": "Bob", "email": "bob@example.com"}
}

# 资源:/users/<id>
# 表示:JSON(由 Accept 头部协商)
# 无状态:每个请求独立,不依赖服务器会话

@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    # 内容协商:优先返回 JSON
    if 'application/json' not in request.accept_mimetypes:
        return jsonify({"error": "Unsupported media type"}), 415

    user = users.get(user_id)
    if not user:
        return jsonify({"error": "User not found"}), 404

    return jsonify(user)  # 表示:JSON

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()  # 表示:JSON
    new_id = max(users.keys()) + 1
    users[new_id] = {"id": new_id, **data}
    return jsonify(users[new_id]), 201  # 201 Created

if __name__ == '__main__':
    app.run(debug=True)

🔍 上线前最后一步:跑「代码审查助手」,自动捕捉潜在漏洞、性能隐患与风格问题,给出可执行反馈,确保 API 稳如磐石!


九、结语 🎯

REST 三大核心概念的价值:

  • 资源 → 直观组织数据,URI 即语义
  • 表示 → 多格式支持,内容协商灵活
  • 无状态 → 高可扩展、易缓存、故障恢复快

先用「代码生成」快速产出 SDK 与重试逻辑,再用 KPI 面板持续监控资源响应时间、内容协商成功率与无状态请求占比,你的 API 将更快、更稳地迎接高并发挑战!🚀

原文链接: https://www.lonti.com/blog/the-key-ingredients-of-restful-apis-resources-representations-and-statelessness