Избежать шаблонного в Форс 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.