首页 > 解决方案 > Swagger url 生成的 json 缺少“securityschemes”组件

问题描述

生成的 swagger.json 缺少 securityscheme 组件。当我复制 url json 并将其粘贴到 swagger 编辑器中时,我得到 - 在此处输入图像描述

swagger.json 文件中生成的 yaml 如下所示 -

openapi: 3.0.3
info:
  title: Test YAML
  version: 1.0.0
servers:
  - url: 'localhost'
    description: Inferred Url
tags:
  - name: device-controller
    description: the device API
  - name: api-controller
    description: API
paths:
  /api/device:
    get:
      tags:
        - ABCD
      summary: Device SUMMARY.
      description: Device DESCRIPTION.
      operationId: getDevice
      parameters:
        - name: X-Request-ID
          in: header
          description: 'request Id, will return in the response headers, and appear in logs'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: list of commands set
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommandSet'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: The specified resource was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - BasicAuth: []
components:
  schemas:
    CommandSet:
      title: CommandSet
      required:
        - name
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 07da6fd8-5abc-4dc4-bcec-df309d123d17
        name:
          type: string
          example: Deny
    Error:
      title: Error
      type: object
      properties:
        code:
          type: string
          example: '400'
        message:
          type: string
          example: Bad Request

它不见了

components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic

我在资源文件夹下定义了以下 yaml 文件

openapi: 3.0.2
info:
  title: Policy APIs
  description: 'Policy APIs for manage Policy Sets, authorization policies, authentication policies, and policy elements.'
  version: 1.0.0
  license:
    name: Apache 2.0
    url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
  contact:
    email: abc@gmail.com
servers:
  - url: 'https://{server}/v1/policy'
    variables:
      server:
        default: localhost
        description: The host where the API is rooted
security:
  - BasicAuth: []
paths:
  /device-admin/command-sets:
    parameters:
      - $ref: '#/components/parameters/XRequestIdHeader'
    get:
      summary: Device Admin - Return list of command sets.
      description: Device Admin - Return list of command sets.
      operationId: getDeviceAdminCommandSets
      tags:
        - Device Administration - Command Set
      responses:
        '200':
          description: list of commands set
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommandSet'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
  parameters:
    XRequestIdHeader:
      in: header
      name: X-Request-ID
      description: 'request Id, will return in the response headers, and appear in logs'
      schema:
        type: string
      required: false
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The specified resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example: '{code: 404, message: The specified resource was not found}'
  schemas:
    CommandSet:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          example: DenyAllCommands
          description: Command used in Device Admin authorization policies
        id:
          type: string
          format: uuid
          example: 07da6fd8-5abc-4dc4-bcec-df309dbf4d17
    Error:
      type: object
      properties:
        code:
          type: string
          example: 400
        message:
          type: string
          example: Bad Request

如何在 swagger url 定义中获取 securityscheme 组件。我正在使用 oas 3.x 和 openapi 生成器工具来生成 java 代码。

标签: openapispringfoxopenapi-generator

解决方案


在 OpenAPI 3.0 中,您可以使用 servers 数组为您的 API 指定一个或多个基本 URL。servers 替换了 OpenAPI 2.0 中使用的 host、basePath 和 scheme 关键字。每个服务器都有一个 url 和一个可选的 Markdown 格式描述。

https://swagger.io/docs/specification/api-host-and-base-path/

在 swagger 规范中添加服务器阵列


推荐阅读