SlideShare une entreprise Scribd logo
MONTREAL 1/3 JULY 2011




ERRest: mais qu'est-ce que c'est?
Pascal Robert
MacTI
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                Action
        GET             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)

Contenu connexe

Tendances

Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
Abdoulaye Dieng
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
Abdelouahed Abdou
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
Stéphane Legrand
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
Kristen Le Liboux
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
Pierre Faure
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
kadzaki
 
Php1
Php1Php1
Jstl
JstlJstl
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
Abdoulaye Dieng
 
Audits php
Audits phpAudits php
Audits php
Damien Seguy
 
Windows xp structure du registre
Windows xp   structure du registreWindows xp   structure du registre
Windows xp structure du registreDICKO Yacouba
 
Php cours
Php coursPhp cours
Php cours
funinformatique
 

Tendances (14)

Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Cours php
Cours phpCours php
Cours php
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Php1
Php1Php1
Php1
 
Jstl
JstlJstl
Jstl
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Audits php
Audits phpAudits php
Audits php
 
NIO 2
NIO 2NIO 2
NIO 2
 
Windows xp structure du registre
Windows xp   structure du registreWindows xp   structure du registre
Windows xp structure du registre
 
Php cours
Php coursPhp cours
Php cours
 

En vedette

WOver
WOverWOver
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
WO Community
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
WO Community
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
WO Community
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
WO Community
 
ERRest in Depth
ERRest in DepthERRest in Depth
ERRest in Depth
WO Community
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
WO Community
 
ERRest - The Next Steps
ERRest - The Next StepsERRest - The Next Steps
ERRest - The Next Steps
WO Community
 
ERRest
ERRestERRest
ERRest
WO Community
 
KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
WO Community
 

En vedette (10)

WOver
WOverWOver
WOver
 
Chaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real WorldChaining the Beast - Testing Wonder Applications in the Real World
Chaining the Beast - Testing Wonder Applications in the Real World
 
Migrating existing Projects to Wonder
Migrating existing Projects to WonderMigrating existing Projects to Wonder
Migrating existing Projects to Wonder
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
ERRest in Depth
ERRest in DepthERRest in Depth
ERRest in Depth
 
Life outside WO
Life outside WOLife outside WO
Life outside WO
 
ERRest - The Next Steps
ERRest - The Next StepsERRest - The Next Steps
ERRest - The Next Steps
 
ERRest
ERRestERRest
ERRest
 
KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
 

Similaire à Introduction à ERRest

Ns python web 1
Ns python web 1Ns python web 1
Ns python web 1
Olivier Rovellotti
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
Mathieu Hicauber
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
BouaggadAmine
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
Club Scientifique de l'ESI - CSE
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
Publicis Sapient Engineering
 
Support de formation : Yahoo! pipes les modules
Support de formation : Yahoo! pipes les modulesSupport de formation : Yahoo! pipes les modules
Support de formation : Yahoo! pipes les modules
Erwan Tanguy
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
halleck45
 
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Yannick Chartois
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
5pidou
 
Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)
Thibaud Vibes
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
Cynapsys It Hotspot
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
RihabBENLAMINE
 
Loucif Redha développement d'applications web - php - my sql
Loucif Redha  développement d'applications web - php - my sqlLoucif Redha  développement d'applications web - php - my sql
Loucif Redha développement d'applications web - php - my sql
Redha LOUCIF
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-to
Damien Cavaillès
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
borhen boukthir
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
rachidimstapha
 

Similaire à Introduction à ERRest (20)

Ns python web 1
Ns python web 1Ns python web 1
Ns python web 1
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
2
22
2
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Drools
DroolsDrools
Drools
 
Support de formation : Yahoo! pipes les modules
Support de formation : Yahoo! pipes les modulesSupport de formation : Yahoo! pipes les modules
Support de formation : Yahoo! pipes les modules
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8Les concepts de la programmation fonctionnelle illustrés avec Java 8
Les concepts de la programmation fonctionnelle illustrés avec Java 8
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)Presentation solr 10 Aout 2011 (french)
Presentation solr 10 Aout 2011 (french)
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
Loucif Redha développement d'applications web - php - my sql
Loucif Redha  développement d'applications web - php - my sqlLoucif Redha  développement d'applications web - php - my sql
Loucif Redha développement d'applications web - php - my sql
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-to
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 

Plus de WO Community

In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
WO Community
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
WO Community
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
WO Community
 
High availability
High availabilityHigh availability
High availability
WO Community
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
WO Community
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
WO Community
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
WO Community
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
WO Community
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
WO Community
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
WO Community
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
WO Community
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
WO Community
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
WO Community
 
WOdka
WOdkaWOdka
ERGroupware
ERGroupwareERGroupware
ERGroupware
WO Community
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRoller
WO Community
 
CMS / BLOG and SnoWOman
CMS / BLOG and SnoWOmanCMS / BLOG and SnoWOman
CMS / BLOG and SnoWOman
WO Community
 
Using GIT
Using GITUsing GIT
Using GIT
WO Community
 
