1 мин на чтение

Интеграции без Postman: Bruno, curl и терминал

Фронт жаловался на 401, бэкенд «у себя всё видит». Классика. Я сознательно не открывал Postman первым делом — хотел воспроизвести цепочку так, как это делается на сервере без GUI.

Postman vs Bruno

  Postman Bruno
Хранение коллекций Облако / аккаунт Папка в git рядом с репо
Секреты Vault, env .env локально, в git не коммитим
CI Newman, платные фичи bru run в pipeline
Офлайн Зависит от синка Полностью офлайн

Для внутренних API я перевёл коллекцию в Bruno: запросы лежат в bruno/, ревьюятся вместе с кодом, дежурный клонирует репозиторий и гоняет те же шаги.

Postman остаётся у смежников и для разовых демо — нормальный инструмент, просто не единственный.

curl и авторизация

Типовой сценарий отладки:

# токен из стейджа
export TOKEN="$(curl -s -X POST "$AUTH_URL/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET" \
  | jq -r .access_token)"

curl -sS "$API/v1/integrations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Request-Id: debug-$(date +%s)" \
  | jq .

Так я поймал расхождение: фронт слал cookie-сессию, мобильный клиент — Bearer. Разные middleware на одном префиксе /api. В Bruno потом оформил оба варианта как отдельные папки.

Зачем бэкендеру консоль

На проде GUI часто недоступен. Умение собрать запрос из логов (method, path, заголовки без секретов), повторить его с -v и сравнить с OpenAPI — быстрее, чем ждать «скинь коллекцию». Плюс curl легко вставить в runbook инцидента.

Промо-картинка с иконкой — шутливая отсылка к «собачьей» дисциплине: один раз настроил .env.example, дальше меньше импровизации.

Итог

GUI экономит время на ежедневной разработке. Bruno вписался в git-flow лучше, чем облачные коллекции. curl остаётся обязательным навыком: авторизация, заголовки, воспроизведение бага с машины без IDE. Backend-разработчик, который дебажит только кнопками в Postman, на проде теряется в первый же час инцидента.