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