Цепочка запросов
Войдите один раз, сохраните токен и передавайте его из каждого запроса, которому он нужен, — с динамическими значениями и Idempotency-Key.
Большинству API нужен токен, который вы получаете при входе. В этом руководстве вы сохраните токен демо-магазина в
переменную из ответа на вход, будете передавать его целой папкой через её авторизацию, возьмёте значение из одного
ответа в следующий запрос и безопасно оформите заказ с Idempotency-Key.
- Время: 15 минут.
- Вам понадобится: рабочее пространство из руководства Ваше первое рабочее пространство с выбранным окружением Demo и запросом Auth › Sign in. В Alpenglow всё это уже собрано; откройте его, чтобы сравнить.
- Вы узнаете: про захваты из ответа, наследуемую авторизацию, динамические значения и значения ответа.
1. Сохраните токен из ответа на вход
- Откройте Auth › Sign in и отправьте его (⌘R).
- На вкладке Тело ответа переключите вид на JSON-дерево.
- Наведите указатель на строку
access_token. После значения появятся маленькие кнопки. Выберите ту, у которой в подсказке написано Сохранить в переменную…. - Во всплывающем окне Сохранить в переменную:
- Измените имя на
token. - В области действия выберите Окружение «Demo»: у каждого сервера свои токены.
- Убедитесь, что отмечено Секрет · в Связке ключей, никогда в файлах. Для имён вроде
tokenEcholot отмечает это сам. - Оставьте отмеченным Обновлять при каждой отправке · сохраняется с этим запросом.
- Измените имя на
- Нажмите Сохранить.
Откройте вкладку Переменные запроса. В разделе Из ответа появилась строка: token, из JSON, путь
$.access_token, сохраняется в Demo, секрет. Теперь каждая успешная отправка Sign in записывает новый токен в
{{token}}. Ответ со статусом 400 и выше или без этого значения переменную не трогает. Подробности — в разделе
захваты из ответа.

2. Передавайте токен из целой папки
Вместо того чтобы задавать авторизацию Bearer в каждом запросе, задайте её один раз для папки.
- Создайте папку
Orders(⇧⌘N). - Щёлкните Orders правой кнопкой и выберите Настройки папки….
- На вкладке Авторизация задайте Тип Bearer-токен и Токен
{{token}}. Нажмите Готово. - Щёлкните Orders правой кнопкой, выберите Новый запрос и назовите его
List orders. Задайте ему URL{{baseURL}}/orders. - Откройте его вкладку Авторизация. Тип — Наследовать, а в строке Использует сказано, что берётся Bearer-токен папки.
- Отправьте его.
Вы получите три заказа Хайди: ord_7Hk2Lw (отправлен), ord_8Jm4Qx (оплачен) и ord_5Fd9Ra (доставлен). Каждый новый
запрос в Orders передаёт токен так же. Запросы начинают с Наследовать: берётся авторизация ближайшей папки, а
затем рабочего пространства. О других типах см. авторизацию.
Если позже вы получите 401 Unauthorized, токен истёк: он действует час. Отправьте Sign in ещё раз, и токен
обновится.
3. Прочитайте значение из другого ответа
Следующий запрос берёт id первого заказа из ответа на List orders, так что вам никогда не придётся копировать его вручную.
- В Orders создайте запрос
Get order. - В его поле URL введите
{{baseURL}}/orders/, а затем{{$response. В списке появятся динамические значения из группы Ответы. Выберите Ответ, отфильтрованный JSONPath. - В открывшейся форме задайте Запрос — запрос List orders (
orders/list-orders) — и JSONPath$.items[0].id. Оставьте Сначала отправить в разделе Если ответа ещё нет. Нажмите Готово.
Теперь в URL лежит токен, обозначающий {{$responseJSONPath('orders/list-orders', '$.items[0].id')}}. Наведите на него
указатель, чтобы увидеть его текущее значение: ord_7Hk2Lw. Отправьте Get order, и вы получите этот заказ с его
позициями и доставкой. Если бы List orders ни разу не отправляли, Echolot отправил бы его первым.
4. Оформите заказ с динамическими значениями
Динамические значения создаются заново при каждой отправке. Используйте два из них в новом заказе.
-
В Orders создайте запрос
Create orderс методом POST и URL{{baseURL}}/orders. -
На вкладке Тело выберите JSON и введите тело. С помощью списка
{{вставьте Метка времени ISO 8601:{ "lines": [ { "sku": "TNT-MH-2P", "quantity": 1 }, { "sku": "PCK-TIT-30", "quantity": 2 } ], "note": "Placed from Echolot at {{$isoTimestamp}}" } -
На вкладке Заголовки добавьте заголовок
Idempotency-Key. В качестве значения введите{{и выберите UUID ({{$uuid}}). -
Отправьте его.
Ответ — 201 Created с заголовком Location вида /v1/orders/ord_…, а магазин возвращает ваш Idempotency-Key.
В заметке указано время отправки. Демо ничего не хранит, поэтому новый заказ потом получить нельзя. Все динамические
значения собраны в справочнике.

5. Посмотрите, что делает Idempotency-Key
Idempotency-Key сообщает серверу, что отправки с одним и тем же ключом — это один и тот же заказ, поэтому повторная
отправка не оформит его дважды.
- Отправьте Create order ещё раз. Id в
Locationменяется:{{$uuid}}создал новый ключ. - На вкладке Заголовки замените
{{$uuid}}фиксированным значением, напримерtutorial-order-1. - Отправьте дважды. В обоих ответах будет один и тот же id заказа.
Настоящие API используют ключ, чтобы отбросить повторный запрос, который уже был принят в первый раз. Echolot тоже его
использует: если удерживаемое открытым соединение закрывается до какого-либо ответа, он отправляет запрос повторно по
новому соединению, только если двойная отправка безвредна. Это верно для GET, PUT, DELETE и других безопасных или
идемпотентных методов, а также для любого запроса с заголовком Idempotency-Key. POST без него завершается ошибкой,
чтобы заказ никогда не оформлялся дважды у вас за спиной. Когда закончите, верните {{$uuid}}.
Ещё две вещи, которые проверяет магазин:
- Измените количество на
0и отправьте:422 Unprocessable Contentперечислит, что не так с каждой позицией. - Orders with OAuth 2 в Alpenglow получает токен по учётным данным клиента. Этим токеном можно читать заказы, но не
оформлять их:
POST /v1/ordersс ним отвечает403 Forbidden.
Дальше
- Тестирование API и запуск в CI: добавьте проверки и запустите всю цепочку целиком.
- Скрипты и тесты:
pm.environment.set()и родственные вызовы, когда захвата мало. - OAuth 2.0 и другие типы авторизации: пусть Echolot сам получает и обновляет токены.
Ваше первое рабочее пространство
Создайте рабочее пространство с нуля на демо-API: запросы, папка, окружение, секрет и Git.
Тестирование API и запуск в CI
Добавьте проверки в запросы, запустите их в Прогоне, а затем запустите то же рабочее пространство инструментом командной строки в GitHub Actions с отчётом JUnit.

