Perché uno dovrebbe usare REST invece dei servizi basati su SOAP? [chiuso]


153

Oggi ho partecipato a una demo interessante su REST, ma non riuscivo a pensare a un singolo motivo (né è stato presentato) perché REST sia comunque migliore o più semplice da usare e implementare rispetto a uno stack di servizi basato su SOAP.

Quali sono alcuni dei motivi per cui qualcuno nel "mondo reale" utilizza REST anziché i servizi basati su SOAP?


37
Con i servizi web ti riferisci ai servizi web in stile SOAP? Perché, per quanto ne so, puoi avere anche servizi web RESTful.
James McMahon,

Risposte:


160

Meno sovraccarico (nessuna busta SOAP per avvolgere ogni chiamata)

Meno duplicazione (HTTP rappresenta già operazioni come DELETE, PUT, GET, ecc. Che devono essere altrimenti rappresentate in una busta SOAP).

Più standardizzati: le operazioni HTTP sono ben comprese e funzionano in modo coerente. Alcune implementazioni SOAP possono diventare schizzinose.

Più leggibile e testabile dall'uomo (più difficile testare SOAP con un solo browser).

Non è necessario utilizzare XML (beh, in un certo senso non è necessario nemmeno per SOAP, ma non ha molto senso dal momento che stai già analizzando la busta).

Le biblioteche hanno reso SOAP (tipo di) facile. Ma stai sottraendo molta ridondanza sotto, come ho notato. sì, in teoria SOAP può andare oltre altri trasporti in modo da evitare di cavalcare uno strato facendo cose simili, ma in realtà quasi tutto il lavoro SOAP che tu faccia mai è su HTTP.


1
Vorrei aggiungere che anche la comunicazione SOAP multipiattaforma può essere una PITA (non faceva parte del punto di SOAP?!?).
Justin Bozonier,

7
Funziona egregiamente anche con l'infrastruttura HTTP - ad esempio, i GET vengono memorizzati nella cache in modo aggressivo insieme all'ultima modifica e agli etag
James Strachan,

Lavorare alla grande con i browser Web per fornire un client universale ai tuoi servizi aiuta anche :)
James Strachan,

2
Direi che SOAP è ben standardizzato. Se intendi che le implementazioni sono immature, potrebbe essere meglio renderlo più chiaro. Gradirei alcune prove per questo punto di vista se dovessi suggerire questo. Vorrei anche chiedermi se REST è più leggibile dall'uomo, questo dipende interamente da come si sceglie di formattare il contenuto. E ricorda anche che XML è progettato per essere leggibile dall'uomo, anche se è dettagliato come tutti sappiamo.
Howard,

6
HTTP è standardizzato come SOAP, ed è in circolazione da più tempo, quindi le implementazioni sono veramente stabili su tutta la linea e veramente interoperabili. Anche il SOAP sarà intrinsecamente meno leggibile anche con un contenuto identico, a causa della busta in cui è racchiuso il contenuto. In pratica negli ultimi anni ho trovato JSON su HTTP come la migliore combinazione, abbastanza leggibile pur essendo ancora più compatto.
Kendall Helmstetter Gelner,

36

I servizi RESTful sono molto più semplici da consumare rispetto ai servizi (regolari) basati su SOAP . La ragione di ciò è che REST si basa su normali richieste HTTP che consentono di dedurre l'intento dal tipo di richiesta (GET = retrive, POST = write, DELETE = remove, etc ...) ed è completamente apolide. D'altra parte si potrebbe sostenere che è meno flessibile in quanto elimina il concetto di una busta di messaggio che contiene il contesto della richiesta.

Nella mia esperienza, SOAP è stato preferito per i servizi all'interno dell'azienda e REST è stato preferito per i servizi esposti come API pubbliche.

Con strumenti come WCF nel framework .NET è molto banale implementare un servizio come REST o SOAP.

Alcune letture rilevanti:


9
La mia comprensione è che i file WSDL possono essere utilizzati per generare classi per esporre i metodi del servizio Web. Sicuramente questo rende il consumo dei servizi facile come chiamare una funzione? Puoi spiegarci un po 'di più la tua opinione per favore.
Howard,

