it-swarm-pt.tech

SOAP ou REST para serviços da Web?

É REST uma abordagem melhor para fazer serviços da Web ou é SOAP? Ou são ferramentas diferentes para problemas diferentes? Ou é uma questão com nuances - ou seja, uma é um pouco melhor em certas arenas do que outra, etc?

Eu apreciaria especialmente as informações sobre esses conceitos e sua relação com o universo PHP e também com as modernas aplicações web de ponta.

378
user13276

Eu construí um dos primeiros servidores SOAP, incluindo geração de código e geração de WSDL, a partir da especificação original que estava sendo desenvolvida, quando eu estava trabalhando na Hewlett-Packard. Eu não recomendo usar SOAP para nada.

A sigla "SOAP" é uma mentira. Não é simples, não é orientado a objetos, não define regras de acesso. É, indiscutivelmente, um protocolo. É a pior especificação de sempre do Don Box, e isso é uma grande façanha, já que ele é o homem que perpetrou "COM".

Não há nada útil em SOAP que não possa ser feito com REST para transporte e JSON, XML ou mesmo texto simples 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, será executada mais rapidamente e usará menos largura de banda.

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

560
mdhughes

REST é uma arquitetura, SOAP é um protocolo.

Esse é o primeiro problema.

Você pode enviar SOAP envelopes em um aplicativo REST.

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

Se os seus consumidores são outros aplicativos e outros servidores, há muito suporte para o protocolo SOAP hoje, e os fundamentos da movimentação de dados são essencialmente um clique do mouse em IDEs modernos.

Se os seus consumidores são mais propensos a serem clientes RIAs ou Ajax, você provavelmente desejará algo mais simples que SOAP e mais nativo ao cliente (notavelmente JSON).

Os 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-chave para o idioma REST. É fácil confundir os dois no entanto. Mas só porque você está falando de solicitações HTTP, isso não significa necessariamente que você tem uma arquitetura REST. Você pode ter um aplicativo REST sem nenhum HTTP (lembre-se, isso é raro).

Portanto, se você tiver servidores e consumidores "confortáveis" com o SOAP, o SOAP e o WSS stack poderão atendê-lo bem. Se você está fazendo mais coisas ad hoc e deseja melhor interface com os navegadores da web, algum protocolo mais leve sobre HTTP pode funcionar bem também.

197
Will Hartung

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

Se você não tem 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 àqueles substantivos. Os únicos verbos permitidos são "get", "put", "post" e "delete". Isto difere de SOAP onde muitos verbos diferentes podem ser aplicados a muitos nomes diferentes (isto é, muitas funções diferentes).

Para 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 muitas vezes não está claro qual estado está no servidor e o que está no cliente.

Na prática, embora a maior parte disso caia, e REST geralmente se refere apenas a solicitações HTTP simples que retornam resultados em JSON , enquanto SOAP é mais API complexa que se comunica passando XML por aí. Ambos têm suas vantagens e desvantagens, mas descobri que, na minha experiência, oREST é geralmente a melhor escolha, porque você raramente precisa de toda a funcionalidade do SOAP.

102
toluju

Lowdown rápido para a pergunta de 2012:

