xml - servizi - web services




SOAP o REST per i servizi Web? (19)

È sfumato.

Se è necessario che altri sistemi si interfacciano con i servizi, molti clienti saranno più soddisfatti con SOAP, a causa dei livelli di "verifica" che si hanno con i contratti, WSDL e lo standard SOAP.

Per i sistemi giornalieri che invocano i sistemi, penso che SOAP sia un sovraccarico non necessario quando si eseguirà una semplice chiamata HTML.

REST è un approccio migliore per fare servizi Web o è SOAP? O sono strumenti diversi per problemi diversi? O è una questione sfumata - cioè, è leggermente migliore in certe arene rispetto ad un'altra, ecc.?

Bounty-Edit:

Ora, quasi tre anni dopo vorrei fare ancora una volta questa domanda - offrendo una taglia per incoraggiare una risposta approfondita. Apprezzerei in particolare le informazioni su questi concetti e sulla loro relazione con l'universo PHP e anche con le moderne applicazioni web di fascia alta.


È una buona domanda ... Non voglio portarti fuori strada, quindi sono aperto alle risposte degli altri quanto te. Per me, è davvero il costo del sovraccarico e qual è l'uso dell'API. Preferisco consumare servizi Web quando creo software client, tuttavia non mi piace il peso di SOAP. Il REST, credo, è più leggero ma non mi piace lavorare con esso dal punto di vista del cliente.

Sono curioso di sapere cosa pensano gli altri.


Attualmente SOAP ha il vantaggio di strumenti migliori in cui generano molto codice di codice di riscaldamento sia per il livello di servizio sia per la generazione di client da qualsiasi WSDL.

REST è più semplice, può essere più facile da mantenere come risultato, si trova al centro dell'architettura Web, consente una migliore visibilità del protocollo e ha dimostrato di adattarsi alle dimensioni del WWW stesso. Alcuni framework aiutano a creare servizi REST, come Ruby on Rails, e alcuni addirittura aiutano a scrivere client, come ADO.NET Data Services. Ma per la maggior parte, il supporto degli strumenti è carente.


Ho creato uno dei primi server SOAP, inclusa la generazione di codice e la generazione WSDL, dalle specifiche originali mentre era in fase di sviluppo, quando lavoravo a Hewlett-Packard. NON raccomando di usare SOAP per niente.

L'acronimo "SOAP" è una bugia. Non è semplice, non è orientato agli oggetti, non definisce regole di accesso. È, discutibilmente, un protocollo. E 'la peggiore speculazione di Don Box in assoluto, ed è una vera impresa, visto che è l'uomo che ha perpetrato "COM".

Non c'è nulla di utile in SOAP che non possa essere eseguito con REST per il trasporto e JSON, XML o anche solo testo per la rappresentazione dei dati. Per la sicurezza del trasporto, è possibile utilizzare https. Per l'autenticazione, autenticazione di base. Per le sessioni, ci sono i cookie. La versione REST sarà più semplice, più chiara, eseguirà più velocemente e utilizzerà meno larghezza di banda.

XML-RPC definisce chiaramente i protocolli di richiesta, risposta e errore e ci sono buone librerie per la maggior parte delle lingue. Tuttavia, XML è più pesante del necessario per molte attività.


La mia regola generale è che se si desidera che un client Web del browser si connetta direttamente a un servizio, è consigliabile utilizzare REST. Se si desidera passare dati strutturati tra servizi back-end, utilizzare SOAP.

SOAP può essere un vero problema da configurare a volte ed è spesso eccessivo per semplici scambi di dati web server e server. Sfortunatamente, la maggior parte degli esempi di programmazione semplici che ho visto (e appresi da) in qualche modo rafforzano questa percezione.

Detto questo, SOAP brilla davvero quando si inizia a combinare più servizi SOAP come parte di un processo più ampio guidato da un flusso di lavoro di dati (si pensi al software aziendale). Questo è qualcosa che molti degli esempi di programmazione SOAP non riescono a trasmettere perché una semplice operazione SOAP per fare qualcosa, come recuperare il prezzo di uno stock, è generalmente complicata per quello che fa da sola a meno che non venga presentata nel contesto di fornire una macchina API leggibile che specifica funzioni specifiche con formati di dati impostati per input e output, a loro volta scritti da un processo più ampio.

Questo è triste, in un certo senso, poiché dà davvero a SOAP una cattiva reputazione perché è difficile mostrare i vantaggi di SOAP senza presentarlo nel contesto completo di come viene utilizzato il prodotto finale.


