Quais são os fatores decisivos na escolha de expor um serviço da Web como um serviço SOAP ou REST?


30

Tanto quanto eu vejo que consumir SOAP requer uma pilha SOAP, por isso é mais difícil para seus clientes consumir, ou seja, eles precisam garantir que eles tenham uma pilha SOAP no lugar que formate os dados POST e os cabeçalhos corretamente e, em seguida, devolva alguns estrutura de dados, enquanto que com o REST você apenas faz uma solicitação HTTP GET com os argumentos da string de consulta e retorna algum texto que eu acho que provavelmente é XML.

Então, o que a sobrecarga / complexidade extra do SOAP fornece a você, quando você precisa e quando você pode e deve fazer sem ele?

Respostas:


17

Eu implementei uma API REST antes e gostei muito. Em geral, quando você implementa o REST sobre SOAP, seu cliente / servidor é mais ortogonal, o que significa que você pode alterar muito mais livremente o servidor sem afetar o (s) cliente (s). Essa ortogonalidade se deve ao uso de uma comunicação mais abstrata e já bem definida via verbos HTTP. Além disso, o uso de hiperlinks incorporados em suas respostas REST facilita a extensão e o crescimento da API relativamente sem problemas. Os clientes devem seguir esses links incorporados para obter novos recursos, como um humano seguiria os links em uma página da Web para 'pesquisar' mais informações.

Com isso dito, alguns colegas de trabalho disseram que precisavam usar SOAP e queixavam-se o tempo todo. Então eu fui pesquisar os dois um pouco mais detalhadamente.

Em geral, o que descobri é que o REST é adequado para aplicativos altamente distribuídos , quando você tem centenas, milhares ou milhões de clientes . Uma razão é a ortogonalidade acima mencionada, outra é o armazenamento em cache que você obtém gratuitamente desde que você está usando HTTP.

O SOAP pode ser o caminho mais rápido quando você precisa de uma API menor para um ou dois clientes rapidamente e não está muito preocupado com a escalabilidade. Também pode se adequar melhor a você se você não tiver uma arquitetura estruturada em torno de recursos , pois pode levar algum tempo para reestruturar seu aplicativo e até conseguir implementar o REST.


2
Você obtém o cache por causa do paradigma de recursos e falta de estado, não por causa do HTTP.
dietbuddha

O @dietbuddha HTTP fornece a implementação gratuitamente.
Jacob Raihle 07/07

17

Pode ser um ponto secundário, mas o REST é inteiramente baseado em HTTP.

O SOAP não requer HTTP e você é livre para usar o transporte que desejar.

As mensagens SOAP podem ser roteadas de forma assíncrona e confiável, enquanto o REST é praticamente um paradigma síncrono.

O REST não informa nada sobre como devem ser os dados que você está enviando e recebendo. Existe WADL, mas principalmente você depende da documentação da API estar correta. O SOAP possui um circo de tecnologias XML para tornar a descrição dos dados menos propensa a erros. WSDL, esquema ...

No final do dia, o REST basicamente fornece um sistema de arquivos baseado em HTTP. Se o seu sistema pode se encaixar nesse paradigma - então pode ser uma boa escolha.


+1 por mencionar vários transportes. Se você realmente precisa de um protocolo independente de transporte (que, por exemplo, suporta operação via SMTP ou similar), o REST está fora. Normalmente, o HTTP é bom o suficiente ...
sleske 23/03

6
Não vejo como o REST está vinculado ao HTTP? Esse é o detalhe da implementação. A maioria das implementações REST passa por HTTP, mas não vejo por que não pude implementar REST por outros protocolos, como FTP.
Edalorzo 26/05

O RESTO não restringir a comunicação a um determinado ref protocolo: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
NmToken

7

Então, o que a sobrecarga / complexidade extra do SOAP fornece a você, quando você precisa e quando você pode e deve fazer sem ele?

A maior diferença entre os dois é que o REST deve ser sem estado, onde SOAP não é . Na prática, muitas implementações REST realmente implementam algum estado na sessão por meio de algo como OAuth.

Outra diferença é que o REST é muito "orientado a recursos" ou substantivo . Você interage com os recursos por meio de operações CRUD. Tudo o que não se encaixa nesse paradigma se torna complicado e desajeitado.

O SOAP, por outro lado, é apenas um protocolo RPC (chamada de procedimento remoto) . Não vem com um paradigma, é apenas a camada de transporte.


