Как правильно подойти к вопросу: возможно ли в swagger сгенерировать условную схему?
Допустим есть два тела запроса в typescript
type TBody = { type: 'action1' payload: { value: number action: string } } | { type: 'action2' payload: null }
По вводным: возможно ли такое тело запроса например для post описать в swagger чтобы на основе json-схемы генерировать запросы? Чтобы в свагере можно было отправлять данные в зависимости от поля.
По вводным: тоже самое и для ответа запроса например get. Можно ли описать данные которые возвращаются в зависимости от какого-то поля.
По вводным: было бы неплохо если такое возможно показать пример фоткой как это выглядит в свагере
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Да, в Swagger/OpenAPI можно описать условную схему тела запроса или ответа, где структура зависит от значения поля. Для такого случая используются
oneOf,anyOfиdiscriminator. В вашем примере правильнее всего описывать union по полюtype: еслиtype = action1, payload объект; еслиtype = action2, payload равен null.Пример для OpenAPI 3:
В endpoint это подключается так:
В Swagger UI это обычно отображается как выбор одного из вариантов схемы. Пользователь может переключать вариант тела запроса и видеть разные поля для каждого типа. Для ответов логика такая же: указываете
oneOfв schema ответа.Если вы генерируете OpenAPI из TypeScript, проверьте поддержку union/discriminator в вашем генераторе. Не все инструменты корректно превращают TypeScript union в OpenAPI. Иногда приходится явно описывать DTO-классы и указывать
oneOfвручную через декораторы или расширение схемы.Итог: да, условная схема описывается через
oneOfиdiscriminator. Главное — чтобы каждый вариант имел различимое полеtypeс enum/const-значением, иначе Swagger UI и валидаторы не смогут однозначно выбрать нужную ветку.