GraphQL — алерт по изменению схемы (breaking change)
API gateway деплоит новую схему — Mobile-команда узнаёт что type был удалён через crash report. Хочется снимок раз в 5 минут с diff-алертом.
Рецепт
#!/usr/bin/env bash
# Pulls introspection schema, compares to previous snapshot.
ENDPOINT="${ENDPOINT:?must be set}"
SNAP="${SNAP:-/var/lib/enterno/graphql-schema.json}"
mkdir -p "$(dirname "$SNAP")"
CUR=$(curl -sS -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-d '{"query":"{__schema{types{name fields{name type{name}}}}}"}' \
| python3 -c 'import json,sys; print(json.dumps(json.load(sys.stdin), sort_keys=True))')
[ -z "$CUR" ] && { echo "no-schema"; exit 1; }
if [ -f "$SNAP" ]; then
PREV=$(cat "$SNAP")
if [ "$PREV" != "$CUR" ]; then
echo "$CUR" > "$SNAP"
DIFF=$(diff <(echo "$PREV") <(echo "$CUR") | head -20 | tr '\n' ' ')
echo "drift $DIFF"
exit 1
fi
fi
echo "$CUR" > "$SNAP"
echo "ok"
То же самое в Enterno.io
Endpoint + Enterno-монитор каждые 5 мин с keyword "ok" = pager при любом breaking change. Сами контракты можно проверять API-latency монитором — там же видна regression в response-time.
Похожие рецепты
Контроль квоты сторонних API
pythonStripe, GitHub, Twilio возвращают X-RateLimit-Remaining в заголовках. Если бэкенд не отслеживает порог — внезапно пойдёт 429, биллинг встанет.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.