Início

Software Design

UA6 — Projeto de Serviços Web

Projetar serviços web vai além de escolher SOAP ou REST. É preciso definir camadas, contratos, mecanismos de descoberta e de comunicação — e entender o que fica 'por trás da interface' para garantir disponibilidade, segurança e escalabilidade.

Arquitetura em 4 Camadas

A estrutura clássica de uma aplicação de serviços web divide responsabilidades em quatro camadas:

CamadaResponsabilidadeTecnologias típicas
ClienteInterface com o usuário; consome os serviçosBrowser, app mobile, outro sistema
Web (Container Web)Recebe requisições HTTP; delega para a camada de negócioServlets, JAX-RS, Spring MVC
Negócio (EJB / Business Tier)Lógica de negócio, orquestração de serviços, transaçõesEJB, Spring, CDI
EIS (Enterprise Information Systems)Acesso a dados, sistemas legados, bancos, filasJPA, JDBC, JMS, conectores ERP

O que fica por trás da interface

A interface exposta ao consumidor é apenas a ponta do iceberg. Por trás dela, a infraestrutura garante:

Disponibilidade e Redundância

Alta disponibilidade via balanceamento de carga e redundância de instâncias — o serviço continua mesmo se um nó cair.

Escalabilidade

Capacidade de atender mais requisições adicionando recursos horizontalmente (mais instâncias) ou verticalmente (mais hardware).

Segurança

Autenticação, autorização, criptografia de mensagens (WS-Security para SOAP; JWT/OAuth 2.0 para REST).

Interoperabilidade

Capacidade de se comunicar com sistemas escritos em qualquer linguagem via protocolo padronizado.

Orquestração

Coordenação de múltiplos serviços para compor um processo de negócio mais complexo.

Gerenciamento e Monitoramento

Rastreamento de chamadas, logs, métricas de performance, alertas de falha.

HTTPServlet — o padrão de tratamento de requisições

Na camada Web, cada requisição HTTP é tratada por um Servlet. O método a ser invocado depende do verbo HTTP:

Método do ServletVerbo HTTPUso
doGet()GETLeitura, busca de recurso
doPost()POSTCriação de recurso
doPut()PUTAtualização completa
doDelete()DELETERemoção de recurso
doHead()HEADVerifica existência sem retornar corpo
doOptions()OPTIONSRetorna métodos suportados (CORS preflight)
doTrace()TRACEDiagnóstico — raramente usado

SOAP — Estrutura da Mensagem

Toda mensagem SOAP segue uma estrutura rígida de três elementos:

ElementoObrigatório?Função
EnvelopeSimElemento raiz; define namespaces e estilo de codificação. É o “container” da mensagem.
HeaderNãoInformações adicionais (autenticação, transação, rastreamento). Quando presente, deve ser o primeiro filho do Envelope.
BodySimContém o payload real da mensagem (a operação e seus parâmetros). Pode incluir o elemento Fault para reportar erros.
<!-- Estrutura completa de uma mensagem SOAP -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <auth:token xmlns:auth="...">abc123</auth:token>
  </soap:Header>
  <soap:Body>
    <calcularFrete>
      <cep>88000000</cep>
      <peso>2.5</peso>
    </calcularFrete>
  </soap:Body>
</soap:Envelope>

WSDL — Descrevendo o Contrato

O WSDL (Web Services Description Language) é um documento XML que descreve completamente um serviço SOAP. Seus elementos principais:

ElementoParteO que descreve
<types>AbstrataTipos de dados usados nas mensagens (schemas XML)
<message>AbstrataParâmetros de entrada e saída de cada operação
<portType>AbstrataConjunto de operações disponíveis (como uma interface)
<binding>ConcretaProtocolo e formato de dados para as operações
<operation>ConcretaDefine entrada, saída e falhas de cada operação
<definitions>RaizElemento raiz; contém namespaces e todos os demais

UDDI — As Três Páginas do Registro

O UDDI organiza as informações dos serviços em três categorias, analogia às antigas listas telefônicas:

Páginas Brancas

Informações gerais do provedor: nome da empresa, endereço, contatos, identificadores. “Quem é esse fornecedor?”

Páginas Verdes

Informações técnicas: endpoints de acesso, interfaces (WSDL), protocolos suportados. “Como acesso o serviço?”

Páginas Amarelas

Categorização por taxonomia de negócio (NAICS, UNSPSC). “Que tipo de serviço é esse?”

Paradigma Localizar–Vincular–Executar

