Bonjour à tous, aujourd’hui dans ce billet nous allons voir et appréhender une nouveauté de MVC 4 qui est les WEB API. Pour faire simple, est le WEB API de MVC4 permet principalement de faire du REST (REpresentational State Transfer) afin de piloter les données envoyées depuis différentes sources :
- le serveur reçoit un requête HTTP (http://mon-site.com/api/GetProducts)
- le serveur traite la demande (base de données, calcul etc…
- le serveur renvoi la requête sous forme XML/JSON au client.
Si vous pratiquez MVC vous ne serez pas dépaysez car WEB Api, est très ressemblant a MVC (“classique”). Et ce réfère a :
- la vue : affichage des données HTML (CSS et JS)
- le contrôleur : traitement serveur de la demande (je le considère comme le chef d’orchestre), et retourne la réponse au client.
- le modèle : la donnée traitée par le contrôleur et renvoyées a la vue pour affichage.
Bien. Vous avez les bases MVC pour continuer sur la partie WEB Api.
Pour WEB Api, on va supprimer la partie Vue / rendu HTML de MVC. Le rendu sera automatiquement fait en XML ou JSON (par défaut) et renvoyé au client. Coté Controller on notera que tous les WEB Api Controller héritent dès a présent de “ApiController”
Routes
Au niveau des routes par défaut WEB Api fonctionne grâce à : (WebApiConfig)routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
Je préconise de changer cet map route en prenant en compte les actions du controller (a l’instar de MVC) :
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
De ce fait vos routes seront plus propre (surtout si vous avez beaucoup d’actions)
HTTP Method
|
URI Path
|
Action
|
Parameter
|
GET | api/produits/GetProducts | GetProducts | (none) |
GET | api/produits/afficheProduit/10 | AfficheProduit | 10 |
Appel Ajax et WinForm (via webclient et Json.Net)
Quelques points remarquable :- Il est préconiser de marquées les méthodes a l’aide des verbs HTTP de manière explicite [HttpGet] (Get*, Post*, Put*, Delete*)
- De ce fait chaque actions est appelées en précisant le verb Exemple : Ajax :
$.ajax({
type: 'POST',
url: '/api/produits/GetProducts', …
webClient.DownloadStringCompleted += (sender, e) =>
{
try
{
this.userData = JsonConvert.DeserializeObject(e.Result);
}
catch (Exception ex)
{
log.Error(string.Format("Erreur lors de la récupération API - ({0}) - ", url), ex);
}
};
webClient.DownloadStringAsync(new Uri('/api/produits/GetProducts'));
Conclusion
- WEB Api s’intègre très rapidement et sans problème a un site MVC (déjà en place)
- Permet de reprendre les éléments de validation classique MVC du type – ValidationAttribute – (Required, Range, MaxLength, RegularExpression, etc …)
- Permet de mettre en place des filtres / interceptor sur les actions (requêtes http)
- Permet de faire des requêtes personnalisées (Iqueryable)
- Personnalisation, il est possible d’etenre les classes pour permettre (entre autre) de s’interfacer avec de l’injection de dépendance (prochain article) Castle Windsor
Pour aller plus loin, quelques sites intéressants :
- http://www.asp.net/web-api, la référence Micosoft ^^
- le très bon et célèbre ScootGuthrie : http://weblogs.asp.net/scottgu/archive/2012/02/23/asp-net-web-api-part-1.aspx
- JSON.Net : http://james.newtonking.com/projects/json-net.aspx (nugget)
Articles en relation :
- Injection de dépendance sur ces controller (ApiController)
Aucun commentaire:
Enregistrer un commentaire