Title here
Summary here
August 21, 2026 in 编程与软件开发2 minutes
详细介绍Schema和API的基础知识
REST API 规范是一种“设计风格”,Schema 是“数据结构定义”,而 OpenAPI 规范 则是“API 的文档与契约标准”。
例子:订单系统的 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 具备可预测性、可扩展性和良好的缓存能力,降低前后端耦合度。
例子:定义一个“订单”的数据结构(使用 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)中。例子:描述“创建订单”接口的 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 写成规范文档 → 文档中用 Schema 定义数据模型。