Arquitetura Orientada a Serviços
Definição
A Arquitetura Orientada a Serviços (SOA — Service Oriented Architecture) é um estilo arquitetural que organiza um sistema como um conjunto de serviços independentes que se comunicam por meio de interfaces bem definidas.
Cada serviço representa uma funcionalidade de negócio e pode ser reutilizado por diferentes partes da aplicação ou até mesmo por outros sistemas. A comunicação entre os serviços geralmente ocorre por meio de mensagens, protocolos padronizados (como HTTP, XML, JSON ou SOAP) e contratos formais (como WSDL ou OpenAPI).
Por que é importante
SOA promove reutilização, interoperabilidade e separação de responsabilidades. É útil em ambientes corporativos complexos, nos quais diferentes sistemas precisam se integrar e compartilhar funcionalidades.
Também permite expor funcionalidades de maneira padronizada para parceiros, clientes ou outros sistemas internos, mantendo flexibilidade para atualizar serviços sem alterar os consumidores.
Componentes típicos
- Serviços: implementações reutilizáveis de funcionalidades específicas (ex: faturamento, autenticação, estoque);
- Contrato de serviço: especificação da interface e dos dados aceitos (por exemplo, em WSDL ou OpenAPI);
- Barramento de serviços (ESB): middleware que controla o roteamento, transformação e orquestração de mensagens entre os serviços;
- Cliente: aplicações que consomem os serviços via rede.
[ Cliente ] → [ Serviço A ]
↓
[ Barramento de Serviços ]
↓
[ Serviço B ] ←→ [ Serviço C ]
Exemplo prático (em Python)
Abaixo, dois serviços simulados — um para autenticação e outro para cadastro de usuários — interagem de forma independente. Cada um expõe uma interface e segue o contrato de entrada e saída esperado.
# Serviço de Autenticação (servico_autenticacao.py)
class ServicoAutenticacao:
def autenticar(self, usuario, senha):
if usuario == "admin" and senha == "123":
return {"status": "ok", "token": "abc123"}
return {"status": "erro", "mensagem": "Credenciais inválidas"}
# Serviço de Cadastro que consome o serviço de autenticação (servico_cadastro.py)
class ServicoCadastro:
def __init__(self, autenticador):
self.autenticador = autenticador
def registrar_usuario(self, usuario, senha):
resultado = self.autenticador.autenticar(usuario, senha)
if resultado["status"] == "ok":
print(f"Usuário {usuario} registrado com sucesso.")
else:
print("Erro no registro:", resultado["mensagem"])
# Simulando o consumo via cliente
autenticador = ServicoAutenticacao()
cadastro = ServicoCadastro(autenticador)
cadastro.registrar_usuario("admin", "123") # Sucesso
cadastro.registrar_usuario("user", "errado") # Falha
Cada serviço pode ser executado isoladamente, exposto por HTTP ou mensageria, e substituído sem quebrar o contrato — o que caracteriza a abordagem SOA.
SOA vs Microserviços
Embora ambos promovam a divisão em serviços, existem diferenças importantes:
- Em SOA, os serviços costumam ser mais amplos e podem compartilhar banco de dados ou infraestrutura.
- Microserviços tendem a ser menores, mais autônomos e implantados de forma totalmente independente.
- SOA geralmente centraliza a comunicação por meio de um Enterprise Service Bus (ESB); microserviços preferem comunicação direta (ou via eventos).