Symfony2 & L’architecture REST
Meilleurs pratiques
ghaliano2005@gmail.com

ghaliano2005

Ghali Ahmed
formateur Symfony2
ghaliano2005@gmail.com

ghaliano2005

Gérant de Besmart
Une société qui developpe des applications autour de
symfony2
ghaliano2005@gmail.com

ghaliano2005

Développeur de la plate-forme de pétition
www.wesign.it
http://developers.google.com/apis-explorer/

http://developer.yahoo.com/

http://developers.pinterest.com/
REpresentational State Transfert
“un style d’architecture pour les systèmes hypermédia distribués, créé par Roy Fielding
T...
REST est un style d’architecture d’application
REST n’impose pas un pattern (mvc, poo, ..)
ou un langage de programmation
Avec REST, on parle de la (les)
Représentation(s) d’une ressource
Mais c’est quoi une ressource ?

Hmm, et c’est quoi
une ressource ?
Une ressource est “un media” identifié &
accessible à travers une URI enregistré sur un
serveur
On parle de ressource phys...
Exemple de ressource:

●
●
●
●
●
●
●

Une image
Une vidéo
Un fichier pdf
Une ligne dans la base de donnée
le résultat d’un...
REST impose des Contraintes d'architecture
REST #1: client-serveur
La requette (Request)

GET /book/1 HTTP/1.0
Host: fr.wikipedia.org
Content-Type: application/json
...
REST #1: client-serveur
La réponse (Response)

HTTP/1.0 200 OK
Content-Type : text/HTML
Content-Length : 1245
….

Statut d...
Les verbes HTTP populaires
GET

200 (OK). 404 (Not Found), si l’identifiant introuvable ou invalide.

PUT

200 (OK) or 204...
REST: #2
( requette sans sauvegarde d’état )
REST: #3
Mise en cache
REST: #4
Une interface uniforme

L'identification
des ressources

représentations

Un message autodescriptif

Hypermédia
c...
REST: #5
Systême hiérarchisé par couche
REST: #6
Code on demande (optional)
REST & symfony2
REST & php natif
$uri = $_SERVER['REQUEST_URI'];
$title = $_GET['title'];
headr('Content-type: text/html');
echo 'L'URI de...
REST & symfony2

Request

Un framework conçue autour du protocole http

<?php
…
use SymfonyComponentHttpFoundationRequest;...
REST & symfony2
REST recommandation:
Architecturer les URI (les identifiants des ressources)
avant de commencer le dévelop...
Fonctionnalité

HTTP Verb

URI

Afficher tous les livres

GET

http://gestbook.com/books

Afficher un livre

GET

http://g...
REST & symfony2
Préparer l’environnement

1.

composer create-project symfony/framework-standard-edition rest 2.3.0

2.

c...
REST & symfony2
Configurer FOSRestBundle
#/app/config/config.yml
fos_rest:
param_fetcher_listener: force
body_listener: tr...
REST & symfony2
Configurer FOSRestBundle

#/app/config/routing.yml
symfony_tn_book:
resource: "@SymfonyTNBookBundle/Contro...
REST & symfony2
<?php
namespace SymfonyTNBookBundleController;
use FOSRestBundleControllerFOSRestController as Controller;...
Liens utiles
http://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol
http://tools.ietf.org/html/rfc2616
http://opikanoba....
Merci pour ce merveilleux moment
partagé ensemble
Prochain SlideShare
Chargement dans…5
×

Symfony2 & l'architecture Rest

