WSDL vs REST Pro e contro


108

Relazionato:

Perché si dovrebbe usare REST invece dei servizi Web?

Quando decido se implementare un servizio web utilizzando SOAP o REST (con cui intendo HTTP / XML in modo RESTful) di cosa dovrei essere a conoscenza ea cosa dovrei pensare? Presumo che questa non sia una taglia unica, quindi come faccio a scegliere quale usare.


Anche questa domanda potrebbe avere alcune risposte utili: stackoverflow.com/questions/90451/…
Rob Hruska,

2
Dipende dal contesto, sia SOAP che REST hanno il loro posto. Di solito non vedi Hi-SOAP e lo-SOAP come hai sentito parlare di REST. Il motivo è che c'è la specifica, e o la segui o non la segui. SOAP lo trova utilizzato nei data center in cui è necessaria l'interoperabilità tra diversi server che non possono comunicare direttamente e le prestazioni sono un fattore importante. In questi casi, è bello fare SOAP su TCP. SOAP è stato progettato come indipendenza dal trasporto, quindi essenzialmente dovresti essere in grado di usarlo su TCP, MSMQ, ecc., REST si occupa solo di HTTP.
Srikar Doddi

CodeToGlory ha ragione. In effetti, il WCF di Microsoft è stato progettato specificamente per rendere SOAP su qualsiasi mezzo di trasporto facile come un valore in un file di configurazione.
Travis Heseman,

Possibile duplicato di SOAP vs REST (differenze)
Hedeshy

Risposte:


111

I due protocolli hanno usi molto diversi nel mondo reale.

SOAP (utilizzando WSDL) è uno standard XML pesante incentrato sul passaggio di documenti. Il vantaggio di questo è che le tue richieste e risposte possono essere molto ben strutturate e possono persino utilizzare un DTD. Lo svantaggio è che è XML ed è molto dettagliato. Tuttavia, questo è positivo se due parti devono avere un contratto rigoroso (ad esempio per la comunicazione interbancaria). SOAP ti consente anche di stratificare cose come WS-Security sui tuoi documenti. SOAP è generalmente indipendente dal trasporto, il che significa che non è necessario utilizzare HTTP.

REST è molto leggero e si basa sullo standard HTTP per svolgere il proprio lavoro. È fantastico avere un servizio web utile installato e funzionante rapidamente. Se non hai bisogno di una definizione API rigorosa, questa è la strada da percorrere. La maggior parte dei servizi web rientra in questa categoria. Puoi modificare la versione dell'API in modo che gli aggiornamenti all'API non la interrompano per le persone che utilizzano vecchie versioni (purché specifichino una versione). REST richiede essenzialmente HTTP ed è indipendente dal formato (il che significa che puoi usare XML, JSON, HTML, qualunque cosa).

Generalmente utilizzo REST, perché non ho bisogno di fantasiose funzionalità WS- *. SOAP è buono se vuoi che i computer capiscano il tuo servizio web usando un WSDL. Le specifiche REST sono generalmente leggibili solo dall'uomo.


5
@JohnSaunders Perché ci sono buste se non ci sono documenti? Non credo di aver detto che un DTD è una caratteristica unica di SOAP. Non ho proprio voglia di discutere oggi, mi dispiace. Forse rileggi i commenti alla tua risposta a questa domanda di quasi 3 anni fa. Non penso che il peso elevato sia necessariamente una cosa negativa, a volte vuoi Holyfield, ma altre volte Pacquiao fa il lavoro. Non prenderla nel modo sbagliato e niente di personale :)
Kekoa

1
SOAP funziona con interfacce in stile documento o in stile RPC. Inoltre, SOAP non usa affatto DTD, per quanto ne so. E non hai mai quantificato "pesi massimi". Scusa, ho visto solo la tua risposta, o tre anni fa avrei perso il voto.
John Saunders

2
@ JohnSaunders Nessun problema, buona giornata!
Kekoa

2
REST, come SOAP, è indipendente dal protocollo. Non si basa su HTTP sebbene sia più comunemente usato in questo modo. Penso che un fatto importante che spesso non viene menzionato è che SOAP vs REST sta confrontando un protocollo standard w3c con un modello architettonico pragmatico vagamente definito.
joelmdev

1
@ jm2 non ho mai visto il resto utilizzato al di fuori di HTTP. Sarei interessato a vedere come i verbi GET / POST / PUT / DELETE / ecc. lavorare in un "protocollo" di riposo senza HTTP. Link?
Kekoa,

