OpenAPI 模板
生成 OpenAPI 3.1 骨架:info、servers、tags、按资源展开的 CRUD 路径、components.schemas、securitySchemes 与常见响应码,输出可直接放进仓库的 YAML。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
文档信息
资源
可用操作:list, create, get, update, delete
openapi.yaml
把内容保存成 openapi.yaml,可直接被 Swagger UI、Redoc 或 openapi-generator 读取。
openapi: 3.1.0
info:
title: Example API
version: 1.0.0
description: 由 UniKit 生成的 OpenAPI 骨架,按需增删字段即可。
servers:
- url: https://api.example.com/v1
tags:
- name: pets
description: Pet resources
paths:
/pets:
get:
tags:
- pets
summary: List pets
operationId: listPets
parameters:
- name: page
in: query
description: Page number
schema:
type: integer
minimum: 1
default: 1
- name: pageSize
in: query
description: Items per page
schema:
type: integer
minimum: 1
maximum: 100
default: 20
- name: sort
in: query
description: Sort expression, e.g. -createdAt
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PetList'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- pets
summary: Create a pet
operationId: createPet
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PetInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/pets/{id}:
get:
tags:
- pets
summary: Get a pet
operationId: getPet
parameters:
- name: id
in: path
required: true
description: Pet identifier
schema:
type: integer
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
tags:
- pets
summary: Replace a pet
operationId: replacePet
parameters:
- name: id
in: path
required: true
description: Pet identifier
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PetInput'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- pets
summary: Delete a pet
operationId: deletePet
parameters:
- name: id
in: path
required: true
description: Pet identifier
schema:
type: integer
responses:
'204':
description: Deleted
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
message:
type: string
details:
type: array
items:
type: string
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
name:
type: string
description: Display name
description:
type:
- string
- 'null'
description: Optional long text
createdAt:
type: string
format: date-time
readOnly: true
updatedAt:
type: string
format: date-time
readOnly: true
PetInput:
type: object
required:
- name
properties:
name:
type: string
description: Display name
description:
type:
- string
- 'null'
description: Optional long text
createdAt:
type: string
format: date-time
readOnly: true
updatedAt:
type: string
format: date-time
readOnly: true
PetList:
type: object
required:
- items
- total
properties:
items:
type: array
items:
$ref: '#/components/schemas/Pet'
total:
type: integer
description: Total number of records
page:
type: integer
minimum: 1
pageSize:
type: integer
minimum: 1
maximum: 100
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: []
统计
25410这个工具能做什么
- 新项目立项先把接口骨架定下来:填好标题、servers 和资源名,一次生成所有 CRUD 路径与 schema,团队先对着这份 YAML 讨论字段。
- 给前端造 mock 或 SDK:把 YAML 丢给 Swagger UI 看文档、给 openapi-generator 生成客户端代码,两边共用同一份定义。
- 统一团队规范:鉴权方式、分页参数、错误响应结构都由模板给出,避免每个接口各写一套。
- 补文档比写代码还累时:已有模型名和主键规则填进资源行,剩下的路径、operationId、$ref 全部自动生成。
示例
输入
标题:Pet Store API 版本:1.0.0 servers:https://api.example.com/v1 鉴权:无 资源:pets:list:id:integer:no 通用响应:关闭
输出
openapi: 3.1.0
info:
title: Pet Store API
version: 1.0.0
servers:
- url: https://api.example.com/v1
tags:
- name: pets
description: Pet resources
paths:
/pets:
get:
tags:
- pets
summary: List pets
operationId: listPets
parameters:
- name: sort
in: query
description: Sort expression, e.g. -createdAt
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
components:
schemas:
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
message:
type: string
details:
type: array
items:
type: string
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
name:
type: string
description: Display name
description:
type:
- string
- 'null'
description: Optional long text
createdAt:
type: string
format: date-time
readOnly: true
updatedAt:
type: string
format: date-time
readOnly: true
PetInput:
type: object
required:
- name
properties:
name:
type: string
description: Display name
description:
type:
- string
- 'null'
description: Optional long text
createdAt:
type: string
format: date-time
readOnly: true
updatedAt:
type: string
format: date-time
readOnly: true状态码会被写成字符串键('200'),这是 OpenAPI 的要求;模型名由资源名推导,pets 得到 Pet。
常见问题
生成的 YAML 能直接跑起来吗?
能。文档符合 OpenAPI 3.1,可以直接喂给 Swagger UI、Redoc 或 openapi-generator;路径里的 schema 用 $ref 指向 components.schemas,不会出现悬空引用。
资源名该怎么填?
用小写复数的路径片段,例如 pets、order-items。模型名会自动推导:order-items → OrderItem,categories → Category;如果推导不符合预期,可以在资源行里显式给出模型名。
分页参数是什么时候出现的?
只有 list 操作且开启分页时才会加 page / pageSize 查询参数,并把响应指向 <模型>List 包装对象;关掉分页后 list 直接返回模型数组的引用,文档里也不会出现 List schema。
鉴权部分生成什么?
bearer 生成 http + bearer + JWT 的 securityScheme,basic 生成 http + basic,API Key 生成 header 形式的 X-API-Key,并在顶层加 security 引用。选择「无」时既不写 securitySchemes 也不写 401 响应。
operationId 会冲突吗?
不会。list 用资源复数名(listPets),单个资源的操作统一用模型名单数(getPet、replacePet、deletePet)。同一资源只生成一份,重复资源名会在校验阶段直接报错。
关键词:openapiswaggerapi specrest apiopenapi 模板接口文档api 规范crud 接口swagger yaml接口骨架