ciao,
le API non sono un'esclusiva di WCF. Anzi, se la API è destinata ad essere consumata via HTTP come nel tuo caso, sarà più semplice realizzarla con gli strumenti che ASP.NET ti mette a disposizione.
Del resto hai già detto che preferiresti usare la Membership, quindi cerchiamo una soluzione che possa far uso del suo cookie di autenticazione.
Con ASP.NET MVC, ad esempio, puoi far autenticare gli utenti da form sfruttando la Membership (o la
SimpleMembership di MVC4, che ti lascia personalizzare la struttura della tabella utenti).
In base al ruolo dell'utente autenticato, potrai consentirgli o negargli l'accesso a determinate actions (o a interi controllers), mediante l'attributo
Authorize.
Trattandosi di una API, predisporrei un'
Area apposita, così da creare un contenitore logico (es. /api) per ogni operazione che vorrai pubblicare al suo interno. Così sarà anche più facile proteggere l'intera area dall'accesso anonimo grazie ad un filtro
come questo.
Le actions della API dovranno dunque restituire un
JsonResult, affinché sia semplice lato client, con jQuery, trasformarlo in un oggetto javascript ed usarlo per aggiornare l'interfaccia grafica.
Se invece volessi realizzare un'API REST vera e propria, cioè un'API il cui fulcro sono
le risorse (e le operazioni CRUD da compiere su quelle risorse), allora probabilmente userei un
ApiController, anch'esso proteggibile da accesso anomino proprio come un controller normale.
Il vantaggio dell'usare un ApiController è che supporta
sintassi di interrogazione OData, che ti permette, componendo un URL in maniera appropriata, di farti restituire dal server dei risultati filtrati, ordinati e paginati.
Trattandosi di uno standard, alcuni produttori come Telerik e Ingragistics hanno creato dei controlli griglia che implementano quelle funzionalità a livello visuale, senza che tu debba scrivere molto codice.
La libreria
Breeze.js, invece, ti permette di usare una sintassi Linq-like da javascript, che viene tradotta secondo le convenzioni OData per interrogare la tua API REST.
Prova a creare la tua API in uno di questi modi, penso che ti troverai bene.
ciao
Modificato da BrightSoul il 26 aprile 2013 20.02 -