介绍Schema和API

August 21, 2026 in 编程与软件开发 2 minutes

详细介绍Schema和API的基础知识

REST API 规范是一种“设计风格”,Schema 是“数据结构定义”,而 OpenAPI 规范 则是“API 的文档与契约标准”。


REST:接口的设计原则

  • 是什么:它不是具体的代码或文档格式,而是一种网络应用程序的架构风格和设计哲学。
  • 核心思想:将一切事物看作“资源”(Resource),通过标准的 HTTP 方法(GET, POST, PUT, DELETE)对资源进行操作,并使用 URI(统一资源标识符)来定位资源。
  • 作用:指导开发者如何设计 URL、如何规划接口、如何利用 HTTP 协议本身的特性(如缓存、状态码)。
  • 比喻:它就像是**“建筑设计的风格指南”**(比如:现代极简风、中式古典风),规定了房子应该长什么样、怎么布局,但不提供具体的施工图纸。

例子:订单系统的 RESTful 设计体现

REST 原则 在订单系统中的具体实践 反例(非REST)
资源导向 /orders 表示订单集合,/orders/{id} 表示单个订单 /getOrder?id=123
HTTP 动词语义化 POST /orders 创建,GET /orders/{id} 查询,PUT /orders/{id} 更新 全部用 POST /api/action
无状态 每次请求携带 Token,服务端不保存会话状态 依赖服务端 Session
统一响应格式 成功返回 200/201 + JSON,失败返回 4xx/5xx + 错误体 混用 HTML/XML/自定义格式

作用:让 API 具备可预测性、可扩展性和良好的缓存能力,降低前后端耦合度。


Schema:数据结构与校验

  • 是什么:它是数据的蓝图或结构定义,用来描述数据的格式、类型、约束和关系。
  • 核心思想:规定一个数据对象“必须包含哪些字段”、“字段是什么类型”、“哪些是必填的”。常见的格式有 JSON Schema、XML Schema、数据库表结构等。
  • 作用:用于数据验证(Validation)、序列化/反序列化,以及作为 API 文档中“请求体/响应体”的数据字典。
  • 比喻:它就像是**“砖块和钢筋的规格标准”**,规定了建造房子所用的材料必须符合什么尺寸和材质要求。

例子:定义一个“订单”的数据结构(使用 JSON Schema 标准)

{
  "type": "object",
  "required": ["orderId", "userId", "amount"],
  "properties": {
    "orderId": {
      "type": "string",
      "description": "订单唯一标识符"
    },
    "userId": {
      "type": "integer",
      "description": "下单用户ID"
    },
    "amount": {
      "type": "number",
      "minimum": 0.01,
      "description": "订单金额(元)"
    },
    "status": {
      "type": "string",
      "enum": ["pending", "paid", "shipped", "completed"],
      "description": "订单状态"
    }
  }
}

作用:无论是前端传参、后端存储还是接口返回,所有涉及“订单”的地方都以此为准,确保数据一致性。


OpenAPI:接口契约与文档

  • 是什么:它是一个与语言无关的机器可读格式(基于 YAML 或 JSON),用来完整地描述一个 RESTful API。
  • 核心思想:将 API 的所有信息(路径、方法、参数、认证方式、响应状态码等)写在一个统一的文件(如 openapi.yaml)中。
  • 作用:
    • 生成文档:自动生成漂亮的交互式 API 文档(如 Swagger UI)。
    • 生成代码:自动生成客户端 SDK 或服务端骨架代码。
    • 自动化测试:直接基于规范文件生成测试用例。
  • 比喻:它就像是**“完整的建筑施工图纸”**,包含了房屋的外观、内部布局、水电走向以及所有材料的清单。

例子:描述“创建订单”接口的 OpenAPI 片段(YAML 格式)

openapi: 3.0.0
info:
  title: 电商订单API
  version: 1.0.0
paths:
  /orders:
    post:
      summary: 创建新订单
      operationId: createOrder
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreateRequest' # 引用Schema
      responses:
        '201':
          description: 订单创建成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order' # 引用上面的订单Schema
        '400':
          description: 请求参数错误
components:
  schemas:
    OrderCreateRequest:
      type: object
      required: [userId, amount]
      properties:
        userId: { type: integer }
        amount: { type: number, minimum: 0.01 }
    Order:
      # 即上面第1点中的JSON Schema内容
      ...

作用:前端看这份文档就知道怎么调接口;Swagger UI 可自动生成交互式测试页面;代码生成器能直接产出 SDK 和服务端骨架。


三者的区别与协作流程

维度 REST API 规范 Schema OpenAPI 规范
本质 架构风格/设计原则 数据结构定义 API 描述规范/契约
关注点 资源如何组织、HTTP 方法如何使用 数据长什么样、字段类型和校验 整个 API 的端点、参数、响应及文档化
表现形式 一种思想,无固定格式 JSON Schema, XML Schema, Protobuf 等 OpenAPI Specification (YAML/JSON)
主要受众 架构师、后端开发者 开发者、数据工程师 前端、测试、第三方集成者、开发者工具
  • REST 是设计哲学:告诉你“应该怎样组织接口”;
  • OpenAPI 是契约文档:把 REST 设计写成机器可读的规范,并引用 Schema;
  • Schema 是数据基石:被 OpenAPI 引用,精确定义每个资源的结构。

简单说:你用 REST 思想设计接口 → 用 OpenAPI 写成规范文档 → 文档中用 Schema 定义数据模型。