Skip to content

Latest commit

 

History

History
222 lines (147 loc) · 12.6 KB

use-methods-with-curl.md

File metadata and controls

222 lines (147 loc) · 12.6 KB

Практическое занятие: Используем методы при помощи curl

Наш пример API прогноза погоды не позволяет использовать что-либо, кроме метода GET, поэтому для этого упражнения, чтобы использовать другие методы с curl, мы будем использовать API-интерфейс petstore. На самом деле мы не будем использовать интерфейс Swagger (о чем мы поговорим позже), на данный момент нам просто нужен API, с помощью которого мы можем создавать, обновлять и удалять контент.

В этом примере с помощью Petstore API мы создадим нового питомца, обновим его, получим id питомца, удалим его, а затем попытаемся получить удаленного питомца.

Создание питомца

Обновление питомца

Получение имени питомца при помощи ID

Удаление питомца

Импорт curl в Postman

Экспорт Postman в curl

Создание питомца

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

Многие API требуют публикации запросов, содержащих сообщения JSON в теле. Параметры тела запроса часто зависят от настроек вашего сервиса. Список пар ключ-значение JSON, которые принимает API, называется «Модель» на дисплее интерфейса Swagger.

  1. Создаем текстовый файл и пишем в нем следующий код (эта информация будет передана в параметре -d curl запроса):
{
    "id": 123,
    "category": {
        "id": 123,
        "name": "test"
    },
    "name": "fluffy",
    "photoUrls": [
        "string"
    ],
    "tags": [
        {
            "id": 0,
            "name": "string"
        }
    ],
    "status": "available"
}
  1. Изменим значение в первом id и поменяем кличку с "fluffy" на какое-нибудь другое

Лучше использовать уникальный id и такую кличку, которую вряд ли кто придумает. Также не стоит начинать id с "0".

  1. Сохраняем наш файл в формате .json в каталоге, к которому можно легко получить доступ с терминала, например, в пользовательском каталоге (на Mac, Users / YOURUSERNAME - заменяем YOURUSERNAME реальным именем пользователя на вашем компьютере).

  2. В Терминале /командной строке переходим в каталог с сохраненным файлом.

Для перехода по каталогам:

  • На MacOS находим свой текущий рабочий каталог, набрав pwd. Переход на уровень выше при помощи команды cd ../. Переход на уровень ниже при помощи команды cd pets, где pets - это имя каталога, в который нужно попасть. Вводим ls, чтобы просмотреть содержимое каталога.
  • На Windows смотрим в строку пути, чтобы понять в какой директории находимся. Переход на уровень выше при помощи команды cd ../. Переход на уровень ниже при помощи команды cd pets, где pets - это имя каталога, в который нужно попасть. Вводим dir чтобы посмотреть список директорий в текущей директории.
  1. После того, как вы перешли в Терминале/командной строке в каталог с сохраненным JSON файлом, создаем нашего питомца следующим curl запросом:
curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d @mypet.json "http://petstore.swagger.io/v2/pet"

Content-Type указывает тип контента, представленного в теле запроса. Accept указывает тип контента, который мы примем в ответе.

Ответ будет выглядеть примерно так:

