SOA, ou arquitetura orientada a serviços, define uma maneira de tornar os componentes de software reutilizáveis e interoperáveis por meio de interfaces de serviço. Os serviços usam padrões comuns de interface e um padrão de arquitetura para que serem incorporados rapidamente a novos aplicativos. Isso remove tarefas do desenvolvedor de aplicativos que anteriormente redesenvolveu ou duplicou funcionalidade existente ou teve que saber como conectar ou fornecer interoperabilidade com funções existentes.
Cada serviço em uma SOA incorpora o código e os dados necessários para executar uma função de negócios completa e confidencial (por exemplo, verificar o crédito de um cliente, calcular um pagamento mensal de um empréstimo ou processar uma proposta de hipoteca). As interfaces de serviços oferecem acoplamento fraco, o que significa que exigem pouco ou nenhum conhecimento técnico sobre como o serviço é implementado, reduzindo as dependências entre os aplicativos.
Esta interface é um contrato de serviço entre o provedor de serviços e o consumidor do serviço. Os aplicativos por trás da interface de serviço podem ser escritos em Java, Microsoft .Net, Cobol ou qualquer outra linguagem de programação, fornecida como aplicativos de software empacotados por um fornecedor (por exemplo, SAP), aplicativos SaaS (por exemplo, Salesforce CRM) ou obtidos como aplicativos de código aberto. As interfaces de serviços são normalmente definidas usando Linguagem de Descrição de Serviços da Web (WSDL), que é uma estrutura padrão de marcações baseada em XML (linguagem de marcação extensível).
Os serviços são expostos usando protocolos de rede padrão, como SOAP (protocolo de acesso a objeto simples)/HTTP ou Restful HTTP (JSON/HTTP), para enviar solicitações de leitura ou de alteração de dados. A governança do serviço controla o ciclo de vida para o desenvolvimento e no momento certo os serviços são publicados em um registro que permite aos desenvolvedores encontrá-los rapidamente e reutilizá-los para criar novos aplicativos ou processos de negócios.
Esses serviços podem ser desenvolvidos partindo da estaca zero, mas geralmente são criados ao expor funções de sistemas legados de registro como interfaces de serviço.
Dessa forma, a SOA representa uma etapa importante na evolução do desenvolvimento e integração de aplicativos ao longo das últimas décadas. Antes da SOA surgir no final da década de 1990, conectar um aplicativo a dados ou a funcionalidades hospedadas em outro sistema exigia integração complexa ponto a ponto, que os desenvolvedores tinham de recriar, de forma parcial ou integral, para cada novo projeto de desenvolvimento. A exposição dessas funções através de serviços de SOA permite ao desenvolvedor simplesmente reutilizar o recurso existente e conectar-se através da arquitetura da SOA ESB (veja abaixo).
Note que embora a SOA, e as arquiteturas de microsserviços mais recentes, compartilhem muitas palavras em comum (como "serviço" e " arquitetura"), há pouca relação entre elas e, na verdade, operam em escopos diferentes, conforme será discutido mais adiante neste artigo.