Skip to content

GraphQL — алерт по изменению схемы (breaking change)

API gateway деплоит новую схему — Mobile-команда узнаёт что type был удалён через crash report. Хочется снимок раз в 5 минут с diff-алертом.

Рецепт

bash
#!/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.

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Stripe, GitHub, Twilio возвращают X-RateLimit-Remaining в заголовках. Если бэкенд не отслеживает порог — внезапно пойдёт 429, биллинг встанет.