advanced
Federation and query complexity
Контролируйте cross-service ownership, entity resolution, query depth, cost limits, persisted operations и gateway observability.
Production GraphQL нуждается в ограничителях: **query cost**, **depth limits**, **timeouts** и явном **владении сервисами** в federated graphs.
**Federation** (Apollo, GraphQL Mesh) собирает subgraphs в supergraph. Каждая команда владеет types; gateway планирует fetch между сервисами.
# users subgraph
type User @key(fields: "id") {
id: ID!
email: String!
}
# orders subgraph
extend type User @key(fields: "id") {
id: ID! @external
orders: [Order!]!
}
Контроль сложности:
- **Max depth** — лимит вложенных selections.
- **Cost analysis** — веса полей; отклонение дорогих запросов.
- **Persisted queries** — allowlist известных operation hashes в production.
- **Rate limits** на API key / user / IP.
Entity resolution пересекает границы сервисов — мониторьте latency gateway и partial failures (nullable fields vs errors).
На интервью: когда federation помогает масштабу организации, отладка cross-subgraph N+1, почему public GraphQL без лимитов опасен.
Типовые ошибки: god subgraph, циклические зависимости, admin fields на том же графе, что mobile, нет persisted operations в prod.
Компромисс: автономия federated против operational complexity — schema registry, composition checks, observability gateway.
Чеклист:
- Depth и complexity limits в production.
- Persisted или approved operations для public clients.
- Документированное @key ownership по командам.
- Метрики gateway: plan time, subgraph errors, p99 latency.