Перейти к содержанию

Отличная альтернатива Postman⚓︎

Postman невероятно полезный инструмент, но иногда мне в нем не очень удобно делать некоторые вещи. Как-то давно я столкнулся с такой штукой как .http файлы и с тех пор периодически использую их для работы.

Что такое .http файлы?⚓︎

.http файлы представляют собой простой текстовый формат, который используется для хранения HTTP-запросов. Эти файлы позволяют разработчикам легко создавать, редактировать и выполнять HTTP-запросы из IDE, поддерживающей эти файлы. .http файлы особенно полезны при работе с RESTful API, так как они позволяют быстро тестировать различные конечные точки и параметры.

Преимущества использования .http файлов⚓︎

  1. Одним из основных преимуществ .http файлов является их простота. Так как они являются обычными текстовыми файлами, их можно легко создавать и редактировать с помощью любого текстового редактора. Это позволяет разработчикам быстро писать и изменять HTTP-запросы без необходимости изучать сложные инструменты или среды.

  2. .http файлы легко интегрируются с различными инструментами для разработки. Например, многие современные редакторы кода, такие как Visual Studio Code, поддерживают плагины, которые позволяют выполнять HTTP-запросы прямо из .http файлов. Это делает процесс тестирования API еще более удобным и быстрым. Для Visual Studio Code необходимо поставить плагин REST Client, кроме того .http файлы поддерживаются продуктами от Jetbrains и Microsoft Visual Studio (не в полном объеме).

  3. .http файлы имеют четкую и понятную структуру, что делает их легко читаемыми даже для новичков. Запросы в .http файлах могут быть разделены на несколько строк, что упрощает их понимание и модификацию. Это особенно полезно при работе со сложными API-запросами, которые содержат множество параметров и заголовков.

Как использовать .http файлы⚓︎

Создание .http файла⚓︎

Создать .http файл очень просто. Откройте любой текстовый редактор и сохраните новый файл с расширением .http. Например, можно создать файл example.http.

Написание HTTP-запросов⚓︎

Внутри .http файла вы можете писать свои HTTP-запросы. Вот пример простого GET-запроса:

1
2
3
GET api.asna.cloud/v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Accept: application/json

Разделение запросов в .http файлах⚓︎

Еще одной полезной функцией .http файлов является возможность разделения нескольких запросов в одном файле. Это позволяет хранить все необходимые запросы для тестирования определенного API в одном месте, что упрощает управление и организацию. Для разделения запросов используется специальный комментарий ###.

1
2
3
4
5
6
7
8
POST sso.asna.cloud:5000/connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

###

GET api.asna.cloud/v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Accept: application/json

Переменные в .http файлах⚓︎

Одной из мощных возможностей .http файлов является поддержка переменных. Это позволяет вам создавать более гибкие и переиспользуемые запросы. Переменные можно объявлять прямо в .http файле или загружать из внешних файлов.

Объявление переменных⚓︎

Переменные можно объявлять в начале .http файла следующим образом:

@baseUrl = https://api.asna.cloud

Теперь вы можете использовать эту переменную в своих запросах:

1
2
3
GET {{baseUrl}}/v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdGQzk0RDU4N0UzQzg4QUM0M0FDQkQyOEU0Njk4RDZCOTE3RkQyOUUiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJmOGxOV0g0OGlLeERyTDBvNUdtTmE1Rl8wcDQifQ.eyJuYmYiOjE0OTE1NzY2MDcsImV4cCI6MTQ5MTU4MDIwNywiaXNzIjoiaHR0cHM6Ly9zc28uYXNuYS5jbG91ZDoxODgxIiwiYXVkIjpbImh0dHBzOi8vc3NvLmFzbmEuY2xvdWQ6MTg4MS9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiRTQ1RDM0OTEtNzlFRS00RUVBLTkyQjItMjJDRUJFNEJCOEI1IiwiY2xpZW50X2FjY2VzcyI6WyJzdG9ja3MuZWRpdCIsInN0b2Nrcy5mdWxsX2FjY2VzcyIsInN0b2Nrcy52aWV3Il0sInNjb3BlIjpbImFwaSJdfQ.OvGjvdbOk6QI3CNRyjOmj5mSrUZ7v1LjWRgH9TjwhNTTKiEaww1iEr8CnSKOfpGUdhkFGiup8kzvW0PIsqrVZHEx2r5gmT9SO6orznDg-ESprgjjiBC-uYSSTzK_WmPZp-cjP4OVt8ovGY3ncNhrTYFmBy0CJh0XBtMmO5IkE9ASxyaw5Ou5by0SaMTF8Vh9ocE0Uaj8xf-m6ivKQYv_4gEsKs6XEjKBN0khfZGOvv1qQJ4iBn-fVtOqPUpv1ypcOskGZhVHo200ZjvPalbemV-51D45k1KZcE_K9qiYK8Y1vX_lzRDSaQI30PACuQc-VpB-WcCMAtVEEuo0paL2fw
Accept: application/json

Использование результата запроса в последующих запросах⚓︎

Запросу можно дать имя

1
2
3
# @name login
POST sso.asna.cloud:5000/connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

В примере запросу дано имя login. Это имя можно использовать для получения доступа к результату запроса

1
2
3
4
5
@authToken = {{login.response.body.access_token}}

GET {{baseUrl}}/v5/stores/BC164E55-B612-4A04-800B-34CCF10F6858/stocks HTTP/1.1
Authorization: Bearer {{authToken}}
Accept: application/json

Полный пример

@сlientId=clientId
@сlientSecret=password
@baseUrl=api.asna.cloud

# @name login
POST sso.asna.cloud:5000/connect/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

client_id={{сlientId}}&client_secret={{сlientSecret}}&grant_type=client_credentials

###

@authToken = {{login.response.body.access_token}}

GET {{baseUrl}}/v5/stores/{{сlientId}}/orders_exchanger?since=2024-06-02&excludeOwn=true HTTP/1.1
Authorization: Bearer {{authToken}}

В начале файла вы задаете переменными логин и пароль, затем создаете именованный запрос к серверу авторизации. После его успешного выполнения, в переменной @authToken сохранится токен авторизации. Следующий запрос будет использовать его для получения остатков по заданному клиенту.

Выполнение запросов⚓︎

Для выполнения запросов необходимо открыть .http файл в редакторе, который поддерживает этот формат

Пример из Visual Studio Code

Как мы видим, над каждым запросом появилась кнопка Send Request, нажав на которую вы отправите запрос на сервер.

Пример из Jetbrains

Некоторые проблемы⚓︎

По собственному опыту, могу сказать что Visual Studio Code не очень любит, когда возвращаемый результат очень большого размера, но для небольших запросов все ок. IDE от Jetbrains сохраняют ответы большого размера сразу в файл.

Заключение⚓︎

Я не ставил для себя задачи описать все возможности, да и не знаю я всего. Более детально про функционал .http файлов вы можете прочитать в документации к плагину REST Client для Visual Studio Code. Ну а от меня вишенка на торте - я добавлю возможность генерации таких файлов в Константина.