introduction à errest
DESCRIPTION
Une présentatiTRANSCRIPT
MONTREAL 1/3 JULY 2011
ERRest: mais qu'est-ce que c'est?Pascal RobertMacTI
REST?? (non non, pas Rest In Peace)
REST?
• REST veut dire : Representational State Transfer (hein?)
• C'est un style d'architecture, ce n'est pas un protocole
• Utilisation à fond la caisse du protocole HTTP
• Le format peut être n'importe quoi (XML, JSON, Plist)
• Comme une Direct Action, mais mieux structuré
• Sans état (« stateless »)!
Méthodes
Méthode HTTP ActionGET Obtenir (« fetch »)
POST Créer (« create »)
PUT Mettre à jour (« update »)
DELETE Effacer
TRACE/OPTIONS/HEAD Méta-données
Exemples d'URL
• GET /ra/membres.json
• GET /ra/membres/2.json
• POST /ra/membres.json
• PUT /ra/membres/2.json
• DELETE /ra/membres/2.json
Exemples de MAUVAIS URLs
• GET /ra/membres/2/delete.json
• POST /ra/membres/2.json
Actions supplémentaires
• On ajoute le nom de l'action à la fin.
• Normalement, ce sont que des méthodes GET
• Exemples:
• GET /ra/membres/2/autreListe.json
• PUT /ra/membres/2/sousObjet.json
Méta-données
• On utilise les entêtes HTTP (y compris les cookies)
• Exemple:
Content-Language: fr-fr
X-Batch: 0-99
Paramètres
• Utilisation de paramètres pour filtrer une méthode GET? On peut utiliser les paramètres de requêtes (« query arguments »).
• Exemple:
GET /ra/membres.json?batch=2&batchSize=20
WebObjects et REST
ERREST
• Canevas ajouté à Project Wonder en 2009.
• Basé sur le style de RoR.
• Formats disponibles sont Plist, Plist binaire, JSON et XML.
• Fait beaucoup de travail à notre place.
Architecture de ERREST
• Offre un « request handler » unique.
• ERREST fonctionne avec des routes et des controlleurs.
• Basé sur les entités EO.
REST Request Handler
• Est un nouveau « request handler » (/ra)
• Gère les requêtes pour /ra/* et enregistre les routes.
• Exemple tout simple:ERXRouteRequestHandler restRequestHandler = new ERXRouteRequestHandler();
restRequestHandler.addDefaultRoutes(Member.ENTITY_NAME);
ERXRouteRequestHandler.register(restRequestHandler);
Route
• Une « route » est l'URI de la représentation de l'objet.
• Elle indique aussi quel controlleur utilisé
• ... et la méthode à appeler.new ERXRoute(Presentation.ENTITY_NAME,"/call-for-papers/{presentation:Presentation}/edit", PresentationsController.class, "updatePaper")
Controlleurs
• Comme dans le modèle MVC.
• Est le lien entre les routes, l'entité et les méthodes.
• Doivent hériter de ERXRouteController ou ses dérivés.
Controlleur de base
• ERXDefaultRouteController offre les méthodes de base pour les opérations courantes (GET, POST, PUT, DELETE)
• L’enregistrement des routes se fait avec un seul appel:
ERXRouteRequestHandler.addDefaultRoutes(NomEntite)
Formats
• Format par défaut est XML
• Autres formats supportés: JSON, HTML, Plist, SproutCore, Rails
• Peut être modifié par controlleur@Override
protected ERXRestFormat defaultFormat() { return ERXRestFormat.json(); }
Key Filters
• Les « filtres par clés » sont la liste des attributs entrée/sortie.
• Utilisation de ERXKey et ERXKeyFilter.
• Clés en sortie peuvent être différentes que celles en sortie.
Relations 1:N
• Ne sont pas ajoutés par défaut par ERXKeyFilter.filterWithAttributesAndToOneRelationships()
• Il faut utiliser withAllRecursive ou faire:ERXKeyFilter filtreDeRelation = ERXKeyFilter.filterWithAttributes();
ERXKeyFilter filtreDeSource = ERXKeyFilter.filterWithAttributes();
filtreDeSource.include(Source.RELATION, filtreDeRelation);
Paramètres de requêtes
• Pour une requête GET, permet de filtrer la réponse
/ra/membres.json?batch=2&batchSize=20
• ERXFetchSpecification supporte les paramètres suivants:
• batchSize
• batch
• sort
• qualifier
POJO
• Support POJO (bref, non-EO) est disponible dans ERRest.
• Vous devez créer un délégué qui hérite de ERXAbstractRestDelegate.
• Convention: si nom du délégué est <NomClass>RestDelegate.java, sera automatiquement enregistré.
Alias
• On peut renommer des noms d'entités ou d'attributs.
• On utilise ERXRestNameRegistry.setExternalNameForInternalName:
• ERXRestNameRegistry.registry().setExternalNameForInternalName("Pet", "Animal");
Authentification
• Plusieurs solutions:
• Session (mais disponible que pour une seule instance)
• Token
• OpenID
• Basic ou Digest
• Cookies (pour clients HTML)
Routage HTML
• Permet d'utiliser des composantes WO si format demandé est HTML.
• Utilise pour créer des petites applications « stateless ».
• Plus nécessaire de créer un paquet de DirectActions.
• Mêmes routes pour routage HTML que pour requêtes JSON/XML/etc.
Routage HTML
• Les composantes doivent implémenter IERXRouteComponent.
• Doit nommer les composantes « NomEntiteActionPage ».
• Exemples:
• MonEntiteIndexPage
• MonEntiteCreatePage
• MonEntiteDestroyPage
• Vous pouvez aussi retourner des pages avec pageWithName.
Exemple
Resources
• http://www.slideshare.net/wocommunity/errest
• http://www.slideshare.net/wocommunity/er-rest-designinggoodapi
• http://www.slideshare.net/wocommunity/errest-and-dojo
• http://www.wocommunity.org/podcasts/wowodc/2010/ERRest.mov
• http://webobjects.mdimension.com/wonder/screencasts/ERRest-2010-02-16.mov
• http://wiki.objectstyle.org/confluence/display/WONDER/ERRest+Framework
• RESTful Web Services Cookbook (OReilly)
• REST in Practice (OReilly)