Áreas que REST funcionam muito bem são:

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

  • Operações totalmente sem estado. Se uma operação precisar ser continuada, então REST não é a melhor abordagem e SOAP pode se encaixar melhor. No entanto, se você precisar de operações CRUD (Create, Read, Update e Delete) sem estado, então REST é isso.

  • 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. muitas soluções nos três acima.

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

  • Processamento assíncrono e invocação Se 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 o WSRM - WS-Reliable Messaging.

  • Contratos formais. Se ambos os lados (provedor e consumidor) tiverem que concordar com o formato de troca, entãoSOAP 1.2 fornece as rígidas esse tipo de interação.

  • Operações com estado Se o aplicativo precisar de informações contextuais e de gerenciamento de estado de conversação, o SOAP 1.2 possui a especificação adicional na estrutura do WS * para apoiar essas coisas (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

59
PmanAce

SOAP atualmente tem a vantagem de melhores ferramentas, onde eles irão gerar muito código clichê tanto para a camada de serviço quanto para gerar clientes a partir de qualquer WSDL.

REST é mais simples, pode ser mais fácil de manter como resultado, está no cerne da arquitetura da Web, permite melhor visibilidade do protocolo e foi comprovado que é escalável ao tamanho da própria WWW. Alguns frameworks lá fora ajudam você a construir serviços REST, como Ruby no Rails, e alguns até o ajudam a escrever clientes, como o ADO.NET Data Services. Mas, na maioria das vezes, falta suporte a ferramentas.

44
Mark Cidade

O SOAP é útil de uma perspectiva de ferramentas porque o WSDL é facilmente consumido pelas ferramentas. Assim, você pode obter clientes de serviços da Web gerados para você em seu idioma favorito.

O REST funciona bem com as páginas da Web do AJAX. Se você mantiver suas solicitações simples, poderá fazer chamadas de serviço diretamente do seu JavaScript, o que é muito útil. Tente ficar longe de ter namespaces na sua resposta XML, eu vi navegadores engasgar com isso. Portanto, o xsi: type provavelmente não funcionará para você, não há esquemas XML excessivamente complexos.

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

O SOAP, por outro lado, tende a ser gerado pelos serviços gerados por ferramentas como uma grande bolha e só depois é escrito. Isso não é uma verdade absoluta, lembre-se, existem maneiras de obter características de streaming do SOAP, como o uso de anexos.

Meu processo de tomada de decisão é o seguinte: se eu quiser que meu serviço seja facilmente utilizado por consumidores, e as mensagens que escrevo serão de média a pequena (10 MB ou menos), e não me importo de queimar mais CPU ciclos no servidor, eu vou com o SOAP. Se eu precisar servir para AJAX em navegadores da web, ou eu precisar que a coisa seja transmitida, ou se minhas respostas forem gigantescas, eu irei REST.

Por fim, há muitos ótimos padrões criados em torno do SOAP, como o WS-Security e a obtenção de serviços da web com estado, que 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 complicados.

40
Dave Woldrich

Eu sei que esta é uma pergunta antiga, mas tenho que postar minha resposta - talvez alguém ache útil. Eu não posso acreditar quantas pessoas estão recomendando REST sobre SOAP. Eu só posso supor que essas pessoas não são desenvolvedores ou nunca realmente implementaram um serviço REST de qualquer 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 que eu escolheria SOAP 99% do tempo:

1) A implementação de um serviço REST demora infinitamente mais do que a implementação de um serviço SOAP. Existem ferramentas para todas as linguagens/frameworks/plataformas modernas para leitura em um WSDL e classes e clientes de proxy de saída. A implementação de um serviço REST é feita manualmente e - obtenha isso - lendo a documentação. Além disso, ao implementar esses dois serviços, você precisa fazer "suposições" sobre o que retornará pelo pipe, pois não há nenhum esquema real ou documento de referência.

2) Por que escrever um serviço REST que retorna XML de qualquer maneira? A única diferença é que com REST você não sabe os tipos que cada elemento/atributo representa - você está por conta própria para implementá-lo e espera que um dia uma string não apareça em um campo que você O pensamento sempre foi um int. SOAP define a estrutura de dados usando o WSDL, portanto, isso não é um problema.

3) Eu ouvi a queixa que com SOAP você tem o "overhead" do SOAP Envelope. Hoje em dia, precisamos nos preocupar com um punhado de bytes?

4) Eu ouvi o argumento de que com REST você pode simplesmente colocar o URL no navegador e ver os dados. Claro, se o seu serviço REST estiver usando autenticação simples ou sem autenticação. O serviço da Netflix, por exemplo, usa OAuth, que exige que você assine coisas e codifique as coisas antes mesmo de poder enviar sua solicitação.

5) Por que precisamos de um URL "legível" para cada recurso? Se estivéssemos usando uma ferramenta para implementar o serviço, realmente nos importamos com o URL real?

Preciso ir em frente?

29
Josh M.

A maioria dos aplicativos que escrevo são do lado do servidor C # ou Java, ou aplicativos de área de trabalho no WinForms ou WPF. Esses aplicativos tendem a precisar de uma API de serviço mais rica do que a 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 cliente de processamento WSDL permitem implementar meu cliente e passar para a adição de valor comercial.

Agora, se eu estivesse escrevendo um serviço da web explicitamente para algumas chamadas de javascript ajax, provavelmente seria em REST; apenas pelo bem conhecer a tecnologia do cliente e aproveitando 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 administrado no lado do servidor.

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

19
Travis Heseman

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

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

A melhor maneira de julgar o debate REST v SOAP é procurar na internet - praticamente todos os grandes players no espaço web, google, amazon, ebay, twitter et al - tend para usar e preferir APIs RESTful sobre as SOAP.

A outra boa abordagem para ir com REST é que você pode reutilizar muitos códigos e infraestruturas entre um aplicativo da 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

17
James Strachan

Tenho certeza que o 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 inchado dos padrões web ele se tornou :-)

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

