REST 的六大设计约束

  1. 客户端-服务器架构

    • 分离职责:客户端与服务器完全解耦,各自独立演化。
    • 优势:提升可扩展性,简化服务器端复杂度,允许客户端灵活更新。
  2. 无状态性

    • 定义:服务器不保存客户端会话状态,每次请求必须包含完整上下文。
    • 实现:通过请求参数、Cookie 或 Token 传递必要信息。
    • 优势:提高可靠性、可伸缩性,避免单点故障。
  3. 缓存

    • 要求:响应必须明确标注是否可缓存(如 Cache-Control 头)。
    • 优势:减少网络流量,提升性能,优化用户体验。
  4. 统一接口

    • 核心要素
      • 资源标识:每个资源通过唯一 URI(如 /products/123)访问。
      • 操作方式:使用标准 HTTP 方法(GET/POST/PUT/PATCH/DELETE)操作资源。
      • 表示交换:通过 JSON/XML 等格式传输资源状态(Representational State Transfer)。
      • 自描述消息:响应包含元数据(如 Content-Type),无需额外文档即可解析。
      • HATEOAS:超文本驱动应用状态,响应中嵌入链接引导下一步操作(如 {"next": "/products?page=2"})。
  5. 分层系统

    • 定义:支持中间层(如代理、缓存服务器),隐藏底层实现细节。
    • 优势:增强可扩展性,简化部署,隔离客户端与服务器直接交互。
  6. 按需代码(可选)

    • 功能:允许服务器动态下载代码到客户端(如 JavaScript 扩展功能)。
    • 场景:适用于需要动态行为调整的场景(如 Web 应用热更新)。

REST 的本质目标

  • 解耦系统组件:通过标准化接口降低依赖,支持独立开发与维护。
  • 高效通信:利用 HTTP 协议特性(如缓存、状态码)优化性能。
  • 可进化性:允许服务端迭代升级,只要保持接口兼容。

关键实践建议

  • 资源设计:以名词命名资源(如 /orders),而非动词(如 /get-orders)。
  • 层级结构:通过 URL 层级体现资源关系(如 /managers/23/orders)。
  • HATEOAS 实现:在响应中提供导航链接,减少客户端硬编码路径依赖。