WCF Data Services (OData) rispetto all'API Web ASP.NET? Hypermedia?


12

Sto progettando un'applicazione distribuita che consisterà in servizi REST e una varietà di client (Silverlight, iOS, Windows Phone 7, ecc.). Ero pronto a decidere che avrei implementato i miei servizi REST usando WCF Data Services (OData) ma ora l'API Web MVC 4 mi ha fatto mettere in dubbio quella decisione.

Quello che mi è piaciuto di OData sono state le funzionalità di query URI e hypermedia ottenute gratuitamente. Quello che non mi è piaciuto è stata la verbosità del payload OData; un sacco di personaggi non necessari che arrivano sul filo.

Quello che mi piace dell'API Web è che i payload sono molto più concisi e ha la capacità di interrogazione URI di OData, tuttavia sembra che manchi hypermedia (almeno pronto per l'uso). Il mio capo sta anche spingendo per l'API Web perché "i poteri di Microsoft lo supportano e OData non ha ottenuto trazione".

Quindi ho due domande:

1) Qualcuno può commentare il supporto / la trazione dell'API Web e OData?

2) L'API Web dovrebbe supportare l'hypermedia in modo nativo al momento del rilascio o ci sono implementazioni o esempi standard che dovrei esaminare?

Grazie!


2
Buone risposte per la domanda 1 finora. Qualcuno ha qualche idea sulla mia seconda domanda?
Raymond Saltrelli,

Non me ne sono reso conto, e ho visto il termine, ma non sono sicuro di cosa sia l'hypermedia in senso tecnico - hai un link?
Wyatt Barnett,

2
Fondamentalmente, hypermedia nel contesto di REST significa "carico pigro". Ad esempio, se la richiesta a un servizio REST restituisce un oggetto che ha un riferimento a un altro oggetto, tali riferimenti vengono rappresentati come collegamento nel documento XML anziché includere l'oggetto a cui viene fatto riferimento nella sua interezza. Se vuoi informazioni sull'oggetto referenziato, segui semplicemente il link. dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

1
Un'altra buona descrizione dell'ipermedia rispetto al REST. timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

Risposte:


2

L'API Web esegue odata. Vedi il post sul blog di Scott Guthrie . In particolare:

Composizione delle query: l'API Web consente di supportare facilmente le query tramite le convenzioni URL OData. Quando si restituisce un tipo di IQueryable dall'API Web, il framework fornirà automaticamente supporto query OData su di esso, semplificando l'implementazione di paging e ordinamento.

Penso anche che in molti casi la stessa classe potrebbe essere la classe WCF tradizionale e la classe API Web, non si escludono a vicenda.


2

L'API Web sfrutta il protocollo http in modo più nativo. Odata è uno standard aperto abbracciato da molti grandi giocatori. Posso solo parlare della mia esperienza intenta a giocare con Odata e di recente a scoprire API Web e fare qualche ricerca.

OData è interessante perché è uno standard reale. È possibile creare facilmente un database ed esporlo su HTTP. Ciò significa che puoi attraversare la struttura della tabella senza alcuna configurazione (lo dico liberamente). Puoi anche eseguire query tramite l'URL che può includere alcuni LINQ chiari:

/products/orders/[put some linq-ish query here]

Questo è probabilmente buono o cattivo. L'autenticazione è standard e l'ha costruita.

API Web, è più interessante dal mio punto di vista. Ha utilizzato la funzionalità HTTP (messaggi di errore, ecc.) Ed è un po 'più "nativo" rispetto alle richieste RESTful reali. Non ci ho mai giocato troppo .. Ma ho letto e ho "sentito" che MVC e Web API potrebbero essere "sposati" un giorno, ancora, forse bene forse male ...

Quando stavo giocando con OData, ho creato un Proc memorizzato, mappato nella superficie dell'entità, configurato un tipo di ritorno forte e quindi collegato a una richiesta URL e BANG, c'è la mia richiesta RESTful mappata al mio proc memorizzato risultato tipizzato. È stato abbastanza semplice e sono stato in grado di ottenere esattamente ciò di cui avevo bisogno.

In conclusione, non ho avuto la possibilità di giocare con l'API WCF in troppi dettagli, ma direi che è la strada da percorrere per lo sviluppo del client poiché è più un approccio purista al REST. Se effettuerai più o meno chiamate "dirette" avanti e indietro e recupererai "Visualizza modelli", fornirà un'interazione più nativa.

D'altro canto. Se eseguirai query complesse (ish) sui dati in base all'interazione del client e desideri "costruire" la logica della query e passarla come parametro, Odata potrebbe funzionare.

Il modo in cui lo guardo è se devo esporre i miei dati in un formato strutturale (che significa tabella / struttura delle relazioni) e quindi interrogarli direttamente da un client, quindi Odata funzionerà meglio. È anche utile per consentire ad "Altri" di accedere ai dati (con un'autorizzazione adeguata, ecc.) Ed è per questo che aderiscono al protocollo OData

Se desideri richieste RESTful in cui stai dettando l'URL (/ products / ordini / 22 e creando "set di risultati" complessi dal codice gestito e dalla struttura dei dati "nascosti" E potresti anche trarre vantaggio dai messaggi di risposta HTTP, allora il L'API Web sarebbe probabilmente la soluzione migliore.

ancora una volta, questo è tutto dalla ricerca e giocando. Non ho implementato neanche in uno scenario di produzione / app completo. Penso che entrambi avranno i loro punti di forza e di debolezza, e c'è sicuramente qualche sovrapposizione


2

Dal punto di vista ipermediale sicuramente API Web. OData, basato su AtomPub, è solo un modo per esporre un database tramite HTTP, si ottiene solo un set limitato di trasferimenti di stato predefiniti (CRUD). D'altra parte, un servizio hypermedia è come un'applicazione, su misura per il client. Con l'API Web è possibile incorporare tutti i collegamenti desiderati, inoltre è possibile utilizzare anche la sintassi della query OData. In realtà, la migliore soluzione hypermedia nello stack di Microsoft è ASP.NET MVC, se si desidera utilizzare HTML come formato di base.


2
Ci sono esempi online su come implementarlo usando l'API Web?
Raymond Saltrelli,


appoggi ancora questa opinione con l'aggiunta di azioni in odata v3 ( odata.org/media/30002/OData.html#actions )?
Chris DaMour,
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.