SOAP ou REST para serviços da Web? [fechadas]

384

O REST é uma abordagem melhor para executar serviços da Web ou é SOAP? Ou são ferramentas diferentes para problemas diferentes? Ou é uma questão sutil - ou seja, é um pouco melhor em certas arenas do que em outras, etc?

Gostaria especialmente de receber informações sobre esses conceitos e sua relação com o universo PHP e também com aplicativos da web modernos e avançados.

user13276
fonte
6
No mundo de hoje consideram JSON processo RESTO base
ErstwhileIII
Um segmento relacionado, mas não duplicado: stackoverflow.com/questions/34624813/…
smwikipedia

Respostas:

561

Criei um dos primeiros servidores SOAP, incluindo a geração de código e a WSDL, a partir das especificações originais conforme estavam sendo desenvolvidas, quando eu trabalhava na Hewlett-Packard. Eu não recomendo usar SOAP para nada.

O acrônimo "SOAP" é uma mentira. Não é simples, não é orientado a objetos, não define regras de acesso. É, sem dúvida, um protocolo. É a pior especificação de Don Box de todos os tempos, e isso é um feito, pois ele é o homem que cometeu "COM".

Não há nada útil no SOAP que não possa ser feito com o REST para transporte e JSON, XML ou mesmo texto sem formatação para representação de dados. Para segurança de transporte, você pode usar https. Para autenticação, autenticação básica. Para as sessões, há cookies. A versão REST será mais simples, mais clara, executada mais rapidamente e usará menos largura de banda.

O XML-RPC define claramente os protocolos de solicitação, resposta e erro, e existem boas bibliotecas para a maioria dos idiomas. No entanto, o XML é mais pesado do que o necessário para muitas tarefas.

mdhughes
fonte
51
Você esqueceu de mencionar que a gravação de um wrapper de serviço para um serviço da Web REST levará 100000x mais tempo do que a geração instantânea de classes a partir de um WSDL de serviço da Web SOAP. O IMO REST é bom para obter um blob de dados com os quais você não precisa trabalhar. Mas se você deseja obter um objeto, o SOAP é muito mais rápido e fácil de implementar. Veja o meu post aqui para obter mais informações: stackoverflow.com/questions/3285704/…
Josh M.
40
Se você pretende gerar um wrapper, considere usar um decodificador JSON. Deixe o sabão descansar em paz.
Ivo Danihelka
67
É decepcionante ver essa resposta receber tantos elogios e recompensas. Não é uma resposta útil. "Não há nada útil no SOAP que não possa ser feito com o REST ..". Então esse cara examinou todos os possíveis problemas que alguém pode ter que resolver e pode dizer com segurança que seu serviço da web não deve usar SOAP (o WS- * parece estar implícito aqui)? Okay, certo. Estou cansado de ouvir gritos fortes de REST> WS- * ou SOAP .. é quase comparável.
Insipid
33
Os leitores devem observar que a experiência que o OP teve ao escrever um servidor para a primeira versão do SOAP tem pouca influência sobre as versões modernas do SOAP e seus protocolos relacionados.
John Saunders
10
Criei um dos primeiros serviços web SOAP (em 2002; API de pesquisa do Google). Apenas confirmando o que mdhughes diz, o SOAP não era uma boa tecnologia. Felizmente, agora é passado e ninguém considera seriamente usá-lo fora de contextos empresariais estranhos.
287 Nelson
198

REST é uma arquitetura, SOAP é um protocolo.

Esse é o primeiro problema.

Você pode enviar envelopes SOAP em um aplicativo REST.

O SOAP em si é realmente bastante básico e simples, são os padrões WSS- * que o tornam muito complexo.

Se seus consumidores são outros aplicativos e outros servidores, atualmente há muito suporte para o protocolo SOAP, e o básico da movimentação de dados é essencialmente um clique do mouse nos IDEs modernos.

Se é mais provável que seus clientes sejam clientes RIAs ou Ajax, você provavelmente desejará algo mais simples que SOAP e mais nativo para o cliente (principalmente JSON).

Pacotes JSON enviados por HTTP não são necessariamente uma arquitetura REST, são apenas mensagens para URLs. Tudo perfeitamente viável, mas existem componentes principais para o idioma REST. É fácil confundir os dois. Mas só porque você está falando de solicitações HTTP, não significa necessariamente que você tem uma arquitetura REST. Você pode ter um aplicativo REST sem HTTP (lembre-se, isso é raro).

Portanto, se você tiver servidores e consumidores "confortáveis" com a pilha SOAP, SOAP e WSS, poderá atendê-lo bem. Se você estiver fazendo mais coisas ad hoc e quiser interagir melhor com os navegadores da Web, algum protocolo mais leve sobre HTTP também funcionará bem.

Will Hartung
fonte
7
Nesse caso, acho que estamos falando de duas arquiteturas sobre um protocolo. O REST é realmente uma arquitetura, enquanto o SOAP tenta definir um novo protocolo no protocolo existente, sobre o qual você deve aplicar uma arquitetura RPC. Parvo-OAP.
2
Esta é claramente uma resposta muito melhor do que o discurso retórico que aparece nesta página
MickyD
102

O REST é um paradigma fundamentalmente diferente do SOAP. Uma boa leitura sobre o REST pode ser encontrada aqui: Como expliquei o REST para minha esposa .

Se você não tiver tempo para lê-lo, aqui está a versão curta: REST é uma mudança de paradigma, concentrando-se em "substantivos" e restringindo o número de "verbos" que você pode aplicar a esses substantivos. Os únicos verbos permitidos são "get", "put", "post" e "delete". Isso difere do SOAP, onde muitos verbos diferentes podem ser aplicados a muitos substantivos diferentes (ou seja, muitas funções diferentes).

Para o REST, os quatro verbos são mapeados para as solicitações HTTP correspondentes, enquanto os substantivos são identificados por URLs. Isso torna o gerenciamento de estado muito mais transparente do que no SOAP, onde geralmente não está claro qual estado está no servidor e o que está no cliente.

