SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkHugo Hamon
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesAbdelkader Rhouati
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation SymfonyJeremy Gachet
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introductionJean Michel
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web versionSébastien Pertus
 
Formation Symfony2 par KNP Labs
Formation Symfony2 par KNP LabsFormation Symfony2 par KNP Labs
Formation Symfony2 par KNP LabsKNP Labs
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
Active Server Pages (ASP)
Active Server Pages (ASP)Active Server Pages (ASP)
Active Server Pages (ASP)Saïd Radhouani
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
Principes De Base De Asp .Net
Principes De Base De Asp .NetPrincipes De Base De Asp .Net
Principes De Base De Asp .NetGregory Renard
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Les-Tilleuls.coop
 

Mais procurados (19)

Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend FrameworkExposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
Exposer des services web SOAP et REST avec symfony 1.4 et Zend Framework
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Présentation symfony drupal
Présentation symfony drupalPrésentation symfony drupal
Présentation symfony drupal
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 
Symfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulairesSymfony 2 : chapitre 4 - Les services et les formulaires
Symfony 2 : chapitre 4 - Les services et les formulaires
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introduction
 
Future of java script web version
Future of java script web versionFuture of java script web version
Future of java script web version
 
Formation Symfony2 par KNP Labs
Formation Symfony2 par KNP LabsFormation Symfony2 par KNP Labs
Formation Symfony2 par KNP Labs
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Active Server Pages (ASP)
Active Server Pages (ASP)Active Server Pages (ASP)
Active Server Pages (ASP)
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
Principes De Base De Asp .Net
Principes De Base De Asp .NetPrincipes De Base De Asp .Net
Principes De Base De Asp .Net
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 

Semelhante a Symfony2 & l'architecture Rest

Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015PXNetwork
 
03 Web Semantique
03  Web Semantique03  Web Semantique
03 Web Semantiquebadirh
 
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !Iteracode
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxHamzaElgari
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.keyDamien Seguy
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleAbdelkader Rhouati
 
WebApp #1 : introduction
WebApp #1 : introductionWebApp #1 : introduction
WebApp #1 : introductionJean Michel
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdfssuserc46a93
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-toDamien Cavaillès
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blogPHPPRO
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyHugo Hamon
 
Votre première App SharePoint pour Office 365 avec Visual Studio !
Votre première App SharePoint pour Office 365 avec Visual Studio !Votre première App SharePoint pour Office 365 avec Visual Studio !
Votre première App SharePoint pour Office 365 avec Visual Studio !Gilles Pommier
 
2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutionse-Xpert Solutions SA
 

Semelhante a Symfony2 & l'architecture Rest (20)

Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015Enrichir vos contenus Wordpress avec les API - WPTech 2015
Enrichir vos contenus Wordpress avec les API - WPTech 2015
 
03 Web Semantique
03  Web Semantique03  Web Semantique
03 Web Semantique
 
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !
Apéro PHP Amiens - l'ORM de CakePHP, c'est du gâteau !
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Partie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptxPartie 1_Matriser les bases PHP v0555555555555.pptx
Partie 1_Matriser les bases PHP v0555555555555.pptx
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Epitech securite-2012.key
Epitech securite-2012.keyEpitech securite-2012.key
Epitech securite-2012.key
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
WebApp #1 : introduction
WebApp #1 : introductionWebApp #1 : introduction
WebApp #1 : introduction
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-to
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blog
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Votre première App SharePoint pour Office 365 avec Visual Studio !
Votre première App SharePoint pour Office 365 avec Visual Studio !Votre première App SharePoint pour Office 365 avec Visual Studio !
Votre première App SharePoint pour Office 365 avec Visual Studio !
 
2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions
 

Symfony2 & l'architecture Rest