Nel senso con "PHP-universe", il supporto PHP per qualsiasi SOAP avanzato fa un grande lavoro. Finirai per utilizzare qualcosa come http://wso2.com/products/web-services-framework/php/ non appena avrai superato i bisogni di base, anche per abilitare WS-Security o WS-RM senza supporto integrato.

Creazione di buste SOAP Mi sento molto confuso in PHP, il modo in cui crea spazi dei nomi, xsd: nil, xsd: anytype e vecchio stile soap Services che usano SOAP Encoding (Dio sa quanto è diverso) con i messaggi SOAP.

Evita tutto questo confondendo REST, il REST non è niente di veramente grande che abbiamo usato sin dall'inizio del WWW. Ci siamo resi conto solo quando è uscito questo http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm documento che mostra come possiamo usare le funzionalità HTTP per implementare i servizi RESTFul. HTTP è intrinsecamente REST, ciò non significa che solo l'utilizzo di HTTP rende i servizi RESTFul.

SOAP trascura le funzionalità di base di HTTP e considera l'HTTP solo come un protocollo di trasporto, quindi è in teoria un protocollo di trasporto indipendente (in pratica non è il caso di aver sentito l'intestazione SOAP Action? Se non si fa google ora!).

Con l'aumento dell'adattamento JSON e HTML5 con REST javascript maturazione con JSON è diventato il modo più comune di trattare con i servizi. JSON Schema è stato anche definito può essere utilizzato per soluzioni di livello aziendale (ancora in fase iniziale) insieme a WADL, se necessario.

Il supporto PHP per REST e JSON è decisamente migliore del supporto SOAP integrato esistente che ha.

Aggiungendo poche altre parole BUZZ qui SOA, WOA, ROA

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

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

dal modo in cui amo SOAP in particolare per le specifiche WS-Security, questa è una buona specifica e se qualcuno che pensa nell'adattamento di Enterprise JSON ha sicuramente bisogno di venire con qualcosa di simile per JSON, come la crittografia a livello di campo ecc.


Penso che entrambi abbiano un suo posto. Secondo me:

SOAP : una scelta migliore per l'integrazione tra sistemi legacy / critici e un sistema web / web-service, sul livello di base, dove WS- * ha senso (sicurezza, policy, ecc.).

RESTful : una scelta migliore per l'integrazione tra i siti Web, con API pubbliche, nella parte superiore del livello (VIEW, ovvero i javascript che eseguono chiamate agli URI).


Quick lowdown per la domanda del 2012:

Le aree in cui REST funziona molto bene sono:

  • Larghezza di banda e risorse limitate. Ricorda che la struttura di ritorno è veramente in qualsiasi formato (definito dallo sviluppatore). Inoltre, è possibile utilizzare qualsiasi browser perché l'approccio REST utilizza i verbi GET, PUT, POST e DELETE standard. Ancora una volta, ricorda che REST può anche utilizzare l'oggetto XMLHttpRequest supportato oggi dalla maggior parte dei browser moderni, che aggiunge un bonus extra di AJAX.

  • Operazioni totalmente apolidi. Se è necessario continuare un'operazione, REST non è l'approccio migliore e SOAP può adattarlo meglio. Tuttavia, se hai bisogno di operazioni CRUD (Crea, Leggi, Aggiorna ed Elimina) stateless, allora REST è.

  • Situazioni di cache. Se le informazioni possono essere memorizzate nella cache a causa dell'operazione totalmente stateless dell'approccio REST, ciò è perfetto. Questo include molte soluzioni nei tre precedenti.

Quindi, perché dovrei prendere in considerazione anche SOAP? Ancora una volta, SOAP è abbastanza maturo e ben definito e ha una specifica completa. L'approccio REST è proprio questo, un approccio ed è completamente aperto per lo sviluppo, quindi se hai il seguente SOAP è un'ottima soluzione:

  • Elaborazione asincrona e invocazione. Se l'applicazione richiede un livello di affidabilità e sicurezza garantiti, SOAP 1.2 offre standard aggiuntivi per garantire questo tipo di operazione. Cose come WSRM - WS-Reliable Messaging.

  • Contratti formali Se entrambe le parti (fornitore e consumatore) devono concordare il formato di scambio, SOAP 1.2 fornisce le rigide specifiche per questo tipo di interazione.

  • Operazioni stateful. Se l'applicazione necessita di informazioni contestuali e di gestione dello stato conversazionale, SOAP 1.2 dispone delle specifiche aggiuntive nella struttura WS * per supportare tali elementi (Sicurezza, Transazioni, Coordinamento, ecc.). Comparativamente, l'approccio REST farà sì che gli sviluppatori costruiscano questo impianto idraulico personalizzato.

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