16
gbjbaanb

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

SOAP: Uma melhor escolha para integração entre sistemas legados/críticos e um sistema web/web-service, na camada base, onde o WS- * faz sentido (segurança, política, etc.).

RESTful: Uma melhor escolha para integração entre sites, com API pública, no topo da camada (VIEW, ou seja, javascripts recebendo chamadas para URIs).

15
irobson

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

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

13
John Saunders

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


SOAP, prós e contras

Sobre SOAP 1.2, vantagens e desvantagens ao comparar com "REST" ... Bem, desde 2007 você pode descrever REST Serviços da Web com WSDL , e using SOAP protocolo ... Ou seja, se você trabalhar um pouco mais, todos os padrões W3C da pilha de protocolos de serviços da web podem 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"): como mostrado por L.Mandel , o WSDL2 pode descrever a REST webservice, e , se supusermos que XML exemplificado pode ser envelopado em SOAP, toda a implementação será "SOAP-REST".

  • ] NON-SOAP-REST: any REST serviço da web que não pode ser SOAP ... Ou seja, "90%" do bem conhecido REST exemplos. Alguns não usam XML (ex. Típico AJAX RESTs usam JSON em vez disso), alguns usam outras estruturas XML, sem os cabeçalhos ou regras SOAP. PS: para evitar a informalidade, podemos supor REST nível 2 nas comparações.

É claro que, para comparar de forma mais conceitual, compare "SOAP NÃO REST" com "RESTÃO NÃO SOB SOAP", conforme diferentes abordagens de modelagem. Então, completando essa taxonomia de serviços web:

  • ] NÃO-REST-SOAP: any SOAP serviço da web que não pode ser REST ... Ou seja, "90%" do bem conhecido SOAP exemplos.

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

SOAP no REST condições

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 I , @DaveWoldrich (20 votos), @cynicalman (5), @Exitos (0) disse antes, em um contexto onde há NECESSIDADE DE PADRÕES, você precisa de sabão.

    • Pelo uso das melhores práticas : o "aspecto detalhado" do W3C stack implementations, traduz acordos humanos/legais/jurídicos relevantes.

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

Classificando pros por popularidade,

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

  • Conformidade com os padrões(25 votos): como I , @DaveWoldrich (20 votos), @cynicalman (5), @Exitos (0) disse antes, em um contexto onde há necessidade de padrões, você precisa de sabão.

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

CONS

  • SOAP strucuture é mais complexa(mais de 300 votos): todas as respostas aqui, e fontes sobre "SOAP vs REST", manifestam algum grau de desagrado com a redundância e complexidade do SOAP. Esta é uma conseqüência natural dos requisitos para verificação formal (veja abaixo), e para robustez (veja acima). "REST NON-SOAP" (e XML-RPC, o SOAP originator ) pode ser mais simples e informal.

  • A restrição "somente XML" é um obstáculo de desempenhoao usar minúsculos serviços (~ 50 votos): veja json.org/xml e esta questão , ou este outro . 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.


Modelando serviços com SOAP

Agora, podemos adicionar SOAP-NON-REST com NON-SOAP-REST comparations, e explicar quando é melhor usar SOAP:

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

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

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

  • Precisa de mais segurança : quando mais de HTTPS é necessário, e você realmente precisa de recursos adicionais para proteção, SOAP é uma escolha melhor ( veja @Bell , 32 votos). "Enviar a mensagem ao longo de um caminho mais complicado que o pedido/resposta ou através de um transporte que não envolva HTTP", S. Seely . XML é um problema central, oferecendo padrões para XML ​​Encryption , XML ​​Signature , e XML ​​Canonicalization , e, somente com SOAP você pode incorporar esses mecanismos em um mensagem por um padrão bem aceito como WS-Security .

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

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

CONTEXTO

Histórico

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

Antes da padronização do W3C, há alguma anarquia. Era difícil implementar serviços interoperáveis ​​com diferentes estruturas, e mais difícil, dispendioso e demorado para implementar algo interoperável entre empresas. O W3C stack standards tem sido uma luz, um norte para interoperação de conjuntos de serviços web complexos.

Para tarefas do dia-a-dia, como implementar AJAX, SOAP é pesado ... Então, a necessidade de abordagens simples precisa eleger uma nova estrutura de teoria ... E grandes "players de software da Web" como Google, Amazon, Yahoo e outros, elegeram a melhor alternativa, ou seja, a abordagem REST. Foi nesse contexto que REST conceito chegou como um "framework concorrente", e, hoje (2012), essa alternativa é um padrão de fato para programadores.

