Да, ваш код может стать гораздо более сухим: спецификация 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'
. Совет: параметры можно определить на уровне операции, а также на уровне пути:
/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 Спецификация.
person
Arnaud Lauret
schedule
13.06.2016