OpenAPI 是业界标准的 RESTful API 规范。

OpenAPI 规范,又称 OpenAPI Specification 或 OAS。

这是一份语言无关的规范,可以被工具解析并生成文档、代码等。

目前规范有 2.0 (Swagger 规范)和 3.0 (OpenAPI 规范)版本,本文描述的是 2.0 版本。

文档示例可以查看 Swagger Editor :

RESETful API

通过接口对资源执行各种操作。

包含 {} 的路径,花括号标记的内容可被参数路径替换。

Mime 类型

Mime 类型定义遵从 RFC 6838 ,常见有:

text/plain; charset=utf-8
application/json

HTTP 状态码

状态码表明接口执行状态,可用状态码可查看 RFC 7231IANA Status Code Registry

遵从 Swagger 规范的 API 文档可以是一个 JSON 或 YAML 格式的文件。

所有属性名都是大小写敏感的。

API 文档是一个单一的文件,但部分定义可以被拆分到不同文件。

通常 API 文档被命名为 swagger.jsonswagger.yaml

数据类型可以是原始数据类型或自定义模型。

原始数据类型:

format Comments

原始数据类型有一个可选的属性 format,用于指定具体的数据类型,可以是任意字符串,比如 emailuuid

对于参数对象或响应对象来说,还有 file 类型,表示参数或响应是一个文件。

Schema

Swagger Object

Swagger 对象是文档一些的根对象。

title: Swagger Sample App
description: This is a sample server Petstore server.
termsOfService: http://swagger.io/terms/
contact:
  name: API Support
  url: http://www.swagger.io/support
  email: support@swagger.io
license:
  name: Apache 2.0
  url: http://www.apache.org/licenses/LICENSE-2.0.html
version: 1.0.1

Contact Object

联系信息。

Field Name Description Required description: Returns all pets from the system that the user has access to produces: - application/json responses: '200': description: A list of pets. schema: type: array items: $ref: '#/definitions/pet'

Path Item Object

定义路径支持的操作(HTTP 方法)。

Field Pattern Description summary: Updates a pet in the store with form data description: "" operationId: updatePetWithForm consumes: - application/x-www-form-urlencoded produces: - application/json - application/xml parameters: - name: petId in: path description: ID of pet that needs to be updated required: true type: string - name: name in: formData description: Updated name of the pet required: false type: string - name: status in: formData description: Updated status of the pet required: false type: string responses: '200': description: Pet updated. '405': description: Invalid input security: - petstore_auth: - write:pets - read:pets

External Documentation Object

引用外部资源来扩展文档

Field Name Description

描述接口参数。

参数的唯一性由 name 和 location 定义。
location 指明参数的位置,可以是 path, query, Header, body, formData。

关于 body:

  • 只允许有一个 body
  • body 的名称没有实际用途,只是用于文档描述
  • body 和 form 不能同时存在
  • string 参数类型。该值【必须】是 "string", "number", "integer", "boolean", "array", "file"。如果类型是 "file", 则 consumer 【必须】是 "multipart/form-data", " application/x-www-form-urlencoded";in 【必须】是 "formData"。 format string 具体参数类型 allowEmptyValue boolean 是否允许空值。只有 in 是 query 或 formData 才会生效。如果允许,可以只传参数名或传空值。默认是 false。 items Items Object 描述数组元素的类型 当 type 是 array 时必填 collectionFormat string 数组格式。可选择是:csv,逗号分隔。ssv:空格分隔。tsv:反斜杠分隔。pipes:管道分隔。multi:。默认是 csv。 default 参数默认值 maximum number schema Schema Object 响应结构定义。该值可以是原始类型,数组或对象。如果没有指定该属性,则意味着该响应没有内容。如果它的 "type" 是 "file",则【应该】同时声明 produces 的 MIME 类型。 headers Headers Object 响应头列表 examples Example Object 响应消息示例

    响应是一个复杂类型数组:

    description: A complex object array response
    schema:
      type: array
      items:
        $ref: '#/definitions/VeryComplexType'
    

    响应是字符串:

    description: A simple string response
    schema:
      type: string
    

    响应中包含一些响应头:

    description: A simple string response
    schema:
      type: string
    headers:
      X-Rate-Limit-Limit:
        description: The number of allowed requests in the current period
        type: integer
      X-Rate-Limit-Remaining:
        description: The number of remaining requests in the current period
        type: integer
      X-Rate-Limit-Reset:
        description: The number of seconds left in the current period
        type: integer
    

    响应没有响应内容:

    description: object created
    

    Headers Object

    响应的头对象列表。

    Field Pattern Description
    X-Rate-Limit-Limit:
      description: The number of allowed requests in the current period
      type: integer
    X-Rate-Limit-Remaining:
      description: The number of remaining requests in the current period
      type: integer
    X-Rate-Limit-Reset:
      description: The number of seconds left in the current period
      type: integer
    

    Example Object

    响应的示例。

    Field Pattern Description