WCF Data Services (OData) Vs API Web ASP.NET? Hypermedia?

12

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

Ciò che mi piaceva di OData erano le funzionalità di interrogazione e hypermedia URI che ottieni gratuitamente. Ciò che non mi piaceva era la verbosità del carico utile OData; un sacco di personaggi non necessari che arrivano sul filo.

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

Quindi ho due domande:

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

2) Si prevede che l'API Web supporti nativamente i hypermedia per il tempo di rilascio o ci siano implementazioni o esempi prontamente disponibili che dovrei esaminare?

Grazie!

    
posta Raymond Saltrelli 01.03.2012 - 18:08
fonte

3 risposte

2

Web API fa odata. Vedi post sul blog di Scott Guthrie . In particolare:

Query composition: Web API enables you to easily support querying via the OData URL conventions. When you return a type of IQueryable from your Web API, the framework will automatically provide OData query support over it – making it easy to implement paging and sorting.

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

    
risposta data 01.03.2012 - 18:38
fonte
2

L'API Web sfrutta il protocollo http in modo più nativo. Odata è uno standard aperto abbracciato da molti dei grandi giocatori. Posso solo parlare della mia esperienza int lavorando con Odata e di recente scoprendo API Web e facendo qualche ricerca.

OData è bello perché è uno standard attuale. È possibile creare facilmente un database ed esporlo tramite HTTP. Ciò significa che è possibile attraversare la struttura della tabella senza alcuna configurazione (lo dico in modo approssimativo). Puoi anche eseguire query tramite l'URL che può includere un leggero LINQ:

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

Questo è discutibilmente buono o cattivo. L'autenticazione è standard e costruita.

Le API Web sono più interessanti dal mio punto di vista. Ha utilizzato la funzionalità HTTP (messaggi di errore, ecc.) Ed è un po 'più "nativo" per le vere richieste RESTful. Non l'ho mai giocato troppo .. Ma ho letto e ho sentito "sentito" che MVC e Web API potrebbero essere "sposate" un giorno, ancora, forse buone forse cattive ...

Quando stavo giocando con OData, ho creato un Stored Proc, lo ho mappato nella superficie dell'entità, ho configurato un tipo di ritorno strong e poi l'ho collegato a una richiesta URL e BANG, c'è la mia richiesta RESTful mappata al risultato digitato memorizzato proc. Era abbastanza semplice, e sono stato in grado di ottenere esattamente quello di cui avevo bisogno.

In conclusione Non ho avuto la possibilità di giocare con le API di WCF in modo troppo dettagliato, ma direi che è il modo di procedere allo sviluppo dei client poiché è più un approccio purista a REST. Se stai andando a fare più o meno "dirette" chiamate avanti e indietro e recuperando "Visualizza modelli", fornirà un'interazione più nativa.

D'altra parte. Se farai query complesse (ish) sui dati in base all'interazione con il cliente e vuoi "costruire" la logica della query e passarla come parametro, allora Odata potrebbe funzionare.

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

Se desideri richieste RESTful in cui stai dettando l'URL (/ prodotti / ordini / 22 e creando complessi "set di risultati" dal tuo codice gestito "nascosto" e dalla struttura dati E potresti anche trarre vantaggio dai messaggi di risposta HTTP , quindi l'API Web sarebbe probabilmente la migliore scommessa ..

di nuovo, tutto questo è frutto della ricerca e del gioco. Non ho implementato nessuno scenario di produzione / in piena regola. Penso che entrambi avranno i loro punti di forza e di debolezza, e c'è sicuramente qualche sovrapposizione

    
risposta data 01.03.2012 - 18:42
fonte
2

Dal punto di vista ipermediale sicuramente API Web. OData, che è basato su AtomPub, è solo un modo per esporre un database usando HTTP, si ottiene solo un set limitato di trasferimenti di stato predefiniti (CRUD). D'altra parte, un servizio ipermediale è come un'applicazione, fatta su misura per il cliente. 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 Microsoft è ASP.NET MVC, se sei disposto a utilizzare l'HTML come formato di base.

    
risposta data 02.03.2012 - 03:48
fonte

Leggi altre domande sui tag