REST è un'architettura inventata da Roy Fielding e descritta nella sua tesi Architectural Styles e Design of Network-based Software Architectures . Roy è anche l'autore principale di HTTP , il protocollo che definisce il trasferimento di documenti sul World Wide Web. HTTP è un protocollo RESTful. Quando gli sviluppatori parlano di "utilizzo dei servizi Web REST" è probabilmente più corretto dire "utilizzando HTTP".

SOAP è un protocollo basato su XML che esegue il tunnelling all'interno di una richiesta / risposta HTTP, quindi anche se si utilizza SOAP, si utilizza anche REST. Si discute se SOAP aggiunge funzionalità significative all'HT di base.

Prima di creare un servizio Web, ti consiglio di studiare HTTP. Le probabilità sono le vostre esigenze possono essere implementate con funzionalità già definite nella specifica, quindi non saranno necessari altri protocolli.


REST è un'architettura, SOAP è un protocollo.

Questo è il primo problema.

È possibile inviare buste SOAP in un'applicazione REST.

Lo stesso SOAP è in realtà piuttosto semplice e basilare, sono gli standard WSS- * su di esso che lo rendono molto complesso.

Se i tuoi consumatori sono altre applicazioni e altri server, oggi c'è molto supporto per il protocollo SOAP e le basi dello spostamento dei dati sono essenzialmente un clic del mouse nei moderni IDE.

Se i tuoi consumatori hanno maggiori probabilità di essere RIA o client Ajax, probabilmente vorrai qualcosa di più semplice di SOAP e più nativo per il client (in particolare JSON).

I pacchetti JSON inviati tramite HTTP non sono necessariamente un'architettura REST, sono solo messaggi agli URL. Tutto perfettamente funzionante, ma ci sono componenti chiave per l'idioma REST. È facile confondere i due però. Ma solo perché stai parlando le richieste HTTP non significa necessariamente che hai un'architettura REST. È possibile avere un'applicazione REST senza alcun HTTP (attenzione, questo è raro).

Quindi, se disponi di server e consumatori "a proprio agio" con SOAP, lo stack SOAP e WSS può essere utile. Se stai facendo più cose ad hoc e vuoi interfacciare meglio con i browser web, allora anche un protocollo più leggero su HTTP può funzionare bene.


SOAP è utile dal punto di vista degli strumenti poiché il WSDL è così facilmente utilizzato dagli strumenti. Quindi, puoi ottenere i client del servizio Web generati per te nella tua lingua preferita.

REST funziona bene con le pagine Web di AJAX. Se si mantengono le richieste semplici, è possibile effettuare chiamate di servizio direttamente dal proprio JavaScript e ciò risulta molto utile. Cerca di evitare di avere spazi dei nomi nella tua risposta XML, ho visto i browser soffocare su quelli. Quindi, xsi: type probabilmente non funzionerà per te, nessun schema XML eccessivamente complesso.

REST tende ad avere anche prestazioni migliori. I requisiti CPU del codice che genera le risposte REST tendono ad essere inferiori rispetto a quanto mostrano i framework SOAP. Inoltre, se le anatre di generazione XML sono allineate sul lato server, puoi effettivamente eseguire il flusso XML verso il client. Quindi, immagina di leggere le righe del cursore del database. Mentre leggi una riga, la formatti come elemento XML e la scrivi direttamente al consumatore del servizio. In questo modo, non è necessario raccogliere tutte le righe del database in memoria prima di iniziare a scrivere l'output XML: si leggono e scrivono allo stesso tempo. Cerca nei nuovi motori di template o XSLT per far funzionare lo streaming su REST.

D'altra parte, SOAP tende a essere generato dai servizi generati dagli strumenti come un grande blob e solo allora scritto. Questa non è una verità assoluta, bada bene, ci sono modi per ottenere le caratteristiche di streaming da SOAP, come usando gli allegati.

Il mio processo decisionale è il seguente: se voglio che il mio servizio sia facilmente facilitato dai consumatori, e i messaggi che scrivo saranno di media-piccola-ish (10 MB o meno), e non mi dispiace bruciare qualche CPU in più cicli sul server, vado con SOAP. Se ho bisogno di servire ad AJAX sui browser web, o ho bisogno che la cosa trasmetta, o le mie risposte sono gigantesche, vado a REST.