1
Howard May: Supponendo che chiamate funzioni usando solo tipi di dati primitivi, questo è certamente vero. Ma in quel caso non si può esattamente sostenere che SOAP sia più facile del riposo. Se si hanno tipi di dati complessi, l'elaborazione WSDL potrebbe funzionare correttamente tra due macchine con gli stessi stack WS. Ma inevitabilmente avrai problemi non appena mischerai le pile. Smette di essere così facile una volta che devi scavare a mano in WSDL per eseguire il debug delle incompatibilità.
Joseph Holsten,

1
Nel 2014, quasi tutte le piattaforme, anche antiche, supportano WSDL. Le classi proxy rendono l'utilizzo dell'API estremamente semplice. Stiamo implementando un servizio push e sto considerando REST, ma ho davvero problemi a vedere alcun vantaggio.
JohnOpincar,

13

Suppongo che quando dici "servizi web" intendi SOAP e il set di standard WS- *. (Altrimenti, potrei sostenere che i servizi REST sono "servizi web".)

L'argomento canonico è che i servizi REST sono una corrispondenza più stretta con la progettazione del web, ovvero la progettazione di HTTP e dell'infrastruttura associata. Pertanto, l'utilizzo di un servizio REST sarà più compatibile con gli strumenti e le tecniche web esistenti.

Naturalmente, una volta approfondito i dettagli, scopri che entrambi gli approcci hanno punti di forza in diversi scenari. Sono quelle specifiche che ti interessano?


10

Il sovraccarico non è così importante come una buona architettura.

REST non è un protocollo, è un'architettura che incoraggia un buon design scalabile. Viene spesso scelto perché troppa libertà in RPC può facilmente portare a un design scadente.

L'altro motivo è il costo prevedibile dei protocolli RESTful su HTTP perché può sfruttare le tecnologie esistenti (principalmente i proxy). Il costo iniziale di RPC è piuttosto basso ma tende ad aumentare significativamente con l'intensificazione del carico.


7

REST è indipendente dall'implementazione e molto più trasparente, e questo lo rende ideale per le API pubbliche, in particolare per i grandi siti Web come Flickr, Amazon o Digg che utilizzano le loro API come strumenti di marketing e vogliono davvero che le persone consumino i propri dati. Essi non vogliono essere 1000s-tenendo la mano gli sviluppatori alle prime armi che stanno cercando di eseguire il debug di loro linguaggio di scripting di libreria SOAP buggy di scelta.

Contro SOAP e WSDL, che sono migliori per le applicazioni interne, in cui si hanno librerie drop-in e persone conosciute da entrambe le parti. (E forse non devi preoccuparti di cose come il bilanciamento del carico su scala Internet, la memorizzazione nella cache HTTP ecc.) Quindi ottieni API autodocumentate, preserva i tipi ecc. Con zero lavoro.


Una buona risposta, ma non sono d'accordo sul fatto che SOAP significhi che non è possibile avere un bilanciamento del carico su scala Internet.
HDave il

7

Devo leggere la tesi più eccellente di Roy Fielding sull'argomento. Fa un caso eccellente ed era sicuramente MODO avanti del suo tempo quando lo scrisse (2000).



5

REST consente di memorizzare nella cache le operazioni non mutanti (che generalmente utilizzano il verbo GET) . Cioè, memorizzato nella cache dal client e / o memorizzato nella cache dai proxy. Questa può essere una grande vittoria!


8
Ciò significa semplicemente "utilizzare HTTP correttamente" e non REST.
aehlke,


0

È super semplice e sottile. Puoi farlo con il browser tramite il verbo http: GET. Non ho trovato un browser in grado di eseguire manualmente richieste HTTP POST generiche manualmente


1
Acquista Fiddler. Non è un browser ma è un ottimo modo per creare POST HTTP senza codice. fiddler2.com/fiddler2
Eric Schoonover,

Normalmente lo faccio modificando la richiesta esistente con Charles. Anch'io ho il violinista.
Ray Lu,

0

Ecco un punto dati: Amazon offre le sue API in entrambi i formati REST e SOAP e l'85% dell'utilizzo è REST.

REST è più facile da implementare, più facile da capire e prestazioni più elevate.


7
Hai riferimenti per la tua dichiarazione "prestazioni più elevate"?
James McMahon,

3
Dove hai ottenuto l'85% di utilizzo? Questo è molto buono a sapersi (se riesco a vedere le prove)
schmoopy il

3
La lettura manuale di una specifica API, la stampa di pagine, ecc. È più semplice da implementare rispetto a "Fare clic con il pulsante destro del mouse, Aggiungi riferimento al servizio"? (VS2010)
BlueChippy,

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.