Я пишу определение OpenAPI (Swagger), в котором параметр запроса не может принимать значения N или N, например:
/path?sort=field1,field2
Как я могу написать это в OpenAPI YAML?
Я пробовал следующее, но это не дало ожидаемого результата:
- name: sort
in: query
schema:
type: string
enum: [field1,field2,field3]
allowEmptyValue: true
required: false
description: Sort the results by attributes. (See http://jsonapi.org/format/1.1/#fetching-sorting)
Это «ничего или более». Вот почему присутствует allowEmptyValue: true. ?sort=, ?sort=field1, ?sort=field1,field2 - допустимый путь.

Параметр запроса, содержащий список значений, разделенных запятыми, определяется как множество. Если значения предопределены, то это массив перечисления.
По умолчанию в массиве может быть любое количество элементов, которое соответствует вашему требованию «ни одного или более». При необходимости вы можете ограничить количество элементов, используя minItems и maxItems, и, при желании, применить uniqueItems: true.
Определение параметра будет выглядеть следующим образом. collectionFormat: csv указывает, что значения разделены запятыми, но это формат по умолчанию, поэтому его можно не указывать.
parameters:
- name: sort
in: query
type: array # <-----
items:
type: string
enum: [field1, field2, field3]
collectionFormat: csv # <-----
required: false
description: Sort the results by attributes. (See http://jsonapi.org/format/1.1/#fetching-sorting)
collectionFormat: csv из OpenAPI 2.0 был заменен на style: form + explode: false. style: form - это стиль по умолчанию для параметров запроса, поэтому его можно не указывать.
parameters:
- name: sort
in: query
schema:
type: array # <-----
items:
type: string
enum: [field1, field2, field3]
required: false
description: Sort the results by attributes. (See http://jsonapi.org/format/1.1/#fetching-sorting)
explode: false # <-----
Я думаю, что в allowEmptyValue нет необходимости, потому что в этом сценарии пустой массив будет фактически пустым значением. Более того, allowEmptyValue - это не рекомендуется для использования, начиная с OpenAPI 3.0.2, «поскольку он будет удален в будущей версии».
Спасибо, я попробую.
Спасибо за отличный ответ. К сожалению, мне не нравится github.com/OpenAPITools/openapi-generator/issues/3345: \
@Helen: Поддерживает ли swagger перечисления с парами ключ-значение?
Итак, это «одно или несколько значений» (например, если присутствует, должно иметь как минимум 1 значение) или «нет или n значений» (например, может присутствовать без значения, как в
?sort)?