# Окружения и переменные (/ru/docs/workspaces/environments)

Переменная — это имя для значения, которое вы используете во многих местах: базового адреса, имени пользователя,
токена. Напишите её как `{{name}}` в любом поле запроса, и Echolot подставит значение при отправке. Окружение — это
набор значений для одного места, куда вы отправляете запросы, например Local, Staging или Production: переключите
окружение, и каждый запрос уйдёт туда.

## Использование переменной [#use-a-variable]

Введите `{{name}}` в адресе, заголовке, параметре, теле, полях авторизации или настройках. В Alpenglow каждый адрес
начинается с `{{baseURL}}`:

```
{{baseURL}}/products/{{productId}}
```

Введите `{{` в поле, чтобы увидеть список переменных, доступных запросу, а также
[динамические значения](/docs/requests/dynamic-values), такие как `{{$uuid}}`, даты, хеши и значения из ответов на
другие запросы. Переменная может содержать другие переменные: `baseURL` может быть `https://{{host}}/v1`.

Имя, которое запрос не может разрешить, помечается в поле, и Echolot объясняет почему, например
`{{productId}} is not defined` или `the secret {{token}} has no value on this Mac`.

## Где определяются переменные [#where-variables-are-defined]

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

| Уровень | Где его править | Где хранится |
| --- | --- | --- |
| **Глобальные** | **Окружения › Глобальные** | Только на этом Mac, для всех рабочих пространств. |
| **Рабочее пространство** | **Окружения › Рабочее пространство** или **Настройки рабочего пространства… › Переменные** | `workspace.toml` |
| **Окружение** | **Окружения ›** нужное окружение | `environments/<name>.toml` |
| **Папка** | **Настройки папки… › Переменные** | `_folder.toml` папки |
| **Запрос** | Вкладка **Переменные** запроса | файл запроса |

Несекретные значения записываются в эти файлы по мере ввода. Секретные никогда не записываются: см.
[секреты](/docs/workspaces/secrets).

## Какое значение побеждает [#which-value-wins]

Если одно и то же имя определено на нескольких уровнях, побеждает ближайший:

1. Собственные переменные запроса.
2. Переменные его папки, затем папок выше, от ближайшей наружу.
3. Переменные активного окружения.
4. Переменные рабочего пространства.
5. Глобальные переменные.

Так рабочее пространство хранит значения по умолчанию, окружение меняет то, что отличается на его сервере, а папка или
запрос могут переопределить и то и другое. Выключенная переменная (со снятым флажком) пропускается, и берётся значение
следующего уровня.

В Alpenglow `baseURL` в рабочем пространстве равна `https://demo.echolot.dev/v1`. Если активно окружение **Staging**,
она становится `https://staging.alpenglow.example/v1`, потому что Staging тоже её определяет. При **Без окружения**
запросы используют значение рабочего пространства и уходят на демо-API.

Значения, которые скрипт задаёт во время работы (через `pm.environment.set` и подобные), живут до конца работы окна
или команды, которая их задала, и никогда не записываются в файлы. См. [скрипты и тесты](/docs/requests/scripts-and-tests).
[Захваты из ответов](/docs/requests/captures) устроены иначе: они сохраняют взятое значение в переменную рабочего
пространства или окружения.

## Выбор окружения [#choose-an-environment]

Меню окружений находится в заголовке каждой страницы. Оно показывает активное окружение с точкой: зелёной для
окружения, красной для [защищённого](/docs/workspaces/protected-environments), серой для **Без окружения**.

Нажмите на него и выберите окружение или **Без окружения**, чтобы использовать только значения рабочего пространства.
**Управление окружениями…** открывает страницу «Окружения».

<Shot id="workspaces-environment-menu" alt="Открытое меню окружений в заголовке страницы: «Без окружения», Local, Staging и Production со щитом" />

Выбор принадлежит окну и этому Mac. Он не записывается в рабочее пространство, поэтому выбор окружения не меняет ни
одного файла, и каждый коллега выбирает своё. Echolot запоминает выбор для рабочего пространства и выбирает то же
окружение при следующем открытии.

[Прогон](/docs/requests/runner), сценарии и [Быстрая отправка](/docs/mac/quick-send) тоже используют активное окружение
окна. В командной строке выберите окружение параметром `--env`:

```sh
echolot run Alpenglow.echolot --env staging
```

`--env` принимает имя файла окружения без `.toml` или его имя.

## Страница «Окружения» [#the-environments-page]

Откройте её командой **Вид › Окружения** (<kbd>⌥</kbd><kbd>⌘</kbd><kbd>E</kbd>) или **Управление окружениями…** в меню
окружений. Слева:

- **По умолчанию**: **Глобальные** и **Рабочее пространство**.
- **Окружения**: по строке на каждое. **Активное** отмечает то, что использует окно, а щит отмечает защищённое.

Выберите строку, чтобы править её переменные справа.

<Shot id="workspaces-environments-page" alt="Страница «Окружения» с выбранным Staging: его имя, переключатель «Защищённое» и переменные baseURL, wsURL и password" />

### Добавление окружения [#add-an-environment]

1. На странице «Окружения» нажмите **+** рядом с **Окружения** (**Добавить окружение**).
2. Открывается новое окружение с именем `New Environment`. Введите его имя в поле имени и нажмите <kbd>↩</kbd>.
3. Добавьте переменные, которые отличаются на этом сервере.

Каждое окружение — файл в `environments/`. Страница показывает его имя под переменными:
`File: environments/staging.toml`.

### Правка переменных [#edit-variables]

В каждой строке есть:

| Столбец | Что делает |
| --- | --- |
| Флажок | Включает или выключает переменную, не удаляя её. |
| **Имя** | Имя, которое вы пишете в `{{…}}`. |
| **Значение** | Значение. Для секрета — поле, которое хранит значение в связке ключей. |
| **Секрет** | Хранит значение в связке ключей на этом Mac, а не в файле. См. [секреты](/docs/workspaces/secrets). |
| **−** | Удаляет переменную. |

Нажмите **Добавить переменную**, чтобы добавить строку. Echolot сохраняет таблицу через мгновение после того, как вы
перестаёте печатать, и любое изменение можно отменить командой **Правка › Отменить**.

Окружению нужны только переменные, которые отличаются от рабочего пространства. Всё остальное берётся из значений по
умолчанию рабочего пространства.

### Переименование, защита и удаление окружения [#rename-protect-or-delete-an-environment]

Вверху окружения:

- Поле имени переименовывает его. Файл сохраняет своё имя, так что всё, что на него ссылается, по-прежнему его
  находит. Окружение, добавленное на этой странице, называется `New Environment`, поэтому его файл — это
  `new-environment.toml`, как бы вы его потом ни назвали; `--env` принимает и имя.
- **Защищённое** заставляет каждую отправку в него сначала спрашивать. См. [защищённые окружения](/docs/workspaces/protected-environments).
- **Удалить окружение…** спрашивает, затем перемещает его файл в Корзину. Если окружение было активным, окно
  переключается на **Без окружения**.

### Глобальные переменные [#global-variables]

**Глобальные** хранят переменные для всех рабочих пространств на этом Mac, например ваше имя пользователя. Это самый
широкий уровень: любое рабочее пространство, окружение, папка или запрос с тем же именем переопределяет их. Они не
входят ни в одно рабочее пространство, поэтому коллеги и инструмент командной строки их не видят.

## Откуда берётся значение [#see-where-a-value-comes-from]

**Вид › Показать переменные** (<kbd>⌥</kbd><kbd>⌘</kbd><kbd>V</kbd>) открывает панель «Переменные»: все переменные,
которые видит текущий запрос, в столбцах для глобальных, рабочего пространства, каждого окружения, папок запроса и
самого запроса. Используемое значение отмечено; неактивные окружения показаны для сравнения. Секреты остаются
скрытыми. Нажмите на заголовок столбца, чтобы перейти туда, где это правится. Закрепите панель, чтобы она осталась
столбцом рядом со страницей.

<Shot id="workspaces-variables-panel" alt="Панель «Переменные» над запросом Catalog › Get product: baseURL и productId в столбцах «Рабочее пространство», Local, Staging и Production, используемое значение отмечено" />

Задержите указатель на `{{variable}}` в поле запроса, чтобы увидеть подсказку: её значение, уровень, с которого оно
берётся, и **Все переменные…**, чтобы открыть панель на этой переменной.