Na prática, embora a maior parte disso desapareça, e o REST geralmente se refere apenas a solicitações HTTP simples que retornam resultados em JSON , enquanto o SOAP é uma API mais complexa que se comunica transmitindo XML. Ambos têm suas vantagens e desvantagens, mas eu descobri que, na minha experiência, o REST geralmente é a melhor escolha, porque você raramente ou nunca precisa da funcionalidade completa que obtém do SOAP.

toluju
fonte
5
Os únicos verbos permitidos são "get", "put" e "delete"? E o POST e as OPÇÕES?
Andrew Swan
2
Desculpe, esqueci de mencionar o POST. OPTIONS (e HEAD) não é considerado parte da especificação REST, no entanto.
00009 toluju
8
@ toluju Eu não sabia que o REST tinha uma especificação. É um estilo arquitetônico e, embora possa ser verdade que raramente é usado o OPTIONS, acho que você não pode dizer o mesmo sobre o HEAD.
em branco
6
HEAD, OPTIONS e TRACE são todos os métodos que consultam sobre as meta-informações do servidor, e não sobre o conteúdo no próprio URL. Como tal, eles são de uso marginal para aplicativos no estilo REST. Estou corrigido na medida em que uma especificação. A principal especificação importante para o REST é a própria especificação HTTP.
23909 toluju
10
Como uma observação, "O descanso normalmente ... refere-se a ... pedidos que resultam em JSON" - não está correto. O tipo de mídia retornado não é restrito ou padronizado para nenhum formato. De fato, muitos serviços REST retornam aplicativos / xml, vídeo ou outros tipos de mídia. Na minha experiência, por exemplo, em empresas, serviços web baseados em REST retornam XML em favor de JSON. De qualquer forma, cabe ao serviço o que é retornado e o cliente pode participar dessa negociação do tipo de conteúdo por meio do cabeçalho HTTP "Accept".
Darrell Teague
59

Resposta rápida para a pergunta de 2012:

As áreas para as quais o REST funciona muito bem são:

  • Largura de banda e recursos limitados. Lembre-se de que a estrutura de retorno está em qualquer formato (definido pelo desenvolvedor). Além disso, qualquer navegador pode ser usado porque a abordagem REST usa os verbos GET, PUT, POST e DELETE padrão. Novamente, lembre-se de que o REST também pode usar o objeto XMLHttpRequest que a maioria dos navegadores modernos suporta atualmente, o que adiciona um bônus extra de AJAX.

  • Operações totalmente sem estado.  Se uma operação precisar continuar, o REST não é a melhor abordagem e o SOAP pode ser mais adequado. No entanto, se você precisar de operações CRUD (criar, ler, atualizar e excluir) sem estado, será REST.

  • Situações de armazenamento em cache.  Se as informações puderem ser armazenadas em cache devido à operação totalmente sem estado da abordagem REST, isso é perfeito. Isso abrange muitas soluções nas três acima.

Então, por que eu consideraria SOAP? Novamente, o SOAP é bastante maduro e bem definido e vem com uma especificação completa. A abordagem REST é exatamente isso, uma abordagem e está totalmente aberta ao desenvolvimento, portanto, se você tiver o seguinte, o SOAP é uma ótima solução:

  • Processamento e chamada assíncrona.  Se o seu aplicativo precisa de um nível garantido de confiabilidade e segurança, o SOAP 1.2 oferece padrões adicionais para garantir esse tipo de operação. Coisas como WSRM - WS-Reliable Messaging.

  • Contratos formais.  Se os dois lados (fornecedor e consumidor) tiverem que concordar com o formato de troca, o SOAP 1.2 fornece especificações rígidas para esse tipo de interação.

  • Operações com estado. Se o aplicativo precisar de informações contextuais e gerenciamento de estado conversacional, o SOAP 1.2 terá uma especificação adicional na estrutura WS * para oferecer suporte a esses itens (Segurança, Transações, Coordenação, etc.). Comparativamente, a abordagem REST faria com que os desenvolvedores construíssem esse encanamento personalizado.

http://www.infoq.com/articles/rest-soap-when-to-use-each

PmanAce
fonte
44

Atualmente, o SOAP tem a vantagem de ferramentas melhores, nas quais eles geram grande parte do código padrão para a camada de serviço e também geram clientes a partir de qualquer WSDL.

O REST é mais simples, pode ser mais fácil de manter como resultado, está no coração da arquitetura da Web, permite uma melhor visibilidade do protocolo e foi comprovado que é dimensionado no tamanho da própria WWW. Algumas estruturas lá fora ajudam a criar serviços REST, como Ruby on Rails, e outras até ajudam a escrever clientes, como o ADO.NET Data Services. Mas, na maioria das vezes, falta suporte de ferramentas.