33

I collegamenti seguenti forniscono informazioni utili su WSDL e REST, inclusi pro e contro

Un paio di punti chiave sono questo

1) SOAP è stato progettato per un ambiente di elaborazione distribuito in cui come REST è stato progettato per un ambiente punto a punto.

2) WADL può essere utilizzato per definire l'interfaccia per i servizi 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


3
REST è stato progettato per sistemi distribuiti: "[...] lo stile architettonico REST (Representational State Transfer) per sistemi ipermediali distribuiti [...]" (Fielding, 2000) ics.uci.edu/~fielding/pubs/dissertation/ rest_arch_style.htm
Thomas Eizinger,

19

Per quanto riguarda WSDL (che significa "SOAP") come "pesante". Questioni pesanti come? Se il set di strumenti sta facendo tutto il "lavoro pesante" per te, allora perché è importante?

Non ho mai avuto bisogno di utilizzare una complicata API REST. Quando lo faccio, mi aspetto che desidererò un WSDL, che i miei strumenti convertiranno volentieri in un insieme di classi proxy, quindi posso semplicemente chiamare quelli che sembrano essere metodi. Invece, sospetto che per utilizzare un'API basata su REST non banale, sarà necessario scrivere a mano una notevole quantità di codice "leggero".

Anche quando tutto sarà finito, avrai comunque tradotto in codice la documentazione leggibile dall'uomo, con tutto il rischio che gli umani la leggano male. Poiché WSDL è una descrizione del servizio leggibile dalla macchina, è molto più difficile "leggerlo in modo sbagliato".


Solo una nota: dal momento che questo post, hanno avuto l'opportunità di lavorare con un servizio REST moderatamente complicato. Desideravo, in effetti, un WSDL o un equivalente e, in effetti, dovevo scrivere molto codice a mano. In effetti, una parte sostanziale del tempo di sviluppo è stata spesa per rimuovere la duplicazione del codice di tutto il codice che chiamava "a mano" diverse operazioni di servizio.


Penso che "leggerezza" riguardi il rendimento, supponiamo ad esempio di caricare i termini di ricerca suggeriti durante la digitazione. Sono un ragazzo .NET e apprezzo molto alcune funzionalità IDE simili a quello che dici (le classi proxy generate automaticamente) ma per un REST ws. Che cosa esiste?
Romias

1
L'esempio che suggerisci è un semplice servizio REST, e probabilmente difficile da "leggere male". Inoltre, chiunque ritenga che SOAP abbia prestazioni peggiori deve supportarlo con i numeri. Non ho avuto l'impressione che fosse quello di cui parlavano i fan di REST quando dicono "pesante".
John Saunders,

3
Il peso elevato non è dispregiativo, volevo solo dire che SOAP ti dà molto e ha un prezzo un po 'di prestazioni e complessità. Nella boxe, un peso massimo può probabilmente fare più danni di un peso leggero, ma un peso leggero può portare a termine il lavoro nei momenti in cui non è richiesto un peso massimo. Inoltre, le "cose" extra come WS-Security o Transactions introducono una complessità extra che REST semplicemente non ha.
Kekoa

3
"supportalo con i numeri" - classico flamebait. Sono un fan di entrambi, ma nessuno dei due è adatto a tutti.
Kekoa

4
@kekoav: stavo rispondendo a Romias dicendo che pensava che "leggerezza" riguardasse le prestazioni. Ho sentito che dovrebbe essere sostenuto da chiunque si senta in quel modo. Inoltre, ancora una volta, non presumerei prestazioni migliori senza misurarle e non misurerei, ad esempio, transazioni rispetto a nessuna transazione o WS-Security rispetto a HTTPS. Non è un'esca infuocata suggerire la verifica di una dichiarazione.
John Saunders,

15

Questo probabilmente appartiene davvero ai commenti in molti dei post sopra, ma non ho ancora il rappresentante per farlo, quindi ecco qui.

