Skip to content

contracts

contracts — это общий слой договорённостей между сервисами. Он нужен, чтобы frontend, backend и pipeline не расходились по форме данных.

Что здесь хранится

ПутьНазначение
graphql/schema.graphqlGraphQL-контракт для backend и frontend
events/source-raw.v1.jsonсхема сырого события
events/source-normalized.v1.jsonсхема нормализованного события
queue-messages/тестовые и примерные сообщения

Зачем это выделено в отдельный репозиторий

Потому что контракт нельзя надёжно держать “в голове” или только в одном сервисе.

Такой подход даёт:

  • единый source of truth;
  • более безопасные cross-repo изменения;
  • предсказуемый review изменений API и событий;
  • меньше скрытого дрейфа между frontend, backend и pipeline.

Кто использует contracts

  • npp-backend реализует GraphQL API;
  • npp-web ориентируется на GraphQL-схему;
  • scrape-helper валидирует raw-события;
  • processing-worker валидирует normalized-события.

Когда нужно менять этот репозиторий

  • появляется новое поле в GraphQL;
  • меняется shape raw-события;
  • меняется shape normalized-события;
  • нужно синхронно расширить несколько сервисов;
  • хочется зафиксировать формальный контракт до реализации.

Хороший порядок изменений

Если меняется GraphQL:

  1. обновить contracts;
  2. обновить backend;
  3. обновить frontend.

Если меняется normalized payload:

  1. обновить contracts;
  2. обновить processing-worker;
  3. обновить ingest в backend;
  4. при необходимости обновить аналитические или UI-срезы.

Проверка

bash
npm install
npm run validate

Типичная ошибка

Самая частая проблема — поменять контракт только в одном месте:

  • только в backend;
  • только во frontend;
  • только в worker.

Именно для этого contracts и вынесен отдельно.

Техническая и аналитическая документация платформы NPPWEB.