Projeto proposto
Construa uma API GraphQL completa para um produto real (fórum, task manager, e-commerce enxuto). Pense como feature review: cada decisão documentada, cada limite testado. Stack sugerido: Apollo Server 4, Postgres, Prisma ou Drizzle, Redis, Apollo Client no front.
Entregáveis
# 1. Schema
- Conventions: Node interface, Relay Connections, Payload types com UserError
- Pelo menos 8 types, 3 mutations, 1 subscription
- @deprecated usado em pelo menos um campo com reason
# 2. Resolvers
- DataLoader em todo lookup 1-N
- Context por request (user, loaders, db, redis)
- Error classes tipadas (AuthError, NotFoundError, ValidationError)
# 3. Auth
- JWT no Authorization header
- Directive @auth(role: ADMIN) aplicada via graphql-shield ou mapSchema
- Subscription auth via connectionParams
# 4. Cache
- APQ habilitado (persisted queries) com GET em CDN
- Response cache plugin com hints @cacheControl no SDL
- Apollo Client com typePolicies para Connections
# 5. Subscriptions
- graphql-ws no transport
- Redis pubsub para escalar cross-instance
- Pelo menos 1 subscription real (chat, notificacao)
# 6. Testes
- Schema snapshot em CI (detecta breaking change)
- Integration tests com @apollo/server/testing
- Testes de auth negativos (unauthorized, forbidden)
# 7. Observability
- Apollo Studio ou Hive conectado
- Logs estruturados por request (query count, duration)
- Complexity limit + depth limit configurados
# 8. Deploy
- Railway/Fly/Render para API
- Vercel/Netlify para web client
- Health check + readiness probe
# 9. Writeup (README ou blog)
- Diagrama do schema
- Decisoes justificadas (por que nao Federation, por que DataLoader, etc.)
- Limites conhecidos + next stepsCritérios de aceitação
Queries do happy path respondem em menos de 100ms p95 local. Query count por request monitorado e nunca supera o teórico (DataLoader funcionando). Breaking change em schema é bloqueada em PR. Token inválido retorna UNAUTHENTICATED, sem vazar stack. Subscription reconecta sozinha após kill do pod.
Capstone que demonstra GraphQL usável em produção. Recruiter que leu Apollo docs reconhece cada decisão e sabe que você não vai derrubar o banco no primeiro release. Esse nível é diferencial real em vaga sênior de plataforma ou API.