Penso che sia interessante che molti dei pro e dei contro spesso citati per SOAP e REST abbiano (IMO) molto poco a che fare con i valori o i limiti effettivi delle due tecnologie. Probabilmente il pro più citato per REST è che è "leggero" o tende ad essere più "leggibile dall'uomo". A un livello questo è certamente vero, REST ha una barriera inferiore all'ingresso - c'è una struttura meno richiesta di SOAP (anche se sono d'accordo con coloro che hanno detto che un buon tooling è in gran parte la risposta qui - peccato che gran parte degli strumenti SOAP sia piuttosto terribile).

Tuttavia, al di là del costo di ingresso iniziale, penso che l'impressione REST derivi da una combinazione della forma degli URL di richiesta e della complessità dei dati scambiati dalla maggior parte dei servizi REST. REST tende a incoraggiare URL di richiesta più semplici e più leggibili dall'uomo e anche i dati tendono ad essere più digeribili. In che misura, tuttavia, sono inerenti a REST e in che misura sono semplicemente accidentali. La struttura URL più semplice è un risultato diretto dell'architettura, ma potrebbe essere ugualmente ben applicata ai servizi basati su SOAP. È più probabile che i dati più digeribili siano il risultato della mancanza di una struttura definita. Ciò significa che faresti meglio a mantenere semplici i formati dei dati o dovrai lavorare molto. Quindi qui la struttura aggiuntiva di SOAP,

Quindi per l'uso nello scambio di dati strutturati tra sistemi informatici non sono sicuro che REST sia intrinsecamente migliore di SOAP (o viceversa), sono semplicemente diversi. Penso che il confronto sopra tra REST e SOAP con la digitazione dinamica e quella statica sia buono. Dove i linguaggi dinmici tendono ad avere problemi è nella manutenzione a lungo termine e nella manutenzione di un sistema (e a lungo termine non sto parlando di un anno o 2, sto parlando di 5 o 10). Sarà interessante vedere se REST incontra le stesse sfide nel tempo. Tendo a pensare che lo sarà, quindi se dovessi costruire un sistema di elaborazione delle informazioni distribuito, graviterei su SOAP come meccanismo di comunicazione (anche a causa della trasmissione e della stratificazione del protocollo applicativo e della flessibilità che offre, come è stato menzionato sopra).

In altri posti, però, REST sembra più appropriato. AJAX tra il client e il suo server (indipendentemente dal payload) è un importante esempio. Non mi interessa molto la longevità di questo tipo di connessione e la facilità d'uso e la flessibilità sono al minimo. Allo stesso modo, se avessi bisogno di un accesso rapido a qualche servizio esterno e non pensavo che mi sarei preoccupato della manutenibilità dell'interazione nel tempo (di nuovo presumo che questo sia il punto in cui REST finirà per costarmi di più, in un modo o un altro), quindi potrei scegliere RIPOSO solo per poter entrare e uscire rapidamente.

Ad ogni modo, sono entrambe tecnologie praticabili e, a seconda dei compromessi che vuoi fare per una data applicazione, possono servirti bene (o male).


5

REST non è un protocollo; È uno stile architettonico. O un paradigma se vuoi. Ciò significa che è molto più sciolto definito che SOAP è. Per CRUD di base, puoi fare affidamento su protocolli standard come Atompub, ma per la maggior parte dei servizi avrai più comandi oltre a quello.

Come consumatore, SOAP può essere una benedizione o una maledizione, a seconda del supporto linguistico. Poiché SOAP è molto modellato su un sistema strettamente tipizzato, funziona meglio con linguaggi tipizzati staticamente. Per un linguaggio dinamico può facilmente diventare croccante e superfluo. Inoltre, il supporto della libreria client non è così buono al di fuori del mondo di Java e .NET


C'è qualche motivo valido per uno scarso supporto degli strumenti al di fuori di Java e .NET? C'è qualcosa che manca nel file WSDL che impedirebbe, ad esempio, la creazione di un proxy Ruby?
John Saunders,

Tecnicamente no, ma qualcuno deve implementarlo, e né Sun (scusate, Oracle) né Microsoft pagheranno nessuno per implementare le librerie client in Ruby. Il protocollo SOAP è piuttosto complesso. Aggiungete a ciò il fatto che tutta la complessità è nel sistema di tipi, che è solo spazzatura da una prospettiva di linguaggio dinamico. Quindi puoi dire che SOAP forza i sistemi di tipo statico su linguaggi dinamici. REST è un po 'al contrario.
troelskn

4

Per me dovremmo stare attenti quando usiamo la parola servizio web. Dovremmo sempre specificare se stiamo parlando di servizio web SOAP, servizio web REST o altri tipi di servizi web perché qui stiamo parlando di cose diverse e le persone non capiscono più se chiamiamo tutti loro servizi web.

Fondamentalmente i servizi web SOAP sono molto consolidati da anni e seguono una specifica rigorosa che descrive come comunicare con loro in base alla specifica SOAP. Ora i servizi web REST sono un po 'più recenti e sostanzialmente sembrano più semplici perché non utilizzano alcun protocollo di comunicazione. Fondamentalmente ciò che invii e ricevi quando utilizzi un servizio Web REST è un semplice XML. Alla gente piace perché possono analizzare l'xml nel modo in cui vogliono senza doversi occupare di un protocollo di comunicazione più sofisticato come SOAP.

Per me i servizi REST sono quasi come se dovessi creare un servlet invece di un servizio web SOAP. Il servlet inserisce i dati e li restituisce. Il formato dei dati è basato su xml. Possiamo anche immaginare di usare qualcos'altro oltre a xml se vogliamo. Ad esempio, i tag potrebbero essere usati al posto di xml e questo non sarebbe più REST ma qualcos'altro (potrebbe essere ancora più leggero in termini di peso perché xml non è leggero per natura). Lo chiameremmo ancora un servizio web? Sì, potremmo, ma questo non seguirà nessuno standard attuale e questo è il problema principale qui se iniziamo a chiamare tutto ciò che servizi web ma possiamo farlo nel modo che vogliamo, allora stiamo perdendo l'interoperabilità delle cose. Ciò significa che il formato dei dati scambiati con il servizio web non è più standardizzato.

Quello che alle persone non piace con SOAP è che hanno difficoltà a capirlo e non possono generare le query manualmente. I computer possono farlo molto bene, tuttavia, è qui che dobbiamo essere chiari: le query e le risposte dei servizi Web dovrebbero essere utilizzate direttamente dagli utenti finali o siamo d'accordo sul fatto che i servizi Web sono sotto l'API richiamata dai sistemi informatici sulla base di alcuni norme?


1
Non sarebbe più RIPOSO?
Steven Shaw

3

SOAP : Può essere trasportato anche tramite SMTP, significa che possiamo richiamare il servizio anche utilizzando il formato di testo semplice e-mail

Ha bisogno di un framework / motore aggiuntivo che dovrebbe essere nella macchina del consumatore del servizio web per convertire il messaggio SOAP nella rispettiva struttura di oggetti in vari linguaggi.

REST : ora WSDL2.0 supporta anche la descrizione del servizio web REST

Possiamo usare quando vuoi rendere il tuo servizio leggero, ad esempio chiamare da dispositivi mobili come telefoni cellulari, pda ecc ...


Grazie per aver sollevato l'argomento, @Jenith. Nessuno sembra voler sollevare questo problema. WSDL ha a che fare con la descrizione. REST è un paradigma. Per altri: vedere l'introduzione in ibm.com/developerworks/webservices/library/ws-restwsdl . La domanda originale, quindi (considerando la data di immissione), mostra che il titolo della domanda è stato scelto male (probabilmente ha in mente WSDL 1.0).
Sonny

3

per i sistemi aziendali in cui il tuo sistema è confinato all'interno delle tue aziende, è più facile e appropriato usare il sapone perché hai quasi il controllo dei client. è più facile poiché ci sono una varietà di strumenti che creano classi (proxy) e sembra che tu stia facendo il tuo normale OOP che corrisponde al tuo ambiente java o .net (in cui la maggior parte delle aziende usa).

Vorrei utilizzare REST per applicazioni rivolte a Internet per esporre interfacce (come Twitter api) poiché i client possono utilizzare javascript o html o altri in cui la digitazione non è rigorosa. REST essere più liberali ha più senso.

Anche per i client con connessione Internet (world wide web), è più facile analizzare json o xml che esce da un'interfaccia rest piuttosto che un puramente xml proveniente da un'interfaccia soap. è difficile usare proxy su javascript e javascript non supporta naturalmente gli oggetti. Se stai usando REST con javascript, dovresti semplicemente analizzare la stringa json e sei spento. Le interfacce Internet sono generalmente molto semplici (quindi la maggior parte delle volte è semplice da analizzare) e di solito non richiede coerenza, ecco perché REST è abbastanza adeguato.

Per le applicazioni aziendali non penso che REST sia adeguato perché le transazioni, la sicurezza, la tipizzazione rigorosa, gli schemi giocano un ruolo molto importante nello sviluppo delle applicazioni aziendali, ecco perché SOAP è più adatto per loro.

La mia conclusione è che SOAP è per i sistemi Enterprise, REST è per Internet o WWW. Puoi usarlo in modo intercambiabile ma potresti trovarti ad avere difficoltà alla fine a non usare lo strumento corretto per il lavoro.

scusa per il mio cattivo inglese.


2

In difesa di REST, segue da vicino i principi di HTTP e di indirizzabilità, ad esempio le operazioni di lettura usano GET, le operazioni di aggiornamento usano POST ecc. Trovo che questo sia un approccio molto più pulito. Il libro di Oreilly RESTful Web Services lo spiega molto meglio di me, se lo leggessi penso che preferiresti l'approccio REST


1

Il set di strumenti sul lato client sarebbe uno. E la familiarità con i servizi SOAP l'altro. Sempre più servizi stanno seguendo il percorso RESTful in questi giorni e il test di tali servizi può essere eseguito con semplici esempi di cURL. Tuttavia, non è poi così difficile implementare entrambi i metodi e consentire il più ampio utilizzo da parte dei client.

Se devi sceglierne uno, suggerisco REST, è più facile.


1

Le risposte precedenti contengono molte informazioni, ma penso che ci sia una differenza filosofica che non è stata evidenziata. SOAP era la risposta a "come creare un successore di RPC moderno, orientato agli oggetti, indipendente dalla piattaforma e dal protocollo?". REST si è sviluppato dalla domanda "come prendere le informazioni che hanno reso HTTP così efficace per il web e usarle per il calcolo distribuito?"

SOAP ti offre strumenti per rendere la programmazione distribuita simile a ... programmazione. REST cerca di imporre uno stile per semplificare le interfacce distribuite, in modo che le risorse distribuite possano fare riferimento l'una all'altra come le pagine html distribuite possono riferirsi l'una all'altra. Un modo per farlo è tentare di limitare (principalmente) le operazioni a "CRUD" sulle risorse (creare, leggere, aggiornare, eliminare).

REST è ancora giovane - sebbene sia orientato verso servizi "leggibili dall'uomo", non esclude servizi di introspezione, ecc. O la creazione automatica di proxy. Tuttavia, questi non sono stati standardizzati (mentre scrivo). SOAP ti dà queste cose, ma (IMHO) ti dà "solo" queste cose, mentre lo stile imposto da REST sta già favorendo la diffusione dei servizi web per la sua semplicità. Vorrei incoraggiare i fornitori di servizi inesperti a scegliere REST a meno che non ci siano funzionalità specifiche fornite da SOAP che devono utilizzare.

Secondo me, quindi, se stai implementando un'API "greenfield" e non sai molto sui possibili client, sceglierei REST poiché lo stile che incoraggia tende a rendere le interfacce comprensibili e facili da sviluppare. Se sai molto su client e server e ci sono strumenti SOAP specifici che renderanno la vita facile per entrambi, allora non sarei religioso su REST, però.


-1: questo in realtà non risponde alla domanda. Dice poco o niente sul "perché dovrei sceglierne uno rispetto all'altro"?
John Saunders

1
Mi stavo concentrando sul fornire informazioni che altri non hanno fatto, ma ho aggiunto una conclusione in base al tuo suggerimento.
Shaunc

0

È possibile trasferire facilmente i componenti Web WCF che generano WSDL ad altri usi semplicemente modificando le impostazioni di configurazione. Puoi passare attraverso HTTP e quindi anche named pipe, tcp, protocolli personalizzati, ecc.Senza dover modificare il codice. Credo che i componenti WCF possano anche essere più facili da configurare per cose come sicurezza, chiamate a due vie, transazioni, concorrenza, ecc.

REST ti limita praticamente a HTTP (che in molti casi va bene).


0

So che questa discussione è vecchia, ma dopo aver letto tutte le risposte e commentato, credo che tutti abbiano perso il punto più importante sulla differenza tra i 2 sistemi: SOAP utilizza tipi complessi non solo per darti i dati, ma per convalidare e mantenerlo nella rigorosa designazione del tipo per cui è stato definito. Un WSDL ti dice qual è il formato dei dati, qual è il tipo di dati, ti consente di aggiungere regole in stile pattern reg-ex e definisce quante volte un dato deve essere e può essere consentito in una richiesta / risposta . Il riposo d'altra parte non ha nessuno di questi meccanismi.

SOAP è complesso e pesante perché consente di inviare dati gerarchici pesanti e complessi. REST è un testo semplice, con l'origine e l'endpoint che ordinano le regole.

SOAP è indipendente dal business, perché ha tutte le regole sui dati incorporate nel documento.

La differenza tra SOAP e REST è che SOAP è uno schema orientato al business autonomo. REST è un documento di testo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.