Prós e contras de WSDL vs REST

108

Relacionado:

Por que alguém usaria REST em vez de serviços da Web?

Ao decidir se devo implementar um serviço da Web usando SOAP ou REST (quero dizer HTTP / XML de maneira REST), o que devo estar ciente e no que devo pensar? Presumo que este não seja um tamanho único, então como faço para escolher qual usar.

Howard May
fonte
Esta pergunta pode ter algumas respostas úteis também: stackoverflow.com/questions/90451/…
Rob Hruska
2
Depende do contexto, tanto o SOAP quanto o REST têm seu lugar. Normalmente você não vê Hi-SOAP e lo-SOAP como ouve falar de REST. A razão de estar lá é a especificação, e você a segue ou não. O SOAP é usado em data centers onde você precisa de interoperabilidade entre diferentes servidores que não podem se comunicar diretamente e o desempenho é um fator importante. Nesses casos, é bom fazer SOAP sobre TCP. O SOAP foi projetado como uma independência de transporte, portanto, essencialmente, você deve ser capaz de usá-lo sobre TCP, MSMQ, etc., REST lida apenas com HTTP.
Srikar Doddi
CodeToGlory está certo. Na verdade, o WCF da Microsoft foi projetado especificamente para tornar o SOAP em qualquer meio de transporte tão fácil quanto um valor em um arquivo de configuração.
Travis Heseman,
Possível duplicata de SOAP vs REST (diferenças)
Hedeshy

Respostas:

111

Os dois protocolos têm usos muito diferentes no mundo real.

SOAP (usando WSDL) é um padrão XML pesado que é centrado na passagem de documentos. A vantagem disso é que suas solicitações e respostas podem ser muito bem estruturadas, podendo até usar um DTD. A desvantagem é que é XML e muito prolixo. No entanto, isso é bom se duas partes precisam ter um contrato estrito (digamos, para comunicação interbancária). O SOAP também permite que você coloque em camadas coisas como WS-Security em seus documentos. SOAP geralmente é independente de transporte, o que significa que você não precisa necessariamente usar HTTP.

REST é muito leve e depende do padrão HTTP para fazer seu trabalho. É ótimo ter um serviço da Web útil instalado e funcionando rapidamente. Se você não precisa de uma definição de API estrita, este é o caminho a percorrer. A maioria dos serviços da web se enquadra nesta categoria. Você pode criar uma versão de sua API para que as atualizações da API não a prejudiquem para pessoas que usam versões antigas (desde que especifiquem uma versão). REST requer essencialmente HTTP e é independente de formato (o que significa que você pode usar XML, JSON, HTML, qualquer que seja).

Geralmente eu uso REST, porque não preciso de recursos WS- * extravagantes. SOAP é bom se você quiser que os computadores entendam seu serviço da web usando um WSDL. As especificações REST geralmente são apenas legíveis por humanos.

Kekoa
fonte
5
@JohnSaunders Por que há envelopes se não há documento? Acho que não disse que um DTD é uma característica única do SOAP. Não estou com vontade de debater hoje, desculpe. Talvez releia os comentários de sua resposta a esta pergunta de quase 3 anos atrás. Não acho que peso pesado seja necessariamente uma coisa ruim, às vezes você quer Holyfield, mas outras vezes Pacquiao dá conta do recado. Não me leve a mal e nada pessoal :)
Kekoa
1
SOAP funciona com interfaces de estilo de documento ou de estilo RPC. Além disso, o SOAP não usa DTD, até onde sei. E você nunca quantificou "peso pesado". Desculpe, eu acabei de ver sua resposta, ou eu teria votado contra três anos atrás.
John Saunders,
2
@JohnSaunders Não tem problema, tenha um bom dia!
Kekoa
2
REST, como SOAP, é independente de protocolo. Ele não depende de HTTP, embora seja mais comumente usado dessa forma. Acho que um fato importante que muitas vezes não é mencionado é que SOAP vs REST está comparando um protocolo padrão w3c a um padrão arquitetônico pragmático vagamente definido.
joelmdev
1
@ jm2 Nunca vi resto usado fora de HTTP. Eu estaria interessado em ver como os verbos GET / POST / PUT / DELETE / etc. trabalhar em um "protocolo" de descanso sem HTTP. Ligação?
Kekoa de
33

Os links a seguir fornecem informações úteis sobre WSDL vs REST, incluindo Prós e Contras

