OAS 3 本指南适用于 OpenAPI 3.0。如果您使用 OpenAPI 2.0,请参阅我们的 OpenAPI 2.0 指南

添加示例

您可以将示例添加到参数、属性和对象中,使您的 Web 服务的 OpenAPI 规范更加清晰。示例可以被以某种方式处理您的 API 的工具和库读取。例如,API 模拟工具可以使用示例值来生成模拟请求。您可以为对象、单个属性和操作参数指定示例。要指定示例,您可以使用 **example** 或 **examples** 键。有关详细信息,请参见下文。

注意 Swagger UI 用户:对多个 examples 的支持自 Swagger UI 3.23.0 和 Swagger 编辑器 3.6.31 起可用。

注意:不要将示例值与默认值混淆。示例说明了该值应该是怎样的。默认值是服务器在客户端没有提供该值时使用的值。

参数示例

这是一个参数值的示例

parameters:
  - in: query
    name: status
    schema:
      type: string
      enum: [approved, pending, closed, new]
      example: approved     # Example of a parameter value

参数的多个示例

parameters:
  - in: query
    name: limit
    schema:
      type: integer
      maximum: 50
    examples:       # Multiple examples
      zero:         # Distinct name
        value: 0    # Example value
        summary: A sample limit value  # Optional description
      max: # Distinct name
        value: 50   # Example value
        summary: A sample limit value  # Optional description

如您所见,每个示例都有一个独特的键名。此外,在上面的代码中,我们使用了可选的 summary 键,它带有描述。注意:您指定的示例值应与参数数据类型匹配。

请求和响应体示例

这是一个请求体中 example 关键字的示例

paths:
  /users:
    post:
      summary: Adds a new user
      requestBody:
        content:
          application/json:
            schema:      # Request body contents
              type: object
              properties:
                id:
                  type: integer
                name:
                  type: string
              example:   # Sample object
                id: 10
                name: Jessica Smith
      responses:
        '200':
          description: OK

请注意,在上面的代码中,exampleschema 的子级。如果 schema 引用了 components 部分中定义的某个对象,那么您应该将 example 设为媒体类型关键字的子级

paths:
  /users:
    post:
      summary: Adds a new user
      requestBody:
        content:
          application/json:    # Media type
            schema:            # Request body contents
              $ref: '#/components/schemas/User'   # Reference to an object
            example:           # Child of media type because we use $ref above
              # Properties of a referenced object
              id: 10
              name: Jessica Smith
      responses:
        '200':
          description: OK

这是必要的,因为 $ref 会覆盖它旁边所有的兄弟节点。如果需要,您可以使用多个示例

paths:
  /users:
    post:
      summary: Adds a new user
      requestBody:
        content:
          application/json:     # Media type
            schema:             # Request body contents
              $ref: '#/components/schemas/User'   # Reference to an object
            examples:    # Child of media type
              Jessica:   # Example 1
                value:
                  id: 10
                  name: Jessica Smith
              Ron:       # Example 2
                value:
                  id: 11
                  name: Ron Stewart
      responses:
        '200':
          description: OK

这是一个响应体中 example 的示例

responses:
  '200':
    description: A user object.
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/User'   # Reference to an object
        example: 
          # Properties of the referenced object
          id: 10
          name: Jessica Smith

响应体中的多个示例

responses:
  '200':
    description: A user object.
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/User'   # Reference to an object
        examples:
          Jessica:
            value:
              id: 10
              name: Jessica Smith
          Ron:
            value:
              id: 20
              name: Ron Stewart

注意:响应和请求体中的示例是自由格式的,但预期它们与主体模式兼容。

对象和属性示例

您也可以在 components 部分中为对象和单个属性指定示例。

  • 属性级示例
    components:
      schemas:
        User:    # Schema name
          type: object
          properties:
            id:
              type: integer
              format: int64
              example: 1          # Property example
            name:
              type: string
              example: New order  # Property example
    
  • 对象级示例
    components:
      schemas:
        User:       # Schema name
          type: object
          properties:
            id:
              type: integer
            name:
              type: string
          example:   # Object-level example
            id: 1
            name: Jessica Smith
    

请注意,模式和属性支持单个 example,但不支持多个 examples

数组示例

您可以添加单个数组项的示例

components:
  schemas:
    ArrayOfInt:
      type: array
      items:
        type: integer
        format: int64
        example: 1

或包含多个项的数组级示例

components:
  schemas:
    ArrayOfInt:
      type: array
      items:
        type: integer
        format: int64
      example: [1, 2, 3]

如果数组包含对象,您可以按如下方式指定多项示例

components:
  schemas:
    ArrayOfUsers:
      type: array
      items:
        type: object
        properties:
          id:
            type: integer
          name:
            type: string
      example:
        - id: 10
          name: Jessica Smith
        - id: 20
          name: Ron Stewart

请注意,数组和数组项支持单个 example,但不支持多个 examples

XML 和 HTML 数据的示例

要描述无法以 JSON 或 YAML 格式呈现的示例值,请将其指定为字符串

content:
  application/xml:
    schema:
      $ref: '#/components/schemas/xml'
    examples:
      xml:
        summary: A sample XML response
        value: '<objects><object><id>1</id><name>new</name></object><object><id>2</id></object></objects>'
  text/html:
    schema:
      type: string
    examples:
      html:
        summary: A list containing two items
        value: '<html><body><ul><li>item 1</li><li>item 2</li></ul></body></html>'

您可以在此 Stack Overflow 帖子中找到有关在 YAML 中编写多行字符串的信息:https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines

外部示例

如果由于某种原因无法将示例值插入您的规范中,例如,它既不符合 YAML 格式也不符合 JSON 格式,您可以使用 externalValue 关键字来指定示例值的 URL。该 URL 应指向包含字面示例内容(例如,对象、文件或图像)的资源

content:
  application/json:
    schema:
      $ref: '#/components/schemas/MyObject'
    examples:
      jsonObject:
        summary: A sample object
        externalValue: 'http://example.com/examples/object-example.json'
  application/pdf:
    schema:
      type: string
      format: binary
    examples:
      sampleFile:
        summary: A sample file
        externalValue: 'http://example.com/examples/example.pdf'

重复使用示例

您可以在规范的 components/examples 部分中定义通用示例,然后在各种参数描述、请求和响应体描述、对象和属性中重复使用它们

content:
  application/json:
    schema:
      $ref: '#/components/schemas/MyObject'
    examples:
      objectExample:
        $ref: '#/components/examples/objectExample'
...
components:
  examples:
    objectExample:
      value:
        id: 1
        name: new object
      summary: A sample object

  

没有找到您要找的内容?向社区提问
发现错误?告诉我们