OAS 3 此页面介绍的是 OpenAPI 3.0。如果您使用 OpenAPI 2.0,请参阅 OpenAPI 2.0 指南

媒体类型

媒体类型是请求或响应主体数据的格式。Web 服务操作可以接受和返回不同格式的数据,最常见的是 JSON、XML 和图像。您在请求和响应定义中指定媒体类型。以下是一个响应定义的示例。

paths:
  /employees:
    get:
      summary: Returns a list of employees.
      responses:
        '200':      # Response
          description: OK
          content:  # Response body
            application/json:  # Media type
              schema:          # Must-have
                type: object   # Data type
                properties: 
                  id:
                    type: integer
                  name:
                    type: string
                  fullTime: 
                    type: boolean
                example:       # Sample data
                    id: 1
                    name: Jessica Right
                    fullTime: true

responses 下,我们有单个响应的定义。如您所见,每个响应都由其代码定义(我们示例中的 '200')。代码下面的关键字 content 对应于响应主体。一个或多个媒体类型作为此 content 关键字的子关键字。每个媒体类型都包含一个 schema,定义消息主体的类型,并且可以选择包含一个或多个示例。有关定义主体数据的更多信息,请参阅 定义请求主体定义响应

媒体类型名称

content 字段下方列出的媒体类型应符合 RFC 6838。例如,您可以使用标准类型或供应商特定的类型(由 .vnd 指示) –

application/json
application/xml
application/x-www-form-urlencoded
multipart/form-data
text/plain; charset=utf-8
text/html
application/pdf
image/png
application/vnd.mycompany.myapp.v2+json
application/vnd.ms-excel
application/vnd.openstreetmap.data+xml
application/vnd.github-issue.text+json
application/vnd.github.v3.diff
image/vnd.djvu

多种媒体类型

您可能需要指定多种媒体类型。

paths:
  /employees:
    get:
      summary: Returns a list of employees.
      responses:
        '200':      # Response
          description: OK
          content:  # Response body
            application/json:   # One of media types
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  fullTime: 
                    type: boolean
            application/xml:    # Another media types
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  fullTime: 
                    type: boolean

要为多个媒体类型使用相同的数据格式,请在规范的 components 部分中定义一个自定义对象,然后在每个媒体类型中引用此对象。

paths:
  /employees:
    get:
      responses:
        '200':      # Response
          description: OK
          content:  # Response body
            application/json:  # Media type
             schema: 
               $ref: '#/components/schemas/Employee'    # Reference to object definition
            application/xml:   # Media type
             schema: 
               $ref: '#/components/schemas/Employee'    # Reference to object definition
components:
  schemas:
    Employee:      # Object definition
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        fullTime: 
          type: boolean

要为多个媒体类型定义相同的格式,您也可以使用占位符,例如 */*application/*image/* 或其他。

paths:
  /info/logo:
    get:
      responses:
        '200':           # Response
          description: OK
          content:       # Response body
            image/*:     # Media type
             schema: 
               type: string
               format: binary

您用作媒体类型的 value - 我们示例中的 image/* - 与您在 HTTP 请求和响应的 AcceptContent-Type 标头中看到的非常相似。请勿将占位符与 AcceptContent-Type 标头的实际 value 混淆。例如,响应主体的 image/* 占位符表示服务器将对与占位符匹配的所有响应使用相同的数据结构。这并不意味着字符串 image/* 将在 Content-Type 标头中指定。Content-Type 标头很可能将具有 image/pngimage/jpeg 或其他类似 value。

  

没有找到您要找的内容?咨询社区
发现错误?告知我们