Alguns pontos-chave são que

1) SOAP foi projetado para um ambiente de computação distribuído onde o REST foi projetado para um ambiente ponto a ponto.

2) WADL pode ser usado para definir a interface para serviços REST.

http://www.ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
http://ajaxonomy.com/2008/xml/web-services-part-2-wsdl-and -wadl

Howard May
fonte
3
REST foi projetado para sistemas distribuídos: "[...] o estilo arquitetônico Representational State Transfer (REST) ​​para sistemas hipermídia distribuídos [...]" (Fielding, 2000) ics.uci.edu/~fielding/pubs/dissertation/ rest_arch_style.htm
Thomas Eizinger
19

Em relação ao WSDL (que significa "SOAP") como sendo "pesado". Assuntos pesados ​​como? Se o conjunto de ferramentas está fazendo todo o "trabalho pesado" para você, então por que isso importa?

Eu nunca precisei consumir uma API REST complicada. Quando eu fizer isso, espero desejar um WSDL, que minhas ferramentas irão converter com prazer em um conjunto de classes de proxy, para que eu possa simplesmente chamar o que parecem ser métodos. Em vez disso, suspeito que, para consumir uma API não trivial baseada em REST, será necessário escrever à mão uma quantidade substancial de código "leve".

Mesmo quando tudo estiver feito, você ainda terá traduzido a documentação legível por humanos em código, com todo o risco de que os humanos a leiam errado. Como WSDL é uma descrição do serviço que pode ser lida por máquina, é muito mais difícil "ler errado".


Apenas uma nota: uma vez que este post, eu tive a oportunidade de trabalhar com um serviço REST moderadamente complicado. Eu realmente queria um WSDL ou equivalente e, de fato, tive que escrever muito código à mão. Na verdade, uma parte substancial do tempo de desenvolvimento foi gasta removendo a duplicação de código de todo o código que chamava diferentes operações de serviço "manualmente".

John Saunders
fonte
Acho que "peso leve" é sobre desempenho, digamos, por exemplo, para carregar termos de pesquisa sugeridos enquanto você digita. Sou um cara do .NET e realmente aprecio alguns recursos do IDE semelhantes ao que você diz (as classes de proxy geradas automaticamente), mas para um ws REST. Tal coisa existe?
Romias
1
O exemplo que você sugere é um serviço REST simples e provavelmente difícil de "ler errado". Além disso, qualquer pessoa que sinta que o desempenho do SOAP é pior precisa comprovar isso com números. Não tive a impressão de que é disso que os fãs do REST falam quando dizem "peso pesado".
John Saunders
3
Pesado não é depreciativo, eu apenas quis dizer que o SOAP oferece muito e tem um preço um pouco de desempenho e complexidade. No boxe, um peso pesado provavelmente pode causar mais danos do que um peso leve, mas um peso leve pode fazer o trabalho em momentos em que um peso pesado não é necessário. Além disso, as "coisas" extras como WS-Security ou Transactions apresentam complexidade extra que REST simplesmente não possui.
Kekoa
3
"faça backup disso com números" - clássico flamebait. Eu sou um fã de ambos, mas nenhum é um tamanho único.
Kekoa
4
@kekoav: Eu estava respondendo a Romias dizendo que ele achava que "peso leve" era sobre desempenho. Achei que isso deveria ser apoiado por qualquer pessoa que se sinta assim. Além disso, novamente, eu não presumiria um melhor desempenho sem medi-lo, e não mediria, por exemplo, transações versus nenhuma transação, ou WS-Security versus HTTPS. Não é isca de fogo sugerir que uma declaração seja verificada.
John Saunders
15

Isso provavelmente realmente pertence como comentários em várias das postagens acima, mas ainda não tenho o representante para fazer isso, então aqui vai.

Acho interessante que muitos dos prós e contras frequentemente citados para SOAP e REST têm (IMO) muito pouco a ver com os valores ou limites reais das duas tecnologias. Provavelmente, o pro mais citado para REST é que ele é "leve" ou tende a ser mais "legível por humanos". Em um nível, isso é certamente verdade, REST tem uma barreira menor de entrada - há menos estrutura necessária do que SOAP (embora eu concorde com aqueles que disseram que boas ferramentas são em grande parte a resposta aqui - uma pena que muitas das ferramentas SOAP são muito terrível).

