Blog
Para quem já sabe o básico e quer ir fundo. Aqui o assunto é como os modelos funcionam em produção: memória, roteamento, ferramentas, agentes. O lado técnico que pouca gente explica direito.
Os 4 níveis do Richardson Maturity Model, verbos HTTP corretamente (idempotência de PUT/DELETE vs segurança de GET), status codes que comunicam (201 vs 204 vs 200), HATEOAS na prática (raramente vale a pena). O REST sem jargão de livro de 2010.
URL versioning (/v1/) vs header (Accept: application/vnd.api+json;version=1) vs parameter. Quando cada um cabe. Headers Sunset e Deprecation para comunicar descontinuação. Backward compat, feature flags, e o padrão "nunca remover endpoint — só deprecar".
GraphQL resolve problemas reais (over-fetching, agregação de APIs) mas cria outros (N+1, caching complexo). DataLoader pra batchar resolvers, persisted queries pra cache. Apollo Federation vs schema stitching. Quando REST + BFF é resposta melhor.
Protobuf como IDL compacto (binário, schema evolution, field tags), gRPC com HTTP/2 multiplexing, 4 modos (unary, server streaming, client streaming, bidi). Quando gRPC bate REST (interno de microserviços de baixa latência) e quando não (APIs públicas browser-facing).
Escrever OpenAPI primeiro (spec-driven dev), gerar client + server skeleton + docs automáticos, mock server (Prism/Wiremock) pra desenvolver frontend sem backend pronto, contract testing (Pact) entre times. Por que YAML à mão é melhor que gerar do código.
Offset pagination (LIMIT/OFFSET) vs cursor-based (opaque token) — por que cursor vence em datasets grandes. Keyset pagination com index composto. Filter DSL sem explodir (RSQL, Google AIP filter syntax), ordenação estável (tiebreaker por id).
Idempotency-Key header (modelo Stripe) pra POST seguro contra retry, store com TTL e response cacheada. Webhooks com assinatura HMAC, timestamp pra evitar replay, retry exponencial, DLQ quando consumer falha. Design de payload mínimo + event fetching.
Algoritmos: fixed window (problemático), sliding window, token bucket (mais usado), leaky bucket. Headers padrão (RateLimit-Limit, Remaining, Reset), 429 com Retry-After. Quota diária vs burst limit, por-tenant, distribuído com Redis atomicamente.
Projeto consolidando a trilha: API de gestão de tarefas com OpenAPI spec-driven, versionamento /v1, auth com JWT, paginação cursor, idempotency em POST, webhook em mudanças, rate limit por tenant, testes de contrato com Pact. Deploy + docs.