Qual é o significado atual do SOAP

51

A última vez que encontrei um serviço baseado em SOAP foi durante meu estágio em uma empresa financeira em 2013. Foi nessa época que iniciei minha carreira em TI. Lembro-me de ter algum material de estudo sobre SOAP em um dos meus cursos de engenharia. Fora isso, não usei muito o SOAP durante minha carreira.

Estou perguntando isso desde que a pergunta "Diferença entre SOAP e REST" surgiu em uma de minhas entrevistas recentes. Pelo que sei (e o que encontrei no Google) SOAP é um protocolo com forte acoplamento entre cliente e servidor para intercâmbio de informações que está intimamente relacionado à lógica comercial. Enquanto o REST é uma arquitetura sem estado mais flexível para transferência de dados.

Alguém pode me corrigir se estiver errado sobre essa diferença entre SOAP e REST? Além disso, qual é o significado atual do SOAP? As pessoas ainda estão desenvolvendo novas APIs baseadas em SOAP ou agora são um legado?

Abhas Tandon
fonte
2
veja também: Futuro do SOAP, com REST
gnat
14
@gnat: Pelo que vale, as respostas em ambas as perguntas são terríveis.
22716 Robert Harvey
7
Você realmente viu um serviço REST? Tudo o que vejo são "serviços da web que finalmente aprenderam o que significam verbos HTTP". Por que de repente estamos chamando HTTP REST?
22816 Luaan
8
@Luaan: Não há nada repentino nisso; as pessoas abusam do termo "REST" há anos.
Lightness Races com Monica

Respostas:

58

REST é realmente um estilo arquitetônico. SOAP é um protocolo de dados. A distinção é importante; você não pode compará-los diretamente.

O objetivo principal do REST é representar recursos na Internet e fornecer mecanismos para descobri-los. Por outro lado, o SOAP é usado para comunicar dados estruturados entre computadores, e isso é tudo o que realmente faz.

Observe que você realmente não precisa do REST para criar um relacionamento cliente / servidor entre dois computadores na Internet. Tudo que você precisa é de um mecanismo que transfira JSON ou XML, e você nem precisa disso se estiver disposto a ser incompatível com todos os outros.

No entanto, o SOAP caiu em desuso para novas APIs voltadas ao público, embora ainda seja comumente usado para aplicativos B2B, porque você pode definir um "contrato de dados" com ele. Os serviços da Web JSON têm a virtude de serem bastante leves e flexíveis e, como o Javascript reconhece o JSON nativamente, é uma escolha natural para navegadores.

Mas nada disso tem muito a ver com o REST, na verdade.

Leitura adicional
O REST é melhor que o SOAP? (bom artigo, apesar de chamar incorretamente o protocolo REST).
O Modelo de Maturidade de Richardson

Robert Harvey
fonte
3
Eu diria que o recurso matador dos serviços da Web JSON é exatamente o fato de que os navegadores têm pouco suporte para XML e SOAP, enquanto eles têm (quase) suporte nativo para JSON. O SOAP tem muito a oferecer, mas se você não pode fazer solicitações AJAX contra um serviço SOAP, está morto. Javascript / JSON se tornou o menor denominador comum da internet, então você precisa de um enorme benefício para não usá-lo, e SOAP não é que muito melhor.
21416 Luaan
3
@Lanan Eu não diria que os navegadores têm pouco suporte para XML. Na verdade, é difícil melhorar do que fazer um XML HttpRequest e acessar um atributo que possui um DOM analisado. Só que se o que se quer é uma estrutura de dados típica, e não um documento, o JSON é simplesmente mais adequado, esteja você no navegador ou em qualquer outro ambiente.
André Paramés
4
Tudo o que você precisa é de um mecanismo que transfira JSON ou XML, e você nem precisa disso se estiver disposto a ser incompatível com todos os outros. -1: Se você deseja conectar um cliente e servidor, precisa apenas de um protocolo arbitrário que os dois lados entendam que não tem nada a ver com o uso de xml, JSON ou com a compatibilidade de todos os outros. Mesmo usando json ou xml não garante que você seja compatível com todos ou mesmo com alguém. Json e xml são apenas formatos de dados e nada mais.
Paul Wasilewski
6
@PaulWasilewski: Sim, foi o que eu disse. Não se prenda a palavras. Há uma razão pela qual todos usam JSON; é um padrão. Usá-lo garante que você esteja usando algo que seja reconhecível por outras pessoas.
22716 Robert Harvey
3
@RobertHarvey, não, não é o que você escreveu, talvez tenha falado sério. JSON é padrão e daí? CSV, Protcol Buffers, BSON é padronizado, assim como muitos outros. Portanto, a razão pela qual todo mundo está usando JSON é múltipla. E há mesmo alguns que estão usando JSON porque todo mundo está usando JSON;)
Paul Wasilewski
29

O REST é muito mais limitado que o SOAP, que é sua força e o motivo de sua popularidade.

No SOAP, o conjunto de operações permitido e o conjunto de tipos de dados permitidos são essencialmente ilimitados. SOAP é um protocolo de procedimento remoto, usado para expor APIs locais na rede sem perder nenhuma fidelidade. Isso tornou o SOAP popular em ambientes corporativos onde sistemas transacionais complexos precisavam interagir através da rede sem perder nenhuma fidelidade ao longo do caminho. Essa riqueza de habilidades também é a queda do SOAP, porque torna as APIs do SOAP tão difíceis de entender e usar que eram necessárias ferramentas automatizadas na forma de bibliotecas de clientes WSDL e SOAP para entender as coisas. Além disso, expor toda a riqueza do sistema subjacente não é atraente nas APIs voltadas para o público, nas quais você deseja fornecer abstrações que permitem evoluir o sistema subjacente sem precisar interromper ou versão sua API.

