Qual è il significato attuale di SOAP


51

L'ultima volta che ho incontrato un servizio basato su SOAP è stato durante il mio tirocinio in una società finanziaria nel 2013. Era il momento in cui ho iniziato la mia carriera nell'IT. Ricordo di aver avuto del materiale di studio su SOAP in uno dei miei corsi di ingegneria. A parte questo, non ho usato SOAP molto durante la mia carriera.

Lo sto chiedendo poiché la domanda "Differenza tra SOAP e REST" è arrivata in una delle mie recenti interviste. Da quello che so (e che ho trovato su Google) SOAP è un protocollo con stretto accoppiamento tra client e server per lo scambio di informazioni che è strettamente correlato alla logica aziendale. Considerando che REST è un'architettura stateless più flessibile per il trasferimento di dati.

Qualcuno può correggermi se sbaglio su questa differenza tra SOAP e REST? Inoltre, qual è il significato attuale di SOAP? Le persone stanno ancora sviluppando nuove API basate su SOAP o ora è per lo più un'eredità?




14
@gnat: per quello che vale, le risposte in entrambe queste domande sono tutte terribili.
Robert Harvey,

7
Hai mai visto un servizio REST? Tutto quello che vedo sono "servizi web che finalmente hanno imparato cosa significano i verbi HTTP". Perché improvvisamente chiamiamo HTTP REST?
Luaan,

8
@Luaan: non c'è nulla di improvviso al riguardo; la gente abusa da anni del termine "RESTO".
Corse di leggerezza con Monica il

Risposte:


59

REST è davvero uno stile architettonico. SOAP è un protocollo dati. La distinzione è importante; non puoi confrontarli direttamente.

Lo scopo principale di REST è rappresentare le risorse su Internet e fornire meccanismi per scoprirle. Al contrario, SOAP viene utilizzato per comunicare dati strutturati tra computer e questo è tutto ciò che fa realmente.

Si noti che in realtà non è necessario il REST per creare una relazione client / server tra due computer su Internet. Tutto ciò di cui hai bisogno è un meccanismo che trasferisca JSON o XML e non ti serve nemmeno se sei disposto a essere incompatibile con tutti gli altri.

Tuttavia, SOAP è caduto in disgrazia per le nuove API rivolte al pubblico, sebbene sia ancora comunemente usato per le applicazioni B2B perché è possibile definire un "contratto dati" con esso. I servizi Web JSON hanno la virtù di essere piuttosto leggeri e flessibili e poiché Javascript riconosce JSON in modo nativo, è una scelta naturale per i browser.

Ma nulla di tutto ciò ha molto a che fare con REST, davvero.

Ulteriori letture
REST è meglio di SOAP? (buon articolo, anche se in modo errato chiama REST un protocollo).
Il modello di maturità Richardson


3
Direi che la caratteristica killer dei servizi Web JSON è esattamente il fatto che i browser hanno uno scarso supporto per XML e SOAP, mentre hanno (quasi) supporto nativo per JSON. SOAP ha molte cose da fare, ma se non è possibile effettuare richieste AJAX contro un servizio SOAP, è morto. Javascript / JSON è diventato il minimo comune denominatore di internet, così avresti bisogno di un enorme vantaggio di non usarlo, e SOAP non è che molto meglio.
Luaan,

3
@Luaan Non direi che i browser non supportano XML. In effetti, è difficile ottenere di meglio che fare un HttpRequest XML e accedere a un attributo che ha un DOM analizzato. È solo che se ciò che si desidera è una struttura di dati tipica, e non un documento, JSON è semplicemente più adatto, sia nel browser che in qualsiasi altro ambiente.
André Paramés,

4
Tutto ciò di cui hai bisogno è un meccanismo che trasferisca JSON o XML e non ti serve nemmeno se sei disposto a essere incompatibile con tutti gli altri. -1: Se si desidera connettere un client e un server, è sufficiente un protocollo arbitrario che entrambe le parti capiscano che non ha nulla a che fare con l'uso di xml, JSON o la compatibilità con tutti gli altri. Anche l'utilizzo di json o xml non garantisce la tua compatibilità con tutti o anche con qualcuno. Json e xml non sono altro che formati di dati.
Paul Wasilewski,

6
@PaulWasilewski: Sì, è quello che ho detto. Non rimanere impiccato con le parole. C'è un motivo per cui tutti usano JSON; è uno standard. Usarlo garantisce che stai usando qualcosa che è riconoscibile per gli altri.
Robert Harvey,

3
@RobertHarvey, no, non è quello che hai scritto, forse lo intendevi. JSON è standard e quindi? CSV, Protcol Buffers, BSON è standardizzato e molti altri. Quindi il motivo per cui tutti usano JSON è molteplice. E ci sono anche alcuni che usano JSON perché tutti usano JSON;)
Paul Wasilewski,

29

REST è molto più limitato di SOAP, che è la sua forza e la ragione della sua popolarità.

In SOAP, la serie di operazioni consentite e la serie di tipi di dati consentiti è essenzialmente illimitata. SOAP è un protocollo di procedura remota, che viene utilizzato per esporre le API locali attraverso la rete senza perdere alcuna fedeltà. Ciò ha reso SOAP popolare negli ambienti aziendali in cui complessi sistemi transazionali dovevano interagire attraverso la rete senza perdere fedeltà lungo il percorso. Questa ricchezza di capacità è anche la rovina di SOAP, perché rende le API SOAP così ingombranti da capire e da usare che ha reso necessario uno strumento automatizzato sotto forma di librerie client WSDL e SOAP per dare un senso alle cose. Inoltre, esporre la ricchezza completa del sistema sottostante non è attraente nelle API rivolte al pubblico, dove si desidera fornire astrazioni che consentono di far evolvere il sistema sottostante senza dover interrompere o eseguire la versione dell'API.

