Disposizione del servizio Web basato su REST

3

Sto progettando un sistema che verrà eseguito online con Microsoft Windows Azure. Un componente è un servizio Web basato su REST che sarà in realtà un wrapper (che utilizza un modello proxy) che chiama i servizi Web REST di un business partner, che ha a che fare con lo storage BLOB (nota: non stiamo utilizzando la memoria blu). La maggior parte delle funzionalità richiede una richiesta, chiama il servizio web del nostro partner, riceve la richiesta e la restituisce al client.

Ci sono una serie di ragioni per farlo, ma una delle più grandi è che supporteremo tre client: la nostra applicazione desktop (win e mac), le app mobili (iOS) e un front-end web. Avere un'unica API che inviamo al nostro partner ci protegge se quel partner cambia mai.

Desidero che il nostro servizio supporti sia JSON che XML per il formato di trasferimento dei dati, JSON per il web e probabilmente XML per desktop e mobile (abbiamo già un parser XML in quei prodotti). Il nostro partner supporta anche entrambi questi formati.

Stavo pensando di utilizzare ASP.NET MVC 4 con l'API Web. Mentre progetto questo, la cosa che mi preoccupa è il controllo statico del tipo di C #. Cosa succede se il partner aggiunge o rimuove elementi dai dati? Probabilmente possiamo codificarci in modo difensivo, ma sento ancora qualche preoccupazione. Inoltre, dobbiamo fare una buona quantità di codice noioso, configurare la nostra API e poi girarci e chiamare l'API del nostro partner. Probabilmente non c'è molta scelta su di esso però. Ma, nel profondo della mia mente, mi chiedo se forse un linguaggio più dinamico sarebbe una scelta migliore.

Voglio raggiungere e vedere se qualcuno ha dovuto farlo prima, quali soluzioni tecnologiche hanno usato (non sono collegato a questo, in questi giorni Azure può ospitare altre tecnologie), e se qualcuno ha fatto qualcosa del genere può segnalare eventuali problemi emersi. Grazie!

La ricerca del problema sembra trovare solo soluzioni che si concentrano sulla connessione di un servizio Web SOAP su un server proxy, e non su ciò a cui mi riferisco qui.

Nota: Cross pubblicato (per suggerimento) da link

Grazie!

    
posta PaulPerry 13.08.2012 - 17:52
fonte

2 risposte

1

Anche se dici che non è quello che ti serve. La tua domanda suggerisce di non creare un servizio web, ma di utilizzare un proxy inverso sul loro webservice. Qualsiasi accesso passerà attraverso il tuo proxy inverso che potresti reindirizzare a piacimento.

In alternativa puoi fare un po 'di base per le loro risposte, avvolgere il loro XML o JSON nel tuo. Non avresti bisogno di guardare l'XML o il JSON o essere influenzato dalle modifiche nel suo schema.

D'altra parte, se dovessi passare a un altro servizio partner. Pensi che i loro dati sembreranno esattamente gli stessi? I tuoi clienti sarebbero in grado di lavorarci senza modifiche?

Potresti utilizzare il servizio 'wrapper' come facciata per assicurarti che i dati forniti siano conformi alla struttura definita. In una configurazione del genere non si dovrebbe automaticamente passare attraverso qualsiasi campo possa aggiungere un partner. Il tuo webservice renderebbe un partner webservice conforme a un determinato contratto. Protegge fondamentalmente i programmi client da modifiche impreviste.

Ovviamente potresti aggiungere un po 'di tasche di coppie chiave-valore qua e là se ha senso (i dati sono dinamici). Non è necessario un linguaggio di programmazione dinamico per questo.

    
risposta data 14.08.2012 - 08:26
fonte
0

Ho creato un rest service service wrapper o due.

Non dovresti davvero preoccuparti dei campi di aggiunta dei partner - la serializzazione si muoverà oltre con facilità nella maggior parte dei casi. Bene, a meno che non ti spari al piede e inizi a utilizzare la convalida dello schema sui rendimenti del tuo partner. La rimozione dei campi non causerà un arresto anomalo al momento dell'importazione nella maggior parte dei casi, ma può causare alcuni effetti interessanti lungo la linea. L'unico problema di arresto anomalo è se il tuo partner inizia a cambiare tipo su di te, ad esempio decidere che un identificatore è in realtà una stringa e non un intero. Detto questo, è abbastanza ben compreso come utilizzare le API di versione nel 2012. A meno che non si sia facebook, non si cambiano casualmente le cose sul proprio partner. Se il blob storage è uno dei 3 candidati probabili, mi aspetterei che l'API sia quasi scolpita nella pietra: ci sono abbastanza clienti in libertà per quelli che non potrebbero cambiare senza rovinare qualche milione di giorni da hipsters.

Detto questo, come vorrei creare un sistema di allerta precoce per questo tipo di scenari sarebbe quello di scrivere la mia libreria di wrapper in modo test-driven, assicurandomi di coprire le parti di deserializzazione molto bene e con dettagli a grana fine. Quindi utilizzare un server CI per eseguire automaticamente i test di servizio su detta libreria ogni altra ora circa. Se i test sono buoni, avrai una buona idea di cosa è cambiato, quando e come fa male e forse come risolvere.

Ma davvero non mi preoccuperei di questo troppo dato una buona strumentazione e una gestione degli errori nel tuo prodotto.

    
risposta data 13.09.2012 - 12:24
fonte

Leggi altre domande sui tag