{"id":891654,"category":{"id":4,"name":"testexecution"},"name":"SpeedDemon","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}

Проверьте, что в ответе кличка именно вашего питомца.

Не стесняйтесь выполнить этот же запрос несколько раз. REST API являются «идемпотентными», что означает, что выполнение одного и того же запроса более одного раза не приведет к дублированию результатов (мы просто создаем одного питомца, а не нескольких питомцев). Тодд Фредрих объясняет идемпотентность, сравнивая ее с беременной коровой. Допустим, вы привели быка, чтобы забеременеть. Даже если бык и корова спариваются несколько раз, результатом будет всего одна беременность, а не беременность для каждого сеанса спаривания.

Обновление питомца

А что если питомец не любит свое имя?

Изменим ему имя на другое используя метод обновления.

  1. В файле .json сданными питомца изменим его имя/

  2. Вместо метода POST используем метод PUT для обновления имени (в остальном запрос не меняется):

curl -X PUT --header "Content-Type: application/json" --header "Accept: application/json" -d @mypet.json "http://petstore.swagger.io/v2/pet"

В ответе будет новое имя питомца.

Получение имени питомца при помощи ID

Теперь узнаем имя питомца, передав его ID в конечную точку /pet/{petID}:

  1. В файле .json скопируем значение id питомца.

  2. В команде curl заменим 51231236 на id своего питомца и узнаем информацию о нем:

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/51231236"

В ответе будет информация о нашем питомце:

{"id":891654,"category":{"id":123,"name":"test"},"name":"Beatle","photoUrls":["string"],"tags":[{"id":0,"name":"string"}],"status":"available"}

Можно отформатировать JSON, вставив его в инструмент форматирования JSON

{
    "id": 891654,
    "category": {
        "id": 123,
        "name": "test"
    },
    "name": "Beatle",
    "photoUrls": [
        "string"
    ],
    "tags": [
        {
            "id": 0,
            "name": "string"
        }
    ],
    "status": "available"
}

Удаление питомца

"Извини, сынок, собака была бешеной, пришлось пристрелить" (© "Маска" фильм, 1994)

  1. Для удаления питомца используем метод DELETE. В примере ниже меняем 5123123 на id своего питомца:
curl -X DELETE --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Теперь проверим, получилось удалить питомца. Используем метод GET в этой же команде

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Ответ будет примерно таким:

{"code":1,"type":"error","message":"Pet not found"}

Этот пример позволил нам увидеть, как можно работать с curl для создания, чтения, обновления и удаления ресурсов. Эти четыре операции называются CRUD и являются общими почти для каждого языка программирования.

Хотя Postman, вероятно, проще в использовании, curl используется на уровне мощности. Команды тестирования часто создают сложные тестовые сценарии, которые повторяют множество запросов curl.

Импорт curl в Postman

Можно импортировать команды curl в Postman выполняя следующее:

  1. Открываем новую вкладку в Postman и нажимаем Import в левом верхнем углу.

  2. В диалоговом окне выбираем вкладку "Paste Raw Text" и вводим команду:

curl -X GET --header "Accept: application/json" "http://petstore.swagger.io/v2/pet/891654"

Указываем свой Id питомца и проверяем, что нет лишних пробелов.

import

  1. Нажимаем на кнопку Import

  2. Закрываем диалоговое окно, если не закрылось автоматически.

  3. Нажимаем кнопку Send (Если питомец был удален, то будет выдана ошибка "Pet not found")

Экспорт Postman в curl

Можно экспортировать Postman в curl, выполнив следующие действия:

  1. При желании выбираем один из наших запросов API OpenWeatherMap в Postman.

  2. Нажимаем кнопку Code

  3. Выбираем curl в выпадающем списке.

  4. Копируем отрывок кода

curl -X GET \
    'https://api.openweathermap.org/data/2.5/weather?lat=37.3565982&lon=-121.9689848&units=imperial&appid=fd4698c940c6d1da602a70ac34f0b147' \
    -H 'Postman-Token: de0da6b7-1dbc-44d6-acc1-9741f05a7bf1' \
    -H 'cache-control: no-cache'

Вы можете видеть, что Postman добавляет дополнительную информацию заголовка (-H 'Postman-Token: de0da6b7-1dbc-44d6-acc1-9741f05a7bf1' \ -H 'cache-control: no-cache') в запрос. Эта дополнительная информация заголовка не нужна и может быть удалена.

  1. Удаляем обратный слэш и разрывы строк. На Windows еще меняем одинарные кавычки на двойные.

  2. Вставляем команду curl в терминал и смотрим результат.

curl -X GET "https://api.openweathermap.org/data/2.5/weather?lat=37.3565982&lon=-121.9689848&units=imperial&appid=fd4698c940c6d1da602a70ac34f0b147"

Благодаря функциям импорта и кода Postman можно легко переключаться между Postman и curl.

🔙

Go next ➡