Как не копировать и не вставлять 3 общих ответа об ошибке почти во все пути?

#swagger #openapi

#swagger #openapi

Вопрос:

Я хочу, чтобы почти все мои пути имели следующие 3 общих ответа об ошибках. Как мне описать это в Swagger без копирования этих строк повсюду?

     401:
      description: The requester is unauthorized.
      schema:
        $ref: '#/definitions/Error'
    500:
      description: "Something went wrong. It's server's fault."
      schema:
        $ref: '#/definitions/Error'
    503:
      description: Server is unavailable. Maybe there is maintenance?
      schema:
        $ref: '#/definitions/Error'
 

Пример того, как я использую это в запросе:

 paths:
    /roles:
      get:
        summary: Roles
        description: |
          Returns all roles available for users.
        responses:
          200:
            description: An array with all roles.
            schema:
              type: array
              items:
                $ref: '#/definitions/Role'
          401:
            description: The requester is unauthorized.
            schema:
              $ref: '#/definitions/Error'
          500:
            description: "Something went wrong. It's server's fault."
            schema:
              $ref: '#/definitions/Error'
          503:
            description: Server is unavailable. Maybe there is maintenance?
            schema:
              $ref: '#/definitions/Error'
 

Ответ №1:

Похоже, я могу добавить следующее определение глобального ответа:

 # An object to hold responses that can be used across operations.
# This property does not define global responses for all operations.
responses:
  NotAuthorized:
    description: The requester is unauthorized.
    schema:
      $ref: '#/definitions/Error'
 

Однако мне все равно нужно будет ссылаться на него в таких путях:

 401:
  $ref: '#/responses/NotAuthorized'
 

То же самое в OpenAPI 3.0, за исключением того #/components/responses/... , что вместо #/responses/... :

 openapi: 3.0.0

# An object to hold responses that can be used across operations.
# This property does not define global responses for all operations.
components:
  responses:
    NotAuthorized:
      description: The requester is unauthorized.
      schema:
        $ref: '#/components/schemas/Error'

# Then, in operation responses, use:
...
401:
  $ref: '#/components/responses/NotAuthorized'
 

В репозитории спецификаций OpenAPI также есть запрос open feature для добавления поддержки глобальных / стандартных ответов для операций.

Комментарии:

1. Открытый билет для этого требования