Pull to refresh

Comments 21

Буквально сегодня стояла задача сделать запрос сервлету и распарсить ответ. Использовал 1ый способ, завтра попробую остальные. Спасибо.
Swagger, по-моему личному опыту, это лютая боль в нижней части спины.
Перегенерация клиентов на любое изменение апи, причем кривыми инструментами со странными зависимостями, отсутствие поддержки предыдущих версий API, и прочая прочая.

Есть тут люди которым он зашел? Может быть у нас его готовят неправильно.

После того, как мне пришлось влазить в исходники swagger и править там кусочек, что бы получить сгенеренный корректный код клиента, я решил, что не поленюсь руками код писать. По крайней мере это более предсказуемо по срокам.


Авторы интерфейса сказали "а мы swagger используем только для документирования и у нас проблем нет".


Уже не помню в чем там была проблема… года 2 назад было. Но осадочек остался.

Есть.

Только ведь не важно что будет (swagger, WSDL и т.п.) если проблема в:
Перегенерация клиентов на любое изменение апи, ..., отсутствие поддержки предыдущих версий API


У нас приняты правила:
  1. мажорная версия АПИ в урле
  2. в рамках мажорной версии данной функции обратная совместимость обязательна
  3. параметры, которые добавляются в запросы в рамках минорных версий, не могут быть обязательными
  4. клиенты и серверы толерантны к данным, которые не оговорены в АПИ


Таким образом, из-за пункта 1 любое несовместимое изменение просто добавляется в версию выше по другому урлу. Плюс: клиентскую часть не требуется перегенерировать с выпученными глазами. Плюс: Не требуется проводить синхронных установок на ребочку и т.д.

Из-за пунктов 2 и 3, при поднятии минорной версии, клиентов не требуется перегенерировать, если им не требуется новые параметры. Плюс: можно продолжать работать на старых клиентах и всё должно работать.

Плюс: из-за пункта 4 любой из участников может обновиться независимо от других. Если у клиент не использует новые функции, то он может уехать на рабочку раньше сервера и это не сломает обмен. Может сервер уехать на рабочку раньше клиентов и новые параметры возвращаемых значений не сломают клиента.

Из минусов:
  1. программистам работать (а точнее думать) приходится.
    Надо держать совместимость старых версий до какого-то срока (обычно полгода-год). Надо писать код, который не уйдёт в разнос, если появились какие-то данные или неожиданные возвращаемые значения.
  2. нужна строгая дисциплина. Ну тут ревьюверы помогут, ибо если они пропустят изменение, нарушающее правила, то им же и придётся судорожно обновлять все системы

А еще можно взять OkHttp Client и обернуть в JsonNode(Jackson)
>> Одна из задач с которой сталкивается 99.9% разработчиков — это X
Очень умиляют такие обобщения.

Сенсация! Уже 100% россиян подключены к интернету! Таковы результаты опроса, проведённого на днях в интернете...


Он же не уточнил, о каких разработчиках идёт речь? Вот из них и будут те проценты. Простим его. Сочтём гиперболой.

А если внешний API не REST, а GraphQL? Тот же RestTemplate становится совсем неудобен.
Как можно было забыть о Retrofit? Очень популярная библиотека (звезд на github больше чем у Spring Boot). Пишешь интерфейс + пару аннотаций и вперёд!
Если уж на то пошло, то начиная с 9ой версии — в Java добавили HTTP Client — так что способ через HttpURLConnection вообще можно считать устаревшим
Да можно вообще напрямую с сетевой картой работать, байтики туда сюда гонять, чоуж там.

Если не придется делать общий пул или держать несколько клиентов, то можно попробовать Unirest, это обертка над apache http components.
Но у него есть два существенных минуса:


  • Все написано на статиках с единственным экземпляром синхронного и асинхронного клиента.
  • Долгое время не обновлялся.

Для решения этих проблем существует форк с объектным стилем, однако если они появятся, то проще обернуть http client самому.

Немного в сторону: если кому надо SOAP дергать, вместо тяжелых Apache CXF и JAX-WS пригодится очень лайтовая библиотечка: https://github.com/reficio/soap-ws

Также можно упомянуть Unirest и OkHTTP, они идут как дефолтные в разделе code от Postman
UFO just landed and posted this here
Sign up to leave a comment.