introduction à errest

Post on 19-May-2015

1.170 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Une présentati

TRANSCRIPT

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)

top related