Symfony2 & l'architecture Rest
-
Upload
elghali-ahmed -
Category
Documents
-
view
1.354 -
download
2
description
Transcript of Symfony2 & l'architecture Rest
![Page 1: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/1.jpg)
Symfony2 & L’architecture RESTMeilleurs pratiques
![Page 2: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/2.jpg)
Ghali Ahmed formateur Symfony2
ghaliano2005
![Page 3: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/3.jpg)
ghaliano2005
Gérant de BesmartUne société qui developpe des applications autour de
symfony2
![Page 4: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/4.jpg)
ghaliano2005
Développeur de la plate-forme de pétitionwww.wesign.it
![Page 5: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/5.jpg)
http://developers.google.com/apis-explorer/
http://developer.yahoo.com/
http://developers.pinterest.com/
![Page 6: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/6.jpg)
“un style d’architecture pour les systèmes hypermédia distribués, créé par Roy Fielding
en 2000 dans le chapitre 5 de sa thèse de doctorat.”
REpresentational State Transfert
Transfert de la représentation “sans état” d’une ressource
![Page 7: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/7.jpg)
REST est un style d’architecture d’application
![Page 8: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/8.jpg)
REST n’impose pas un pattern (mvc, poo, ..) ou un langage de programmation
![Page 9: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/9.jpg)
Avec REST, on parle de la (les) Représentation(s) d’une ressource
![Page 10: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/10.jpg)
Mais c’est quoi une ressource ?
Hmm, et c’est quoi une ressource ?
![Page 11: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/11.jpg)
Une ressource est “un media” identifié & accessible à travers une URI enregistré sur un
serveurOn parle de ressource physique ou abstraite
![Page 12: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/12.jpg)
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● …..
![Page 13: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/13.jpg)
REST impose des Contraintes d'architecture
![Page 14: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/14.jpg)
REST #1: client-serveur
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
GET /book/1 HTTP/1.0Host: fr.wikipedia.orgContent-Type: application/json
La requette (Request)
![Page 15: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/15.jpg)
REST #1: client-serveur
Statut de la réponse
l’entête : taille de la réponse en octet
Version du protocole http
HTTP/1.0 200 OKContent-Type : text/HTML Content-Length : 1245 ….
“Le contenu de la page wiki de symfony”
La réponse (Response)
“” Le contenu de la réponse
Le type de media (mime type)
![Page 16: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/16.jpg)
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 404 (Not Found).
DELETE 200 (OK). 404 (Not Found), si l’identifiant introuvable ou invalide.
Les verbes HTTP populaires
![Page 17: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/17.jpg)
REST: #2( requette sans sauvegarde d’état )
![Page 18: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/18.jpg)
REST: #3Mise en cache
![Page 19: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/19.jpg)
REST: #4
Une interface uniforme
L'identification des ressources représentations Un message auto-
descriptif
Hypermédia comme moteur
d'état de l'application
![Page 20: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/20.jpg)
REST: #5Systême hiérarchisé par couche
![Page 21: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/21.jpg)
REST: #6Code on demande (optional)
![Page 22: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/22.jpg)
REST & symfony2
![Page 23: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/23.jpg)
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;
![Page 24: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/24.jpg)
REST & symfony2Un framework conçue autour du protocole http
Request
<?php…use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;
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
![Page 25: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/25.jpg)
REST & symfony2REST recommandation:
Architecturer les URI (les identifiants des ressources)
avant de commencer le développement
![Page 26: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/26.jpg)
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
![Page 27: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/27.jpg)
REST & symfony2
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
Préparer l’environnement
![Page 28: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/28.jpg)
REST & symfony2#/app/config/config.ymlfos_rest:
param_fetcher_listener: forcebody_listener: trueformat_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
Configurer FOSRestBundle
![Page 29: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/29.jpg)
REST & symfony2
#/app/config/routing.yml
symfony_tn_book:
resource: "@SymfonyTNBookBundle/Controller/"
type: rest
prefix: /api/
Configurer FOSRestBundle
![Page 30: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/30.jpg)
REST & symfony2<?phpnamespace SymfonyTN\BookBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController as Controller;use FOS\RestBundle\Controller\Annotations\View;use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
class BooksController extends Controller{ /** * @View * @Route("/ebooks", defaults={"_format" = "json"}) */
public function getBooksAction(){
return ['name' => 'symfony-tn'];}
}
Un simple controlleur utilisant les helpers FosRest
![Page 31: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/31.jpg)
Liens utileshttp://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocolhttp://tools.ietf.org/html/rfc2616http://opikanoba.org/tr/fielding/rest/http://symfony.com/fr/doc/2.3/book/http_fundamentals.htmlhttps://github.com/FriendsOfSymfony/FOSRestBundlehttp://jmsyst.com/bundles/JMSSerializerBundlehttps://github.com/nelmio/NelmioApiDocBundle
![Page 32: Symfony2 & l'architecture Rest](https://reader034.fdocuments.net/reader034/viewer/2022042521/5475295bb4af9fcd0a8b58f1/html5/thumbnails/32.jpg)
Merci pour ce merveilleux moment partagé ensemble