2 949 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
2 949
Sur SlideShare
0
Issues des intégrations
0
Intégrations
209
Actions
Partages
0
Téléchargements
87
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Symfony2 & l'architecture Rest

  1. 1. Symfony2 & L’architecture REST Meilleurs pratiques
  2. 2. ghaliano2005@gmail.com ghaliano2005 Ghali Ahmed formateur Symfony2
  3. 3. ghaliano2005@gmail.com ghaliano2005 Gérant de Besmart Une société qui developpe des applications autour de symfony2
  4. 4. ghaliano2005@gmail.com ghaliano2005 Développeur de la plate-forme de pétition www.wesign.it
  5. 5. http://developers.google.com/apis-explorer/ http://developer.yahoo.com/ http://developers.pinterest.com/
  6. 6. REpresentational State Transfert “un style d’architecture pour les systèmes hypermédia distribués, créé par Roy Fielding Transfert de la représentation “sans état” d’une ressource en 2000 dans le chapitre 5 de sa thèse de doctorat.”
  7. 7. REST est un style d’architecture d’application
  8. 8. REST n’impose pas un pattern (mvc, poo, ..) ou un langage de programmation
  9. 9. Avec REST, on parle de la (les) Représentation(s) d’une ressource
  10. 10. Mais c’est quoi une ressource ? Hmm, et c’est quoi une ressource ?
  11. 11. Une ressource est “un media” identifié & accessible à travers une URI enregistré sur un serveur On parle de ressource physique ou abstraite
  12. 12. Exemple de ressource: ● ● ● ● ● ● ● Une image Une vidéo Un fichier pdf Une ligne dans la base de donnée le résultat d’un match de foot le derniers billet d’un blog …..
  13. 13. REST impose des Contraintes d'architecture
  14. 14. REST #1: client-serveur La requette (Request) GET /book/1 HTTP/1.0 Host: fr.wikipedia.org Content-Type: application/json Verbe http L’URI de la ressource l’entête la plus importante: l’adresse du serveur Version du protocole http Le mime type de la requête
  15. 15. REST #1: client-serveur La réponse (Response) HTTP/1.0 200 OK Content-Type : text/HTML Content-Length : 1245 …. Statut de la réponse Le type de media (mime type) l’entête : taille de la réponse en octet Version du protocole http “Le contenu de la page wiki de symfony” “” Le contenu de la réponse
  16. 16. Les verbes HTTP populaires GET 200 (OK). 404 (Not Found), si l’identifiant introuvable ou invalide. PUT 200 (OK) or 204 (No Content). 404 (Not Found), si l’identifiant introuvable ou invalide POST DELETE 404 (Not Found). 200 (OK). 404 (Not Found), si l’identifiant introuvable ou invalide.
  17. 17. REST: #2 ( requette sans sauvegarde d’état )
  18. 18. REST: #3 Mise en cache
  19. 19. REST: #4 Une interface uniforme L'identification des ressources représentations Un message autodescriptif Hypermédia comme moteur d'état de l'application
  20. 20. REST: #5 Systême hiérarchisé par couche
  21. 21. REST: #6 Code on demande (optional)
  22. 22. REST & symfony2
  23. 23. REST & php natif $uri = $_SERVER['REQUEST_URI']; $title = $_GET['title']; headr('Content-type: text/html'); echo 'L'URI demandée est: ' . $uri; echo 'La valeur du paramètre "title" est: ' . $title;
  24. 24. REST & symfony2 Request Un framework conçue autour du protocole http <?php … use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; class BookController extends Controller { public function getBooksAction() { $request = Request::createFromGlobals(); $request->query->get('title'); $request->headers->get('content_type'); $request->getMethod(); $response = new Response(); $response->setContent ('<html><body><h1>Voici une liste de livre</h1></body></html>'); $response->setStatusCode(200); $response->headers->set('Content-Type', 'text/html'); $response->send(); } Request access Response manipulation
  25. 25. REST & symfony2 REST recommandation: Architecturer les URI (les identifiants des ressources) avant de commencer le développement
  26. 26. Fonctionnalité HTTP Verb URI Afficher tous les livres GET http://gestbook.com/books Afficher un livre GET http://gestbook.com/book/1 Modifier un livre POST http://gestbook.com/book/1 Supprimer un livre DELETE http://gestbook.com/book/1
  27. 27. REST & symfony2 Préparer l’environnement 1. composer create-project symfony/framework-standard-edition rest 2.3.0 2. composer require friendsofsymfony/rest-bundle @stable 3. composer require jms/serializer-bundle @stable 4. composer require nelmio/api-doc-bundle @stable 5. Activer les bundles dans /app/AppKernel.php
  28. 28. REST & symfony2 Configurer FOSRestBundle #/app/config/config.yml fos_rest: param_fetcher_listener: force body_listener: true format_listener: rules: - { path: '^/api/', priorities: ['xml', 'json'], fallback_format: json, prefer_extension: false } - { path: '^/image', priorities: ['jpeg', 'gif'], fallback_format: false, prefer_extension: true } - { path: '^/admin', priorities: [ 'xml', 'html'], fallback_format: ~, prefer_extension: false } - { path: '^/', priorities: [ 'html', '*/*'], fallback_format: html, prefer_extension: true } view: view_response_listener: true
  29. 29. REST & symfony2 Configurer FOSRestBundle #/app/config/routing.yml symfony_tn_book: resource: "@SymfonyTNBookBundle/Controller/" type: rest prefix: /api/
  30. 30. REST & symfony2 <?php namespace SymfonyTNBookBundleController; use FOSRestBundleControllerFOSRestController as Controller; use FOSRestBundleControllerAnnotationsView; use SensioBundleFrameworkExtraBundleConfigurationMethod; class BooksController extends Controller { /** * @View * @Route("/ebooks", defaults={"_format" = "json"}) */ public function getBooksAction() { return ['name' => 'symfony-tn']; } } Un simple controlleur utilisant les helpers FosRest
  31. 31. Liens utiles http://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol http://tools.ietf.org/html/rfc2616 http://opikanoba.org/tr/fielding/rest/ http://symfony.com/fr/doc/2.3/book/http_fundamentals.html https://github.com/FriendsOfSymfony/FOSRestBundle http://jmsyst.com/bundles/JMSSerializerBundle https://github.com/nelmio/NelmioApiDocBundle
  32. 32. Merci pour ce merveilleux moment partagé ensemble

×