Design Spec — Trilha Comunicação entre Sistemas

Item 10 da Onda C do Roadmap — a camada de contrato: como sistemas conversam (síncrono e assíncrono), o panorama histórico/comparativo dos protocolos, e confiabilidade da comunicação. Terceira trilha do trio System Design (desenha) → Operação (opera) → Comunicação (contrata).

Ponto de vista (travado com o usuário 2026-07-09)

Trilha comparativa e decisória, não tutorial. O leitor já conhece as ferramentas (REST, gRPC, Kafka, etc. como conceito) e já viu implementação em pelo menos uma stack — o que falta é o mapa: por que existem tantas formas de comunicação, quando cada uma vale, o que é legado vs o que é hype, e como a mesma decisão aparece em Java/TS/Python/Go (menção comparativa curta, nunca tutorial completo — ver fronteiras abaixo).

Consequências desse POV:

  • Cada nota resolve uma decisão (“REST ou gRPC aqui?”, “fila ou stream?”), não ensina sintaxe.
  • Comparação entre linguagens é citação/tabela curta, não implementação passo a passo — quem quer o tutorial vai pra trilha da linguagem.
  • Amplitude deliberada: cobre não só REST/API (viés do rascunho inicial, corrigido pelo usuário) mas RPC legado, mensageria, tempo real, e o que está emergindo.

Pesquisa prévia — Full Cycle (2026-07-09)

Curadoria de mercado antes do desenho, por pedido do usuário:

  • Full Cycle 3.0 tem um módulo chamado literalmente “Comunicação entre Sistemas”: REST (Richardson Maturity Model, HATEOAS, HAL, content/method negotiation), gRPC (Protobuf, HTTP/2, os 4 tipos de streaming — unary/server/client/bidirectional), GraphQL (schema, types, queries, mutations, resolvers). Confirma que Maturity Model e HAL faltavam no rascunho inicial — incorporados abaixo.
  • Full Cycle 4.0 expandiu: módulo “APIs” (REST+maturity+gRPC+API Gateway+versionamento+depreciação+paginação+padrões de proteção), módulos dedicados a RabbitMQ e Kafka, módulo “DDD e arquitetura orientada a eventos” (Domain Events, CQRS, Event Sourcing, Unit of Work, Event Storming — tratado como fora de escopo aqui, é DDD, não comunicação — ver fronteiras), módulo “Microsserviços” (coreografia vs orquestração, ACL, Strangler, BFF — já coberto por System Design e Java Microservices).

Contexto: o que já existe

03-Dominios/Engenharia/Comunicação entre Sistemas/ já é domínio (Engenharia — correto, “disciplina neutra de stack”). Conteúdo hoje = 2 monólitos:

  • API Design.md (1325 ln) — REST/recursos, status codes, RFC 9457, paginação, filtering, versionamento, auth, idempotência, rate limiting, caching HTTP, webhooks, bulk, upload, async ops, REST vs GraphQL vs gRPC, OpenAPI, testes. Contém seção “Na prática (da minha experiência)” do usuário — preservar verbatim.
  • Mensageria/ — cluster de ferramenta: Mensageria.md (panorama, 776 ln), Kafka.md (918), RabbitMQ.md (930), BullMQ.md (786), Event Streaming.md (638), index.md.

Implementação por linguagem já existe (profunda, em outras trilhas — não duplicar):

  • Java: Java/Web e APIs REST (16 notas: Spring MVC, RFC 9457, versionamento, OpenAPI, HATEOAS), Java/Mensageria (29 notas: Kafka, RabbitMQ, idempotência, Outbox, Saga, Event Sourcing/CQRS, Protobuf, gRPC), Java/Microservices (comunicação síncrona/assíncrona, API Gateway, resiliência).
  • Node/TS: Node/Integrações (gRPC via grpc-js, GraphQL via Apollo/Mercurius, WebSockets, Kafka via kafkajs, clientes HTTP, resiliência).
  • Go/Python: só stubs rasos (Go Backend.md, Python Backend.md) — sem trilha profunda. Menção conceitual aqui é aceitável; não é escopo desta trilha construir a trilha de Go/Python.