Mark Cidade
fonte
32
O REST é mais fácil de manter - tudo o que você precisa fazer é monitorar a documentação da API para qualquer alteração minuciosa na estrutura dos métodos REST ou na estrutura dos dados que eles retornam. Se você vir uma alteração, precisará fazer manualmente a alteração no seu código escrito à mão, que analisa a resposta do método. Com o SOAP, você tem o ônus de clicar com o botão direito do mouse em sua referência, selecionar "atualizar" e corrigir alguns erros de compilação. (Sarcasmo incluído gratuitamente.)
Josh M.
10
@ Josh: Se você escreveu um código escrito à mão para analisar a resposta de uma resposta gerada com base em uma especificação flexível e flexível, não está usando REST; você codificou para uma árvore de recursos. É o mesmo que codificar para c: \ windows \ temp ou qualquer outra coisa, em vez de consultar o local PROPER para usar. Porque funciona por um tempo, não faz com que seja a coisa certa a fazer, nem é uma boa prática de codificação.
Paul Sonier
11
@PaulSonier: qual é o caminho certo para analisar a resposta com base em uma especificação flexível e flexível? Entendo que o código quebrável codificado não é ótimo, mas estou procurando conselhos ou exemplos no final do cliente das APIs RESTful e estou com pouco tempo até agora. Eu acho que é isso que Josh está obtendo - o SOAP precisa da tonelada de código padrão, mas o que você recebe é um contrato visível e aplicável no formato do documento e na segurança do tipo; As APIs RESTful deixam de fora o contrato e o padrão e geralmente parecem simples o suficiente, não importa, mas ... como você não codifica para a árvore de recursos?
precisa
(Eu recebo o argumento HATEOAS, mas usando, por exemplo, martinfowler.com/articles/richardsonMaturityModel.html como exemplo - ainda há uma boa quantidade de interpretação semântica necessária, depois de analisar o XML, antes de acessar os elementos de link que são os "controles hipermídia".)
metamatt 17/11
5
Se você se aprofundar nos recursos avançados do SOAP (todo o material WS- *), descobrirá rapidamente que as ferramentas não suportam isso tão bem (incluindo produtos EAI e ESB) e que as estruturas podem se comportar de maneira diferente dependendo (como Metro vs C # ) para sutilezas como "" e null. E o código clichê gerado geralmente serve apenas para contornar a carga causada pelo próprio SOAP.
Rd
40

O SOAP é útil do ponto de vista das ferramentas, porque o WSDL é tão facilmente consumido pelas ferramentas. Assim, você pode gerar clientes de serviços da Web para você no seu idioma favorito.

O REST funciona bem com as páginas da web do AJAX'y. Se você mantiver suas solicitações simples, poderá fazer chamadas de serviço diretamente do seu JavaScript, e isso é muito útil. Tente ficar longe de ter espaços para nome na sua resposta XML, já vi navegadores sufocarem nesses. Portanto, o xsi: type provavelmente não funcionará para você, sem esquemas XML excessivamente complexos.

O REST também tende a ter melhor desempenho. Os requisitos de CPU do código que geram respostas REST tendem a ser menores do que as estruturas SOAP exibem. E, se você tiver seus patos de geração XML alinhados no lado do servidor, poderá transmitir efetivamente o XML para o cliente. Então, imagine que você está lendo linhas do cursor do banco de dados. Ao ler uma linha, você a formata como um elemento XML e a grava diretamente no consumidor do serviço. Dessa forma, você não precisa coletar todas as linhas do banco de dados na memória antes de começar a gravar sua saída XML - você lê e grava ao mesmo tempo. Procure novos mecanismos de modelagem ou XSLT para que o streaming funcione no REST.

O SOAP, por outro lado, tende a ser gerado por serviços gerados por ferramentas como um grande blob e só então gravado. Esta não é uma verdade absoluta, lembre-se, existem maneiras de obter características de streaming do SOAP, como usar anexos.

Meu processo de tomada de decisão é o seguinte: se eu quiser que meu serviço seja facilmente manipulado pelos consumidores, e as mensagens que eu escrever serão de tamanho médio a pequeno (10 MB ou menos) e não me importo em gravar uma CPU extra ciclos no servidor, eu vou com SOAP. Se eu precisar servir o AJAX em navegadores da Web, ou precisar transmitir, ou se minhas respostas forem gigantescas, eu vou para o REST.

Por fim, existem muitos padrões excelentes criados em torno do SOAP, como o WS-Security e a obtenção de serviços da Web com estado, aos quais você pode conectar se estiver usando as ferramentas certas. Esse tipo de coisa realmente faz a diferença e pode ajudá-lo a satisfazer alguns requisitos cabeludos.

Tim Cooper
fonte
29

Sei que essa é uma pergunta antiga, mas preciso postar minha resposta - talvez alguém a ache útil. Eu não posso acreditar quantas pessoas estão recomendando REST sobre SOAP. Só posso assumir que essas pessoas não são desenvolvedores ou nunca implementaram um serviço REST de tamanho razoável. A implementação de um serviço REST leva muito mais tempo do que a implementação de um serviço SOAP. E, no final, sai muito mais confuso também. Aqui estão as razões pelas quais eu escolheria o SOAP 99% das vezes:

1) A implementação de um serviço REST leva infinitamente mais tempo do que a implementação de um serviço SOAP. Existem ferramentas para todas as linguagens / estruturas / plataformas modernas lerem em um WSDL e saírem classes e clientes de proxy. A implementação de um serviço REST é feita manualmente e - obtenha isso - lendo a documentação. Além disso, durante a implementação desses dois serviços, é necessário fazer "palpites" sobre o que voltará através do canal, pois não há esquema ou documento de referência real.

2) Por que escrever um serviço REST que retorna XML de qualquer maneira? A única diferença é que, com o REST, você não conhece os tipos que cada elemento / atributo representa - você está sozinho para implementá-lo e espera que um dia uma string não seja encontrada em um campo que você pensou que sempre foi um int. SOAP define a estrutura de dados usando o WSDL, portanto, este é um acéfalo.

3) Ouvi a reclamação de que, com o SOAP, você tem a "sobrecarga" do envelope SOAP. Atualmente, precisamos realmente nos preocupar com um punhado de bytes?

4) Ouvi o argumento de que, com o REST, você pode simplesmente inserir a URL no navegador e ver os dados. Claro, se o serviço REST estiver usando autenticação simples ou sem autenticação. O serviço Netflix, por exemplo, usa OAuth, que exige que você assine e codifique antes de enviar sua solicitação.

5) Por que precisamos de um URL "legível" para cada recurso? Se estávamos usando uma ferramenta para implementar o serviço, realmente nos preocupamos com o URL real?

Preciso continuar?

