Избежать шаблонного в Форс 2.0
Мои API уважают обычные коды состояния, и я обнаружил, что повторяю тот же текст в части ответов моего определения api
404:
description: The resource doesn't exist
schema:
$ref: '#/definitions/Error'
default:
description: An unexpected error has occurred
schema:
$ref: '#/definitions/Error'
Аналогичная проблема, с которой я также сталкиваюсь, заключается в том, что я не могу разложить на множители свойства и параметры перечисления. Может ли мой Свэггер-код стать более сухим?
1 ответ:
Да, ваш код может стать гораздо более сухим: OpenAPI (fka. Спецификация Swagger) предлагает множество способов факторинга вещей, включая ответы, параметры и перечисления.
Многоразовые ответы
Вы можете определить повторно используемый ответ почти так же, как вы определили
Error
в своем примере.Сначала добавьте ответ, например
Standard404
, определение вresponses
на корневом уровнеresponses: Standard404: description: The resource doesn't exist schema: $ref: '#/definitions/Error'
Затем используйте его с
$ref : '#/responses/Standard404'
для 404 кода состояния вresponses
на любом операцияresponses: 404: $ref: '#/responses/Standard404'
Многоразовые параметры
Для повторно используемых параметров это одно и то же.
Сначала добавьте параметр, например
ID
, определение вparameters
на корневом уровне:parameters: ID: name: id in: path required: true type: string
Затем используйте его в любом списке параметров с
$ref: '#/parameters/ID'
. Pro tip : параметры могут быть определены на уровне операции, но также и на уровне пути:/other-resources/{id}: get: parameters: - $ref: '#/parameters/ID' /resources/{id}: parameters: - $ref: '#/parameters/ID'
Многоразовые перечисления
Все, что вам нужно сделать, это определить определение типа string (или целое число или число) с перечислением:
SomeValueWithEnum: type: string enum: - a value - another value
А затем используйте его столько раз, сколько захотите, вот так:
Resource: properties: dummyProperty: $ref: '#/definitions/SomeValueWithEnum'
Полный пример
Вот полный пример для этих 3 вариантов использования:
swagger: '2.0' info: version: 1.0.0 title: API description: Reusable things example paths: /resources: post: responses: 200: description: OK default: $ref: '#/responses/Default' /resources/{id}: parameters: - $ref: '#/parameters/ID' get: responses: 200: description: OK 404: $ref: '#/responses/Standard404' default: $ref: '#/responses/Default' delete: responses: 200: description: OK 404: $ref: '#/responses/Standard404' default: $ref: '#/responses/Default' /other-resources/{id}: get: parameters: - $ref: '#/parameters/ID' responses: 200: description: OK 404: $ref: '#/responses/Standard404' default: $ref: '#/responses/Default' definitions: Error: properties: message: type: string SomeValueWithEnum: type: string enum: - a value - another value Resource: properties: dummyProperty: $ref: '#/definitions/SomeValueWithEnum' AnotherResource: properties: anotherDummyProperty: $ref: '#/definitions/SomeValueWithEnum' parameters: ID: name: id in: path required: true type: string responses: Standard404: description: The resource doesn't exist schema: $ref: '#/definitions/Error' Default: description: An unexpected error has occurred schema: $ref: '#/definitions/Error'
Подробнее об этом Вы должны прочитать этот учебник (раскрытие: я написал его) и спецификацию OpenAPI.