关于 openapi
openapi 是面向 API 设计与实现的 OpenAPI 3.1 规范指南,适用于 API 开发者。内容涵盖规范结构、JSON Schema、类型生成与常见错误。
主要功能
- 01定义 HTTP API 契约
- 02描述端点、模式与认证
- 03支持 JSON Schema 兼容
- 04指导类型生成与文档编写
- 05列出规范常见错误
适用场景
- 01设计 REST API
- 02生成 TypeScript、Python 或 Go 客户端类型
- 03验证请求与响应负载
- 04开展契约优先 API 开发
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill openapi安装后在 Claude Code 中输入/openapi确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/code-generation.mddata-types.mddocumentation.mdschema-design.md详细介绍
OpenAPI
概览
OpenAPI Specification(OAS)3.1 是描述 HTTP API 的行业标准。它定义了机器可读的契约,涵盖端点、请求/响应架构、身份验证和错误格式。OpenAPI 3.1 是 JSON Schema Draft 2020-12 的严格超集,因此与 JSON Schema 完全兼容,可用于数据验证和类型生成。
适用场景: 设计 REST API、生成类型化客户端(TypeScript、Python、Go)、制作交互式文档、验证请求/响应负载、采用契约优先的 API 开发方式、配置 API 网关。
不适用场景: GraphQL API(使用 GraphQL 架构)、gRPC 服务(使用 Protocol Buffers)、仅使用 WebSocket 的协议、不会跨越网络边界的内部函数调用。
快速参考
| 模式 | 元素 | 要点 |
|---|---|---|
| 文档根节点 | openapi、info、paths | 顶层必须包含 openapi: '3.1.0' |
| 路径项 | /resources/{id} | 路径参数使用花括号 |
| 操作 | get、post、put、delete、patch | 每个操作都需要 operationId 和 responses |
| 参数 | in: path|query|header|cookie | 路径参数始终为 required: true |
| 请求正文 | requestBody.content | 以媒体类型为键(application/json) |
| 响应 | responses.200.content | 每个操作至少需要一个响应 |
| 组件引用 | $ref: '#/components/schemas/Name' | 复用架构、参数和响应 |
| 架构类型 | type: string|number|integer|boolean|array|object | 3.1 中的数组支持 type: ["string", "null"] |
| 组合 | oneOf、anyOf、allOf | 建模多态和交集类型 |
| 判别器 | discriminator.propertyName | 为使用 oneOf/anyOf 的代码生成器提供提示 |
| 安全性 | securitySchemes + 顶层 security | Bearer、API key、OAuth2、OpenID Connect |
| 标签 | 操作上的 tags | 为文档中的操作分组 |
| 类型生成 | openapi-typescript | 从规范生成零运行时开销的 TypeScript 类型 |
| 类型化 fetch | openapi-fetch | 使用生成的类型构建类型安全的 HTTP 客户端 |
| React Query | openapi-react-query | 根据规范生成类型安全的 React Query 钩子 |
| 架构优先 | zod-openapi | 根据 Zod 架构生成 OpenAPI 文档 |
常见错误
| 错误 | 正确做法 |
|---|---|
在 3.1 中使用 nullable: true | 使用 type: ["string", "null"](已移除 3.0 语法) |
操作缺少 operationId | 始终为代码生成设置唯一的 operationId |
路径参数未列入 required | 路径参数始终为必填项(required: true) |
| 到处使用内联架构 | 提取到 components/schemas 并使用 $ref |
allOf 中的 required 字段相互冲突 | 合并 required 数组;allOf 会合并这些数组 |
| 判别器没有共享属性 | oneOf/anyOf 中的所有架构都必须包含判别器属性 |
响应的 description 为空 | 每个响应都需要有意义的 description |
使用 type: object,但没有 properties | 始终定义 properties 或使用 additionalProperties |
循环 $ref 链 | 使用延迟解析打破循环,或重构架构 |
| 混用 3.0 和 3.1 语法 | 选择一个版本;3.1 移除了 nullable,并将 exclusiveMinimum 改为数字 |
委派
- API 设计审查:使用
TaskAgent 检查规范的完整性和一致性 - 类型生成:使用
ExploreAgent 查找项目专用的 OpenAPI 工具配置 - 代码审查:委派给
code-reviewerAgent,检查生成的客户端使用模式
如果可以使用
typescript-patterns技能,请将高级 TypeScript 类型问题委派给它。
参考资料
评论
支持 Markdown