Josh M.
fonte
23
Essa é uma boa resposta, mas sinceramente, você não entende o que é REST. Você pode ler as 2 melhores respostas nesta pergunta para descobrir. Você está comparando-as como arquiteturas semelhantes, enquanto o REST é apenas um paradigma. É o mesmo que comparar "etiqueta de restaurante" com "pizza". É melhor comer com um garfo e uma faca ou comer pizza? "Eu iria com pizza" - você diz. E, como sugere a primeira resposta, você pode facilmente usar os dois - comer pizza com um garfo e uma faca.
Bezmax
3
"Atualmente, precisamos realmente nos preocupar com um punhado de bytes?" Umm, sim nós fazemos! De onde estou, posso jogar muitos jogos de computador on-line, mas o World of Warcraft Developers da Blizzard se inscreveu na sua visão e nunca se preocupou em otimizar o tráfego de rede, por isso é o único jogo do qual me desconecto constantemente. Por ser um jogo tão antigo, o WoW tem um tráfego de rede muito pesado. Isso não é bom em qualquer dia e idade, porque sempre haverá pessoas com conexões marginais em que uma abordagem inútil para economizar um pouco de tempo de desenvolvimento apenas a interromperá.
Tsais 03/09/10
11
Em resumo, você parece estar dizendo: "SOAP é melhor porque existem mais ferramentas para ajudá-lo". Embora esse seja um ponto válido, tome cuidado para não anular o REST apenas por causa disso; é mais fácil criar uma página da Web em um editor WYSIWYG do que codificar HTML manualmente, mas isso não significa que é sempre a resposta certa. O valor do REST é que ele reconhece a especificação HTTP criada no início dos anos 90 e já resolveu muitos dos problemas que o SOAP tenta resolver novamente.
keithjgrant
@ JoshM Portanto, sua resposta acima é igual à sua pergunta em " stackoverflow.com/questions/3285704/… "?
Mukus 28/03
@Mukus - culpado como cobrado ...?
28414 Josh M.
19

A maioria dos aplicativos que eu escrevo são C # ou Java, ou aplicativos de desktop no WinForms ou WPF. Esses aplicativos tendem a precisar de uma API de serviço mais rica do que o REST pode fornecer. Além disso, não quero gastar mais do que alguns minutos criando meu cliente de serviço da web. As ferramentas de geração de clientes de processamento WSDL permitem que eu implemente meu cliente e passe a agregar valor comercial.

Agora, se eu estivesse escrevendo um serviço da Web explicitamente para algumas chamadas de javascript ajax, provavelmente seria no REST; apenas por uma questão de conhecer a tecnologia do cliente e aproveitar o JSON. Na minha opinião, as APIs de serviço da web usadas no javascript provavelmente não devem ser muito complexas, pois esse tipo de complexidade parece ser melhor manipulado no servidor.

Com isso dito, existem alguns clientes SOAP para javascript; Eu sei que o jQuery tem um. Assim, o SOAP pode ser aproveitado do javascript; apenas não tão bem quanto um serviço REST retornando cadeias JSON. Portanto, se eu tivesse um serviço da Web que desejasse ser complexo o suficiente para ser flexível para um número arbitrário de tecnologias e usos de clientes, eu usaria o SOAP.

Travis Heseman
fonte
17

Eu recomendo que você use o REST primeiro - se você estiver usando Java, consulte JAX-RS e a implementação de Jersey . O REST é muito mais simples e fácil de interoperar em vários idiomas.

Como outros já disseram neste tópico, o problema com o SOAP é sua complexidade quando as outras especificações WS- * entram e existem inúmeros problemas de interoperabilidade se você se desviar para as partes incorretas do WSDL, XSDs, SOAP, WS-Addressing etc.

A melhor maneira de julgar o debate REST x SOAP é procurar na internet - praticamente todos os grandes players no espaço da web, google, amazon, ebay, twitter e outros - tendem a usar e preferir APIs RESTful do que as SOAP.

A outra abordagem interessante para seguir com o REST é que você pode reutilizar muito código e infra-estrutura entre um aplicativo Web e um front end REST. por exemplo, renderizar HTML versus XML versus JSON de seus recursos é normalmente bastante fácil com estruturas como JAX-RS e visualizações implícitas - além de ser fácil trabalhar com recursos RESTful usando um navegador da web

James Strachan
fonte
11
Marcar com +1 "A melhor maneira de julgar ..." é um bom exemplo da API Javascript do Google. Originalmente no SOAP, em resposta a reclamações de desenvolvedores, reequipadas no REST. Logo após se tornar a API nº 1 do Google (por número de solicitações) - surpreendeu-se por ter ultrapassado a API de mapas, mas aparentemente conseguiu (de acordo com o principal desenvolvedor da JS API).
doug
16

Tenho certeza de que Don Box criou o SOAP como uma piada - 'olha, você pode chamar métodos RPC pela web' e hoje geme quando ele percebe que pesadelo dos padrões da web se tornou :-)

O REST é bom, simples, implementado em qualquer lugar (mais um 'padrão' do que os padrões), rápido e fácil. Use REST.

gbjbaanb
fonte
5
"Tenho certeza de que Don Box criou o SOAP como uma piada - 'veja, você pode chamar métodos RPC pela Web'" provavelmente verdade. 1
Mukus 28/03
15

Eu acho que ambos têm seu próprio lugar. Na minha opinião:

SOAP : uma melhor opção para integração entre sistemas legados / críticos e um sistema de serviço da Web / Web, na camada básica, onde o WS- * faz sentido (segurança, política, etc.).

RESTful : uma melhor opção para integração entre sites, com API pública, na parte superior da camada (VIEW, ou seja, javascripts atendendo a URIs).

irobson
fonte
13

Uma coisa que não foi mencionada é que um envelope SOAP pode conter cabeçalhos e partes do corpo. Isso permite que você use toda a expressividade do XML para enviar e receber informações fora da banda. REST, tanto quanto eu sei, limita você a cabeçalhos HTTP e códigos de resultado.

(ora, você pode usar cookies com um serviço REST para enviar dados do tipo "cabeçalho" fora da banda?)

