Всем привет. В предыдущей статье мы рассказывали о нашей версии HTTP клиента, которая основана на генерации OpenAPI файлов по Spring-контроллерам и Swagger UI в качестве готового интерфейса пользователя для работы с запросами. В комментариях к ней писали, что поддержка http файлов весьма актуальна, так как они используются во многих существующих проектах. Мы решили изучить этот вопрос подробнее и вот что из этого вышло…

Признаюсь честно, к своему стыду, я всегда думал, что http формат файлов и environment для их выполнения – это идея JetBrains и сугубо их внутренний закрытый продукт. Но спасибо пользователю @Rabestro и его комментарию к одной из статей по схожей тематике, который помог мне лучше разобраться в этом вопросе.

Немного истории

VSCode Rest Client

Оказывается, JetBrains были отнюдь не первыми в реализации HTTP клиента посредством написания запросов в *.http файле. Так, плагин для VSCode Rest Client увидел свет в марте 2016 года, что на 1,5 года раньше плагина от JetBrains. И в своей документации Rest Client явно ссылается на стандарт RFC 2616, который можно использовать для написания запросов. IDEA HTTP Client в своем баг трекере ссылается на стандарт RFC 7230. Это более свежая версия RFC 2616, хотя на настоящий момент они обе уже устарели и есть уже более новые версии. Таким образом, мы можем сделать вывод, что это не какой то кастомный язык для написания запросов, а полноценный стандарт. 

httpYac

Затем я познакомился с инструментом httpYac, вышедшем в марте 2021 года. Он не только предоставляет свой VSCode плагин для работы с .http/.rest файлами, но также имеет свой environment для их выполнения, оформленный в виде CLI “тулзы”. Получается, что уже есть готовая среда выполнения, которая умеет парсить и исполнять файлы с запросами и не зависит ни от какой IDE. 

IDEA HTTP Client

Работа с *.http файлами появилась в IntelliJ IDEA, начиная с версии 2017.3, которая вышла в ноябре 2017 года. И у меня возник вопрос, а есть ли у JetBrains готовая среда для исполнения запросов, оформленная в виде отдельной “тулзы”, как это сделано у httpYac? Оказывается, есть - IDEA HTTP Client CLI. Он был анонсирован в декабре 2022 года. Но самое интересное, что этот проект изначально был реализован энтузиастами в 2020 году, а уже в конце 2022 года перешел под крыло JetBrains.

А раз у нас уже есть готовая среда выполнения, да не одна, а несколько реализаций от разных разработчиков, то добавить в IDEA поддержку работы с *.http файлами выглядит совсем несложной задачей. Кстати, на сайте httpYac есть табличка сравнения инструментов для работы с HTTP запросами. Правда, сейчас она уже не совсем актуальна, так как в ней отсутствует поддержка CLI у JetBrains, хотя она есть.

Что в итоге получилось

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

В настройках Explyt Spring плагина можно задать путь для нужного environment’а. В качестве примера я буду использовать httpYac. Он более легковесный и имеет более понятный API, чем другие клиенты, так он позволяет выполнять конкретный запрос из файла по номеру строки. На мой взгляд, он также имеет более приятный вывод в консоль, благодаря цветовой гамме и что он по умолчанию форматирует ответ. В “HttpClient CLI Path” нужно указать полный путь до исполняемого файла. Если в операционной системе у нас установлена environment variable, можем использовать ее, как в примере выше.

Если у нас не установлено никакой среды исполнения запросов, есть кнопка “Download HttpClient Cli”, которая скачает IDEA HTTP Client CLI и пропишет нужный путь в настройках.

Почему мы предлагаем скачать клиента от JetBrains, а не httpYac, на котором показываем примеры? 

  1. httpYac имеет более сложную установку и требует NodeJS для запуска, но даже с учетом этого, он минимум в два раза легковеснее других клиентов;

  2. “IDEA HTTP Client CLI” требует JAVA для запуска.Так как IntelliJ IDEA – это JVM IDE, то у пользователя JAVA уже есть и будет проще начать ей пользоваться сразу.

Для работы в IntelliJ IDEA должны быть включены bundled плагины Shell Script и Terminal. С их помощью осуществляется запуск CLI инструментов и вывод результата.

На данный момент это выглядит так:

Мы можем:

  • выполнить весь файл целиком;

  • выполнить отдельный запрос;

  • выбрать Environmental файл (кнопка “+”) и указать конкретный env;

  • в "Additional command line args" указать дополнительные CLI аргументы, так как мы не заточены под один конкретный “тул” для работы с запросами.

Результат отображается в консоли Здесь можно увидеть, с какими параметрами была вызвана команда, что упрощает отладку и разбор "багов".

Заключение

На данный момент, у нас реализован первый прототип решения, который позволяет пользователю выбрать удобный ему CLI инструмент и использовать его для работы с http/rest файлами. Реализованы возможности выполнить файл целиком и есть “ран” лайн-маркеры для запуска конкретного запроса. 

Для начала мы бы хотели собрать обратную связь: будет ли это кому-то интересно/полезно? И если да, то мы будем дальше улучшать поддержку и удобство работы с http/rest файлов. 

На этапе прототипа у нас пока нет полноценной подсветки синтаксиса и автодополнений. А также если это будет востребовано, тогда нужно будет вынести данную логику в отдельный плагин, так как она напрямую на связана со Spring, в отличии от нашей реализации HTTP клиента на основе Spring аннотаций. Пишите, что думаете об этом в комментариях!

Скачать последнюю версию плагина можно тут или напрямую с GitHub Releases. Поддержка http/rest файлов доступена, начиная с версии 2*.1.3333.

Для обратной связи и сообщений об ошибках: github

Для общения: t.me/explytspringchat

Будем рады любой обратной связи и предложениям.

Комментарии (0)