Além desse custo de entrada inicial, entretanto, acho que a impressão REST vem de uma combinação da forma dos URLs de solicitação e a complexidade dos dados trocados pela maioria dos serviços REST. REST tende a encorajar URLs de solicitação mais simples e legíveis por humanos e os dados tendem a ser mais digeríveis também. Até que ponto, no entanto, são inerentes ao REST e até que ponto são meramente acidentais. A estrutura de URL mais simples é um resultado direto da arquitetura - mas poderia ser igualmente bem aplicada a serviços baseados em SOAP. Os dados mais digeríveis têm mais probabilidade de ser resultado da falta de qualquer estrutura definida. Isso significa que é melhor manter os formatos de dados simples ou você terá muito trabalho. Então, aqui está a estrutura adicional do SOAP,

Portanto, para uso na troca de dados estruturados entre sistemas de computador, não tenho certeza se REST é inerentemente melhor do que SOAP (ou vice-versa), eles são apenas diferentes. Acho que a comparação acima de REST x SOAP com tipagem dinâmica x estática é boa. Onde as linguagens dinâmicas tendem a ter problemas é na manutenção a longo prazo e manutenção de um sistema (e a longo prazo, não estou falando de um ano ou 2, estou falando de 5 ou 10). Será interessante ver se o REST enfrentará os mesmos desafios ao longo do tempo. Eu tendo a pensar que sim, se eu estivesse construindo um sistema de processamento de informações distribuído, eu gravitaria no SOAP como o mecanismo de comunicação (também por causa da transmissão e da camada de protocolo de aplicativo e flexibilidade que ele oferece, conforme mencionado acima).

Em outros lugares, embora REST pareça mais apropriado. AJAX entre o cliente e seu servidor (independentemente da carga útil) é um grande exemplo. Não me importo muito com a longevidade desse tipo de conexão e a facilidade de uso e flexibilidade são mínimas. Da mesma forma, se eu precisasse de acesso rápido a algum serviço externo e não achasse que me importaria com a manutenção da interação ao longo do tempo (novamente, estou assumindo que é aí que o REST vai acabar custando mais, de uma forma ou outro), então posso escolher REST apenas para poder entrar e sair rapidamente.

De qualquer forma, ambas são tecnologias viáveis ​​e, dependendo de quais compensações você deseja fazer para um determinado aplicativo, elas podem atendê-lo bem (ou mal).

sfitts
fonte
5

REST não é um protocolo; É um estilo arquitetônico. Ou um paradigma, se quiser. Isso significa que é muito mais flexível do que o SOAP. Para CRUD básico, você pode confiar em protocolos padrão como Atompub, mas para a maioria dos serviços, você terá mais comandos do que apenas isso.

Como consumidor, o SOAP pode ser uma bênção ou uma maldição, dependendo do suporte ao idioma. Como o SOAP é muito modelado em um sistema estritamente tipado, ele funciona melhor com linguagens tipadas estaticamente. Para uma linguagem dinâmica, pode facilmente se tornar crufty e supérfluo. Além disso, o suporte da biblioteca cliente não é tão bom fora do mundo de Java e .NET

Troelskn
fonte
Existe algum motivo válido para o suporte deficiente a ferramentas fora do Java e .NET? Há algo faltando no arquivo WSDL que impediria, digamos, um proxy Ruby de ser criado?
John Saunders
Tecnicamente não, mas alguém tem que implementá-lo, e nem a Sun (desculpe, Oracle) ou a Microsoft vão pagar ninguém para implementar bibliotecas de cliente em Ruby. O protocolo SOAP é bastante complexo. Adicione a isso o fato de que toda a complexidade está no sistema de tipos, que é apenas lixo de uma perspectiva de linguagem dinâmica. Portanto, você pode dizer que o SOAP força os sistemas de tipos estáticos nas linguagens dinâmicas. REST é o caminho oposto.
troelskn
4

Para mim, devemos ter cuidado ao usar a palavra serviço da web. Devemos sempre especificar se estamos falando de serviço web SOAP, serviço web REST ou outro tipo de serviço web porque estamos falando de coisas diferentes aqui e as pessoas não entendem mais se nomearmos todos eles serviços web.