John Saunders
fonte
6
Provavelmente porque você está errado? O REST pode usar qualquer cabeçalho HTTP predefinido ou personalizado necessário, além do corpo da solicitação.
Chris Broski
Talvez não. Veja o que você pode colocar em um cabeçalho SOAP versus o que você pode colocar em um cabeçalho HTTP. Quanto tempo pode ter uma linha?
John Saunders
11
A especificação HTTP não fornece limites para os dados incluídos nos cabeçalhos e cada valor do campo do cabeçalho pode abranger várias linhas. Servidores da Web individuais podem impor limites moderados, mas sua implicação de que você não pode incluir informações significativas nos cabeçalhos HTTP é comprovadamente falsa.
precisa saber é o seguinte
@ Protonfish: Eu não estava sugerindo que você não pode colocar informações significativas em cabeçalhos HTTP. Eu queria saber se você pode colocar tanta informação em cabeçalhos HTTP quanto em cabeçalhos SOAP. Quando perguntei quanto tempo uma linha pode ter, é porque eu queria saber a resposta.
John Saunders
@ Protonfish: Eu também pensei que a distinção era clara entre "a expressividade total do XML", por um lado, e "Cabeçalhos HTTP e códigos de resultado", por outro. Talvez isso não seja tão claro quanto eu pensava.
John Saunders
10

Não ignore o XML-RPC. Se você procura uma solução leve, há muito a ser dito sobre um protocolo que pode ser definido em algumas páginas de texto e implementado em uma quantidade mínima de código. O XML-RPC existe há anos, mas ficou fora de moda por um tempo - mas o apelo minimalista parece estar dando a ele um renascimento nos últimos tempos.

Cruachan
fonte
10

Respondendo à pergunta atualizada de 2012 (pela segunda recompensa) e revisando os resultados de hoje (outras respostas).


SOAP, prós e contras

Sobre o SOAP 1.2, vantagens e desvantagens ao comparar com "REST" ... Bem, desde 2007, você pode descrever os serviços da Web REST com WSDL e usar o protocolo SOAP ... Ou seja, se você trabalhar um pouco mais, todos os padrões W3C de a pilha de protocolos de serviços da web pode ser REST !

É um bom ponto de partida, porque podemos imaginar um cenário em que todas as discussões filosóficas e metodológicas são temporariamente evitadas. Podemos comparar tecnicamente "SOAP-REST" com "NON-SOAP-REST" em serviços semelhantes,

  • SOAP-REST (= "REST-SOAP"): conforme mostrado por L.Mandel , o WSDL2 pode descrever um serviço da web REST e, se supusermos que XML exemplificado possa ser envolvido em SOAP, toda a implementação será "SOAP-REST" .

  • NÃO SOAP-REST : qualquer serviço da Web REST que não possa ser SOAP ... Ou seja, "90%" dos exemplos REST conhecidos. Alguns não usam XML (por exemplo, RESTs AJAX típicos usam JSON), outros usam outras estruturas XML, sem os cabeçalhos ou regras SOAP. PS: para evitar a informalidade, podemos supor o nível 2 do REST nas comparações.

Obviamente, para comparar de maneira mais conceitual, compare "NON-REST-SOAP" com "NON-SOAP-REST", conforme abordagens de modelagem diferentes. Portanto, concluindo esta taxonomia de serviços da web:

  • NÃO REST-SOAP : qualquer serviço da web SOAP que não possa ser REST ... Ou seja, "90%" dos exemplos SOAP conhecidos.

  • NÃO REST-SOAP-SOAP : sim, o universo da "modelagem de serviços da web" compreende outras coisas (por exemplo, XML-RPC ).

SOAP nas condições REST

Comparando coisas comparáveis: SOAP-REST com NON-SOAP-REST .

PROS

Explicando alguns termos,

  • Estabilidade contratual : para todos os tipos de contratos (como "acordos escritos"),

    • Pelo uso de padrões : todos os níveis da pilha W3C são mutuamente compatíveis. O REST, por outro lado, não é um padrão W3C ou ISO e não possui detalhes normatizados sobre os periféricos do serviço. Então, como eu , @DaveWoldrich (20 votos), @cynicalman (5), @Exitos (0) disse antes, em um contexto em que NECESSITAM DE NORMAS, você precisa de SOAP.

    • Pelo uso das melhores práticas : o "aspecto detalhado" das implementações da pilha do W3C traduz os acordos humanos / legais / jurídicos relevantes.

  • Robustez : a segurança da estrutura e cabeçalhos do SOAP. Com a comunicação metada (com toda a expressividade do XML) e a verificação, você tem uma "apólice de seguro" contra alterações ou ruídos.
    O SOAP tem "confiabilidade transacional (...) que lida com falhas de comunicação. O SOAP tem mais controles em torno da lógica de repetição e, portanto, pode fornecer mais confiabilidade de ponta a ponta e garantias de serviço", E. Terman .

Classificando profissionais por popularidade,

  • Melhores ferramentas (~ 70 votos): o SOAP atualmente tem a vantagem de melhores ferramentas, desde 2007 e ainda 2012, porque é um padrão bem definido e amplamente aceito. Veja @MarkCidade (27 votos), @DaveWoldrich (20), @JoshM (13), @TravisHeseman (9).

  • Conformidade com os padrões (25 votos): como eu disse @DaveWoldrich (20 votos), @cynicalman (5), @Exitos (0) antes, em um contexto em que NECESSITAMOS DE NORMAS, você precisa de SOAP.

  • Robustez : seguro de cabeçalhos SOAP, @JohnSaunders (8 votos).

CONS

  • A estrutura SOAP é mais complexa (mais de 300 votos): todas as respostas aqui e fontes sobre "SOAP vs REST" manifestam algum grau de aversão à redundância e complexidade do SOAP. Essa é uma consequência natural dos requisitos de verificação formal (veja abaixo) e de robustez (veja acima). "REST NÃO SOAP" (e XML-RPC, o originador SOAP ) pode ser mais simples e informal.

  • A restrição "only XML" é um obstáculo ao desempenho ao usar serviços minúsculos (~ 50 votos): consulte json.org/xml e esta questão ou esta . Este ponto é mostrado por @toluju (41) e outros.
    PS: como JSON não é um padrão IETF , mas podemos considerar um padrão de fato para a comunidade de software da web.