Persistent Session Storage
Persistent Session StoragePersistent Session Storage
Persistent Session Storage
WO Community
 
Back2 future
Back2 futureBack2 future
Back2 future
WO Community
 

Plus de WO Community (20)

In memory OLAP engine
In memory OLAP engineIn memory OLAP engine
In memory OLAP engine
 
Using Nagios to monitor your WO systems
Using Nagios to monitor your WO systemsUsing Nagios to monitor your WO systems
Using Nagios to monitor your WO systems
 
Build and deployment
Build and deploymentBuild and deployment
Build and deployment
 
High availability
High availabilityHigh availability
High availability
 
Reenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWSReenabling SOAP using ERJaxWS
Reenabling SOAP using ERJaxWS
 
Unit Testing with WOUnit
Unit Testing with WOUnitUnit Testing with WOUnit
Unit Testing with WOUnit
 
Apache Cayenne for WO Devs
Apache Cayenne for WO DevsApache Cayenne for WO Devs
Apache Cayenne for WO Devs
 
Advanced Apache Cayenne
Advanced Apache CayenneAdvanced Apache Cayenne
Advanced Apache Cayenne
 
iOS for ERREST - alternative version
iOS for ERREST - alternative versioniOS for ERREST - alternative version
iOS for ERREST - alternative version
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
"Framework Principal" pattern
"Framework Principal" pattern"Framework Principal" pattern
"Framework Principal" pattern
 
Filtering data with D2W
Filtering data with D2W Filtering data with D2W
Filtering data with D2W
 
Localizing your apps for multibyte languages
Localizing your apps for multibyte languagesLocalizing your apps for multibyte languages
Localizing your apps for multibyte languages
 
WOdka
WOdkaWOdka
WOdka
 
ERGroupware
ERGroupwareERGroupware
ERGroupware
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRoller
 
CMS / BLOG and SnoWOman
CMS / BLOG and SnoWOmanCMS / BLOG and SnoWOman
CMS / BLOG and SnoWOman
 
Using GIT
Using GITUsing GIT
Using GIT
 
Persistent Session Storage
Persistent Session StoragePersistent Session Storage
Persistent Session Storage
 
Back2 future
Back2 futureBack2 future
Back2 future
 

Dernier

Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
abderrahimbourimi
 
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptxPRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
AlbertSmithTambwe
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
COURS D'ADMINISTRATION RESEAU SOUS WINDOWS
COURS D'ADMINISTRATION RESEAU  SOUS WINDOWSCOURS D'ADMINISTRATION RESEAU  SOUS WINDOWS
COURS D'ADMINISTRATION RESEAU SOUS WINDOWS
AlbertSmithTambwe
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 

Dernier (9)

Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Les écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptxLes écrans informatiques au fil du temps.pptx
Les écrans informatiques au fil du temps.pptx
 
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptxPRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
PRESENTATION DE L'ACTIVE DIRECTORY SOUS WINDOWS SERVEUR.pptx
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
COURS D'ADMINISTRATION RESEAU SOUS WINDOWS
COURS D'ADMINISTRATION RESEAU  SOUS WINDOWSCOURS D'ADMINISTRATION RESEAU  SOUS WINDOWS
COURS D'ADMINISTRATION RESEAU SOUS WINDOWS
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 

Introduction à ERRest

  • 1. MONTREAL 1/3 JULY 2011 ERRest: mais qu'est-ce que c'est? Pascal Robert MacTI
  • 2. REST?? (non non, pas Rest In Peace)
  • 3. 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 »)!
  • 4. Méthodes Méthode HTTP Action GET Obtenir (« fetch ») POST Créer (« create ») PUT Mettre à jour (« update ») DELETE Effacer TRACE/OPTIONS/HEAD Méta-données
  • 5. 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
  • 6. Exemples de MAUVAIS URLs • GET /ra/membres/2/delete.json • POST /ra/membres/2.json
  • 7. 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
  • 8. Méta-données • On utilise les entêtes HTTP (y compris les cookies) • Exemple: Content-Language: fr-fr X-Batch: 0-99
  • 9. 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
  • 11. 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.
  • 12. Architecture de ERREST • Offre un « request handler » unique. • ERREST fonctionne avec des routes et des controlleurs. • Basé sur les entités EO.
  • 13. 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);
  • 14. 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")
  • 15. 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.
  • 16. 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)
  • 17. 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(); }
  • 18. 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.
  • 19. 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);
  • 20. 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
  • 21. 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é.
  • 22. Alias • On peut renommer des noms d'entités ou d'attributs. • On utilise ERXRestNameRegistry.setExternalNameForInternalName: • ERXRestNameRegistry.registry().setExternalNameForInternalName("Pet", "Animal");
  • 23. Authentification • Plusieurs solutions: • Session (mais disponible que pour une seule instance) • Token • OpenID • Basic ou Digest • Cookies (pour clients HTML)
  • 24. 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.
  • 25. 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.
  • 27. 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)