introduction à errest

27
MONTREAL 1/3 JULY 2011 ERRest: mais qu'est-ce que c'est? Pascal Robert MacTI

Upload: wo-community

Post on 19-May-2015

1.169 views

Category:

Technology


0 download

DESCRIPTION

Une présentati

TRANSCRIPT

Page 1: Introduction à ERRest

MONTREAL 1/3 JULY 2011

ERRest: mais qu'est-ce que c'est?Pascal RobertMacTI

Page 2: Introduction à ERRest

REST?? (non non, pas Rest In Peace)

Page 3: Introduction à ERRest

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 »)!

Page 4: Introduction à ERRest

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

Page 5: Introduction à ERRest

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

Page 6: Introduction à ERRest

Exemples de MAUVAIS URLs

• GET /ra/membres/2/delete.json

• POST /ra/membres/2.json

Page 7: Introduction à ERRest

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

Page 8: Introduction à ERRest

Méta-données

• On utilise les entêtes HTTP (y compris les cookies)

• Exemple:

Content-Language: fr-fr

X-Batch: 0-99

Page 9: Introduction à ERRest

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

Page 10: Introduction à ERRest

WebObjects et REST

Page 11: Introduction à ERRest

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.

Page 12: Introduction à ERRest

Architecture de ERREST

• Offre un « request handler » unique.

• ERREST fonctionne avec des routes et des controlleurs.

• Basé sur les entités EO.

Page 13: Introduction à ERRest

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);

Page 14: Introduction à ERRest

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")

Page 15: Introduction à ERRest

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.

Page 16: Introduction à ERRest

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)

Page 17: Introduction à ERRest

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(); }

Page 18: Introduction à ERRest

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.

Page 19: Introduction à ERRest

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);

Page 20: Introduction à ERRest

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

Page 21: Introduction à ERRest

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é.

Page 22: Introduction à ERRest

Alias

• On peut renommer des noms d'entités ou d'attributs.

• On utilise ERXRestNameRegistry.setExternalNameForInternalName:

• ERXRestNameRegistry.registry().setExternalNameForInternalName("Pet", "Animal");

Page 23: Introduction à ERRest

Authentification

• Plusieurs solutions:

• Session (mais disponible que pour une seule instance)

• Token

• OpenID

• Basic ou Digest

• Cookies (pour clients HTML)

Page 24: Introduction à ERRest

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.

Page 25: Introduction à ERRest

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.

Page 26: Introduction à ERRest

Exemple

Page 27: Introduction à ERRest

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)