-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: Поддержка генератора документации #48
base: develop
Are you sure you want to change the base?
Conversation
Это что-то явно крутое, мне надо время, чтобы въехать. К выходным думаю, доберусь. Спасибо! |
info.License = lic; | ||
} | ||
|
||
var contactSection = infoSection?.GetSection("Contact"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А что такое "Контакт" применительно к документации на API?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это собственно контакт (выводится в шапке страницы), некая сущность с которой можно связаться, если у потребителя api возникнут вопросы.
Обычно там или контакты конкретного человека указывают или ИТ отдела.
Визуально выглядет так
Вообще вот тут можешь пощупать как это работает.
Там сразу по идее должен у тебя должно подтянутся демо описание проекта.
http://editor.swagger.io/
Кстати, раз это WIP - с чем помочь? |
Собственно я в первом сообщении написал что там еще надо. Пока у самого руки не дошли(
Тут надо по большей части надо порассуждать \ попробывать как удобней писать код и сделать верное архитектурное решение как все это прокинуть в APIExplorer из ОСкрипта Начнем с 1. В шарпе все довольно просто ибо статическая типизация, он например смотрит что тип возр. значения у хттп метода "Pet", он читает все публичные свойства и делает "модель" (в терминах сваггера) и потом в документации мы видим что-то типа того В Оскрипте такой финт не прокатит ибо дин.типизация, в пхп юзают комменты вида "@return Pet" как то так, где Pet это пхпшный класс. Можно так же сделать аннотацию В свою очередь в классе Pet будут свойства опять же с аннотациями типа:
чтобы все типы значений прокинулись корректно. |
А можно пойти путем 1Сным и спарсить типичный коммент для процедур \ функций
или такие
|
я за второй вариант, ибо 1С-совместимо и не будет вызывать вопросов. |
А как же возврат представлений/результатов? Да ещё и динамический иногда: если все хорошо, то вьюха, а иначе 500? |
А так первое прям попахивает entity :) |
Сваггер же больше про документацию АПИ, а какие там вьюхи.
Кстати в документации сваггера возвращаемый тип "файл" тоже имеет тип строка с форматом binary или byte. Возврат кодов состояний можно сделать так:
|
Сначала подумал про entity framework, а потом вспомнил, что мне на инфостарте Лустин или Сосновый говорил про твой ОРМ, это ты его и имел ввиду как я понял)) Вообще может не с того места зашел, вместо внедрения в код самого проекта, можно было бы сделать возможность добавлять "плагины" для движка, которые бы имели доступ в ConfigureServices \ Configure, а там уже делай что хочешь, тогда можно бы было сделать все тоже самое, что я и щас сделал, но вынести логику генерации в оскрипт, а тут мы уже имеем @EvilBeaver что думаешь? |
@Archlord42Ru я понимаю про swagger. я скорее про то, что oscript.web - это не только голые http-сервисы, возвращающие данные (то бишь бэкэнд). это еще и фреймворк для построения приложений. первый пример - odminus, который веб-обертка над rac. |
да, его) просто аннотации с типами над переменными класса - это прям оно :) в целом идея со сваггером очень клевая и полезная! просто нужно учесть особенности фреймворка. |
вот в том то и дело, сваггер штука узкоспециализированная и изначально я думал как сделать так, чтобы его небыло в основном проекте ибо нужно оно будет не такому большому количеству людей. |
@Archlord42Ru я могу тебе просто дать права на пуш в этот проект и ты будешь не пулреквестить, а напрямую пилить в движок? Тут явно много экспериментирования потребуется, поэтому открытие/обсуждение реквестов, кажется преждевременным. Такое удобно, когда уже есть видение по той или иной теме. Здесь его нет и удобнее просто кодить и смотреть что получается, не? |
@EvilBeaver давай, создам ветку буду там экспереминтировать. |
Можно просто эту же ветку запушить в другой ремоут |
@nixel2007 ну можно и так, тут щас главное заиметь время на эксперименты) |
Чо-чо сделать? |
@EvilBeaver я думаю он имеет ввиду текущую ветку закинуть в основной репо и с ней продолжить работать. |
Именно.
Отправлено с помощью BlueMail
На 26 нояб. 2018 г., 0:52, в 0:52, Dmitriy Korolev <[email protected]> написал:п>@EvilBeaver я думаю он имеет ввиду текущую ветку закинуть в основной
…репо и с ней продолжить работать.
--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
#48 (comment)
|
Вам чиз одним писом или наслайсить? (с)
Отправлено с помощью BlueMail
На 26 нояб. 2018 г., 0:16, в 0:16, Andrei Ovsiankin <[email protected]> написал:п>> Можно просто эту же ветку запушить в другой ремоут
…
Чо-чо сделать?
--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
#48 (comment)
|
@EvilBeaver оп, я только что занотайсил, что экстеншены уже сделаны лонг тайм эгоу :) |
Да, компилятор не доделан, т.к. эти API не работают в netstandard2.0 |
#47
Пока я собрался сделать ПР.
@EvilBeaver уже добавил поддержку роутинга по атрибутам и корректное заполнение селекторов, что сильно облегчило внедрение.
Генератор работает на основе проекта Swashbuckle
https://github.com/domaindrivendev/Swashbuckle.AspNetCore
Сейчас работает UI и генератор JSON для сваггера.
Модуль включается через метод "ИспользоватьДокументацию" по аналогии с "ИспользоватьМаршруты"
UI доступен по адресу host:port/swagger
JSON для UI находится по адресу host:port/swagger/{version}/swagger.json
Метаданные, включая версию вынес в конфиг файл (в нашем случае appsettings.json), в секцию "Info", структуру глянуть пока тут
https://github.com/ArchLord42RU/OneScript.Web/blob/e706537104aaeb69e049e7e39fe4e3249d3ae8e3/src/OneScript/Infrastructure/SwaggerServicePlugin.cs
Видны только методы помеченные аннотацией Route\Маршрут(xxx)
Замеченные проблемы:
Нет описания возвращаемого значения, точней оно всегда ActionResult
Все методы имеют OperationId "ResultAction" (автоматом присваивается имя метода), не очень страшно, но UI тупит из-за этого, если сделать маппинг на OS методы, то хз как там будет с кириллицей.
Для UI сейчас захардкожен добавленный эндпоинт, надо бы его из конфига грузить.
https://github.com/EvilBeaver/OneScript.Web/compare/develop...ArchLord42RU:feature/Swagger?expand=1#diff-cf462c11ed5d57c1216462ff171014f7R199
Нет поддержки версионированного описания API (а надо ли?)