Symfony2 & l'architecture Rest

1,958
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,958
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
63
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×