Окружения и стенды: dev, test, stage, prod

↑ 1.1 Что такое API и как устроены системы · ← Предыдущая · → Следующая

Обязательно~5 мин чтенияУровень: junior

Зачем это аналитику и PM

Один и тот же метод на тестовом адресе и на боевом — это разные данные, разные ключи и разная цена ошибки. Путаница стендов даёт ложную приёмку или правку там, где сидят живые пользователи.

План темы

  • зачем несколько окружений
  • чем отличаются данные и доступы
  • как не сломать продакшен
  • где проверять изменения

Объяснение

Окружение, или стенд, — отдельный экземпляр системы со своим адресом, своей базой и своими доступами. Код может совпадать, последствия вызова — нет.

Как спектакль. Репетиция в пустом зале — черновик. Прогон для своих проверяет, что сцены стыкуются. Премьера — продакшен: ошибка уже публичная.

Зачем несколько стендов

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

Имена не универсальны. Где-то говорят dev, test, stage, prod, где-то QA, UAT, preprod.

СтендОбычная рольДанныеЦена ошибки
devЧерновик автораСинтетические, их часто сбрасываютЛомается проверка автора
testОбщие сценарииКейсы, не живые клиентыПортится общий контур
stageСверка перед выпускомПо форме как бой, без лишних копий людейЛегко перепутать с боем
prodРабота пользователейНастоящие заказыОшибка видна наружу
flowchart LR
    Dev["dev: проверка автором"] --> Test["test: сценарий команды"]
    Test --> Stage["stage: сверка перед выпуском"]
    Stage --> Prod["prod: живые пользователи"]

Стрелки — частый порядок, не закон. Маленькая команда живёт без stage. Смысл один: место, где можно ошибиться, отделено от места, где ошибка стоит денег.

Данные и доступы

На нижних стендах заводят вымышленных людей и учебные карты, которые выдал партнёр. Боевые ключи и выгрузки живых клиентов туда не копируют «для похожести».

Запись в бой тем же клиентом, которым ходили в test, — частая авария. У каждого стенда свой адрес и свой набор переменных.

Где проверять и как не задеть прод

Изменение контракта смотрят там, куда выложили задачу, обычно на test. Stage нужен, когда важны настройки и миграции перед выпуском. Prod — для наблюдения после выпуска и разбора уже случившегося, не для опыта «что будет, если удалить».

Перед вызовом сверьте адрес, имя окружения, учётные данные и чья база получит запись. Если один пункт про бой, остановитесь. Удаление, оплата и рассылка в сомнительном контуре — не маленькая проверка.

Примеры

Адреса ниже — схема на домене example.com. У команды будут другие хосты. В рабочую коллекцию их не подставляют как настоящие.

dev    https://dev.example.com/orders
test   https://test.example.com/orders
stage  https://stage.example.com/orders
prod   https://api.example.com/orders

JSONPlaceholder учит читать ответ и не заменяет приёмку вашего релиза: там нет ваших правил.

curl -sS "https://jsonplaceholder.typicode.com/todos/1"

В клиенте запросов адрес лучше держать переменной. Боевой секрет в общий файл не кладут.

baseUrl = https://test.example.com
token = ***

Нюансы и подводные камни

  • Одинаковый путь метода не значит одинаковое поведение: на test скидку может считать заглушка.
  • Редко обновляемый stage врёт увереннее test: там старая сборка и зелёные проверки.
  • Общая тестовая база — общий ресурс. «Очистить заказы» стирает данные коллеги.
  • Заглушка на test не доказывает, что партнёр примет то же поле. Для этого нужна их песочница.

Практика

Составьте таблицу стендов продукта: имя в команде, адрес API, чьи данные, можно ли вам писать. Пустую ячейку не заполняйте догадкой.

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

Вопросы с ответами

Связано с блоком Developer

Связанные темы