REST + JSON ganhou popularidade especificamente por causa de sua simplicidade. Ele define um conjunto limitado de operações com um conjunto limitado de tipos de dados, exigindo que o designer da API projete cuidadosamente abstrações que se encaixam nesse vocabulário limitado e realmente pense no mapeamento do domínio de negócios para os recursos REST. Uma API REST é fácil de entender e fácil de usar, sem nenhuma ferramenta especial. Para uma API voltada ao público, na qual seus usuários da API podem ter todos os níveis de habilidade e conhecimento, é exatamente isso que você deseja, e é por isso que todas as APIs que você vê na Web estão migrando para o REST. O SOAP é relegado a situações corporativas em que ainda existe um desejo e a necessidade de compartilhar APIs complexas entre sistemas. Contudo,

Essencialmente, o que as pessoas perceberam é que o conjunto de restrições que você deve aplicar ao seu design de API para tornar a API simples e abstrata o suficiente para que seja sustentável e fácil de usar é exatamente o conjunto de restrições que o REST introduz, que neutraliza efetivamente os SOAP benefícios deixando você com apenas suas desvantagens. Você poderia criar uma API simplificada com SOAP, mas nunca seria tão fácil de usar quanto o REST; portanto, na prática, todo mundo escolhe o REST.

Joeri Sebrechts
fonte
4
O bom e velho debate sobre digitação estática versus dinâmica, sim: D Puro e duro versus hacky e simples, a guerra que nunca acaba.
21816 Luaan
@Luaan ... e dinâmico sempre vence no intercâmbio de dados. youtube.com/watch?v=ROor6_NGIWU
Jared Smith
6
@JaredSmith Eu discordo totalmente. Os contratos devem ser seguidos para que ambos os pontos de extremidade mapeiem os dados corretamente, se você pode fazer isso através da publicação de metadados em vez de páginas de documentação propensas a erros, por que não faria?
drake7707
11
O REST prático é um protocolo; A tese e a religião são 'estilo arquitetônico'. Esta resposta compara corretamente o descanso prático ao sabão prático.
bmargulies
11
Sua resposta já mostrou que você não entende o REST e o comentário sublinha isso.
Paul Wasilewski
5

Você não pode comparar REST e SOAP. REST é um estilo de arquitetura, enquanto SOAP é um protocolo.

Infelizmente, o REST tornou-se falado coloquialmente como sinônimo de serviço HTTP RESTful, o que significa uma realização da arquitetura denominada REST com HTTP como protocolo (aplicativo).

O REST é baseado nos seguintes princípios (restrições e elementos) (entre parênteses, a realização no HTTP RESTful) [1] .

  • Sem estado (HTTP é um protocolo sem estado)
  • Recurso (identificado por URIs)
  • Interface Uniforme (Métodos HTTP)
  • Representação (MIME-TYPE)
  • HATEOS (Hiperlinks)
  • Cache (cache HTTP)

Por outro lado, muitas pessoas querem dizer SOAP como um serviço da Web baseado em WSDL e SOAP, que fazem parte da arquitetura de serviços da Web W3C [2] .

  • O SOAP é usado como protocolo para troca de informações (basicamente nome do método, parâmetros, valores de retorno, tipos de dados, ...).
  • WSDL, uma linguagem de definição de interface para descrever o serviço da web.

Qual é o significado atual do SOAP *?

SOAP é um padrão W3C e é usado como formato de troca de informações nos serviços web W3C. Esses serviços da web foram - especialmente durante o hype das SOAs (arquiteturas orientadas a serviços) por volta de 2008 (+ - 3 anos) - e (infelizmente) ainda são implementados principalmente em aplicativos corporativos.

Isso tem vários motivos. Naquela época, o HTTP RESTful não era bem conhecido e era mal compreendido. Infelizmente, ainda é incompreendido, dê uma olhada nas outras respostas

„[...] REST é muito mais limitado que SOAP [...].“

„O objetivo principal do REST é representar recursos na Internet [...].”

Além disso, o SOAP (e o WSDL) fazem parte da pilha de protocolos de serviço da Web W3C, que fornece ainda mais padrões para a implementação de um serviço da Web.

As pessoas ainda estão desenvolvendo novas APIs baseadas em SOAP ou agora são um legado?

Então, sim, ainda existem e também haverá sistemas futuros por aí que usam SOAP (pelo menos em sistemas corporativos, principalmente atrás das portas). Mas a maioria está tentando fazer algum tipo de "REST" hoje em dia.

Alguém pode me corrigir se estiver errado sobre essa diferença entre SOAP e REST?

Dizer que o REST é uma arquitetura sem estado mais flexível para transferência de dados não é uma boa explicação. O REST de fala simples é um estilo de arquitetura com restrições e elementos específicos. Considerando que o SOAP é um protocolo de troca de informações.

Como eu já escrevi, você não pode compará-los. Mas você pode comparar um serviço da Web HTTP RESTful com um serviço da Web SOAP / WSDL.

Paul Wasilewski
fonte
"Mas você pode comparar um serviço Web HTTP RESTful com um serviço Web SOAP / WSDL." Mas é isso que o OP está perguntando. Alguém já respondeu isso?
RoboJ1M 26/04