Basicamente, os serviços da web SOAP estão muito bem estabelecidos há anos e seguem uma especificação estrita que descreve como se comunicar com eles com base na especificação SOAP. Agora, os serviços da Web REST são um pouco mais novos e basicamente parecem mais simples porque não usam nenhum protocolo de comunicação. Basicamente, o que você envia e recebe quando usa um serviço da Web REST é XML simples. As pessoas gostam porque podem analisar o xml da maneira que quiserem, sem ter que lidar com um protocolo de comunicação mais sofisticado como o SOAP.

Para mim, os serviços REST são quase como se você criasse um servlet em vez de um serviço da web SOAP. O servlet obtém dados e retorna dados de saída. O formato dos dados é baseado em xml. Também podemos imaginar usar algo diferente de xml, se quisermos. Por exemplo, tags poderiam ser usadas em vez de xml e isso não seria mais REST, mas outra coisa (poderia ser ainda mais leve em termos de peso porque xml não é leve por natureza). Ainda chamaríamos isso de serviço da web? Sim, poderíamos, mas isso não seguirá nenhum padrão atual e esse é o principal problema aqui, se começarmos a chamar todos os serviços da web, mas pudermos fazer da maneira que quisermos, estaremos perdendo no lado da interoperabilidade das coisas. Isso significa que o formato dos dados que são trocados com o serviço web não é mais padronizado.

O que as pessoas não gostam com o SOAP é que elas têm dificuldade para entendê-lo e não podem gerar as consultas manualmente. Os computadores podem fazer isso muito bem, entretanto, é aqui que precisamos ser claros: as consultas e respostas de serviços da web devem ser usadas diretamente pelos usuários finais ou concordamos que os serviços da web estão sob API chamados por sistemas de computador baseados em alguns padrões?

Laize Laville
fonte
1
Isso não seria mais REST?
Steven Shaw
3

SABONETE : também pode ser transportado via SMTP, o que significa que podemos invocar o serviço usando o formato de texto simples de e-mail também

É necessário que a estrutura / mecanismo adicional esteja na máquina do consumidor de serviço da web para converter a mensagem SOAP na respectiva estrutura de objetos em várias linguagens.

REST : agora o WSDL2.0 oferece suporte para descrever o serviço da web REST também

Podemos usar quando você quiser tornar seu serviço mais leve, por exemplo, chamando de dispositivos móveis como celular, pda etc ...

Jenith Michael Raj
fonte
Obrigado por trazer isso à tona, @Jenith. Ninguém parece querer trazer isso à tona. WSDL tem a ver com descrição. REST é um paradigma. Para outros: consulte a introdução em ibm.com/developerworks/webservices/library/ws-restwsdl . A pergunta original, portanto (considerando sua data de entrada), mostra que o título da pergunta foi mal escolhido (provavelmente tem WSDL 1.0 em mente).
Sonny
3

para sistemas corporativos nos quais seu sistema está confinado às suas corporações, é mais fácil e apropriado usar sabão porque você está quase no controle dos clientes. é mais fácil, pois há uma variedade de ferramentas que criam classes (proxies) e parece que você está fazendo sua OOP normal que corresponde ao seu ambiente java ou .net (no qual a maioria das empresas usa).

Eu usaria REST para aplicativos voltados para a Internet para expor interfaces (como a API do Twitter), pois os clientes podem usar javascripts ou html ou outros em que a digitação não seja estrita. REST ser mais liberal faz mais sentido.

Também para clientes voltados para a Internet (rede mundial de computadores), é mais fácil analisar json ou xml saindo de uma interface Rest do que puramente xml saindo de uma interface soap. é difícil usar proxies em javascript e javascript não suporta objetos naturalmente. Se você estiver usando REST com javascript, normalmente você apenas analisaria a string json e pronto. As interfaces voltadas para a Internet são geralmente muito simples (na maioria das vezes é uma análise simples) e geralmente não exigem consistência, por isso REST é adequado o suficiente.

Para aplicativos corporativos, não acho que REST seja adequado porque transações, segurança, tipagem estrita e esquemas desempenham um papel muito importante no desenvolvimento de aplicativos corporativos, por isso o SOAP é mais adequado para eles.

Minha conclusão é que SOAP é para sistemas corporativos, REST é para Internet ou WWW. Você pode usá-lo de forma intercambiável, mas pode ter dificuldade em não usar a ferramenta correta para o trabalho.

desculpe pelo meu péssimo inglês.

monte
fonte
2

