# Первый запрос (/ru/docs/get-started/first-request)

Эта страница проведёт вас от пустого Echolot до отправленного запроса и прочитанного ответа. Она использует
[демо-API](/docs/tutorials/demo-api) по адресу `https://demo.echolot.dev` — ненастоящий магазин outdoor-снаряжения,
который отвечает без какой-либо настройки.

## 1. Создайте рабочее пространство [#1-create-a-workspace]

Рабочее пространство — это папка, в которой лежат ваши запросы, по одному файлу на запрос. Сначала создайте его.

<Steps>
<Step>

В окне приветствия выберите **Новое рабочее пространство…** (или **Файл › Новое рабочее пространство…**,
<kbd>⌥</kbd><kbd>⌘</kbd><kbd>N</kbd>).

</Step>
<Step>

Назовите его, например `Alpenglow.echolot`, выберите, где его хранить, и нажмите **Создать**.

</Step>
</Steps>

Рабочее пространство откроется в собственном окне. Оно пусто, поэтому на странице написано **Рабочее пространство пусто**.

## 2. Создайте запрос [#2-make-a-request]

<Steps>
<Step>

Выберите **Новый запрос** на странице или нажмите <kbd>⌘</kbd><kbd>N</kbd>. В боковой панели появится запрос
**Новый запрос** с выделенным именем. Введите `List products` и нажмите <kbd>Return</kbd>.

</Step>
<Step>

Щёлкните адресное поле вверху страницы (в нём написано **Введите URL, можно \{\{variables\}\}**) и введите:

```txt
https://demo.echolot.dev/v1/products?category=tents&per_page=5
```

Метод — **GET**, он вам и нужен. На вкладке **Параметры** теперь перечислены `category` и `per_page`; их можно
изменить там или в адресе.

</Step>
</Steps>

Сохранять не нужно. Echolot записывает запрос в файл `.req.toml` в папке рабочего пространства через мгновение после
того, как вы перестали печатать, а имя рабочего пространства внизу боковой панели сообщает **Всё сохранено**.

<Callout title="Уже есть команда cURL?">
  Вставьте её в адресное поле. Echolot заполнит по ней метод, адрес, заголовки, тело и авторизацию, а всё, что не
  удалось использовать, перечислит под адресной строкой.
</Callout>

## 3. Отправьте его [#3-send-it]

Нажмите <kbd>⌘</kbd><kbd>R</kbd> или выберите **Отправить**. Отправляет и <kbd>⌘</kbd><kbd>↩</kbd>. Пока запрос
выполняется, **Отправить** превращается в **Отменить** (<kbd>⌘</kbd><kbd>.</kbd>).

<Shot id="get-started-first-response" alt="Отправленный запрос List products: над ответом статус 200, в области ответа тело в формате JSON" />

## 4. Прочитайте ответ [#4-read-the-response]

Область ответа находится рядом с запросом (или под ним, если вы выбрали расположение «друг под другом»).

- **Строка над ответом** показывает статус (`200 OK`), время и размер. Наведите на неё указатель, чтобы увидеть
  подробности: размеры, сколько длилась каждая фаза (DNS, Соединение, TLS, Ожидание, Получение), TLS-соединение
  и перенаправления.
- **Тело** показывает тело ответа. Варианты в **Вид** над ним переключают способ чтения: **Текст**, **JSON**
  (с форматированием), **JSON-дерево**, а для другого содержимого — **XML**, **Форма**, **MessagePack** или
  **Просмотр**. Первый из них Echolot выбирает по типу содержимого. <kbd>⌘</kbd><kbd>F</kbd> ищет текст в теле.
- **Заголовки** перечисляют заголовки ответа. Демо-API передаёт общее число в `X-Total-Count`, а следующие страницы —
  в `Link`.
- **Cookie** перечисляет cookie, которые установил ответ.
- **Исходный** и **Hex** показывают байты в том виде, в каком они получены. **Передача** показывает весь обмен так,
  как он прошёл по сети: отправленное и полученное.
- **Тесты** показывают результаты проверок запроса, когда они появятся.

Каждый ответ также сохраняется в [истории](/docs/workspaces/history) запроса (<kbd>⌘</kbd><kbd>Y</kbd>), так что к нему
можно вернуться и сравнить со следующим.

## 5. Добавьте проверку [#5-add-a-check]

Проверки выполняются после каждой отправки и сообщают, когда API перестаёт отвечать так, как должен.

1. Откройте вкладку **Тесты** запроса.
2. Выберите **Создать из ответа…**. Echolot предложит проверки по только что полученному ответу: статус, тип
   содержимого, значения в JSON.
3. Отметьте нужные и нажмите **Добавить N тестов** (в кнопке указано число отмеченных проверок).
4. Отправьте запрос ещё раз. На вкладке **Тесты** ответа каждая проверка отмечена как пройденная или непройденная.

[Скрипты и тесты](/docs/requests/scripts-and-tests) описывают все виды проверок.

## Дальше [#next-steps]

- Отправьте тело: создайте ещё один запрос, задайте метод **POST**, адрес `https://demo.echolot.dev/echo/anything` и
  введите какой-нибудь JSON на вкладке **Тело**. Демо вернёт то, что получило.
- Скопируйте запрос как команду cURL через **Запрос › Скопировать как cURL** (<kbd>⌥</kbd><kbd>⌘</kbd><kbd>C</kbd>)
  или сгенерируйте для него код через **Запрос › Сгенерировать код…** (<kbd>⌥</kbd><kbd>⌘</kbd><kbd>G</kbd>).
- Вынесите адрес сервера в переменную и добавьте окружения: [Окружения](/docs/workspaces/environments).
- Освойтесь в интерфейсе: [Окно](/docs/get-started/the-window).
- Пройдите более подробное руководство: [Ваше первое рабочее пространство](/docs/tutorials/first-workspace).

<Callout type="warn" title="Демо-API — общий">
  Он принимает 120 запросов в минуту с каждого адреса (10 в минуту для больших, медленных и потоковых эндпоинтов). При
  превышении лимита он отвечает `429 Too Many Requests` с заголовком `Retry-After`; подождите столько секунд и
  отправьте запрос снова.
</Callout>
