Symfony2 & l'architecture Rest
Upcoming SlideShare
Loading in...5
×
 

Symfony2 & l'architecture Rest

on

  • 1,129 views

 

Statistics

Views

Total Views
1,129
Views on SlideShare
1,097
Embed Views
32

Actions

Likes
0
Downloads
34
Comments
0

2 Embeds 32

http://www.linkedin.com 28
https://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Symfony2 & l'architecture Rest Symfony2 & l'architecture Rest Presentation Transcript

  • 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 Transfert de la représentation “sans état” d’une ressource en 2000 dans le chapitre 5 de sa thèse de doctorat.”
  • 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 physique ou abstraite
  • 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 …..
  • 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 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
  • 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
  • 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.
  • 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 comme moteur d'état de l'application
  • 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 demandée est: ' . $uri; echo 'La valeur du paramètre "title" est: ' . $title;
  • 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
  • REST & symfony2 REST recommandation: Architecturer les URI (les identifiants des ressources) avant de commencer le développement
  • 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
  • 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
  • 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
  • REST & symfony2 Configurer FOSRestBundle #/app/config/routing.yml symfony_tn_book: resource: "@SymfonyTNBookBundle/Controller/" type: rest prefix: /api/
  • 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
  • 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
  • Merci pour ce merveilleux moment partagé ensemble