O fluxo completo de uso de um serviço web SOAP com UDDI:

  1. Publicar: o provedor registra o serviço no UDDI com o link para o WSDL.
  2. Localizar: o consumidor consulta o UDDI e encontra o serviço adequado.
  3. Vincular: o consumidor lê o WSDL e gera um proxy (stub) para invocar o serviço.
  4. Executar: o consumidor invoca o serviço via SOAP (RPC encapsulado em XML sobre HTTP).

REST — Representational State Transfer

Proposto por Roy Fielding em sua dissertação (2000) como estilo arquitetural baseado nos princípios do HTTP. É stateless: cada requisição carrega tudo que o servidor precisa — sem sessão, sem contexto salvo no servidor. O uso de cache reduz latência e carga.

Verbos HTTP — mapeamento CRUD

VerboOperação CRUDExemploIdempotente?
GETReadGET /pedidos/42Sim
POSTCreatePOST /pedidosNão
PUTUpdate (total)PUT /pedidos/42Sim
PATCHUpdate (parcial)PATCH /pedidos/42Não
DELETEDeleteDELETE /pedidos/42Sim

Códigos de Status HTTP

CódigoSignificado
200 OKSucesso
201 CreatedRecurso criado (resposta a POST bem-sucedido)
400 Bad RequestRequisição inválida — erro do cliente
401 UnauthorizedNão autenticado
403 ForbiddenAutenticado mas sem permissão
404 Not FoundRecurso não existe
500 Internal Server ErrorErro no servidor

Quando usar SOAP vs REST

AspectoSOAPREST
ProtocoloPróprio (sobre HTTP/SMTP)HTTP nativo
FormatoXML obrigatórioJSON, XML, qualquer formato
ContratoWSDL (obrigatório)OpenAPI/Swagger (recomendado)
SegurançaWS-Security (robusto, verbose)JWT, OAuth 2.0
ComplexidadeAlta — ferramentas de geração de código obrigatóriasBaixa — qualquer cliente HTTP funciona
Uso típicoSistemas bancários, ERPs, integrações corporativas legadasAPIs mobile, SPAs, microsserviços, cloud

Conteúdo histórico — Práticas Modernas

O material do curso tem foco em tecnologias Java/JEE do início dos anos 2000. O cenário atual é substancialmente diferente:

  • UDDI foi abandonado. Os grandes registros públicos fecharam em 2005–2006. Hoje, a descoberta de serviços usa API Gateway (Kong, AWS API Gateway) com catálogos internos como Backstage (Spotify), ou service mesh com Consul/Kubernetes DNS.
  • WSDL/SOAP perderam a hegemonia para REST+OpenAPI. A especificação OpenAPI 3.x substituiu o WSDL como contrato de API. Ferramentas como Swagger UI e Redoc geram documentação navegável automaticamente.
  • gRPC como alternativa de alta performance. Para comunicação interna entre microsserviços onde performance importa, o gRPC (Protocol Buffers + HTTP/2) oferece serialização binária muito mais eficiente que SOAP/XML.
  • Java EE virou Jakarta EE. O JEE foi doado à Eclipse Foundation e renomeado Jakarta EE. Na prática, Spring Boot domina o mercado; a maioria dos novos projetos não usa EJB.
  • Microsserviços + Kubernetes substituem o ESB. Cada serviço expõe uma API REST; o API Gateway faz roteamento, autenticação e rate limiting. O sidecar pattern (Envoy/Istio) cuida de observabilidade e segurança.

Dicas para a Prova

  • A arquitetura de serviços web tem 4 camadas: cliente → web (servlets) → negócio (EJB) → EIS.
  • Páginas brancas = info geral; páginas verdes = info técnica de acesso; páginas amarelas = categorização por taxonomia.
  • Envelope SOAP = apresentação XML; Header = inicializa informações adicionais; Body = dados encapsulados (payload).
  • O consumidor precisa do UDDI (para encontrar) e do WSDL (para saber como usar) — os dois juntos permitem a integração.
  • SOAP sobre HTTP é a base do RPC via serviços web — XML encapsula a chamada de procedimento remoto trafegando sobre HTTP.

Referências bibliográficas desta UA

  • SOMMERVILLE, I. Engenharia de Software, 8ª ed., 2007.
  • MENDES, A. Arquitetura de Software, 2002.
  • FIELDING, R. Architectural Styles and the Design of Network-based Software Architectures, dissertação de doutorado, 2000.