Fundações

Em um contexto de Computação Paralela os serviços da Web fornecem subtarefas paralelas; e protocolos, como o SOAP, garantem boa sincronização e comunicação. Não é "qualquer tarefa": os serviços da Web podem ser classificados como
paralelismo grosseiro e embaraçoso .

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

10
Peter Krauss

Não negligencie o XML-RPC. Se você está apenas atrás de 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 uma espécie de revival nos últimos tempos.

10
Cruachan

É nuançada.

Se você precisa 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ê tem com os contratos, WSDL e o padrão SOAP.

Para sistemas do dia-a-dia que chamam sistemas, acho que o SOAP é uma sobrecarga desnecessária quando uma chamada HTML simples serve.

9
cynicalman

Eu estou olhando o mesmo, e eu penso, eles são ferramentas diferentes para problemas diferentes.

O padrão SOAP (Simple Object Access Protocol), uma linguagem XML que define uma arquitetura de mensagem e formatos de mensagem, é usado pelos serviços da Web e contém uma descrição das operações. O 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 de middleware, mecanismo bem definido para definir serviços como WSDL + XSD, WS-Policy SOAP retornará dados baseados em XML SOAP fornecer padrões de segurança e confiabilidade

Serviços da Web Representational State Transfer (RESTful). eles são serviços da Web de segunda geração. Serviços Web RESTful, se comunicam via HTTP do 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 a HTTP é necessário. O padrão WADL, REST pode retornar XML, texto simples, JSON, HTML etc.

É mais fácil para muitos tipos de clientes consumirem serviços da Web RESTful enquanto permitem 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. REST usa o HTTP padrão, então é fácil criar clientes, desenvolver APIs
  2. O REST permite muitos formatos de dados diferentes, como XML, texto simples, JSON, HTML, em que o SOAP apenas permite XML.
  3. REST tem melhor desempenho e escalabilidade.
  4. Descanse e pode ser armazenado em cache e SOAP não pode
  5. Manipulação de erros incorporada onde SOAP não tem tratamento de erros
  6. O REST é particularmente útil PDA e outros dispositivos móveis.

Os serviços REST são fáceis de integrar aos sites existentes.

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

Para o complexo API SOAP será mais útil.

9
kapil das

REST é uma arquitetura inventada por Roy Fielding e descrita em sua dissertação Estilos arquitetônicos e o projeto de arquiteturas de software baseadas em redes . Roy é também o autor principal do HTTP - o protocolo que define a transferência de documentos através da World Wide Web. HTTP é um protocolo RESTful. Quando os desenvolvedores falam sobre "usando REST serviços da Web", é 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ê usar SOAP, você também está usando REST. Existe algum debate sobre se o SOAP adiciona alguma funcionalidade significativa ao HTTP básico.

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

8
Chris Broski

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

No entanto, onde REST parece cair está relacionado ao fato de que não é 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 um serviço baseado em SOAP. Assim, o consumo excessivo de serviços web baseados emREST parece uma abordagem mais ad hoc de escrever uma interface para corresponder às chamadas possíveis. Fazendo uma solicitação http manual e analisando a resposta. Isso por si só pode ser perigoso.

A beleza de SOAP é que, uma vez que um WSDL é emitido, o negócio 'pode estruturar sua lógica em vez de definir que o contrato de qualquer alteração na interface alterará o wsdl. Não há espaço para manobras. Você pode validar todas as solicitações contra esse WSDL. No entanto, como um WSDL não descreve corretamente um serviço REST, você não tem um modo definido de concordar com a interface para comunicação.

Do ponto de vista comercial, isso parece deixar a comunicação aberta a interpretações e mudanças, o que parece ser uma má ideia.

O top 'Answer' neste tópico parece dizer que SOAP significa Simple Object-oriented Access Protocol, no entanto, olhando para o wiki, o O significa Object não orientado a objetos. Eles são coisas diferentes.

Eu sei que este post é muito antigo, mas pensei que deveria responder com minhas próprias descobertas.

7
Exitos

É uma boa pergunta ... Eu não quero desviar você, então estou aberto às respostas de outras pessoas tanto quanto você. Para mim, isso se resume ao custo de overhead e ao uso da API. Eu prefiro consumir serviços da web ao criar software cliente, mas não gosto do peso do SOAP. REST, eu acredito, é mais leve, mas eu não gosto de trabalhar com isso da perspectiva do cliente.

Estou curioso para saber o que os outros pensam.

6
cranley

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

6
Mark Beckwith

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