Em defesa do REST, ele segue de perto os princípios de HTTP e endereçabilidade, por exemplo, operações de leitura usam GET, operações de atualização usam POST etc. Acho que essa é uma abordagem muito mais limpa. O livro RESTful Web Services da Oreilly explica isso muito melhor do que eu, se você ler, acho que prefere a abordagem REST

Nick Allen
fonte
1

O conjunto de ferramentas do lado do cliente seria um. E a familiaridade com os serviços SOAP, o outro. Mais e mais serviços estão seguindo a rota RESTful atualmente, e o teste de tais serviços pode ser feito com exemplos simples de cURL. Embora não seja tão difícil implementar ambos os métodos e permitir a utilização mais ampla dos clientes.

Se você precisar escolher um, sugiro REST, é mais fácil.

Ahanson
fonte
1

As respostas anteriores contêm muitas informações, mas acho que há uma diferença filosófica que não foi apontada. SOAP foi a resposta para "como criar um sucessor moderno, orientado a objetos, plataforma e protocolo independente do RPC?". O REST foi desenvolvido a partir da questão, "como pegar os insights que tornaram o HTTP tão bem-sucedido para a web e usá-los para computação distribuída?"

SOAP tem como objetivo fornecer ferramentas para fazer a programação distribuída parecer ... programação. REST tenta impor um estilo para simplificar as interfaces distribuídas, de forma que os recursos distribuídos possam se referir uns aos outros como as páginas html distribuídas podem se referir umas às outras. Uma maneira de fazer isso é tentar (principalmente) restringir as operações a "CRUD" nos recursos (criar, ler, atualizar, excluir).

REST ainda é jovem - embora seja orientado para serviços de "leitura humana", não exclui serviços de introspecção, etc. ou criação automática de proxies. No entanto, eles não foram padronizados (no momento em que escrevo). SOAP oferece essas coisas, mas (IMHO) fornece "apenas" essas coisas, enquanto o estilo imposto pelo REST já está encorajando a disseminação de serviços da web por causa de sua simplicidade. Eu mesmo encorajaria os provedores de serviço novatos a escolher REST, a menos que haja recursos específicos fornecidos pelo SOAP que eles precisem usar.

Na minha opinião, então, se você está implementando uma API "greenfield" e não sabe muito sobre possíveis clientes, eu escolheria REST, pois o estilo que ele incentiva tende a ajudar a tornar as interfaces compreensíveis e fáceis de desenvolver. Se você sabe muito sobre cliente e servidor e existem ferramentas SOAP específicas que tornarão a vida mais fácil para ambos, então eu não seria religioso sobre o REST.

Shaunc
fonte
-1: isso não responde realmente à pergunta. Diz pouco ou nada sobre "por que devo escolher um em vez do outro"?
John Saunders
1
Eu estava me concentrando em fornecer informações que outras pessoas não forneceram - mas adicionei uma conclusão de acordo com sua sugestão.
shaunc
0

Você pode facilmente fazer a transição de seus componentes da web WCF que expelem WSDL para outros usos, apenas alterando suas configurações. Você pode acessar HTTP e também pipes nomeados, tcp, protocolos personalizados, etc., sem ter que alterar seu código. Acredito que os componentes do WCF também podem ser mais fáceis de configurar para coisas como segurança, chamada bidirecional, transações, simultaneidade, etc.

REST praticamente limita você a HTTP (o que é bom em muitos casos).

Tad Donaghe
fonte
0

Eu sei que essa discussão é antiga, mas depois de ler todas as respostas e comentários, acredito que todos perderam o ponto mais importante sobre a diferença entre os 2 sistemas: SOAP usa tipos complexos para não apenas fornecer os dados, mas validar e mantê-lo na designação de tipo estrito para o qual foi definido. Um WSDL informa qual é o formato de dados, qual é o tipo de dados, permite adicionar regras de estilo padrão reg-ex e define quantas vezes um dado deve ser, e pode ser, permitido em uma solicitação / resposta . O descanso, por outro lado, não possui nenhum desses mecanismos.

SOAP é complexo e pesado porque permite que você envie dados hierárquicos pesados ​​e complexos. REST é um texto simples, com a origem e o terminal classificando as regras.

SOAP é independente do negócio, porque tem todas as regras de dados embutidas no documento.

A diferença entre SOAP e REST é que SOAP é um esquema autocontido orientado a negócios. REST é um documento de texto.

CrazyMerlin
fonte