Overview
- SOA e SOAP são a mesma coisa?
- Service e WebService são a mesma coisa?
- Java e Javascript são a mesma coisa?
Será que as pessoas não têm criatividade ou às vezes querem gerar confusão na mente dos outros com palavras semelhantes que significam coisas diferentes?
Se você leu os dois primeiros artigos, creio que tem uma ideia até clara de qual é a resposta das duas primeiras perguntas. Se você é um desenvolvedor de software, tem resposta para a terceira.
Lembre-se:
Se SOA não é tecnologia, seria estranho atrelá-la a SOAP.
Arquitetura Orientada a Serviços é a arquitetura que parte da premissa que tudo pode ser considerado um serviço, desde que siga os princípios estipulados por SOA em uma extensão significativa, sendo assim, nem todo service precisa ser um webservice.
Se você é desenvolvedor, sabe que as linguagens Java e Javascript não tem muita coisa em comum, exceto o fato de ambos terem Java no nome.
Assim também, SOA e SOAP, e service e webservice possuem parte da sua estrutura de letras em comum, porém, diferentemente do primeiro exemplo das linguagens, é possível sim ter SOA com SOAP e um service expresso em webservice. A grande diferença é que isso não é obrigatório.
SOA e SOAP
SOA é uma arquitetura e SOAP é um protocolo. Porque então a confusão já que SOA prega a diversidade tecnológica?
Na verdade, muita coisa do protocolo SOAP (Simple Access Protol) pode ser comparada com os princípios de SOA, daí a confusão.
A figura do Contrato de Serviço em SOA pode ser expressa em SOAP via o Contrato de Serviço WSDL (Web Service Description Language).
Os modelos canônicos em SOA podem ser expressos via XSDs (XML Schema Definition) em SOAP.
As mensagens de exceção também podem ser expressas via SOAP através de SOAPFault.
Na verdade, é possível alcançar muitos dos princípios de SOA utilizando-se SOAP, assim como é possível não alcançar nenhum.
À época, SOAP estava em alta no que diz respeito à comunicação utilizando-se sistemas distribuídos, daí a possível confusão dado o fato de termos muitas soluções utilizando o protocolo.
Service e WebService
Da mesma forma, service e webservice podem ou não ter relação.
Em Java, o ato de colocar a anotação @WebService em uma classe automaticamente a transforma em um webservice SOAP, mas daí para ter-se pensando nos princípios de SOA é outra história.
Anotar uma classe com @WebService inclusive quebra um dos princípios de SOA, o acoplamento da lógica com o Contrato de Serviço, ferindo a ideia de Contract-First.
É possível sim especificar um WSDL e utilizar implementações para gerarem código a partir da especificação do contrato, porém, o caminho inverso não é visto com bons olhos para SOA, como falado anteriormente.
Em SOA, desde que se aplique os padrões em uma extensão significativa é possível ter um serviço expresso até através de um EJB, por exemplo.
Ainda discutiremos a estrutura básica de um WSDL, mas olhe por exemplo o webservice dos correios em SOAP: http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL. No próximo artigo conversaremos sobre abordagens top-down e bottom-up.
REST e SOA
Uma vez que é possível utilizar EJBs para expressar serviços, e que SOA não tem nada relacionado a tecnologia, sim, é possível utilizar os padrões de SOA em REST!
Em artigos anteriores já discorremos sobre a utilização do Swagger para definição de Contrato ou Especificação, uma abordagem conhecida como API First, bastante influenciada pelo conceito de Contract-First.
Quando formos ver conceitos como barramento (BUS) ficará mais claro, que se estamos tratando com SOAP ou REST ou mensageria, tanto faz. A questão é saber se os princípios de SOA estão sendo aplicados em extensão significativa naquela solução.
Conclusão
O propósito desse artigo era ser um pouco mais técnico, porém, no próximo artigo falaremos de uma equipe que nunca pensou que seria mencionada em um artigo de SOA… sim, designers, vocês estão em nossos corações, não esquecemos de vocês… s2 s2
Como dito anteriormente, falaremos de duas abordagens de SOA em:
O principal pesadelo dos designers: Top Down ou Bottom Up? Como decisões de implementação de serviços impactam na Experiência de Usuário (UX) mobile ou web.
Nos encontramos lá…