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