O SOAP pode ser uma tarefa difícil de configurar algumas vezes e muitas vezes é um exagero para simples troca de dados do cliente da Web e do servidor. Infelizmente, a maioria dos exemplos de programação simples que vi (e aprendi com) reforçam essa percepção.

Dito isso, SOAP realmente brilha quando você começa a combinar múltiplos SOAP serviços juntos como parte de um processo maior conduzido por um fluxo de trabalho de dados (pense em software corporativo). Isso é algo que muitos dos SOAP exemplos de programação não conseguem transmitir porque uma simples SOAP operação para fazer algo, como buscar o preço de uma ação, é geralmente complicada demais para o que faz a menos que seja apresentado no contexto de fornecer uma API legível por máquina detalhando 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.

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

6
Rick Sarvas

No sentido de "PHP-universe" PHP suporte para qualquer avançado SOAP é uma droga grande. Você vai acabar usando algo como http://wso2.com/products/web-services-framework/php/ assim que você cruzar o básico necessidades, mesmo para habilitar o WS-Security ou WS-RM sem suporte embutido.

Criação de envelope SOAP eu sinto é muito confuso em PHP, a forma como ele cria namespaces, xsd: nil, xsd: anytype e old styled soap Serviços que usam SOAP Codificação (Deus sabe como isso é diferente) em inSOAP mensagens.

Evite toda essa bagunça aderindo ao REST, REST não é nada realmente grande que tenhamos usado desde o início da WWW. Nós percebemos apenas quando este http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm papel saiu mostra Como podemos usar os recursos HTTP para implementar os Serviços RESTFul. O HTTP é inerentemente REST, isso não significa que apenas o uso de HTTP torne seus serviços RESTFul.

SOAP negligencia os recursos centrais do HTTP e considera o HTTP apenas como um protocolo de transporte, por isso é protocolo de transporte independente na teoria (na prática não é o caso você já ouviu falar de SOAP cabeçalho de ação? Se não google agora !).

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

O suporte a PHP para REST e JSON é definitivamente melhor que o suporte in_uilt SOAP que ele possui.

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

pela maneira que eu amo SOAP especialmente para a especificação WS-Security, esta é uma boa especificação e se alguém pensando em adaptação JSON Enterprise definitivamente precisa vir com algo semelhante para JSON, como criptografia em nível de campo etc .

4
shivaspk

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

4
Vibha Sanskrityayan

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

Eu uso SOAP over TCP por razões de velocidade, confiabilidade e segurança, incluindo serviços de máquina a máquina orquestrados (ESB) e serviços externos. Altere a definição de serviço, a orquestração gera um erro na alteração do WSDL e é imediatamente óbvio e pode ser reconstruída/implantada.

Não tenho certeza se você pode fazer o mesmo com REST - aguardo ser corrigido ou claro! Com REST, altere a definição do serviço - nada sabe até que ele retorne 400 (ou qualquer outro).

3
BlueChippy

Se você está procurando interoperabilidade entre diferentes sistemas e idiomas, eu definitivamente iria para REST. Eu tive um monte de problemas tentando obter SOAP trabalhando entre .NET e Java, por exemplo.

2
neu242

eu crio um benchmark para descobrir quais deles são mais rápidos! Eu vejo este resultado:

para 1000 pedidos:

  • REST levou 3 segundos
  • SOAP levou 7 segundos

por 10.000 solicitações:

  • REST levou 33 segundos
  • SOAP levou 69 segundos

para 1.000.000 pedidos:

  • REST levou 62 segundos
  • SOAP levou 114 segundo
2
Sonador

Uma pergunta antiga, mas ainda hoje relevante .... devido a tantos desenvolvedores no espaço da empresa ainda usá-lo.

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

Está claro que REST agora é amplamente aceito e útil, e praticamente o padrão para a web, até mesmo a Microsoft tem suporte REST incluído em todo o Azure. Se eu precisasse depender do SOAP eu não poderia fazer o que preciso fazer, pois é muito grande, volumoso e chato para pequenos dispositivos embarcados.

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

0
Remixed123

1. Da minha experiência. Eu diria que REST lhe dá a opção de acessar o URL que já está construído. eg-> uma pesquisa de palavras no google. Esse URL pode ser usado como webservice para o REST. No SOAP, você pode criar seu próprio serviço da Web e acessá-lo por meio do cliente SOAP.

  1. REST suporta texto, formato JSON, XML. Daí mais versátil para a comunicação entre duas aplicações. Enquanto SOAP suporta apenas o formato XML para comunicação de mensagens.
0
Shalini Baranwal