Здравствуйте, Pauel, Вы писали:
P>·>Это видимо только ты не понял у кого проблемы. Проблема у Ночного Смотрящего, с которым я тут непосредственно беседую. Именно он перебрал кучу кодогенераторов, плюнул и предложил писать всё ручками.
P>Сам подумай, что это значит — кодогенераторы в общей массе отстой. И именно ты топишь за использование тех, которые отстой.
Спорить не буду, ибо не важно это. Мой тезис, что
схемогенераторы — ещё более отстой, чем
кодогенераторы.
P>>>Если это про OpenApi, то с ним большие проблемы. О чем и речь.
P>·>Т.е. твой вариант — не использовать никакой openapi и весь код писать руками, как деды завещали и Ночной Смотрящий делает. Так? Или какую альтернативу ты предлагаешь?
P>Очевидно, что не так. Я пишу — использовать проверенную оттестированую либу, но тебе мерещится "писать весь код руками"
Угу. Так используй проверенную оттестированную либу для кодогенерации.
Кто запрещает-то?
P>·>Очень даже зависимо. Вручную сделанный openapi проще поддерживать во вменяемом состоянии.
P>Как мы выяснили, у OpenAPI проблема не с манифестом, а с кодогенерацией.
P>Поскольку кодогенераторы для OpenAPI кривые, шо сабля, то тебе надо точно знать фичи кодогенератора, и избегать лишнего в манифесте
P>В противном случае лишняя строчка в манифесте или сломает клиент, или сломает сервер, или просто проигнорится
P>И то, и другое, и третье есть проблема
И чем поможет схемогенератор?
P>·>Ты как-то упустил слово _таких_. Этот подход решает вполне определённый класс проблем. Но, ясен пень, не решает все проблемы.
P>А раз не решает все, то часть останутся на проде. Гы-гы. Откуда и следует, что нужно тестировать и прод. Например — при обновлении 3rd party зависимостей.
Нет, не следует.
P>>>Соответственно если у тебя есть тесты прода — пусканул после обновления их сервиса, выявил проблемы, и до того, как юзеры проснулись, уже всё пофиксано.
P>·>Чтобы пускануть тесты в проде и выявить эту проблему, в этом самом проде уже должно оказаться их обновление.
P> Алё — они поменяли свой сервис глядя в свои тесты. И подломали некоторые запросы твоего сервиса.
Это и лечится SIT.
P>·>И выкатил в прод без тестов интеграции с вами? Так тут проблема в том, что кто-то что-то выкатывает в прод без тестов.
P>Это норма, а не проблема. Крупные вендоры апи имеют десятки и сотни тысяч консумеров. Ты для них один из сотен тысяч.
Про conformance tests я уже тоже рассказывал.
P>Например, ты заюзал sendgrid или mailgun. Они трохи обновились. Ты же фанат емейлов и всё такое. И вот после их обновления часть ваших юзеров перестала получать уведомления. Гы-гы.
P>Пускаешь тесты прода и видишь, что емейлы таки глючат. Опаньки!
Нормальные вендоры предоставляют средства для тестирования. Ищем для первого упомянутого:
https://docs.sendgrid.com/ui/sending-email/email-testing
Те вендоры, которые не могут это обеспечить либо посылаются лесом, либо, если совсем выбора нет, монополисты, требуют очень пристального внимания.
P>>>То есть, вы не смогли промигрировать код на нужную версию яп — всё, большой проект, оло-ло-ло-ло!
P>·>Что значит "не смогли"? Тут всё просто. Бюджета нет, проект в состоянии EoL, команду разогнали — никто мигрировать не будет. Ты в большой организации никогда не работал? +100к работников чтобы...
P>Тогда это не признак большого проекта, а скорее признак тухлого проекта, который еле держится на плаву.
И что?
P>·>Совершенно верно, и не поспоришь — лучше быть здоровым и богатым, чем больным и бедным. Ну так бери проверенное протестированное решение и в contract-first с openapi, я разрешаю.
P>Мы уже выяснили — бредогенераторов для openapi 100500 единиц, и почти все из них или не подходят, или их нельзя использовать
И? В чём твой солюшн-то?
P>Типичный кейс — понадобилась некоторая фича, а кодогенератор не поддерживает, приплызд
Я сам их подпатчивал и даже пулл-реквесты засылал, мелочёвку правда, и их даже мержили, не рокет-сайнс совершенно.
P>>>В лучшем случае, я уже сказал, генератор не нужен. Он необходим только для экспорта АПИ.
P>·>Продолжай. Что за экспорт АПИ? И что с результатом экспорта потом делать?
P>Экспорт АПИ — это ты предоставляешь АПИ своего сервиса внешним консумерам.
Хорошо, уже теплее. Ради чего стараться-то? Что внешние консьюмеры будут с этим твоим экспортированным АПИ делать будут?
P>>>Ты описал типичную картину для OpenAPI, независимо от того, генеришь манифест, или пишешь руками.
P>·>Очень даже зависимо. Т.к. цепочка жонглирования становится короче и количество сущностей уменьшается (не нужно писать метаданные, не нужен их парсер и схемогенератор).
P> Теоретик?
P>1 Тебе надо держать в уме возможности кодогенератора. Заюзал ты ResponseHeaders, а у тебя такое не поддерживается. Гы-гы.
То же и со схемогенератором. Или он у тебя универсальный всемогутер?
P>2 Метаданные парсить не нужно, это типизированый интерфейс, по которому генерить что угодно легко и просто.
А надо-то генерировать не что угодно, а только то, что умеет openapi.
P>3 Вместо схемогенератора у тебя кодогенератор, при чем — два штуки, каждый со своими особенностями, клиент и сервер.
У тебя не просто схемогенератор, а схемогенератор+кодогенератор. Иначе генерить схему без последующей кодогенерации — зря электричество жечь.
Сделать два кодогенератора проще, чем схемогенератор+кодогенератор.
P>·>Что значит "взять"? У тебя оно уже вроде есть, но генерится.
P>"Взять" — подставляем вместо spec в твоей форумуле успеха OpenAPI, и проверяем твою гипотезу
P>И оказывается, что именно здесь получается бред, который ты сам же и описал.
Так у тебя бреда получается ещё больше.
P>>>Приплызд!
P>·>А абсолютно всемогущий безбажный генератор спеки из развешанных метаданных вам бог ниспосылает. Счастливчики, не всем так везёт, вот Ночному Смотрящему и тем погромистам из restapi.moedelo.org не повезло, например.
P>С генератором спеки гораздо проще. Кодогенератор это намного более сложная задача.
P>Я например писал и то, и другое. Кодогенератор это хтонический ужос по сравнению с генерацией джсон по метаданным.
Спекогенератор без кодогенератора не нужен. Так что задачу создания кодогенератора решать всё равно придётся. Единственно, чем ты можешь парировать, это тем, что решение задачи кодогенератора ты можешь спихнуть на других и всё ещё получить свою зарплату за "успешно" сданный проект.
P>>>Это проблема — пока найдешь нужную комбинацию, вспотеешь. А если у тебя уже готовый проект, то втиснуть него нечто иное не факт, что выйдет.
P>·>А сгенерить нечто полезное почему выйдет из произвольно написанного готового проекта на произвольном фреймворке?
P>Генерится не из произвольно написаного кода, а из метаданных которые предоставляются либой. Они по своей природе навешиваются на что угодно без проблем.
Я знаю. Только это всё усложняет.
P>>>И тут приходится писать кодогенератор самому, т.к. другого выхода нет.
P>·>Так же придётся писать спекогенератор, что Ночной Смотрящий рассуждал 2 года назад: "большая работа, включающая допиливание swashbuckle на предмет добавления в swagger.json дополнительной метаинформации о семантике методов".
P>Он пишет про другое — ты внимательно прочитай.
Я прочитал и понял именно так. Если у тебя есть другая интерпретация, выкладывай.
P> компилер говорит тебе, что выхлоп компилируется. А что выхлоп нерабочий или содержит не то, или не содержит того, никакой компилер тебе не подскажет.
>> Сделать работающее решение очень просто, именно поэтому "генераторов кода для него вагон и маленькая тележка, все поддерживают разные архитектуры клиента-сервера".
P>Наоборот — генераторы приходится писать, потому что они в основной массе ни на что не годятся. Берешь генератор кода, и вдруг оказывается, что в генеренном коде нужен хук для инструментирования.
P>А его нет. Гы-гы. Надо писать новый генератор, потому что допилить напильником не выходит из за GPL лицензии.
Ну зашли пулл-реквест.
Впрочем, мне не доводилось видеть такого, обычно такие генераторы предоставляют возможность конфигурации кастомнымными шаблонами.
>> На порядок проще, чем придумывать и развешивать метаданные, добавлять дополнительную метаинформацию, обрабатывать всё это дело и пытаться сгенерить хоть что-то полезное из этого, именно поэтому лишь "чисто теоретически я знаю как все таки сделать нормальный генератор".
P>Еще раз — не надо придумывать метаданные. Алё, ты вообще читаешь? Берем проверенную либу, закладываемся на её возможности.
Это не я их предлагаю придумывать, а Ночной Смотрящий, ему это и советуй.
P>>>То есть, твоя "доработка" по сложности даст примерно то же, что генерация JSON по метаданным. Примерно та же сложность сопровождения, примерно то же количество тестов.
P>·>Это неправда. Более того, тебе придётся такой генератор писать в любом случае, если ты хочешь хоть как-то использовать спеку.
P>Снова теоретизирования Нам нужно проверить, что схема валидная. Мы берем готовый тул, который умеет слать запросы по такой спеке, и пишем под него тесты. Здесь у нас ровно 0 генеренного кода.
Тесты можно писать проще, без схемы и специальных тулов.
>> Единственное как можно "решить" эту проблему, это сваять какую-нибудь хрень, вывалить сгенерённую спеку клиентам и сказать, что это их проблема что они потом будут с ней делать. Это именно то, что сделали погромисты тутАвтор: varenikAA
Дата: 07.09.20
.
P>Ты высек сам себя — по твоей ссылке пример работы бредо кодогенератора. Этот бредогенератор такое нагенерил, что ни руками вычистить, ни внятно использовать нельзя.
Ты читать точно умеешь?
https://restapi.moedelo.org/docs — это именно что сгенерённая swagger схема. Которую невозможно ни для чего полезного применить, даже глазками почитать и то проблема, тулзы на ней затыкаются.