Estrutura de pastas

Engenharia/Comunicação entre Sistemas/
├── index.md                          (MOC do galho-pai, já existe — atualizar)
├── roadmap.md                        (roadmap recursivo, novo)
├── API Design.md                     (vira tronco podado)
├── Mensageria/                       (permanece — referência de ferramenta)
├── 1 - Panorama e decisão/            (Iniciado)
├── 2 - Comunicação síncrona/          (Adepto)
├── 3 - Confiabilidade do contrato/    (Adepto→Magus)
└── 4 - Comunicação assíncrona/        (Adepto→Magus)
+ capstone no galho-pai (Magus)

Roster de notas

Sub-galho 1 — Panorama e decisão (Iniciado, ~5 notas)

O mapa antes do território: por que tantas formas de comunicação existem, o eixo síncrono/assíncrono, e como decidir.

#NotaEscopoFronteira / cross-link
01O que é o contrato de comunicaçãoProducer/consumer, acoplamento, o contrato como abstração central; sync vs async como primeiro eixo de decisão.enquadra a trilha
02RPC clássico e por que caiuCORBA, DCOM, XML-RPC, SOAP/WSDL — o que resolviam, por que foram substituídos, onde ainda sobrevivem (EDI em saúde/bancos, integrações legadas B2B).histórico, sem tutorial
03A era REST, GraphQL, gRPCPor que REST venceu como default, por que GraphQL e gRPC surgiram como resposta a problemas específicos (over-fetching, performance interna).prepara SG2
04Comunicação em tempo realWebSocket, Server-Sent Events, WebTransport — quando cada um, o que substituiu polling.linka Redes e Protocolos
05O que está emergindo e framework de decisãotRPC, Connect (Buf), AsyncAPI, CloudEvents, e o cruzamento com IA (MCP) — panorama do que é hype vs o que fica. Fecha com árvore de decisão “qual estilo pra qual problema”, com nota comparativa curta por linguagem (Go: gRPC nativo; Python: FastAPI+strawberry; TS: peculiaridade do tRPC).fecha o sub-galho

Sub-galho 2 — Comunicação síncrona: REST, GraphQL, gRPC (Adepto, ~6 notas)

A decisão técnica de como desenhar o contrato síncrono.

#NotaEscopoFronteira / cross-link
01REST: modelagem de recursos e maturidadeRecursos como substantivos, verbos HTTP, nested vs flat, Richardson Maturity Model (níveis 0-3), HATEOAS/HAL na prática.reforço de API Design.md (migra)
02REST: o contrato de respostaStatus codes com significado, RFC 9457 Problem Details, content negotiation.reforço de API Design.md
03Paginação, filtros e autenticação em RESTOffset vs cursor, filtering/sorting, panorama de métodos de auth (API key/JWT/OAuth/mTLS) — decisão, não implementação (JWT deep-dive já é Node/Segurança, Java/Segurança).linka Node/Segurança, Java/Segurança
04GraphQL — schema, resolvers e quando valeTypes, queries, mutations, resolvers, N+1/DataLoader, quando escolher e quando é overkill.linka Node/Integrações (Apollo/Mercurius)
05gRPC — Protobuf, HTTP/2 e streamingMotivação, Protocol Buffers, HTTP/2 multiplexing, os 4 tipos de streaming (unary/server/client/bidi).linka Java/Mensageria 27-28 (Protobuf/gRPC Java), Node/Integrações 05
06REST vs GraphQL vs gRPC — decisãoComparação final, documentação como contrato (OpenAPI vs .proto vs SDL), contract testing (Pact/Prism).fecha o sub-galho

Sub-galho 3 — Confiabilidade do contrato (Adepto→Magus, ~5 notas)