Serviços de modelagem com SOAP

Agora, podemos adicionar comparações SOAP-NON-REST com NON-SOAP-REST e explicar quando é melhor usar o SOAP :

  • Necessidade de padrões e contratos estáveis ​​(consulte a seção "PROS"). PS: consulte uma "necessidade B2B de padrões" descrita por @saille .

  • Necessidade de ferramentas (consulte a seção "PROS"). PS: os padrões e a existência de verificações formais (veja abaixo) são questões importantes para a automação das ferramentas.

  • Processamento pesado paralelo (consulte a seção "Contexto / Fundações" abaixo): com processos maiores e / ou mais lentos, não importa com um pouco mais de complexidade do SOAP, confiabilidade e estabilidade são os melhores investimentos.

  • Precisa de mais segurança : quando é necessário mais do que HTTPS e você realmente precisa de recursos adicionais para proteção, o SOAP é uma escolha melhor ( consulte @Bell , 32 votos). "Enviar a mensagem por um caminho mais complicado que solicitação / resposta ou por um transporte que não envolve HTTP", S. Seely . XML é um problema central, oferecendo padrões para criptografia XML , assinatura XML e canonização XML e, somente com SOAP é possível incorporar esses mecanismos a uma mensagem de acordo com um padrão bem aceito como WS-Security .

  • Precisa de mais flexibilidade (menos restrições): o SOAP não precisa de correspondência exata com um URI; não restrito a HTTP; não precisa restringir a 4 verbos. Como o @TravisHeseman (9 votos) diz, se você quiser algo "flexível para um número arbitrário de tecnologias e usos de clientes", use SOAP.
    PS: lembre-se de que XML é mais universal / expressivo que JSON (et al).

  • Necessidade de verificações formais : importante entender que a pilha W3C usa métodos formais e o REST é mais informal. Sua descrição de serviço WSDL (uma linguagem formal ) é uma especificação formal de suas interfaces de serviços da web e SOAP é um protocolo robusto que aceita todas as prescrições possíveis de WSDL.

CONTEXTO

Histórico

Para avaliar tendências é necessária perspectiva histórica. Para este assunto, uma perspectiva de 10 ou 15 anos ...

Antes da padronização do W3C, havia alguma anarquia. Foi difícil implementar serviços interoperáveis ​​com estruturas diferentes e mais difícil, caro e demorado para implementar algo interoperável entre as empresas. Os padrões de pilha W3C têm sido uma luz, um norte para a interoperação de conjuntos de serviços web complexos.

Para tarefas do dia-a-dia, como implementar AJAX, o SOAP é pesado ... Portanto, a necessidade de abordagens simples precisa eleger uma nova estrutura teórica ... E grandes "players de software da Web", como Google, Amazon, Yahoo et al. Elegeram a melhor alternativa, que é a abordagem REST. Foi nesse contexto que o conceito REST chegou como uma "estrutura competitiva" e, hoje (2012), essa alternativa é de fato um padrão para programadores.

Fundações

Em um contexto de computação paralela, os serviços da web fornecem subtarefas paralelas; e protocolos, como SOAP, garantem boa sincronização e comunicação. Não é "nenhuma tarefa": os serviços da Web podem ser classificados como
paralelismo de granulação grossa e embaraçoso .

À medida que a tarefa aumenta, torna-se menos significativo "debate da complexidade" e torna-se mais relevante a robustez da comunicação e a solidez dos contratos.

Peter Krauss
fonte
Eu não acho que isso acrescenta nada. Ele não responde à pergunta original ou às três perguntas da minha recompensa: Quais recursos de um problema fazem do SOAP a melhor escolha? O que o SOAP torna mais fácil / mais difícil? O que o SOAP permite que você não faça com o REST?
Sam Hasler
Obrigado pelo aviso! ... Bem, eu tento apenas uma "ATUALIZAÇÃO DE 2012" (!) Que é a principal coisa, porque não é necessário repetir todos os argumentos sobre "recursos ... SOAP a melhor escolha ... tornar mais fácil / difícil. .. não pode fazer com REST ". Você não vê nas outras respostas? Eu tenho mais 5 dias, talvez você precise de uma conclusão / resumo "para ver um contraponto à resposta @mdhughes", é só isso? PS: Excluirei este comentário após as edições.
Peter Krauss
Quero saber se o SOAP é útil para qualquer coisa ou se você deve sempre usar o descanso. Se alguém postar um motivo razoável para usar o SOAP em vez do REST, darei a resposta como recompensa. Se alguém puder explicar por que e como o REST pode fazer tudo o que é SOAP, eu daria a eles a recompensa. Caso contrário, não concederei a recompensa a nenhuma resposta e adicionarei um comentário à pergunta, notando que eu publiquei a recompensa e não foi fornecida uma resposta para minhas perguntas. (Como eu acho que é útil saber o que não é conhecido.)
Sam Hasler
Não é isso que eu quero. E não vejo como o WSDL é relevante. O WSDL pode descrever serviços da web SOAP ou REST, você parece estar se contradizendo.
Sam Hasler
Para discussão semelhante em "REST vs JSON-RPC" , consulte stackoverflow.com/a/41686155/287948
Peter Krauss
9

É matizado.

Se você precisar ter outros sistemas de interface com seus serviços, muitos clientes ficarão mais felizes com o SOAP, devido às camadas de "verificação" que você possui dos contratos, WSDL e padrão SOAP.

Para os sistemas do dia-a-dia que entram nos sistemas, acho que o SOAP é uma sobrecarga desnecessária quando uma simples chamada HTML é necessária.

cynicalman
fonte
9

Eu estou olhando para o mesmo e acho que eles são ferramentas diferentes para problemas diferentes .

