Projeto final: construindo uma plataforma completa de APIs
Um projeto integrador com arquitetura, contratos, identidade, gateway, microserviços, mensageria, Kubernetes, observabilidade e resiliência
Edição aprofundada - material de estudo e consulta profissional
Por João Ricardo Dutra••Material integral
Projeto integrador: do contrato à operação resiliente
Objetivo final
Construir uma plataforma demonstrável, segura, observável e operável, com decisões documentadas e testes reproduzíveis.
Figura de abertura - O projeto conecta as disciplinas do curso em uma plataforma operável de ponta a ponta.
Edição aprofundada - material de estudo e consulta profissional
Apresentação do capítulo
Este capítulo transforma os fundamentos e práticas estudados ao longo do curso em um projeto técnico completo. O objetivo não é apenas publicar uma que responda corretamente, mas construir uma pequena plataforma capaz de demonstrar design de contratos, proteção de borda, identidade, autorização, integração síncrona e assíncrona, implantação automatizada, observabilidade, resiliência, governança e operação. O resultado deve poder ser explicado, testado e reproduzido por outra equipe.
O cenário proposto representa uma instituição financeira fictícia chamada Banco Horizonte. A organização deseja disponibilizar para consulta de clientes e contas, iniciação de pagamentos e recebimento de notificações. Consumidores internos, canais digitais e parceiros terão perfis diferentes de acesso. A plataforma deverá atender requisitos de segurança e privacidade semelhantes aos de ambientes corporativos reais, sem utilizar dados ou credenciais de produção.
O projeto é intencionalmente modular. É possível implementar uma versão mínima em ambiente local com e evoluir para Kubernetes, service mesh, broker de mensagens e observabilidade distribuída. Essa progressão evita que a infraestrutura esconda os conceitos essenciais. Cada etapa deve introduzir uma capacidade clara e uma evidência objetiva de que ela funciona.
A avaliação considera tanto o produto final quanto o raciocínio arquitetural. Diagramas, ADRs, contratos , modelos de ameaça, , , testes e runbooks são parte do projeto. Uma plataforma sem documentação e sem capacidade de diagnóstico não é considerada completa, mesmo que suas chamadas básicas estejam funcionando.
Como usar este capítulo Trate o capítulo como um roteiro de execução. Em cada seção, registre decisões, hipóteses e evidências. Sempre que uma ferramenta específica não estiver disponível, substitua-a por uma equivalente, preservando o conceito arquitetural e documentando o trade-off.
Objetivos de aprendizagem
Projetar uma plataforma completa de a partir de requisitos funcionais e não funcionais.
Transformar domínios de negócio em contratos coerentes e versionáveis.
Aplicar 2.0, OpenID Connect, , e autorização conforme o perfil do consumidor.
Configurar um com policies de segurança, roteamento, transformação, limites e observabilidade.
Implementar integração síncrona, assíncrona, idempotência, e tratamento de falhas.
Implantar serviços em Kubernetes com probes, autoscaling, segurança e estratégia de rollout.
Instrumentar , métricas e com OpenTelemetry e definir SLIs e .
Planejar alta disponibilidade, backup, recuperação, testes de desastre e .
Produzir documentação, automação e critérios de aceite que permitam auditoria e manutenção.
Estrutura do capítulo
40.1 Cenário, escopo e restrições
40.2 Arquitetura de referência
40.3 Requisitos funcionais e não funcionais
40.4 Domínios, e contratos
40.5 Identidade e segurança
40.6 e policies
40.7 Microserviços, dados e mensageria
40.8 Kubernetes, service mesh e rede
40.9 Observabilidade e SRE
40.10 CI/CD, IaC e governança
40.11 Alta disponibilidade e recuperação
40.12 Fases de implementação
40.13 Critérios de aceite
40.14 Entregáveis, demonstração e avaliação
40.15 Laboratórios, e evolução futura
40.1 Cenário, escopo e restrições
O Banco Horizonte precisa expor uma plataforma para três classes de consumidores. O aplicativo móvel consulta dados do próprio cliente e inicia pagamentos. Sistemas internos consultam contas e publicam eventos de atualização. Parceiros externos acessam operações limitadas mediante credenciais, consentimento e políticas de . O desenho deve diferenciar claramente identidade humana, aplicação cliente e workload que executa cada serviço.
A primeira versão do projeto deve conter quatro capacidades de negócio: cadastro e consulta de clientes, consulta de contas e saldos, iniciação idempotente de pagamentos e publicação de eventos de status. O escopo técnico inclui um , um provedor de identidade, pelo menos dois serviços de domínio, um banco de dados, um broker ou de eventos, instrumentação OpenTelemetry e uma esteira automatizada de entrega.
As restrições existem para estimular decisões realistas. Dados pessoais devem ser fictícios e minimizados. Segredos não podem ser versionados no repositório. O ambiente precisa ser reproduzível por código. Toda operação de escrita deve suportar idempotência. Falhas de dependências devem produzir respostas controladas. não podem registrar , senhas, chaves ou sensíveis completos.
Tabela 1 - O projeto deve provar capacidades, não apenas apresentar componentes.
Dimensão
Escopo mínimo
Evidência esperada
Negócio
Clientes, contas, pagamentos e eventos.
Jornadas demonstradas ponta a ponta.
Segurança
OAuth/OIDC, autorização, TLS e segredos.
Testes positivos e negativos.
Operação
Logs, métricas, traces e alertas.
Dashboard e trace correlacionado.
Entrega
Pipeline, IaC e versionamento.
Ambiente recriado automaticamente.
40.2 Arquitetura de referência
A arquitetura de referência separa borda, identidade, domínios, dados e operação. Na borda, e balanceamento encaminham tráfego ao . O termina , valida credenciais, aplica políticas e roteia para serviços internos. O provedor de identidade emite para usuários e aplicações. Os serviços de clientes, contas e pagamentos mantêm responsabilidades próprias e evitam compartilhar tabelas diretamente.
A comunicação síncrona utiliza / ou conforme o objetivo do laboratório. Eventos de pagamento e atualização de cadastro são publicados em Kafka, RabbitMQ ou broker equivalente. O serviço de notificações consome eventos e demonstra desacoplamento temporal. Um pode ser introduzido para dados de leitura, desde que a política de invalidação seja explícita.
Figura 1 - Arquitetura lógica do projeto; produtos concretos podem variar sem alterar as responsabilidades.
Regra de arquitetura Cada componente deve existir por uma razão verificável. Não adicione service mesh, , broker ou banco adicional apenas para aumentar a quantidade de tecnologias. A complexidade precisa resolver uma necessidade documentada.
40.3 Requisitos funcionais e não funcionais
Requisitos funcionais descrevem comportamentos observáveis do negócio. O consumidor deve consultar um cliente autorizado, listar contas associadas, obter saldo e iniciar um pagamento. O pagamento precisa receber uma chave de idempotência, produzir um identificador estável e evoluir por estados controlados. Uma consulta de status deve retornar o mesmo resultado independentemente da instância que atende a chamada.
Requisitos não funcionais determinam a qualidade e a capacidade de operação. Defina disponibilidade alvo, latência por percentil, throughput, limites de , taxa por consumidor, , , retenção de e eventos, critérios de privacidade e requisitos de rastreabilidade. Mesmo em laboratório, números explícitos permitem testar e discutir trade-offs.
Os requisitos devem ser mensuráveis. Em vez de escrever a deve ser rápida, defina, por exemplo, p95 inferior a 300 ms para consultas sem dependência degradada. Em vez de a plataforma deve ser segura, liste verificações: com issuer e audience válidos, menor privilégio, segredos externos, sem dados sensíveis e comunicação interna autenticada.
Tabela 2 - Requisitos não funcionais devem gerar testes e evidências.
Categoria
Exemplo de requisito
Como verificar
Latência
p95 de GET /contas abaixo de 300 ms.
Teste de carga e dashboard.
Disponibilidade
SLO mensal de 99,9% para consultas.
Métrica de sucesso por janela.
Recuperação
RPO de 5 min e RTO de 30 min.
Exercício de restauração.
Segurança
Toda chamada protegida possui identidade e escopo.
Testes negativos e auditoria.
Privacidade
Logs sem CPF completo, tokens ou segredos.
Scanner e revisão amostral.
40.4 Domínios, e contratos
A decomposição começa pelo domínio, não pelos . Cliente representa identidade cadastral e preferências. Conta representa vínculo financeiro e saldo disponível. Pagamento representa intenção, validação, execução e conclusão. Notificação representa comunicação derivada de eventos. Cada domínio deve possuir owner, modelo e fronteira de dados claros.
Os contratos precisam definir recursos, métodos, parâmetros, , exemplos, erros e segurança. O design deve usar semântica coerente: para leitura, para criação de intenção, ou apenas quando a semântica estiver clara e códigos de status estáveis. Erros devem usar um envelope padronizado com código, mensagem segura, correlation ID e detalhes apropriados.
A evolução do contrato precisa ser testada automaticamente. Mudanças incompatíveis exigem nova versão ou processo formal. Campos adicionados em devem considerar consumidores estritos. Enums, nullability, formatos e limites fazem parte do contrato. O portal deve publicar documentação, exemplos e changelog.
Trecho mínimo do contrato de pagamentos : 3.1.0 info: title: de Pagamentos version: 1.0.0 paths: /pagamentos: : operationId: iniciarPagamento parameters: - in: name: Idempotency-Key required: true : { type: string, minLength: 16 } : '202': { description: Pagamento aceito para processamento } '409': { description: Chave de idempotência em conflito }
Figura 2 - O contrato orienta implementação, publicação, operação e evolução.
O projeto deve separar autenticação de usuário, autenticação de aplicação e identidade de workload. O aplicativo móvel utiliza Authorization Code com e OpenID Connect. Integrações máquina a máquina utilizam Client Credentials, preferencialmente com autenticação forte do cliente. Workloads internos recebem identidade própria e não reutilizam credenciais humanas.
O valida assinatura, issuer, audience, tempo e escopos do . O continua responsável por autorização de objeto e regra de negócio. Um válido não garante acesso a qualquer conta; o serviço precisa verificar a relação entre subject, consentimento e recurso solicitado. Essa divisão demonstra defesa em profundidade.
Segredos devem permanecer em um secret manager ou solução equivalente. Certificados e chaves precisam de rotação planejada. externas usam ; integrações sensíveis podem usar e vinculados. O modelo de ameaças deve cobrir BOLA, autenticação quebrada, , abuso de fluxo, consumo irrestrito e exposição de dados.
Tabela 3 - A credencial deve corresponder ao tipo de sujeito e ao risco.
Fluxo
Identidade principal
Controle essencial
Mobile -> API
Usuário + cliente público.
OIDC, PKCE, state, nonce e escopos.
Parceiro -> API
Aplicação confidencial.
Client Credentials, mTLS e quota.
Serviço -> serviço
Workload.
Identidade curta, mTLS e policy.
Operador -> plataforma
Pessoa administrativa.
MFA, RBAC e auditoria.
40.6 e policies
O é o ponto controlado de entrada, mas não deve concentrar toda a lógica de negócio. O inbound valida , autenticação, autorização coarse-grained, , tamanho de , rate limit e correlação. A seção de seleciona destino e aplica . A saída remove internos, padroniza respostas e registra telemetria. O fluxo de erro transforma falhas técnicas em respostas consistentes.
Policies precisam ser organizadas por escopo e reutilização. Regras globais cuidam de correlação e segurança básica; policies de produto tratam quotas; policies de validam contratos; policies de operação cobrem exceções específicas. Alterações passam por versionamento, revisão e testes automatizados. O projeto deve demonstrar pelo menos um bloqueio de inválido, um 429 controlado, uma transformação segura e um fallback ou .
do devem registrar rota, consumidor, status, latência, e correlation ID, sem capturar segredos. Métricas distinguem erros produzidos na borda de erros do . Um deve mostrar e serviços na mesma árvore.
Cada serviço possui seu próprio modelo de dados e expõe contratos em vez de tabelas. O serviço de pagamentos grava a intenção e publica um evento sem depender de transação distribuída entre banco e broker. O padrão Transactional registra evento e estado na mesma transação local; um processo posterior publica o evento e marca a entrega.
Consumidores precisam ser idempotentes. O serviço de notificações mantém Inbox ou registro de mensagens processadas. utilizam e jitter, e mensagens não processáveis seguem para DLQ com contexto suficiente para investigação. Ordering é exigido apenas por chave de negócio, como paymentId, evitando um gargalo global desnecessário.
Consultas agregadas podem usar Composition ou uma materialized view. CQRS e Event Sourcing são extensões opcionais; só devem ser incluídos quando o aluno consegue explicar seu custo. O projeto mínimo precisa demonstrar consistência eventual de forma explícita e uma estratégia de reconciliação para divergências.
Tabela 4 - Padrões distribuídos precisam ser comprovados por testes de falha.
Padrão
Problema resolvido
Evidência no projeto
Idempotency Key
Repetição segura de comandos.
Mesmo resultado para replay válido.
Outbox
Atomicidade entre estado e evento.
Evento publicado após commit local.
Inbox
Deduplicação no consumidor.
Mensagem repetida não duplica efeito.
DLQ
Isolamento de falhas não transitórias.
Mensagem inspecionável e reprocessável.
40.8 Kubernetes, service mesh e rede
Os serviços devem ser empacotados em imagens imutáveis e executados com usuário não privilegiado. Deployments definem replicas, strategy, , limits e probes. Readiness só fica verdadeira quando a instância pode receber tráfego; liveness detecta travamento real; startup protege inicializações lentas. PodDisruptionBudget e topology spread reduzem concentração em um único domínio de falha.
Services e internos fornecem descoberta. NetworkPolicies restringem comunicação, egress e acesso a bancos. Ingress ou expõe somente o externo. Secrets são montados ou obtidos por identidade de workload, evitando credenciais fixas em manifests. HPA pode escalar por CPU e, preferencialmente, por métricas relacionadas a demanda.
Uma service mesh opcional aplica e autorização east-west. O projeto deve comparar benefício e custo: ou ambient mesh consomem recursos e adicionam outra camada de diagnóstico. A adoção é válida quando há requisitos claros de identidade de workload, telemetria e controle uniforme.
Todos os componentes emitem estruturados, métricas e . O correlation ID acompanha a jornada, enquanto propaga traceparent entre , serviços e consumidores. O OpenTelemetry Collector recebe sinais e remove atributos sensíveis antes da exportação. Semantic conventions são adotadas para , mensageria, banco e recursos de Kubernetes.
Defina SLIs alinhados ao consumidor: taxa de sucesso, latência, disponibilidade e frescor do processamento assíncrono. Um para pagamento pode combinar aceitação da intenção e conclusão dentro de uma janela. Alertas devem usar burn rate e sintomas percebidos, evitando notificação por qualquer variação de CPU.
A demonstração precisa incluir um completo, um de golden signals e um alerta exercitado. Introduza uma falha controlada, como latência no ou indisponibilidade do broker, e mostre como o sistema degrada, quais políticas atuam e quais evidências permitem localizar a causa.
Tabela 5 - Golden signals transformam a plataforma em um sistema investigável.
Sinal
Métrica principal
Pergunta respondida
Tráfego
requests/s e mensagens/s.
Quanto trabalho chega?
Erros
taxa por código e origem.
Onde e como falha?
Latência
p50, p95 e p99.
Quem percebe lentidão?
Saturação
CPU, filas, conexões e lag.
Qual recurso está perto do limite?
40.10 CI/CD, infraestrutura como código e governança
O repositório deve separar código, contratos, infraestrutura e documentação de forma compreensível. Pull executam lint de , testes unitários, testes de contrato, SAST, análise de dependências, build da imagem e verificação de manifests. A promoção para ambientes usa artefatos imutáveis, não reconstrução.
Infraestrutura como código cria rede, , , observabilidade e identidades. GitOps pode reconciliar manifests do . Segredos permanecem fora do Git e são referenciados por nomes ou identidades. O gera , assina imagens quando possível e bloqueia componentes vulneráveis acima do limite definido.
Governança não deve impedir autonomia sem razão. Templates, policy fragments, bibliotecas de observabilidade e golden paths reduzem decisões repetitivas. Exceções possuem owner, justificativa, prazo e compensação. ADRs registram escolhas como versus , broker utilizado, estratégia de versão e modelo de autenticação.
Figura 3 - Cada fase deve terminar com critérios de aceite e evidências armazenadas.
40.11 Alta disponibilidade, continuidade e recuperação
A plataforma deve tolerar perda de uma instância sem interrupção perceptível. Réplicas ficam distribuídas entre nós ou zonas. O e os serviços são sempre que possível. Estado persistente utiliza replicação e backups testados. Dependências críticas possuem , bulkheads e limites de concorrência.
e orientam a estratégia de recuperação. Um backup que nunca foi restaurado não é evidência de recuperação. O laboratório deve executar ao menos um teste: remoção de Pod, indisponibilidade de , reinício do broker ou restauração de uma base em ambiente isolado. O resultado deve ser documentado com tempo, perda observada e ações corretivas.
não pode criar duplicidade financeira. Idempotência, fencing e reconciliação são essenciais. O plano de continuidade inclui contatos, critérios de declaração, runbooks, comunicação e retorno controlado. Alta disponibilidade sem capacidade de operação humana continua sendo frágil.
40.12 Fases de implementação
Tabela 6 - O projeto evolui por capacidade demonstrável, não por quantidade de componentes.
Fase
Entregas principais
Marco de aceite
1. Fundação
Repositórios, ADRs, OpenAPI, ambiente local e CI.
Contrato validado e build reproduzível.
2. Borda e identidade
Gateway, IdP, TLS, JWT, scopes e rate limits.
Jornadas autorizadas e bloqueios comprovados.
3. Domínio e eventos
Serviços, banco, idempotência, Outbox e consumidor.
Fluxo de pagamento e evento íntegros.
4. Plataforma
Kubernetes, observabilidade, SLO, IaC e DR.
Falha injetada, diagnosticada e recuperada.
Na fase de fundação, priorize clareza do domínio e contrato. A fase de borda adiciona segurança antes de aumentar o número de serviços. A terceira fase introduz consistência distribuída e mensageria. A fase final endurece operação, observabilidade e recuperação. Essa ordem reduz a chance de terminar com uma infraestrutura sofisticada e um fluxo de negócio incompleto.
Cada fase deve ter uma demonstração curta e automatizável. Scripts de smoke test, coleções de requisições e dados sintéticos aceleram validação. A documentação precisa indicar comandos, pré-requisitos e resultado esperado. Uma pessoa que não participou do desenvolvimento deve conseguir executar o roteiro.
40.13 Critérios de aceite técnico
Contratos válidos, documentados, versionados e sem mudança incompatível não aprovada.
Autenticação e autorização funcionam para usuário, parceiro e workload; testes negativos produzem respostas corretas.
aplica validação, rate limit, correlação, e tratamento de erro sem expor dados internos.
Pagamento é idempotente, persiste estado e publica evento de forma confiável.
Consumidor suporta duplicatas, e DLQ; há procedimento de reprocessamento.
Workloads possuem , limits, probes, rollout e política de rede.
, métricas e permitem localizar uma falha ponta a ponta.
executa testes, scans e implantação reproduzível; infraestrutura é criada por código.
Há , alerta testado, backup restaurado e runbook para incidente crítico.
Documentação descreve arquitetura, trade-offs, riscos, custos e evolução futura.
40.14 Entregáveis, demonstração e avaliação
O pacote final deve conter diagrama de contexto, diagrama de , fluxos de autenticação e pagamento, contratos , arquivos .proto se utilizados, modelo de eventos, ADRs, , manifests ou charts, infraestrutura como código, , , alertas, runbooks e relatório de testes. Capturas isoladas não substituem artefatos versionados.
A demonstração sugerida dura de quinze a vinte minutos. Primeiro, apresente o problema e a arquitetura. Em seguida, execute uma jornada autorizada, uma tentativa bloqueada, uma repetição idempotente e o consumo de um evento. Depois, injete uma falha, navegue por métricas e , aplique recuperação e mostre o estado final. Encerre com limitações e próximos passos.
A avaliação deve equilibrar funcionalidade, segurança, confiabilidade, observabilidade, automação e clareza. Uma solução menor, mas coerente e bem testada, vale mais do que uma arquitetura extensa sem evidências. Decisões conscientes de não utilizar determinada tecnologia também são válidas quando justificadas.
Tabela 7 - Rubrica sugerida para avaliação do projeto final.
Dimensão
Peso sugerido
Pergunta de avaliação
Arquitetura e contratos
20%
As fronteiras e interfaces são coerentes?
Segurança e privacidade
20%
Identidades, dados e segredos estão protegidos?
Confiabilidade e dados
20%
Falhas, duplicatas e recuperação são tratadas?
Operação e observabilidade
20%
É possível detectar, explicar e responder?
Automação e documentação
20%
Outra equipe consegue reproduzir e manter?
40.15 e laboratórios finais
O laboratório final deve provocar falhas em camadas distintas: incorreto, certificado não confiável, com audience errada, policy de mal ordenada, de , Pod sem readiness, broker indisponível e consumidor com lag. Para cada caso, escreva hipótese, evidência, teste de confirmação e correção. O objetivo é demonstrar método, não apenas encontrar rapidamente a resposta.
Uma segunda sequência deve testar abuso e limites: acima do permitido, enum inválido, BOLA, repetição de pagamento, burst de requisições, segredo exposto em e query lenta. Registre como , , banco e observabilidade respondem. Defesas precisam falhar de forma segura e produzir sinal suficiente para operação.
Como evolução, o projeto pode receber para composição de canais, entre serviços, para notificações, multi- , active-active, Open Finance ou políticas Zero Trust adaptativas. Cada extensão deve preservar o princípio do curso: compreender responsabilidades, contratos, riscos e evidências antes de adicionar complexidade.
Encerramento do curso Uma plataforma de é um sistema sociotécnico: protocolos, código, infraestrutura, segurança, operação, governança e pessoas precisam funcionar juntos. O projeto final é bem-sucedido quando torna essas relações explícitas e demonstráveis.
Checklist final de entrega
Cenário, escopo, restrições e requisitos estão documentados.
Arquitetura possui diagramas e ADRs atualizados.
, eventos e erros possuem contratos versionados.
Identidades, escopos, consentimentos e regras de autorização estão explícitos.
e políticas estão em código, testados e observáveis.
Idempotência, , Inbox, e DLQ foram exercitados.
Kubernetes possui segurança, probes, recursos, rollout e políticas de rede.
, métricas, , e alertas foram demonstrados.
, IaC, e estratégia de estão disponíveis.
Backup, restauração, e runbooks foram testados.
Dados pessoais são fictícios, minimizados e protegidos.
A demonstração pode ser executada por outra pessoa usando a documentação.
Exercícios de consolidação
Desenhe a arquitetura mínima e identifique todas as fronteiras de confiança.
Defina os e as regras de autorização de objeto para clientes, contas e pagamentos.
Modele o estado de um pagamento e indique onde a idempotência é aplicada.
Escreva o contrato do evento PagamentoAtualizado e a política de evolução.
Proponha e alertas para consultas e iniciação de pagamentos.
Defina uma falha que deve resultar em 502, outra em 503 e outra em 504.
Crie um plano de para uma versão incompatível de .
Descreva como restaurar o banco e reconciliar eventos após desastre.
Liste quais controles pertencem ao , ao , ao mesh e à plataforma.
Apresente três extensões futuras e o custo operacional de cada uma.
Glossário
Tabela 8 - Vocabulário essencial do projeto final.
Termo
Definição
ADR
Registro de uma decisão arquitetural, contexto, alternativas e consequências.
Golden path
Caminho padronizado e suportado para construir e operar serviços.
Idempotency Key
Identificador usado para repetir um comando sem duplicar seu efeito.
Outbox
Padrão que registra estado e evento na mesma transação local.
PDP/PEP
Componentes de decisão e aplicação de políticas de acesso.
RPO/RTO
Limites de perda de dados e tempo de recuperação.
SLI/SLO
Indicador medido e objetivo de confiabilidade.
SBOM
Inventário de componentes de software presentes em um artefato.
Threat model
Análise de ativos, ameaças, superfícies e controles.
Trace Context
Padrão de propagação de contexto de tracing distribuído.
Referências técnicas para execução
Initiative. Specification 3.1.
. 9110 - Semantics.
. 2.0, e 2.0 Security Best Current Practice.
OpenID Foundation. OpenID Connect Core.
. Security Top 10 e Application Security Verification Standard.
Kubernetes Documentation. Workloads, Services, Security e .
OpenTelemetry Documentation. Signals, Collector e Semantic Conventions.
SP 800-207. Zero Trust Architecture.
Secure Software Development .
Documentações oficiais do , broker, banco e provedor de identidade escolhidos.
Nota final Ferramentas e serviços mudam; os princípios avaliados permanecem. Registre versões, valide a documentação oficial do ambiente utilizado e preserve scripts e evidências para que o projeto continue reproduzível.