Infine, ci sono un sacco di ottimi standard costruiti attorno a SOAP, come WS-Security e ottenere servizi Web stateful, che puoi collegare a se stai usando gli strumenti giusti. Quel genere di cose fa davvero la differenza e può aiutarti a soddisfare alcune esigenze pelose.


So che questa è una domanda vecchia ma devo pubblicare la mia risposta - forse qualcuno la troverà utile. Non posso credere a quante persone raccomandano REST su SOAP. Posso solo supporre che queste persone non siano sviluppatori o non abbiano mai effettivamente implementato un servizio REST di qualsiasi dimensione ragionevole. L'implementazione di un servizio REST richiede molto più tempo rispetto all'implementazione di un servizio SOAP. E alla fine esce anche molto più peggio. Ecco i motivi per cui scegliere SOAP 99% delle volte:

1) L'implementazione di un servizio REST richiede un tempo infinitamente più lungo rispetto all'implementazione di un servizio SOAP. Esistono strumenti per tutti i linguaggi / framework / piattaforme moderni da leggere in un WSDL e classi e client proxy di output. L'implementazione di un servizio REST viene eseguita a mano e - ottieni - leggendo la documentazione. Inoltre, mentre si implementano questi due servizi, è necessario fare "ipotesi" su ciò che ritorni attraverso la pipe in quanto non esiste uno schema reale o un documento di riferimento.

2) Perché scrivere un servizio REST che restituisce XML comunque? L'unica differenza è che con REST non si conoscono i tipi che rappresentano ogni elemento / attributo - si è da soli per implementarlo e sperare che un giorno una stringa non si imbatta in un campo che si pensava fosse sempre un int. SOAP definisce la struttura dei dati utilizzando WSDL, quindi è un gioco da ragazzi.

3) Ho sentito dire che con SOAP hai il "sovraccarico" di SOAP Envelope. In questo giorno ed età, abbiamo davvero bisogno di preoccuparsi di una manciata di byte?

4) Ho sentito l'argomento che con REST puoi semplicemente inserire l'URL nel browser e vedere i dati. Certo, se il tuo servizio REST utilizza un'autenticazione semplice o nulla. Il servizio Netflix, ad esempio, utilizza OAuth che richiede di firmare le cose e codificare le cose prima ancora di poter inviare la richiesta.

5) Perché abbiamo bisogno di un URL "leggibile" per ogni risorsa? Se usassimo uno strumento per implementare il servizio, ci preoccupiamo veramente dell'URL effettivo?

Devo andare avanti?


Sto guardando lo stesso problema. Mi sembra che in realtà REST sia veloce e facile e buono per chiamate e risposte leggere e ottimo per il debug (cosa potrebbe essere meglio che pompare un URL in un browser e vedere la risposta).

Tuttavia, il punto in cui REST sembra cadere dipende dal fatto che non è uno standard (sebbene sia costituito da standard). La maggior parte delle librerie di programmazione è in grado di ispezionare un WSDL per generare automaticamente il codice client necessario per utilizzare servizi basati su SOAP. I servizi web basati su REST che consumano molto sembrano un approccio più ad hoc per la scrittura di un'interfaccia per abbinare le chiamate che sono possibili. Fare una richiesta http manuale quindi analizzare la risposta. Questo di per sé può essere pericoloso.

La bellezza di SOAP è che una volta che viene emesso un WSDL, l'azienda può strutturare la propria logica, a condizione che il contratto impostato cambierà l'interfaccia modificando wsdl. Non c'è spazio per la manovra. È possibile convalidare tutte le richieste contro tale WSDL. Tuttavia, poiché un WSDL non descrive correttamente un servizio REST, non esiste un modo definito di concordare l'interfaccia per la comunicazione.

Dal punto di vista del business, questo sembra lasciare la comunicazione aperta all'interpretazione e al cambiamento che sembra una cattiva idea.

La "risposta" in alto in questa discussione sembra dire che SOAP è l'acronimo di Simple Access-Object Access Protocol, tuttavia guardando a wiki O significa Object non Object-oriented. Sono cose diverse.

So che questo post è molto vecchio ma ho pensato di dover rispondere con le mie scoperte.


Sto guardando lo stesso, e penso, sono strumenti diversi per problemi diversi .