O protocolo Simple Object Access Protocol (SOAP), uma linguagem XML que define uma arquitetura e formatos de mensagem, é usado pelos serviços da Web e contém uma descrição das operações. WSDL é uma linguagem baseada em XML para descrever serviços da Web e como acessá-los. será executado em SMTP, HTTP, FTP etc. Requer suporte a middleware, mecanismo bem definido para definir serviços como WSDL + XSD, WS-Policy SOAP retornará dados baseados em XML SOAP fornece padrões de segurança e confiabilidade

Serviços da Web Representational State Transfer (RESTful). eles são serviços Web de segunda geração. Os serviços da Web RESTful, se comunicam via HTTP que serviços baseados em SOAP e não requerem mensagens XML ou definições de API de serviço WSDL. para REST, nenhum middleware é necessário, apenas o suporte HTTP é necessário.WADL Standard, REST pode retornar XML, texto sem formatação, JSON, HTML etc.

É mais fácil para muitos tipos de clientes consumir serviços da Web RESTful enquanto permite que o lado do servidor evolua e dimensione. Os clientes podem optar por consumir alguns ou todos os aspectos do serviço e combiná-lo com outros serviços baseados na Web.

  1. O REST usa HTTP padrão, portanto, é mais simples criar clientes, desenvolver APIs
  2. O REST permite muitos formatos de dados diferentes, como XML, texto sem formatação, JSON, HTML, enquanto SOAP apenas permite XML.
  3. O REST tem melhor desempenho e escalabilidade.
  4. Descanse e pode ser armazenado em cache e o SOAP não pode
  5. Tratamento de erros interno em que SOAP não possui tratamento de erros
  6. O REST é um PDA particularmente útil e outros dispositivos móveis.

Os serviços REST is fácil de integrar com sites existentes.

O SOAP possui um conjunto de protocolos, que fornecem padrões de segurança e confiabilidade, entre outras coisas, e interoperam com outros clientes e servidores em conformidade com o WS. Os serviços da Web SOAP (como JAX-WS) são úteis no processamento de processamento e chamada assíncrona.

Para o SOAP da API complexa, será mais útil.

Kapil das
fonte
8

REST é uma arquitetura inventada por Roy Fielding e descrita em sua dissertação Architectural Styles e no Design of Network-based Architectures . Roy também é o principal autor do HTTP - o protocolo que define a transferência de documentos pela World Wide Web. HTTP é um protocolo RESTful. Quando os desenvolvedores falam sobre "usar serviços da Web REST", provavelmente é mais preciso dizer "usando HTTP".

SOAP é um protocolo baseado em XML que encapsula dentro de uma solicitação / resposta HTTP; portanto, mesmo se você usa SOAP, também está usando REST. Há um debate sobre se o SOAP adiciona qualquer funcionalidade significativa ao HTTP básico.

Antes de criar um serviço da Web, eu recomendaria estudar HTTP. As probabilidades são de que seus requisitos podem ser implementados com a funcionalidade já definida na especificação, portanto, outros protocolos não serão necessários.

Chris Broski
fonte
7

Eu estou olhando para o mesmo problema. Parece-me que, na verdade, o REST é rápido, fácil e bom para chamadas e respostas leves e ótimo para depuração (o que poderia ser melhor do que inserir uma URL em um navegador e ver a resposta).

No entanto, onde o REST parece cair, está relacionado ao fato de não ser um padrão (embora seja composto de padrões). A maioria das bibliotecas de programação tem uma maneira de inspecionar um WSDL para gerar automaticamente o código do cliente necessário para consumir serviços baseados em SOAP. Até agora, consumir serviços Web baseados em REST parece uma abordagem mais ad-hoc de escrever uma interface para corresponder às chamadas possíveis. Fazendo uma solicitação http manual e depois analisando a resposta. Isso por si só pode ser perigoso.

A vantagem do SOAP é que, depois que um WSDL é emitido, os negócios podem estruturar seu lógico, que define contrato, qualquer alteração na interface alterará o wsdl. Não há espaço para manobras. Você pode validar todas as solicitações nesse WSDL. No entanto, como um WSDL não descreve adequadamente um serviço REST, você não tem uma maneira definida de concordar com a interface de comunicação.

Do ponto de vista comercial, isso parece deixar a comunicação aberta à interpretação e mudança, o que parece ser uma má idéia.

A principal 'Resposta' deste tópico parece dizer que SOAP significa Protocolo de Acesso Simples Orientado a Objetos, no entanto, olhando para o wiki, o O significa Objeto não Orientado a Objetos. São coisas diferentes.

Sei que este post é muito antigo, mas achei que deveria responder com minhas próprias descobertas.

Exitos
fonte
6

É uma boa pergunta ... Eu não quero te desviar, então estou aberto a respostas de outras pessoas tanto quanto você. Para mim, realmente se resume ao custo de sobrecarga e qual é o uso da API. Prefiro consumir serviços da web ao criar software cliente, mas não gosto do peso do SOAP. O REST, acredito, é mais leve, mas não gosto muito de trabalhar com ele da perspectiva do cliente.

Estou curioso para saber o que os outros pensam.

cranley
fonte
6

Ouça este podcast para descobrir. Se você quiser saber a resposta sem ouvir, então OK, é REST. Mas eu realmente recomendo ouvir.

Mark Beckwith
fonte
6

Minha regra geral é que, se você deseja que um cliente da web do navegador se conecte diretamente a um serviço, provavelmente deverá usar o REST. Se você deseja transmitir dados estruturados entre serviços de back-end, use SOAP.

Às vezes, o SOAP pode ser muito difícil de configurar e muitas vezes é um exagero para trocas simples de dados de clientes e servidores Web. Infelizmente, a maioria dos exemplos de programação simples que eu já vi (e aprendi) reforça um pouco essa percepção.