O contrato promete — como garantir que ele se sustenta sob falha, retry e o tempo.

#NotaEscopoFronteira / cross-link
01IdempotênciaPor que POST não é idempotente, Idempotency-Key pattern (Stripe), armazenamento atômico.reforço de API Design.md; linka Java/Mensageria 20
02Versionamento e evolução de contratoURL/header/query versioning, regras de evolução segura (adicionar é seguro, remover não), deprecation (RFC 8594).reforço de API Design.md
03Caching HTTP e requisições condicionaisCache-Control, ETag, If-None-Match, optimistic locking com If-Match.reforço de API Design.md
04Rate limiting como contratoHeaders de resposta, 429 + Retry-After, tiers. Algoritmo (token bucket etc.) é System Design SG3-04 — aqui só o que a API expõe.reforço leve; fronteira explícita com SG
05Webhooks e operações assíncronas202 Accepted + polling, webhooks (assinatura HMAC, retry, dedup), bulk operations.reforço de API Design.md; linka sub-galho 4 (mensageria invertida)

Sub-galho 4 — Comunicação assíncrona e mensageria (conceitual) (Adepto→Magus, ~6 notas)

Desacoplar no tempo. Panorama e decisão — ferramenta específica (Kafka/RabbitMQ/BullMQ) já tem casa em Mensageria/*.md.

#NotaEscopoFronteira / cross-link
01Síncrono vs assíncrono — quando desacoplarAprofunda o eixo do SG1-01: latência vs throughput, acoplamento temporal, o custo de complexidade da assincronia.reforço de Mensageria.md
02Message queue vs event streamingFila de tarefa vs log de eventos, panorama comparativo de brokers (Kafka/RabbitMQ/SQS/NATS/Pulsar/BullMQ) — tabela de decisão, ferramenta individual fica nas páginas existentes.referência: Mensageria/*.md
03Garantias de entrega e ordenaçãoAt-most/at-least/exactly-once, idempotência no consumer, ordenação por partição/fila/FIFO.reforço de Mensageria.md
04Outbox e SagaTransações distribuídas por eventos, o padrão Outbox, coreografia vs orquestração de Saga.linka Java/Mensageria 21-22; não SG (Pub/Sub é lá, Saga/Outbox não existem lá)
05Legado e padrões enterpriseJMS, IBM MQ, ESB (Enterprise Service Bus) — o que resolviam, por que a indústria migrou pra brokers modernos, onde ainda aparecem (bancos, seguradoras).histórico, sem tutorial
06O que está emergindo em mensageriaCloudEvents (envelope padrão), AsyncAPI (o “OpenAPI dos eventos”), webhooks como mensageria invertida (fecha o loop com SG3-05).fecha o sub-galho

Capstone (Magus, galho-pai)

“Desenhando a comunicação de um sistema do zero” — walkthrough único que percorre um cenário concreto (ex.: e-commerce com checkout + pagamento assíncrono + notificação) decidindo, ponto a ponto: REST vs gRPC vs GraphQL na borda, fila vs stream internamente, onde idempotência é obrigatória, onde webhook entra. Costura os 4 sub-galhos num arco. Puxar experiência real do usuário só se ele fornecer (nunca fabricar — feedback_no_fabrication).

Total planejado: ~22 notas (5+6+5+6) + 1 capstone = ~23 notas.

Fronteiras anti-duplicação

TópicoPapel aquiMora emRegra
Pub/Sub em escala, message queues como building block de infra, API Gateway, CQRS, Event Sourcing, Circuit Breaker, Rate limiting (algoritmo)System Design SG2/SG3referência: linkar, não reescrever
Implementação REST/gRPC/mensageria em JavaJava/Web e APIs REST, Java/Mensageria, Java/Microservicesreforço + cross-link, sem tutorial aqui
Implementação gRPC/GraphQL/WebSocket em Node/TSNode/Integraçõesreforço + cross-link
Implementação em Go/Pythonmenção conceitual curta apenasnão existe trilha profunda aindanão criar tutorial completo aqui; sinalizar lacuna, não preencher
Auth detalhada (JWT impl, OAuth flows, RBAC/ABAC)panorama de decisãoNode/Segurança, Java/Segurançalinkar, sem reimplementar
Domain Events, CQRS/DDD, Event Storming, Unit of Workfora de escopofuturo domínio DDD (não existe ainda)não entrar — é DDD, não comunicação
Ferramenta de broker (Kafka/RabbitMQ/BullMQ deep-dive)referênciaMensageria/*.md (existente)ganha callout apontando pra cá
Service Discovery/Consulfora de escopo desta trilhacandidato a System Design building block (não coberto ainda)não entrar; anotar como lacuna futura de SG, não desta trilha

Padrão de escrita (cravado, herdado de System Design/Operação)

Nota = capítulo de livro (feedback_padrao_capitulo_livro): TL;DR [!abstract], abertura problema-first, divulgação progressiva, exemplo trabalhado. Densidade-alvo ~440-540 linhas (feedback_notas_profundas_diagramas). fase: no frontmatter. ≥1 Mermaid (paleta azul #4A90D9 / âmbar #F5A623 / vermelho #D0021B). Callouts [!question]-/[!warning]. Seção “Em entrevista” + “How to explain in English” (tabela PT↔EN). “O que vem a seguir”. ## Fontes datadas. Comparação por linguagem = tabela/menção curta, nunca subseção de tutorial completo (regra nova desta trilha, por pedido explícito do usuário). Barra de densidade explícita no prompt de cada subagente (5-7k palavras / 15-25 buscas / exemplo concreto).

Fontes canônicas da trilha

  • Livros: API Design Patterns (JJ Geewax); Designing Web APIs (Jin/Sahni/Shevat); RESTful Web APIs (Richardson/Amundsen); Enterprise Integration Patterns (Hohpe/Woolf — mensageria clássica); Designing Data-Intensive Applications (Kleppmann — streams e garantias de entrega).
  • Cursos/mercado: Full Cycle 3.0 (módulo “Comunicação entre Sistemas”) e Full Cycle 4.0 (módulos APIs/RabbitMQ/Kafka) — usados como curadoria de escopo, não fonte de conteúdo copiado.
  • Guidelines: Google Cloud API Design Guide, Microsoft REST API Guidelines, Zalando RESTful Guidelines, AsyncAPI spec, CloudEvents spec (CNCF).
  • RFCs: 9457 (Problem Details), 7396/6902 (JSON Patch), 8594 (Sunset).

Plano de execução (ritmo B, igual System Design/Operação)

  1. Criar roadmap.md do galho-pai; atualizar index.md existente.
  2. Semear sub-galho a sub-galho, ordem 1→2→3→4. Cada subpasta: index.md + roadmap.md + notas via subagente-por-nota (≤3/onda, Sonnet, cada um lê o EXEMPLAR do System Design + este spec, WebSearch inline, barra de densidade explícita).
  3. Ao fechar cada sub-galho: roadmap-folha + roadmap-pai + commit (paths explícitos, sem Co-Authored-By, push manual).
  4. Fechamento: capstone; podar API Design.md pro que não migrou (preservar “Na prática” verbatim); callout em Mensageria/*.md apontando pra casa canônica; atualizar Roadmap item 10 ⬜→🟢; atualizar memória.

Pontos em aberto (decidir durante a execução)

  • EXEMPLAR: usar a nota 01 do System Design como referência de estrutura até a 1ª nota desta trilha virar o exemplar próprio.
  • Renumeração/contagem por sub-galho pode ajustar no seeding (mesma tolerância das trilhas anteriores).
  • Destino final de API Design.md: tronco podado (como System Design) — confirmar no fechamento se sobra conteúdo suficiente pra justificar manter o arquivo ou se vira redirect fino.