Lo standard SOAP (Simple Object Access Protocol), un linguaggio XML che definisce un'architettura di messaggi e formati di messaggi, viene utilizzato dai servizi Web che contiene una descrizione delle operazioni. WSDL è un linguaggio basato su XML per descrivere i servizi Web e come accedervi. funzionerà su SMTP, HTTP, FTP ecc. Richiede supporto middleware, meccanisam ben definito per definire servizi come WSDL + XSD, SOAP WS-Policy restituirà dati basati su XML SOAP fornisce standard per sicurezza e affidabilità

Servizi web di Representational State Transfer (RESTful). sono servizi Web di seconda generazione. Servizi web RESTful, comunicano via HTTP di servizi basati su SOAP e non richiedono messaggi XML o definizioni API servizio WSDL. per REST non è richiesto alcun middleware, ma è necessario il supporto HTTP. WADL Standard, REST può restituire XML, testo normale, JSON, HTML ecc.

È più facile per molti tipi di client utilizzare i servizi web RESTful, consentendo al tempo stesso al server di evolvere e scalare. I clienti possono scegliere di consumare alcuni o tutti gli aspetti del servizio e mescolarli con altri servizi basati sul web.

  1. REST utilizza HTTP standard, quindi semplifica la creazione di client e lo sviluppo di API
  2. REST consente molti formati di dati diversi come XML, testo normale, JSON, HTML dove SOAP consente solo XML.
  3. REST ha prestazioni e scalabilità migliori.
  4. Riposare e può essere memorizzato nella cache e SOAP non può
  5. Gestione degli errori incorporata in cui SOAP non ha alcuna gestione degli errori
  6. REST è un PDA particolarmente utile e altri dispositivi mobili.

REST è un servizio facile da integrare con i siti Web esistenti.

SOAP dispone di protocolli che forniscono standard per la sicurezza e l'affidabilità, tra l'altro, e interagiscono con altri client e server conformi alle WS. I servizi Web SOAP (come JAX-WS) sono utili nella gestione dell'elaborazione asincrona e del richiamo.

Per SOAP di API complesse sarà più utile.


Una cosa che non è stata menzionata è che una busta SOAP può contenere intestazioni e parti del corpo. Ciò consente di utilizzare la piena espressività di XML per inviare e ricevere informazioni fuori banda. REST, per quanto ne so, limita l'utente alle intestazioni HTTP e ai codici risultato.

(otoh, puoi usare i cookie con un servizio REST per inviare "header" -type fuori dai dati della banda?)


SOAP incarna un approccio orientato ai servizi ai servizi Web: uno in cui i metodi (oi verbi) sono il modo principale con cui interagisci con il servizio. REST adotta un approccio orientato alle risorse in cui l'oggetto (o il nome) occupa un posto centrale.


Una vecchia domanda, ma ancora attuale ... a causa di tanti sviluppatori nello spazio aziendale che ancora lo usano.

Il mio lavoro riguarda la progettazione e lo sviluppo di soluzioni IoT (Internet of Things). Che include lo sviluppo di codice per piccoli dispositivi embedded che comunicano con il cloud.

È chiaro che REST è ora ampiamente accettato e utile, e praticamente lo standard de facto per il web, anche Microsoft ha il supporto REST incluso in Azure. Se dovevo affidarmi a SOAP, non potevo fare quello che dovevo fare, poiché è troppo grande, ingombrante e fastidioso per i piccoli dispositivi embedded.

REST è semplice, pulito e piccolo. Lo rende ideale per piccoli dispositivi embedded. Urlo sempre quando lavoro con uno sviluppatore web che mi invia un WSDL. Dovrò iniziare una campagna di educazione sul perché questo non funziona e sul perché dovranno imparare REST.


1. Dalla mia esperienza. Direi REST ti dà l'opzione per accedere all'URL che è già stato creato. es .-> una parola cerca in google. Quell'URL potrebbe essere usato come webservice per REST. In SOAP, puoi creare il tuo servizio web e accedervi tramite il client SOAP.

  1. REST supporta testo, JSON, formato XML. Quindi più versatile per la comunicazione tra due applicazioni. Mentre SOAP supporta solo il formato XML per la comunicazione dei messaggi.

creo un punto di riferimento per trovare quali di loro sono più veloci! vedo questo risultato:

per 1000 richieste:

  • REST ha impiegato 3 secondi
  • SOAP ha preso 7 secondi

per 10.000 richieste:

  • REST ha impiegato 33 secondi
  • SOAP ha preso 69 secondi

per 1.000.000 di richieste:

  • REST ha preso 62 secondi
  • SOAP ha impiegato 114 secondi




soap