Как использовать curl для тестирования REST API

Содержание:

Введение

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Данная статья предназначена для обучения основам взаимодействия REST API с помощью curl. Имейте в виду, что файлы и папки на вашем компьютере, скорее всего, будут отличаться от примеров в этой статье.

Предварительные условия

Для дальнейшей работы вам понадобятся:

  • Доступ к Unix-терминалу в любой среде Linux или macOS.
  • Знать, как открыть окно терминала.
  • REST API для взаимодействия. В качестве примера в данной статье мы используем https://jsonplaceholder.typicode.com.
  • Curl-утилита, установленная на вашем компьютере. На большинстве компьютеров с macOS и Linux она предустановлена. Если это не так, то вам необходимо ознакомиться с инструкциями по установке curl.

Давайте начнем с GET-запроса!

Curl — это «инструмент командной строки для передачи данных, заданных с помощью синтаксиса URL», что делает curl очень удобным инструментом для взаимодействия с REST API и другими веб-ресурсами. Curl имеет тысячи вариантов применения, но в данной статье мы рассмотрим лишь некоторые из них.

Допустим, у вас есть REST API, с которым вы хотите взаимодействовать. Например, https://jsonplaceholder.typicode.com/todos/1 возвращает данные в формате JSON, которые выглядят примерно так:

{
	"userId": 1,
	"id": 1,
	"title": "delectus aut autem",
	"completed": false
}

Хотя вы можете открыть URL из этого примера в веб-браузере, многие REST API не позволят сделать это. Давайте попробуем использовать curl.

В окне терминала введите curl https://jsonplaceholder.typicode.com/todos/1 и нажмите Enter. Вы должны получить результат, аналогичный этому:

Демонстрация базовой команды curl

Без каких-либо опций curl по умолчанию взаимодействует с сервером с помощью метода HTTP-запроса GET, который обычно используется только для получения данных.

Добавим опцию -o, чтобы сохранить результат в выходной файл, а не показывать его в окне терминала. Наберите curl -o test.json https://jsonplaceholder.typicode.com/todos/1 и нажмите Enter:

Демонстрация базовой команды curl с выходном файлом

При желании вы можете изучить более подробную информацию об этом виде взаимодействии. Для этого к любой команде curl можно добавить опцию -v. Введите curl -v https://jsonplaceholder.typicode.com/todos/1 и нажмите Enter:

Демонстрация базовой команды curl с выводом подробной информации

Использование различных методов HTTP-запросов с помощью curl

Теперь, когда вы знаете, как выполнить базовый запрос с помощью curl, мы можем попробовать использовать другие методы HTTP-запросов. Более подробно о методах HTTP-запросов можно прочитать в Википедии.

POST

Метод HTTP-запроса POST очень часто используется для создания или обновления данных на сервере. Для этого необходимо изучить несколько новых опций для команды curl:

-X [HTTP_METHOD] – Вы должны указать curl, какой метод HTTP-запроса использовать. Опция -X, за которой следует имя метода, позволяет это сделать.
-H [HTTP_HEADER] – При отправке данных на сервер нам необходимо указать серверу, как их интерпретировать. Например, это могут быть данные в формате JSON.
-d [YOUR_DATA] – Наконец, нам нужно указать, какие данные curl должен отправить на сервер.

Давайте объединим эти опции в одну команду:

curl -X POST -H 'Content-Type: application/json' -d '{"title": "foo", "body": "bar", "userId": 123}' https://jsonplaceholder.typicode.com/posts

Вы можете ввести или скопировать это в окно терминала и нажать Enter для отправки:

Демонстрация команды curl POST

Это очень много данных, чтобы попытаться поместить их в одну команду. Вы можете отправить данные файлом, чтобы облегчить процесс передачи и сделаеть его более простым в будущем.

Создайте новый файл data.json со следующими данными:

{
	"title": "foo",
	"body": "bar",
	"userId": 123
}

Если вы успешно создали его, вы сможете объединить файл, как показано ниже:

Демонстрация файла с данными

Теперь вы можете использовать этот файл как часть команды curl. Вместо того чтобы помещать данные в команду, можно ссылаться на файл с помощью опции -d @[FILENAME]. Попробуйте это сделать, набрав curl -X POST -H 'Content-Type: application/json' -d @data.json https://jsonplaceholder.typicode.com/posts и нажав Enter:

Демонстрация файла команды curl POST

PUT

Метод HTTP-запроса PUT часто используется для обновления существующих на сервере данных при взаимодействии REST API. Аналогично примеру с POST, при использовании команды curl мы хотим задать метод, данные и их формат.

Попробуем обновить существующий элемент. Введите curl -X PUT -H 'Content-Type: application/json' -d '{"title": "foo_updated", "body": "bar_updated", "userId": 123}' https://jsonplaceholder.typicode.com/posts/1 и нажмите Enter:

Демонстрация команды curl PUT

Вы можете использовать файл с данными так же, как и в случае с методом HTTP-запроса POST, используя команду -d @[FILENAME].

DELETE

Если необходимо удалить данные с сервера, то при взаимодействии REST API вы, скорее всего, будете использовать метод HTTP-запроса DELETE. По сравнению с предыдущими примерами этот метод является более простым. С помощью параметра -X DELETE задается метод HTTP-запроса DELETE и указывается URL конкретного сегмента для удаления. Попробуйте это сделать, набрав curl -X DELETE https://jsonplaceholder.typicode.com/posts/1 и нажав Enter:

Демонстрация команды curl DELETE

Стоит отметить, что многие REST API при использовании метода HTTP-запроса DELETE возвращают удаленные данные или демонстрируют осутствие данных.

OPTIONS

Иногда нам необходимо знать, какие типы запросов или данных мы можем отправлять на сервер. Для этого можно использовать метод HTTP-запроса OPTIONS.

При этом необходимо использовать опцию -v, которая была изучена ранее. Это позволит отобразить более подробную информацию, и вы увидите «опции», которые поддерживает сервер.

Давайте попробуем сделать это, набрав curl -v -X OPTIONS https://jsonplaceholder.typicode.com/posts и нажав Enter:

Демонстрация команды curl OPTIONS с выводом подробной информации

Прокрутив окно терминала, вы увидите информацию, подобную этой:

...
< access-control-allow-credentials: true
< access-control-allow-methods: GET,HEAD,PUT,PATCH,POST,DELETE
...

Это говорит о том, какие методы HTTP-запросов поддерживает сервер REST API. Также это свидетельствует о том, что сервер позволит вам пройти аутентификацию и использовать учетные данные.

Заключение

Теперь вы знаете об использовании curl для взаимодействия с серверами и REST API. Это очень полезный инструмент.

Перевод статьи «How to use curl to test a REST API».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *