Проверьте REST API с помощью curl

Проверьте REST API с помощью curl

 

1. обзор

В этом руководстве дается краткий обзор тестирования REST API с использованиемcurl..

curl is a command-line tool for transferring data and supports about 22 protocols including HTTP. Эта комбинация делает его очень хорошим специальным инструментом для тестирования наших REST-сервисов.

Дальнейшее чтение:

Тестирование веб-API с коллекциями почтальонов

Узнайте, как создать коллекцию Postman, которая может тестировать REST API

Read more

Руководство по гарантированному отдыху

Изучите основы REST-гарантированной - библиотеки, которая упрощает тестирование и проверку REST API.

Read more

2. Параметры командной строки

curl supports over 200 command-line options. И мы можем иметь ноль или более из них, чтобы сопровождать URL в команде.

Но прежде чем использовать его в своих целях, давайте взглянем на два, которые сделают нашу жизнь проще.

2.1. Подробный

Когда мы тестируем, рекомендуется установить подробный режим:

curl -v http://www.example.com/

В результате команды будут предоставлять полезную информацию, такую ​​как разрешенный IP-адрес, порт, к которому мы пытаемся подключиться, и заголовки.

2.2. Выход

По умолчанию curl выводит тело ответа на стандартный вывод. При желании мы можем предоставить опцию вывода для сохранения в файл:

curl -o out.json http://www.example.com/index.html

Это особенно полезно, когда размер ответа велик.

3. Методы HTTP с curl

Каждый HTTP-запрос содержит метод. Наиболее часто используемые методы - это GET, POST, PUT и DELETE.

3.1. GET

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

При запуске локального экземпляра службы на порту 8082 мы использовали бы что-то вроде этой команды для выполнения вызова GET:

curl -v http://localhost:8082/spring-rest/foos/9

А поскольку у нас включен подробный режим, мы получили бы немного больше информации вместе с телом ответа:

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8082 (#0)
> GET /spring-rest/foos/9 HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.60.0
> Accept: */*
>
< HTTP/1.1 200
< X-Application-Context: application:8082
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 15 Jul 2018 11:55:26 GMT
<
{
  "id" : 9,
  "name" : "TuwJ"
}* Connection #0 to host localhost left intact

3.2. POST

Мы используем этот метод для отправки данных в службу приема. И для этого мы используем параметр данных.

Самый простой способ сделать это - вставить данные в команду:

curl -d 'id=9&name=example' http://localhost:8082/spring-rest/foos/new

или передайте файл, содержащий тело запроса, в опцию data следующим образом:

curl -d @request.json -H "Content-Type: application/json"
  http://localhost:8082/spring-rest/foos/new

Используя вышеупомянутые команды, как они есть, мы можем столкнуться с сообщениями об ошибках как следующее:

{
  "timestamp" : "15-07-2018 05:57",
  "status" : 415,
  "error" : "Unsupported Media Type",
  "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message" : "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
  "path" : "/spring-rest/foos/new"
}

Это связано с тем, что curl добавляет следующий заголовок по умолчанию ко всем запросам POST:

Content-Type: application/x-www-form-urlencoded

Это также то, что браузеры используют в простом POST. В нашем случае мы обычно хотим настраивать заголовки в зависимости от наших потребностей.

Например, если наш сервис ожидает тип содержимого json, то мы можем использовать опцию -H, чтобы изменить наш исходный запрос POST:

curl -d '{"id":9,"name":"example"}' -H 'Content-Type: application/json'
  http://localhost:8082/spring-rest/foos/new

В командной строке Windows нет поддержки одинарных кавычек, таких как Unix-подобные оболочки.

В результате нам пришлось заменить одинарные кавычки на двойные; избегая их там, где это необходимо:

curl -d "{\"id\":9,\"name\":\"example\"}" -H "Content-Type: application/json"
  http://localhost:8082/spring-rest/foos/new

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

3.3. PUT

Этот метод очень похож на POST. Но мы используем его, когда хотим отправить новую версию существующего ресурса. Для этого мы используем опцию -X.

Без какого-либо упоминания о типе метода запроса, curl по умолчанию использует GET. Поэтому мы явно упоминаем тип метода в случае PUT:

curl -d @request.json -H 'Content-Type: application/json'
  -X PUT http://localhost:8082/spring-rest/foos/9

3.4. УДАЛЯТЬ

Опять же, мы указываем, что хотим использовать DELETE, используя опцию -X:

curl -X DELETE http://localhost:8082/spring-rest/foos/9

4. Пользовательские Заголовки

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

Например, чтобы изменить заголовок хоста, мы делаем это:

curl -H "Host: com.example" http://example.com/

Чтобы отключить заголовок User-Agent, мы вводим пустое значение:

curl -H "User-Agent:" http://example.com/

Наиболее распространенный сценарий при тестировании - изменение заголовков Content-Type и Accept. Нам просто нужно добавить к каждому заголовку префикс -H:

curl -d @request.json -H "Content-Type: application/json"
  -H "Accept: application/json" http://localhost:8082/spring-rest/foos/new

5. Аутентификация

service that requires authentication отправит обратно код ответа 401 - Unauthorized HTTP и связанный заголовок WWW-Authenticate.

Для базовой аутентификации мы можемsimply embed the username and password combination inside our request using the user option:

curl --user example:secretPassword http://example.com/

Однако, если мы хотимuse OAuth2 for authentication, нам сначала нужно получить access_token из нашей службы авторизации.

Ответ службы будет содержатьaccess_token:

{
  "access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3",
  "token_type": "bearer",
  "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91",
  "expires_in": 31234
}

Теперь мы можем использовать токен в нашем заголовке авторизации:

curl -H "Authorization: Bearer b1094abc0-54a4-3eab-7213-877142c33fh3" http://example.com/

6. Заключение

Мы рассмотрели использование минимальной функциональности curl для тестирования наших REST-сервисов. Хотя он может сделать гораздо больше, чем то, что обсуждалось здесь, для нашей цели этого должно хватить.

Не стесняйтесь вводить curl -h в командной строке, чтобы проверить все доступные опции. Служба REST, используемая для демонстрации, доступнаhere on GitHub.