Relacionado:
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.
web-services
rest
wsdl
Howard May
fonte
fonte
Respostas:
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.
fonte
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
fonte
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 já 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".
fonte
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).
fonte
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
fonte
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?
fonte
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 ...
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte
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).
fonte
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.
fonte