Всем привет. В предыдущей статье мы рассказывали о нашей версии 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, на котором показываем примеры?
httpYac имеет более сложную установку и требует NodeJS для запуска, но даже с учетом этого, он минимум в два раза легковеснее других клиентов;
“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
Будем рады любой обратной связи и предложениям.