- Все yaml файлы должны располагаться либо в поддиректориях v1, v2,... vN директории указанной в конфиге в поле
apidoc_dir
. - Входной точкой для спецификации каждой версии api должен быть файл index.yaml
- Каждая Enum модель должна находиться в отдельном файле с названием {enum_name_in_snake_case}_enum.yaml. Эти enumы при генерации подвергаются патчингу
- Все эндпоинты должны быть описаны в index.yaml
- Для каждого эндпоинта должны быть указаны tags и operationId.
- Для request/request модели необходимо добавлять Request/Response в конец названия.
- Не должны быть $ref ссылки на что-либо не лежащее в той же директории
- (?) Все объекты запросов и ответов выносятся в отдельные файлы и подключаются напрямую.
Важно понимать, что генератором генерируются классы только из
- #/components/schemas/Model
- Отдельных файлов, которые подключены через $ref в индексный файл
Причем название будущего класса будет соответствовать названию файла (транслированному в CamelCase) или названию схемы. - В #/components/schemas допустимо выносить модели, которые нигде не используются, но хотелось бы получить при генерации под них класс.
C enum есть 2 проблемы
- По сути это свойство с типом integer/string. Но генератором оно генерируется как отдельный класс, из-за того что мы выносим перечисление отдельным файл и потом подключаем везде. И соответственно требует в свойствах в качестве значения этот класс. А мы не может число определить как этот сгенерированный класс.
- При числовых перечисления класс генерируется с синтаксической ошибкой OpenAPITools/openapi-generator#1475
Для решения этих проблем
- Под каждый enum создаём файл с названием {banana}_enum.yaml
- Содержимое файла должно быть следующего вида:
type: number
description: >
Роли. Расшифровка значений:
* Роли админки:
* `101` - Супер-администратор
* `102` - Администратор
* `113` - Оператор колл-центра
* `115` - Администратор магазина
* Роли витрины:
* `403` - Неавторизованный пользователь
enum:
- 101 # ADMIN__SUPER | Супер-администратор
- 102 # ADMIN__ADMIN | Администратор
- 113 # ADMIN__OMS_CALL_CENTER | Оператор колл-центра
- 115 # ADMIN__MERCHANT_ADMINISTRATOR | Администратор магазина
- 403 # SHOWCASE__GUEST | Неавторизованный пользователь
Важно заполнение свойства enum. Необходимо четко придерживаться шаблона выше: - <value> # <name> | <comment>
. Здесь value - значение перечисления, name - название, comment - комментарий в одну строку.
3. В index.yaml подключаем наш файл в качестве компонента с названием {Banana}Enum и нигде не используем
4. Во всех местах, где наше перечисление должно быть свойством (например order.banana_id), то указываем banana_id как
banana_id:
description: Описание поля
allOf:
- type: integer
- $ref: './banana_enum.yaml'