REST(表述性状态转移)
字数 685 2025-11-29 10:13:31

REST(表述性状态转移)

REST是一种基于HTTP协议的软件架构风格,用于构建分布式系统和Web服务。其核心思想是将网络上的所有事物抽象为资源,通过统一接口进行操作。

  1. 基础概念:资源与标识

    • 资源指网络上的任意实体,如用户数据、图片、服务等
    • 每个资源通过统一资源标识符(URI)唯一标识,例如:
      https://api.example.com/users/123
    • URI应使用名词性结构表示资源,避免在路径中使用动词
  2. 统一接口约束

    • 使用标准HTTP方法对资源进行操作:
      • GET:获取资源表示(安全且幂等)
      • POST:创建新资源(非幂等)
      • PUT:完整更新资源(幂等)
      • PATCH:部分更新资源
      • DELETE:删除资源(幂等)
    • 通过HTTP状态码表示操作结果:
      • 200 OK:成功
      • 201 Created:创建成功
      • 400 Bad Request:客户端错误
      • 404 Not Found:资源不存在
  3. 无状态约束

    • 每个请求必须包含处理所需的所有信息
    • 服务器不保存客户端会话状态
    • 示例对比:
      // 违反无状态:依赖服务器保存的会话
      GET /cart HTTP/1.1
      Cookie: sessionid=abc123
      
      // 符合无状态:显式传递所有参数
      GET /users/123/cart HTTP/1.1
      Authorization: Bearer xyz789
      
  4. 表述分离

    • 资源与其表现形式分离
    • 通过Content Negotiation机制支持多种格式:
      GET /users/1 HTTP/1.1
      Accept: application/json
      
      GET /users/1 HTTP/1.1
      Accept: application/xml
      
  5. 超媒体驱动(HATEOAS)

    • 响应中包含后续操作的链接
    • 示例JSON响应:
      {
        "user": {
          "id": 123,
          "name": "张三",
          "_links": {
            "self": { "href": "/users/123" },
            "orders": { "href": "/users/123/orders" }
          }
        }
      }
      
  6. 缓存约束

    • 响应应明确标识是否可缓存
    • 使用HTTP缓存头控制缓存行为:
      HTTP/1.1 200 OK
      Cache-Control: max-age=3600
      ETag: "a1b2c3"
      
  7. 分层系统

    • 支持通过代理、网关等中间组件构建分层架构
    • 客户端无需了解是否直接连接最终服务器
  8. 实践示例

    • 完整的RESTful API调用流程:
      # 创建用户
      POST /users HTTP/1.1
      Content-Type: application/json
      {"name": "李四"}
      
      # 响应
      HTTP/1.1 201 Created
      Location: /users/124
      

REST架构通过这些约束实现了系统的可伸缩性、简单性和可靠性,成为现代Web API设计的主流标准。

REST(表述性状态转移) REST是一种基于HTTP协议的软件架构风格,用于构建分布式系统和Web服务。其核心思想是将网络上的所有事物抽象为资源,通过统一接口进行操作。 基础概念:资源与标识 资源指网络上的任意实体,如用户数据、图片、服务等 每个资源通过统一资源标识符(URI)唯一标识,例如: https://api.example.com/users/123 URI应使用名词性结构表示资源,避免在路径中使用动词 统一接口约束 使用标准HTTP方法对资源进行操作: GET:获取资源表示(安全且幂等) POST:创建新资源(非幂等) PUT:完整更新资源(幂等) PATCH:部分更新资源 DELETE:删除资源(幂等) 通过HTTP状态码表示操作结果: 200 OK:成功 201 Created:创建成功 400 Bad Request:客户端错误 404 Not Found:资源不存在 无状态约束 每个请求必须包含处理所需的所有信息 服务器不保存客户端会话状态 示例对比: 表述分离 资源与其表现形式分离 通过Content Negotiation机制支持多种格式: 超媒体驱动(HATEOAS) 响应中包含后续操作的链接 示例JSON响应: 缓存约束 响应应明确标识是否可缓存 使用HTTP缓存头控制缓存行为: 分层系统 支持通过代理、网关等中间组件构建分层架构 客户端无需了解是否直接连接最终服务器 实践示例 完整的RESTful API调用流程: REST架构通过这些约束实现了系统的可伸缩性、简单性和可靠性,成为现代Web API设计的主流标准。