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).

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com