REST + JSON ha guadagnato popolarità proprio per la sua semplicità. Definisce un insieme limitato di operazioni con un insieme limitato di tipi di dati, che richiedono al progettista dell'API di progettare attentamente le astrazioni che si adattano a questo vocabolario limitato e di pensare davvero attraverso la mappatura del dominio aziendale alle risorse REST. Un'API REST è facile da capire e facile da usare senza strumenti speciali. Per un'API rivolta al pubblico in cui i tuoi utenti API possono avere tutti i livelli di competenza e conoscenza, questo è esattamente ciò che desideri, motivo per cui tutte le API che vedi sul Web stanno passando a REST. SOAP è relegato in situazioni aziendali in cui esiste ancora il desiderio e la necessità di condividere API complesse tra i sistemi. Però,

In sostanza, ciò che le persone hanno capito è che l'insieme di vincoli che è necessario applicare alla progettazione dell'API per rendere l'API semplice e astratta abbastanza da essere mantenibile e facile da usare è esattamente l'insieme di vincoli che REST introduce, che neutralizza efficacemente i SOAP benefici lasciandoti con solo i suoi lati negativi. Potresti creare un'API semplificata con SOAP, ma non sarebbe mai così facile da usare come REST, quindi in pratica tutti scelgono REST.


4
Il buon vecchio dibattito sulla tipizzazione statica contro la dinamica, yay: D Pulito e duro contro caotico e semplice, la guerra che non finisce mai.
Luaan,

@Luaan ... e la dinamica vince sempre per lo scambio di dati. youtube.com/watch?v=ROor6_NGIWU
Jared Smith il

6
@JaredSmith Non sono molto d'accordo. Si presume che i contratti vengano seguiti, quindi entrambi gli endpoint mappano correttamente i dati, se è possibile farlo attraverso la pubblicazione di metadati anziché pagine di documentazione soggette a errori, perché non dovresti?
drake7707,

1
Il REST pratico è un protocollo; La tesi e la religione sono "stile architettonico". Questa risposta confronta correttamente il riposo pratico con il sapone pratico.
bmargulies,

1
La tua risposta ha già mostrato che non capisci REST e il tuo commento lo sottolinea.
Paul Wasilewski,

5

Non è possibile confrontare REST e SOAP. REST è uno stile architettonico mentre SOAP è un protocollo.

Sfortunatamente, REST è diventato colloquiale, sinonimo di servizio HTTP RESTful, il che significa una realizzazione dell'architettura in stile REST con HTTP come protocollo (applicazione).

REST si basa sui seguenti principi (vincoli ed elementi) (tra parentesi la realizzazione in RESTful HTTP) [1] .

  • Stateless (HTTP è un protocollo stateless)
  • Risorsa (identificata dagli URI)
  • Interfaccia uniforme (metodi HTTP)
  • Rappresentazione (MIME-TYPE)
  • HATEOS (collegamenti ipertestuali)
  • Cache (cache HTTP)

Dall'altro lato molte persone intendono dire SOAP un servizio web basato su WSDL e SOAP che fanno parte dell'architettura del servizio web W3C [2] .

  • SOAP viene utilizzato come protocollo per lo scambio di informazioni (fondamentalmente nome del metodo, parametri, valori di ritorno, tipi di dati, ...).
  • WSDL un linguaggio di definizione dell'interfaccia per descrivere il servizio web.

Qual è il significato attuale di SOAP *?

SOAP è uno standard W3C ed è utilizzato come formato di scambio di informazioni nei servizi Web W3C. Tali servizi web erano - specialmente durante l'hype delle SOA (architetture orientate ai servizi) intorno al 2008 (+ - 3 anni) - e (purtroppo) sono ancora implementati principalmente nelle applicazioni aziendali.

Questo ha diverse ragioni. All'epoca RESTful HTTP non era ben noto ed era frainteso. Sfortunatamente, è ancora frainteso dare un'occhiata alle altre risposte

„[...] REST è molto più limitato di SOAP [...].“

„Lo scopo principale di REST è rappresentare le risorse su Internet [...].“

Inoltre, SOAP (e WSDL) fanno parte dello stack del protocollo del servizio Web W3C che fornisce ancora più standard per l'implementazione di un servizio Web.

Le persone stanno ancora sviluppando nuove API basate su SOAP o ora è per lo più un'eredità?

Quindi sì, ci sono ancora e ci saranno anche nei sistemi futuri là fuori che stanno usando SOAP (almeno nei sistemi aziendali, per lo più dietro le porte). Ma la maggioranza sta cercando di fare una sorta di "RESTO" al giorno d'oggi.

Qualcuno può correggermi se sbaglio su questa differenza tra SOAP e REST?

Dire che REST è un'architettura stateless più flessibile per il trasferimento dei dati non è una buona spiegazione. Semplicemente parlato REST è uno stile di architettura con vincoli ed elementi specifici. Mentre SOAP è un protocollo di scambio di informazioni.

Come ho già scritto, non puoi confrontarli. Ma è possibile confrontare un servizio Web HTTP RESTful con un servizio Web SOAP / WSDL.


"Ma puoi confrontare un servizio Web HTTP RESTful con un servizio Web SOAP / WSDL." Ma è quello che chiede l'OP. Qualcuno ha ancora risposto?
RoboJ1M,
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.