Интеграции без 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, на проде теряется в первый же час инцидента.