2. 2
Abstract
• L’open API, plus importante que l’open source ?
• Tour d’horizon d’APIs web et des acteurs clés
• Restlet Framework 2.1 & Roadmap
• APISpark, PaaS tout-en-un pour APIs web
3. 3
Speaker
• Jérôme LOUVEL (@jlouvel, jlouvel@restlet.com, G+)
• Ingénieur PolyTech’Montpellier, 14 ans d’expérience
• Créateur de Restlet Framework, CEO de Restlet SAS
• Expert JAX-RS 1.0 (JSR-311)
• Contributeur à “RESTful Web Services” (O’Reilly)
• Co-auteur de “Restlet in Action” (Manning)
5. Explosion du nombre d’APIs web
5
Source: ProgrammableWeb
Source: ProgrammableWeb
6. Croissance des sites web
6
Source: NetCraft / Jacob Nielsen
Un parallèle qui laisse rêveur !
7. Prédominance de REST
7
Source: ProgrammableWeb
• REST est souvent synonyme de non-SOAP…
• L’hypermédia est rarement exploité…
• AtomPub est plutôt la plus RESTful des APIs à ce jour
• REST n’est pas indispensable au succès d’une API web
• Exigence de qualité croissante : REST comme guide
Source: ProgrammableWeb
8. L’open API, ça se consomme
• Enrichir un site web (mashups, flux blog/tweets, Google Maps)
• Import/Export SaaS (libérer ses données, changer de fournisseur)
• Intégration SaaS (notifier / web hooks, automatiser / workflow)
• APIs composites (combiner plusieurs APIs en une autre)
8
9. L’open API permet d’exposer
• Backend Mobile (connectées, natives ou HTML 5)
• Backend SaaS (HTML 5/AJAX, API développeur/partenaire)
• Backend Open Data (multi-formats, API développeur, big data)
• Backend Internet des Objets (M2M, RFID, géolocalisation)
9
10. Impact de l’open source
10
1. Réduction des coûts (licences)
2. Ecosystème d’innovation (logiciel)
2000 2005
11. De l’open source à l’open API
11
1. Réduction des coûts (cloud computing)
2. Accès multicanal (mobilité, convergence)
2005 2010
12. Impact de l’open API
12
1. Réduction des coûts (composition d’APIs web, open & privates, gain de temps)
2. Ecosystème d’innovation (places de marché d’APIs web, nouvelles chaînes de valeur)
2015 2020
13. Anatomie d’une API web
13
• Un contrat d’API web standard = Mise en concurrence facilitée
• Exemples de contrats : Atom/AtomPub, AWS S3, CDMI, etc.
17. Google Maps Image API
17
http://maps.googleapis.com/maps/api/staticmap?
center=Brooklyn+Bridge,New+York,NY&
zoom=14&
size=512x512&
maptype=roadmap&
markers=color:blue%7Clabel:S%7C40.702147,-74.015794&
markers=color:green%7Clabel:G%7C40.711614,-74.012318&
markers=color:red%7Ccolor:red%7Clabel:C%7C40.718217,-73.998284&
sensor=false
• Représentation « image/png » de la ressource de carte
• Une ressource REST peut exposer des représentations binaires
18. Amazon et les APIs web
18
• Authentification exotique
• Anti-pattern d’API RESTful
• Mais AWS reste une référence dans le cloud !
19. De nouveaux acteurs
19
• Frameworks RESTful
• Génération de doc
• Frameworks NIO/HTTP
• Backends as a Service
• Applis mobiles
• SaaS & sites riches
• Open data
• Internet des Objets
• Sécurisation
• Analytics
• SDKs clients
• Gestion communauté
• Annuaire
• Monétisation
• Animation
• Référencement
• Oracle Jersey
• JBoss RESTEasy
• XINS, Swagger
• Enunciate
• Restlet Framework
• StackMob
• Parse.com
• Sencha.io
• Firebase
• APISpark
• Apigee
• Mashery
• 3Scale
• WebServius
• APISpark
• ProgrammableWeb
• Mashape
• Alcatel Open API Platform
• The Easy API
• APISpark
30. Packages de l’API Restlet
Un cœur complet mais compact
30
org.restlet.data
org.restlet.representation
org.restlet
org.restlet.resource
org.restlet.routing
org.restlet.security
org.restlet.service
org.restlet.util
35. Des styles de codage différents
Côté serveur
35
@POST
@Path(“withdrawal")
@Consumes("text/plain")
@Produces("application/json")
public Money withdraw(
@PathParam("card") String card,
@QueryParam("pin") String pin,
String amount){
return getMoney(card,
pin, amount);
}
@Post(“txt:json”)
public Money withdraw(){
String card = getAttribute(“card”);
String pin = getQueryValue(“pin”);
String amount = getQueryValue(“amount”);
return getMoney(card, pin, amount);
}
JAX-RS API 1.1 Restlet API 2.1
36. Des styles de codage différents
Côté client
36
// Get instance of Client
Client client = ClientFactory.newClient();
// Get account balance
String bal =
client.target("http://.../atm/{cardId}/balance")
.pathParam("cardId", "112233")
.queryParam("pin", "9876")
.request("text/plain").get(String.class);
// Get instance of Client
ClientResource client = new
ClientResource(""http://.../atm/{cardId}/balance");
// Get account balance
client.setAttribute("cardId", "112233");
client.setQueryValue("pin", "9876");
client.accept(MediaType.TXT_PLAIN);
String bal = client.get(String.class);
JAX-RS API 2.0 Restlet API 2.1
37. Sortie version 2.1
2 ans de développement !
37
1) Améliorations incrémentales de l’API Restlet
• Sucre syntaxique (ClientResource#get/setQuery, get/setAttribute, etc.)
• Amélioration annotations. Example: @Get("form|xml:json?level=2")
• Traçage des requêtes individuel facilité
• ConnegService, DecoderService côté client
• Gestion côté client de l’absence de chunk encoding dans GAE
• Extension EMF (converter XMI/XML), HTML (multi-part upload)
2) Sécurité des APIs web renforcée
• Support des schémas AWS S3, AWS Query, Cookie et GAE
• Support de Google Secure Data Connector (SDC) hors GAE
• Nouvelles extensions OAuth 2.0 et OpenID 2.0 (draft specs)
38. Sortie version 2.1
Prévu en juin 2012
38
3) Nouveau connecteur HTTP interne
• Design NIO non-bloquant, peu de threads
• Zéro dépendance, centré HTTP/Restlet, lecture représ. asynchrone
• Dépréciation des extensions Grizzly et Netty
• Documenté et extensible (extension SIP)
4) Option « Apache Public License 2.0 »
• En plus d’EPL 1.0, LGPL 2.1/3.0 et CDDL 1.0
• Licences commerciales possible si nécessaire
5) Migration vers GitHub
• Historique SVN avec branches importé
• Tickets Tigris.org importés
• Forge Restlet automatisée mise à jour
• Augmentation des contributions constatée !
40. Version 2.2
Ecouter sa communauté !
40
• Migration vers Google Groups
• Listes de diffusion utilisateurs et développeurs encore sur Tigris.org
• Migration vers StackOverFlow
• Déjà largement utilisé pour les questions simples et bogues
• Augmenter la qualité des échanges dans le groupe sur Google en retour
• Migration vers Java SE 6
• Java SE 5 supporté depuis Restlet Framework 1.0 !
• Réduire la taille du code (ex: service pattern)
41. Version 2.2
Améliorations incrémentales
41
• Nouvelles fonctionnalités
• Optimiser la taille des éditions Android et GWT
• CacheService : générique et extensible
• Edition OSGi : gestion entièrement dynamique
• Injection : Guice, Spring (amélioration)
• Portage en JavaScript natif
• Même niveau d’abstraction qu’en Java
• Côté client (browser/XHR et Node.JS)
• Côté serveur (Node.JS)
• Prototype déjà disponible !
42. Version 3.0
Les grandes lignes
42
• Site web : nouveau design et tutoriel
• Restlet Studio : IDE basé sur Eclipse 4.0
• Restlet Apps : applications réutilisables (recherche, etc.)
• Connecteur interne
• Unification runtime client et serveur
• Pool de threads unique (via TaskService)
• Support de SPDY [et/ou HTTP 2.0] (sur NIO)
• Nouveau convertisseur interne
• Support multi-formats (XML, JSON, RDF, Form, CSV, etc.)
• Support des hyperliens et des métadonnées HTTP
• Remplaçant des extensions Jackson, XStream, etc.
• Nouveau portage : Google Dart
• Support HTML 5 : Server-Sent Events, Cross-origin policies
50. Roadmap
• Beta privée : fin avril 2012
• Beta publique : juin 2012
• Version 1.0 : octobre 2012
Inscrivez-vous !
http://apispark.com
50
51. Conclusion
Merci !
51
• Apprendre REST & HTTP c’est un investissement sur le long terme
• Nombreuses opportunités autour des APIs web
• Restlet Framework : solution open source puissante et complète
• APISpark : solution en ligne tout-en-un et simple d’usage