什么是OpenAPI?

OpenAPI是一种API描述格式,用来描述REST API,用yaml或json格式编写。换句话说,就可以是swagger编辑器中写的yaml的API文档。

Swagger是一套围绕OpenAPI设计、实现等操作的开源工具。最有名的是Swagger Editor 以及各种语言中Swagger的依赖,可以帮助根据注释等自动生成OpenAPI文档。

参考:About Swagger Specification | Documentation | Swagger

REST API设计规范

参考RESTful API 设计指南 - 阮一峰的网络日志 (ruanyifeng.com)

OpenAPI编写语法(YAML)

下面是我自己的一个OpenAPI3文档示例:

# 文档版本信息
openapi: 3.0.3

# 文档基本信息
info:
  title: Seecoder统一代码服务API
  description: "Seecoder统一代码服务是给Seecoder平台其他组件提供代码仓库托管服务的组件"
  contact: 
    name: claws
    email: jingjiecb@gmail.com
  version: '1.0.0'

# 服务器列表
servers:
  - url: https://seecoder-gitlab-server.seec.seecoder.cn
    description: 校外系统服务地址
  - url: https://seecoder-git-server.internal-paas.seec.seecoder.cn
    description: 校内系统服务地址

# 标签(形成的渲染文档会以这个作为分隔)
tags:
  - name: user
    description: 用户相关接口
  - name: other
    description: 其他

# API具体内容
paths:
  /api/user:
    post:
      summary: 创建Git用户
      description: 创建一个新的Git用户
      operationId: createUser
      requestBody: 
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GitUserDTO'
      responses: 
        '200':
          description: 添加成功
          content:
            application/json:
              schema: 
                type: object
                properties: 
                  res:
                    $ref: '#/components/schemas/GitUserVO'
  /api/user/changePassword:
    post:
      summary: 修改密码
      description: 修改一个学生的密码
      operationId: changePassword
      requestBody: 
        content:
          applictaion/json:
            schema:
            # 引用已定义的数据格式
              $ref: '#/components/schemas/ChangePasswordDTO'
      responses:
        '200':
          description: 有修改结果返回
          content:
            application/json:
              schema:
                type: object
                properties:
                  res:
                    type: boolean
                    description: 表示是否修改成功
        
# API中调用到的其他组件
components:
# 数据格式定义
  schemas: 
    Password:
      type: string
      format: password
      example: 123456

    GitUserDTO:
      type: object
      properties: 
        userId:
          type: integer
          format: int32
        username:
          type: string
          # 数据格式中也可以嵌套引用其他数据格式
        password:
          $ref: '#/components/schemas/Password'
        email:
          type: string
          format: email
    GitUserVO:
      type: object
      properties:
        userId:
          type: integer
          format: int32
        gitlabUserId:
          type: integer
          format: int32
          example: 111
        namespaceId:
          type: integer
          format: int32
          example: 111
        token:
          type: string
    

    ChangePasswordDTO:
      type: object
      properties: 
        userId:
          type: integer
          format: int32
        password:
          $ref: '#/components/schemas/Password'

更多OpenAPI规范参考:OpenAPI Specification - Version 3.0.3 | Swagger