Dito isto, o SOAP realmente brilha quando você começa a combinar vários serviços SOAP juntos, como parte de um processo maior conduzido por um fluxo de trabalho de dados (pense em software corporativo). Isso é algo que muitos dos exemplos de programação SOAP não conseguem transmitir porque uma operação SOAP simples para fazer algo, como buscar o preço de uma ação, geralmente é complicada demais para o que ela faz sozinha, a menos que seja apresentada no contexto de fornecimento de uma máquina API legível que detalha funções específicas com formatos de dados definidos para entradas e saídas que, por sua vez, são roteirizadas por um processo maior.

Isso é triste, de certa forma, pois realmente dá uma má reputação ao SOAP, porque é difícil mostrar as vantagens do SOAP sem apresentá-lo no contexto completo de como o produto final é usado.

Rick Sarvas
fonte
4

O SOAP incorpora uma abordagem orientada a serviços para serviços da Web - na qual métodos (ou verbos) são a principal maneira de interagir com o serviço. O REST adota uma abordagem orientada a recursos, na qual o objeto (ou o substantivo) ocupa o centro do palco.

Vibha Sanskrityayan
fonte
4

No sentido do suporte ao "universo PHP", o PHP para qualquer SOAP avançado é um saco. Você acabará usando algo como http://wso2.com/products/web-services-framework/php/ assim que cruzar as necessidades básicas, mesmo para ativar o WS-Security ou o WS-RM sem suporte embutido.

Criação de envelope SOAP Eu sinto que é muito confuso no PHP, da maneira como cria namespaces, xsd: nil, xsd: anytype e soap com estilo antigo Serviços que usam codificação SOAP (Deus sabe o que é diferente) nas mensagens SOAP.

Evite toda essa bagunça aderindo ao REST, o REST não é nada realmente grande que estamos usando desde o início da WWW. Percebemos apenas quando este artigo http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm foi publicado, mostra como podemos usar os recursos HTTP para implementar os Serviços RESTFul. O HTTP é inerentemente REST, o que não significa que apenas o HTTP torne seus serviços RESTFul.

O SOAP negligencia os principais recursos do HTTP e considera o HTTP apenas como um protocolo de transporte; portanto, é um protocolo de transporte independente da teoria (na prática, não é o caso de você ter ouvido falar do cabeçalho de ação SOAP? Se não for pesquisá-lo agora!).

Com o aumento da adaptação JSON e o HTML5 com javascript amadurecendo, o REST com JSON se tornou a maneira mais comum de lidar com serviços. O esquema JSON também foi definido e pode ser usado para soluções de nível corporativo (ainda nos estágios iniciais) junto com o WADL, se necessário.

O suporte ao PHP para REST e JSON é definitivamente melhor do que o suporte SOAP embutido existente.

Adicionando mais algumas palavras BUZZ aqui SOA, WOA, ROA

http://blog.dhananjaynene.com/2009/06/rest-soa-woa-or-roa/

http://www.scribd.com/doc/15657444/REST-White-Paper

pelo jeito que eu amo o SOAP, especialmente para a especificação WS-Security, essa é uma boa especificação e se alguém que pensa na adaptação JSON da empresa precisar vir com algo semelhante para o JSON, como criptografia em nível de campo etc.

shivaspk
fonte
3

Um ponto rápido - protocolo de transmissão e orquestração;

Uso SOAP sobre TCP por motivos de velocidade, confiabilidade e segurança, incluindo serviços orquestrados máquina a máquina (ESB) e serviços externos. Altere a definição de serviço, a orquestração gera um erro da alteração WSDL e é imediatamente óbvia e pode ser reconstruída / implementada.

Não tenho certeza se você pode fazer o mesmo com o REST - aguardo a correção ou curso! Com o REST, altere a definição de serviço - nada sabe até retornar 400 (ou o que seja).

BlueChippy
fonte
2

Se você está procurando interoperabilidade entre diferentes sistemas e idiomas, eu definitivamente optaria pelo REST. Eu tive muitos problemas ao tentar fazer o SOAP funcionar entre .NET e Java, por exemplo.

neu242
fonte
2

Eu crio uma referência para descobrir quais deles são mais rápidos! eu vejo este resultado:

para 1000 pedidos:

  • REST levou 3 segundos
  • SOAP levou 7 segundos

para 10.000 solicitações:

  • REST levou 33 segundos
  • SOAP levou 69 segundos

para 1.000.000 de solicitações:

  • REST levou 62 segundos
  • SOAP levou 114 segundo
Sonador
fonte
0

Uma pergunta antiga, mas ainda relevante hoje ... devido a muitos desenvolvedores no espaço corporativo ainda o usarem.

Meu trabalho envolve projetar e desenvolver soluções de IoT (Internet of Things). Isso inclui o desenvolvimento de código para pequenos dispositivos incorporados que se comunicam com a nuvem.

É claro que o REST agora é amplamente aceito e útil, e praticamente o padrão padrão para a Web, até a Microsoft tem suporte a REST incluído em todo o Azure. Se eu precisasse confiar no SOAP, não poderia fazer o que precisava, pois é muito grande, volumoso e irritante para pequenos dispositivos incorporados.

O REST é simples, limpo e pequeno. Tornando-o ideal para pequenos dispositivos incorporados. Eu sempre grito quando estou trabalhando com um desenvolvedor da Web que me envia um WSDLs. Como terei de iniciar uma campanha de educação sobre por que isso simplesmente não vai funcionar e por que eles terão que aprender o REST.

Remixed123
fonte
0

1.De minha experiência. Eu diria que o REST oferece a você a opção de acessar a URL que já foi criada. por exemplo, uma pesquisa de palavras no google. Esse URL pode ser usado como serviço da web para REST. No SOAP, você pode criar seu próprio serviço da web e acessá-lo através do cliente SOAP.

  1. O REST suporta texto, JSON, formato XML. Portanto, é mais versátil para a comunicação entre dois aplicativos. Enquanto o SOAP suporta apenas o formato XML para comunicação de mensagens.
Shalini Baranwal
fonte