176 messaggi dal 04 giugno 2007
Contributi | Blog
Cristian,

il tuo post è eloquente, ma glissa su alcuni aspetti della realtà dei web service che sono di fatto alla radice del declino di SOAP, soprattutto su servizi mainstream.

Le tue considerazioni sono perfettamente condivisibili se ti metti dalla parte del consumatore di un servizio. Soprattutto se hai a disposizione tool evoluti come Visual Studio che generano decine di linee di boilerplate code per te, è molto semplice ridurre l'utilizzo di un web service SOAP a due linee di codice: crea il proxy, istanzia il proxy.

Facciamo un fast-forward e passiamo a cosa succede quando esce la versione 2.0 del servizio, oppure quando semplicemente devi correggere un baco nel servizio stesso.
Supponiamo per esempio che un parametro intero debba passare da 32 a 64 bit. Niente di drammatico - il cambiamento è perfettamente compatibile con la versione passata.
Grazie a SOAP e al suo strong typing però, il WSDL non è più lo stesso, quindi tutti i client che si basavano sull'interfaccia con l'Int32 non possono usare quella nuova (funzionalmente compatibile) con un Int64. L'unica scelta come fornitore del servizio è tenere entrambi i servizi in vita side-by-side, magari con della logica di thunking che almeno unifichi l'esecuzione.

Dal punto di vista del service provider, SOAP è un incubo. Ti trovi a dovere supportare molto rapidamente una miriade di major e minor versions o a dovere fare degli hack orrendi per incastrare in un dato WSDL cose che non erano lontanamente previste.
Tutto questo con REST sparisce - da cui la sua crescente popolarità.

Che poi il Web 2.0 sia una colossale minestra riscaldata (si faceva AJAX già nel 2000 anche se allora non aveva il nome fico, e REST/XML si chiamava XML over HTTP ) è un fatto. Quello che c'è di nuovo è la consapevolezza di utilizzare le tecnologie insieme in un modo più organico.

Saluti

--Alessandro
Ciao, grazie per la risposta, mi fa piacere potermi confrontare con altre persone con altre esperienze

Il versioning è sicuramente un problema che va gestito fin dalla definizione della prima versione di un servizio. Dal punto di vista degli schema XSD si possono prevedere ulteriori attributi o elementi, in modo che chi consumi la prima versione di un servizio possa tranquillamente ignorare i dati proveniente dalla seconda versione.
In questo modo puoi preparare i client e mantenere la retrocompatibilità senza mantenere in vita due servizi, mentre con REST tutto questo è indefinito e lasciato nelle mani di chi rilascia la documentazione.
Nell'esempio che hai posto di upgrade del tipo, in realtà non capisco il problema. E' vero che lo schema xsd cambierebbe, ma i vecchi client continuerebbero a funzionare, anche con il nuovo servizio, poiché in SOAP non c'è descrizione del tipo, diversamente dal vecchio RPC.
In caso di downgrade ci potrebbe essere un potenziale problema sulla dimensione del tipo, ma questo anche in caso di REST perché dovresti controllare il tipo e comportarti in due modi diversi; non sarebbe comunque molto diverso dal mantenere in vita due servizi.

Io sto solo dicendo di usare soap, wsdl e ws-* che sono metodologie, standard e contratti, ma in fondo quello che si fa e che passa sul cavo è pur sempre un REST+POX

Ciao

Il mio blog
Homepage
176 messaggi dal 04 giugno 2007
Contributi | Blog
Vorrei poterti dare l'esempio pratico che ci ha fatto impazzire recentemente - purtroppo devo aspettare ancora qualche mese...
Il problema critico di SOAP è il suo strong typing.
Gli standard WS-* sono belli in teoria, ma a parte quelli più semplici, pochi li usano perché le implementazioni sono molto parzialmente compatibili.

Non è l'unico - un altro dei problemi più divertenti che abbiamo avuto nel passato è il supporto nei tool.

Prendi per esempio gli attributi di tipo List in XSD. In VS se usi C# tutto bene. Ma già se usi C++ sei nei guai - la code generation fallisce. Anche xsd.exe rifiuta quel WSDL (valido in teoria).
Per non parlare di tutti i tool in Java o altre piattaforme non MS.

Se vuoi toccare il problema con mano, basta che punti al WSDL della generazione corrente delle Live Search API (http://soap.search.msn.com/webservices.asmx?wsdl e provi direttamente.

C'è un'altra grossa differenza: costruire la chiamata tramite i parametri di un URL è molto più semplice che costruire un'intera struttura in XML in una request. Per non parlare della prolissità - SOAP è inutilizzabile in ogni scenario dove la banda passante sia critica (per esempio i telefonini).

Saluti

--Alessandro
Lunge da me dire che le specifiche siano complete e neanche gli strumenti  Concordo con te e nella mia esperienza ho avuto difficoltà nel momento in cui dovevo dialogare con altri framework php o java. Le incomprensioni non mancano, ma ne ho avute ancor di più quando mi son ritrovato con sistemi custom, dalla documentazione incompleta e soprattutto non ottimali.
E' per questo che io comunque preferisco fare affidamento e partire da certi standard.

Riconosco l'esigenza di poter avere il controllo totale di quello che si sta facendo e REST da questo punto di vista è perfetto. Devi occuparti di ogni aspetto di conversione, sicurezza ecc, però anche in questo caso preferisco usare un framework come WCF perché posso modificare solo parti del messaggio, o gestirlo interamente, oppure non per forza rappresentare l'xml infoset come testo.

In effetti l'xml come testo è prolisso, ma non penso che quella struttura complessa che c'è nel wsdl che hai linkato tu la voglia passare in querystring, sarebbe molto più complicato creare i parametri e inoltre subentrerebbero limiti nella richiesta GET.

Ci tengo a sottolineare che secondo me fare una richiesta al motore di ricerca passando "search?q=cosa cercare" va benissimo, ma nel momento in cui serve qualcosa di più passerei a SOAP.

Ciao

Il mio blog
Homepage
176 messaggi dal 04 giugno 2007
Contributi | Blog
Questo è un punto sul quale sono completamente d'accordo.
Il problema non è il formato di serializzazione, è l'infrastruttura che lo usa.

WCF è molto versatile perché va al di là del protocollo su cui si basa.

Il problema è che non ci sono troppi framework con quel livello di sofisticazione, e soprattutto quando devi interoperare con sistemi diversi, scegliere oculatamente il formato on the wire diventa importante.

SOAP ha alcuni vantaggi, ma anche grossi problemi, come abbiamo già discusso. REST è un'alternativa di moda e efficace in molti ambiti.
L'ideale per un servizio veramente versatile è offrirli entrambi (magari aggiungendo anche la serializzazione in JSON)


Saluti

--Alessandro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.