Где можно посмотреть все типпы аннотаций для swagger php?
Всем привет коллеги)
Подскажите, кто пользовался сваггером, где можно найти документацию по всем аннотациям? Возможно я просто не могу найти на их официальном сайте, но я там много разделов с документацией перерыл и везде только просто говорится о том, как руками или через эдитор составить json, а как его на основе аннотаций составить? Там описывается кодогенератор, но опять же я и так знаю, как его использовать, а вот список всех доступных аннотаций найти не получилось пока.
Если что я себе установил расширение zircote/swagger-php для работы со свагером в php yii2 фреймворке. Там есть примеры с аннотациям, но не все описывается. Например как нормально формировать поля response без ссылки #ref на schema, а описывая их полностью в самом методе?
В общем есть ли какая-то документация со всеми аннотациями? Они ведь не зависят от используемого языка и расширения? Или зависят?
В общем ответа как такового нет, нужно искать примеры аннотаций на форумах, в разных расширениях для фреймворков, ну и методом тыка изучать. Если лень так делать, лучше сразу начинайте писать документацию по openApi спецификации в swagger editor, а потом этот файл кладите в swagger ui и пользуйтесь. Потому что для openApi хотя бы документации много есть.
Насчёт "лучше" - не согласен. Почему - написал в комментариях под своим ответом. :)
Единственный плюс написания вручную - это то, что не надо разбираться с аннотациями этой библиотеки. Но минусы, на мой взгляд, сильно более весомые, особенно когда эндпоинтов становится много.
А там точно есть аннотации php? Меня интересует именно посмотреть аннотации для php, а не делать руками готовый json. По ссылкам, которые вы отправили, я не вижу аннотаций с @OA. Там примеры для написания через. swagger editor.
Ни уже ли нет документации, как именно писать php аннотации? Чтобы просто все аннотации были подробно разобраны, вот такой объект в аннотациях так создать, а такой так, а можно сделать вложенные объекты через аннотации так, а сделать один код ответа для нескольких респонсов через аннотации так. Зачем вообще мне этот эдитор, если я из кода хочу генерировать. А у swagger в официальной документации к генератору вообще нет никакой нормальной документации.
Привет! С генерацией я разобрался, но спасибо за ответ. Вот с аннотациями дело туго пока. Да, примеры в самой библиотеке есть, но вот вчера например столкнулся с необходимостью написать аннотации, чтобы для одного кода ответа было несколько вариантов ответов, то есть api всегда отвечает 200 ок, но при этом сообщение ответа меняется. Вот как это сделать через аннотации беспонятия и примеров пока не нашел.
такое ощущение, что у них основная задумка не генерировать код автоматически по аннотациям, а писать его в editor вручную, потому что описания json куча, а вот аннотаций вообще нет. Зачем тогда этот инструмент нужен, если ты автоматически не можешь генерировтаь документацию удобно?)
Дмитрий Свиридов, а это все должно быть обвернуто в @OA\Response? И вот еще интересно, схемы ведь можно описывать без ref? Она просто не переиспользуется.
Дмитрий Свиридов, я так полагаю, что @OA\Response просто должен быть обязательным для \OA\Post|Get и всех запросов? То есть типа property должно быть частью объекта response.
Дмитрий Свиридов, или тут наоборот @OA\Property(property="resp", type="object", anyOf = { это просто свойство объекта @OA\Post\Get и содержит в себе схемы @OA\Response?
Причем тут даже не понятно как еще сюда добавить объект так, чтобы схема с типом array, была json. Это наверно нужно вообще сначала все оборачивать в @AO\MediaType json, а потом только схема с типом array и итемами?
Sergey Ilichev, но соглашусь с вами, что эти комменты для OpenAPI - весьма неочевидная вещь. Я доку писал методом проб и ошибок, так сказать. Но других способов для PHP я не нашёл)
Сделал, как хотел, так чтобы переключать примеры ответов. Но теперь я не понимаю зачем нужно описание ответов с типами? Можно вообще удалить схемы для ответов, и ничего не поменяется, просто оставить примеры. Попробовал удалить, отправил запросы, все работает.
Sergey Ilichev, по типам можно генерить API-клиенты, а по примерам - нет. Кроме того, в примере никак не укажешь, скажем, что максимально допустимое значение - это 100 (например). И т.п. То есть пример - это только пример значений и ничего больше.
Дмитрий Свиридов, вы имеете ввиду swagger ui? Я его сгенерил и с указанием схем и без указания схем, одно и то же. Работает и со схемами и без, при том, то что написано в примерах, может вообще не соотноситься с тем, что написано в схеме. То есть в Examples можно в value написать другие поля и типы, которых нет в схемах и все типа работает. Плюс я могу написать, допустим, для параметра guid длину 10 символов, а приходит в моем ответе 100 и все равно все работает и нигде ничего не пишется, что типа тип ответа получен не корректный. Где это вообще должно писаться? С параметрами для запроса, тут понятно, ты типа отправляешь не то и он пишет ошибку, а вот с валилидацией ответа чет не понятно.
Sergey Ilichev, если я правильно вас понял, то в этих аннотациях можно написать вообще всё, что угодно - и нет никакой гарантии, что это будет отражать реальное положение вещей. И дело, кстати, не в PHP. В том же NestJS, например, тоже можно сделать так, что схема не будет соответствовать реальному ответу.
Дмитрий Свиридов, еще на всякий случай проверил, если писать пример не в общих примерах examples, а прямо в схеме ответа, то тоже нет никакой проверки, пишешь в type = "integer", в примере {"guid":"wweqweqeqweq"}, и все валидно генерируется. Плюс если запрос отправляешь и указан для параметра, как у меня выше в примере, для code тип integer, а приходит строка, то тоже нет ошибок. Может для ответов схемы не нужны? Они не валидируются никак, туда можно писать что хочешь, хоть type="wqeqweqweq". В интерфейсе сгенерированном они не отображаются, заменяются примерами ответов из examples или из example в схеме, или из example в свойстве. Вдруг кому-нибудь пригодиться, поэтому напишу - приоритет у example такой -
- examples в mediaType, потом example в schema где описан oneOf, потом schema где тип array, потом у items и у property. То есть те, что выше, те имеют больший приоритет.
Sergey Ilichev, если я правильно вас понял, то в этих аннотациях можно написать вообще всё, что угодно - и нет никакой гарантии, что это будет отражать реальное положение вещей. И дело, кстати, не в PHP. В том же NestJS, например, тоже можно сделать так, что схема не будет соответствовать реальному ответу.
похоже что так, или что-то не так описывается, то есть может нужно как-то по другому писать эти аннотации.
Дмитрий Свиридов, единственный плюс, который я вижу в описании схем ответов, это возможность посмотреть эти схемы в интерфейсе, например так
На сколько это нужно, решать каждому, мне кажется для ответов это не особо важно. Ну будет там в ответе длина указана строки? Типа для того чтобы в базе оптимизировать хранение? Так-то сам по себе пример нест не особо меньше информации. Описание выходных параметров разве что, типа что вот вы получите guid и вот его описание. Хотя могли бы это добавить куда-то удобней. В тот же examples, чтобы для каждого ответа, для каждого параметра описывать description, ну и даже типы, раз в схемах ответов все равно ничего не проверяется ни при генерации, ни при запросе.
Кстати, на счет oneOf, anyOf, allOf, я почитал, по задумке это (если я правильно понимаю) должно указывать, что то, что возвращается в ответе, должно соответствовать одной, любой или всем схемам. Но по факту вроде там вообще никакого соответствия не проверяется со схемой.
Sergey Ilichev, потому что это документация. Она подразумевает под собой не только пример, но и модель данных и её ограничения. Например, возьмёт фронтендер, посмотрит на пример, а там число 100 написано в каком-то поле. Как он только по примеру поймёт, что там, например, может быть число строго больше нуля и меньше 101?
Но по факту вроде там вообще никакого соответствия не проверяется со схемой
Эта генерация документации через аннотации не гарантирует соответствия примера схеме или же соответствия тому, что реально в вашем коде происходит. Это нужно рассматривать просто как некий инструмент для формирования OpenAPI по комментариям в коде. Следить за его актуальностью нужно самостоятельно. Но никто не мешает, кстати, написать OpenAPI вручную (я раньше так и делал) без этой библиотеки, но, на самом деле, в таком случае расхождений получается сильно много - и быстро теряется актуальность.
Дмитрий Свиридов, наверно так и есть. Хотя можно сделать и так чтобы хотя бы ответ, который приходит при отправке запроса, проверялся бы по схеме) А то так понаписать можно всего что угодно)
Тоже думаю, что наверно проще написать в swagger editor документацию и положить в swagger ui.
Так хотя бы не нужно искать по разным сайтам как пользоваться аннотациями)
Sergey Ilichev, "Тоже думаю, что наверно проще написать в swagger editor документацию и положить в swagger ui." - я выше писал, что так делал - уже ушёл от этого.
Во-первых, по мере роста проекта этот файл становится просто огромным - и в нём сложно ориентироваться.
Во-вторых, постоянно начинаются расхождения между этим файлом и валидаторами/сериализаторами в коде
В-третьих, при использовании этой библиотеки схемы можно держать прямо рядом с моделями и валидаторами - это уменьшает вероятность расхождений