2012-01-24 13 views
15

Ottengo i vantaggi di cambiare URL di collegamento, ma questo non è davvero ciò che riguarda questa domanda.REST vs SOAP evolvability

Ciò che intendo per evolvibilità è l'aggiunta di nuove funzionalità a un servizio o la modifica (quando possibile) di quelle esistenti e in realtà è così.

SOAP non è così male come la comunità REST tende a parlarne quando si tratta di evolvibilità. Ad esempio:

  1. In REST è possibile aggiungere nuovi SOA rel-in che è possibile aggiungere un nuovo metodo. Entrambi i tipi di vecchi client continueranno a funzionare con nuovi servizi.
  2. In REST possiamo aggiungere un nuovo campo modulo e impostare il suo valore predefinito - nel SOAP potremmo avere argomenti di servizio come una classe ServiceArgs e aggiungere un nuovo campo a ServiceArgs. È brutto, ma funziona.

Quali sono gli esempi di evolvibilità quando i client SOAP si interrompono e non è possibile fare nulla al riguardo, mentre i client REST gestiscono la situazione con garbo?

Grazie!

risposta

18

SOAP è una tecnologia basata su contratto. L'intera interazione client/server è scritta e codificata in un grande documento (lo WSDL) e deve essere concordata e onorata da entrambe le parti per far funzionare le cose. Se una delle due parti decide di aggiungere funzionalità, l'altra parte deve "evolversi" in blocco con essa. Entrambe le parti sono completamente accoppiate, unite sul fianco, incollate insieme, sposate, per sempre.

L'approccio tipico per migliorare i servizi SOAP è creare nuovi documenti WSDL per le nuove versioni del servizio, mantenendo anche quelli più vecchi. Un'altra tecnica è creare una nuova interfaccia per contenere nuovi metodi ed ereditare da quella vecchia. L'approccio che descrivi al primo posto è IMO che rompe le regole SOAP, perché il client e il server ora utilizzeranno contratti diversi e funziona solo perché le modifiche additive (come i nuovi metodi) possono essere inserite nella cornetta e il più delle volte le cose funzioneranno Nel momento in cui qualcuno commuta una modifica distruttiva, il contratto del cliente non corrisponderà al server ed è finito. È un processo difficile da gestire, motivo per cui la maggior parte delle organizzazioni decide di creare un WSDL completamente nuovo per ogni nuova versione dell'API.

REST non risolve magicamente tutti questi problemi, ma semplifica la gestione di non costringendo a raggruppare il "contratto" dell'intero sistema distribuito in un unico articolo. Stai usando HTTP? Bene, allora puoi usare tutte le meravigliose funzionalità HTTP che il web usa anche: server proxy, URL, negoziazione del contenuto, autenticazione, ecc. Vuoi comunicare usando la codifica JSON e XML? Staccati. È semplice da fare in REST in qualsiasi momento, senza influire sui client esistenti. Vuoi sicurezza? Bene, inizia a sfidare le credenziali autenticate usando il supporto integrato di HTTP esattamente per questo. Tutte queste cose (HTTP, JSON, ecc.) Sono standardizzate e descritte in posti diversi e questo è esattamente come dovrebbe essere.

SOAP combina il protocollo di trasmissione, le informazioni sulla posizione, la descrizione del carico utile, la scelta della codifica e i metodi RPC in un unico documento ginormous. Se vuoi apportare qualche modifica a qualcosa in quella lista, hai bisogno di un nuovo documento. Peggio ancora, alcune di quelle cose non possono essere cambiate affatto.

REST separa queste cose in modo che i pezzi possano evolvere in modo indipendente. I tuoi URL (o "URI", per essere più precisi) vengono restituiti in fase di runtime e supponendo che il client doesn't start to hardcode them sia evolvibile senza alcuna modifica necessaria al client. Le modifiche aggiuntive ai tuoi tipi di media sono banali se la tua documentazione chiarisce che nuovi campi potrebbero apparire in futuro. Hai anche la possibilità di versionare i tuoi tipi di media, permettendo la coesistenza di v1/v2/v3 ... tipi di media nel tuo sistema, e il client può scegliere (usando le intestazioni Accept e Content-Type in HTTP) quale loro vogliono usare.

Hai mai sentito la battuta sul proprietario della Porsche che acquista una macchina nuova ogni volta che il posacenere si riempie? Questo è SAPONE. Quello che dovrebbe essere un cambiamento banale richiede una revisione profonda. REST ti dà l'aspirapolvere. Non devi usarlo, ma è sicuramente più economico.

+1

Grazie per la risposta estesa. Chiaramente i servizi SOAP sono meno evolutivi di quelli RESTful. Tuttavia SOAP consente un certo grado di evolvibilità. Non è possibile modificare il formato e alcune altre cose, ma è possibile aggiungere metodi e argomenti (con un piccolo trucco sopra descritto). Come dici tu, ciò violerà le regole SOAP, ma è importante? Funziona. Inoltre dici che quando qualcuno apporta una modifica distruttiva a un servizio SOAP è game over. Vale anche per i servizi RESTful. Se si effettua una modifica distruttiva a un tipo di supporto e un client non riesce a trovare un collegamento, si aspetta che sia anche kaput. –

+3

Re: aggiunta di metodi alle interfacce SOAP (il "trucco"): sì, funziona ma funziona a causa della fortuna, non della progettazione. È essenzialmente una tecnica non supportata. Con REST, la tua architettura può evolversi perché l'evoluzione è fondamentale per REST, non proibita a livello di base come con SOAP. Ri: modifiche distruttive - corrette su entrambi i conti. Non è qualcosa che qualsiasi cliente programmatico può gestire magicamente. –