11
SOAP e REST são apenas meios para atingir um resultado final. Eles podem ou não ser adequados para a tarefa. Portanto, o REST também pode ser visto como uma camada de transporte. Mesmo a exibição de estado / menos não é válida: é possível projetar ambos os tipos com os tipos de APIs - e outros -. Você pode até ter uma API dupla, que possui um ponto de extremidade SOAP e REST. E um terminal XML-RPC. E um ponto final do Apache Thrift. E um ponto final do Google Protocol Buffers. E o que mais. No final do dia, tudo é apenas um RPC.
JensG # 6/13

4

O REST também usa post. De fato, ao usar o REST, os verbos http informam qual operação está acontecendo.

REST e SOAP são apenas padrões diferentes de transmissão de dados pela Internet.

Tendo usado os dois, eu geralmente recomendaria o uso do REST em vez do SOAP, a menos que você conheça as pessoas que consumirão seu serviço da Web usando o .net e o Visual Studio. Geralmente é muito mais fácil consumir um serviço da Web REST, exceto com .net VS, que faz a maior parte do trabalho para você ao usar o SOAP.


4
Também existe um bom suporte SOAP em Java.

4

Uma coisa que eu mencionaria é a interoperabilidade - se você chamar seu serviço a partir de um aplicativo escrito em .NET e o servidor estiver escrito em Java (ou qualquer outra combinação), vá para REST. Eu já vi muitas pequenas incompatibilidades entre implementações SOAP para me preocupar em considerá-lo mais.


2
Aceita. O SOAP é padrão da indústria, mas excessivamente complexo, resultando em toneladas de implementações interrompidas ou incompletas. Além disso, o SOAP normalmente possui o maior espaço em termos de desempenho e tráfego em comparação com qualquer outra abordagem.
JensG

1

Se você deseja apenas um guia visual simples para ajudá-lo a medir SOAP e REST em relação aos requisitos de seus aplicativos ...

Vijay Prasad Gupta reuniu um fluxograma simples e útil.

Link direto para o fluxograma: https://drive.google.com/file/d/0B3zMtAq1Rf-sdVFNdThvNmZWRGc/edit

Link para o artigo: https://www.linkedin.com/pulse/20140818062318-7933571-soap-vs-rest-flowchart-to-determine-the-right-web-services-protocol-for-your-needs


Na verdade, é um fluxograma bastante decente. Fiquei surpreso que nem uma única resposta aqui aborda as vantagens do SOAP sobre o REST. Esse fluxograma faz embora. Acho que posso incluir o fluxograma como uma imagem aqui, em vez de vinculá-lo, apenas para garantir que ele fique com a resposta?
jleach

-2

Agora é 2015. Eu esperava que o SOAP já tivesse morrido, mas ainda permanece como um cheiro ruim. Para qualquer coisa, exceto o mais básico dos aplicativos "de exemplo", a integração com um serviço SOAP está repleta de desafios. É uma arquitetura complexa, com muitas opções em vários níveis, combinada com as peculiaridades de várias implementações e incompatibilidades sutis (e não tão sutis). Eu nunca tive uma boa experiência com isso. REST, por outro lado, é fácil: todo mundo entende HTTP. Na maioria dos casos, o JSON tem muito mais utilidade do que o XML InfoSet.

Para lhe dar uma idéia da complexidade do SOAP, tente integrar uma biblioteca SOAP ao seu projeto. Para Java, o cliente Apache Axis2 mais básico (usando ligação de dados ADB simples) extrai 23 novos JARs. Vinte e três! 20MB de inchaço da biblioteca. O CXF é semelhante: 21 JARs, quando contei pela última vez.

Se você realmente quisesse, pode fazer o REST com uma biblioteca HTTP simples.


11
isso parece mais como um discurso retórico, consulte Como responder #
286

Você está certo. Desculpe, eu estava inundado de sopa de sabão no momento: D
Cornel Masson

11
Tivemos a mesma reclamação com o CORBA / IDL nos anos 90. Então, de repente, "Simple Object Access Protocol" ... será simples! Vai ser legal! Vai ser rápido. Dez anos depois, é considerado muito complexo. A seguir vem o JSON (IMAO, na verdade, uma roda quadrada para operações de transferência de dados nas configurações do laboratório do estudante ou situações restritas de correção rápida "Eu sei o que estou fazendo") e operações RESTful. Enxágüe, repita ...
David Tonhofer

Receio que toda declaração verdadeira sobre o SOAP deva ser interpretada como um discurso retórico. Ele é corporativo por design e oferece várias opções para as quais você deseja apenas enviar alguns dados. Em relação às poucas interfaces SOAP com as quais trabalhei, cada uma delas era uma bagunça altamente redundante (não exatamente a culpa da SOAP, mas a afinidade com o SOAP se correlaciona com a afinidade com o bloatware). Desculpe por reclamar.
Maaartinus 23/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.