diaporama du sfpot lillois du 20 mars 2014

Post on 20-Jun-2015

2.296 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Diaporama diffusé lors du sfPot Lillois du 20 mars 2014. Conférence animée par Kévin Dunglas, co-fondateur de Les-Tilleuls.coop et Alexandre Salomé, consultant chez Sensiolabs.

TRANSCRIPT

Réaliser des applications innovantes avec Symfony2Symfony2, API REST et Javascript

Qui sommes-nous ?Alexandre Salomé

Consultant

@alexandresalome

Kévin DunglasCo-fondateur

@dunglas

Architecture

API REST

- Exposer les données de l’application- HTTP + JSON/XML- Plus léger que SOAP (adapté pour le mobile)- RESTful

curl -X POST http://example.com/api/user

--data '{"username": "alice", "fullname": "Alice"}'

SPA (Single Page Application)

- Application JavaScript- S’exécute côté client- Récupère et modifie les données via l’API REST- Seules les données utiles transitent

Application

apps mobiles

site webresponsive

autres applications et sites

(ERP, logistique, partenaires…)

applicationFacebook

API REST

Internet

Stockage de données

Application Serveur Web

Internet

Applications tierces

Fichiers

Ecosystème

- PHP 5.3, 5.4, 5.5 (namespaces, traits)- Composer- Frameworks / CMS / PSR (PHP-FIG)- PHPUnit / phpspec / Behat

PHP-FIG : http://www.php-fig.orgAwesome PHP : https://github.com/ziadoz/awesome-php

PHP

- Framework “full stack”- Découplé en composants- Axé fiabilité (tests), sécurité et performance- Design moderne (POO, MVC, DIC, Events…)- Intègre des bibliothèques tierces reconnues : Twig, Swiftmailer, Doctrinehttp://symfony.com / http://github.com/symfony/symfony

Symfony2

AngularJS

- Framework JavaScript MVC complet- Maintenu par Google- Communauté importante- S’intègre parfaitement avec Symfony

http://angularjs.org/

Backbone.js

- Bibliothèque JavaScript- Synchronise la couche modèle de l’application cliente avec une API REST- S’intègre facilement dans du code JS existant- S’intègre parfaitement avec Symfony

http://backbonejs.org/

Alternatives

- Ember.js :http://emberjs.com/

- Chaplin.js :http://chaplinjs.org/

Et bien d’autres.

Implémentation

Modèle relationnel objet

- Doctrine : http://www.doctrine-project.org/ (ORM + ODM + O*M)- Propel : http://propelorm.org/- PHPCR : http://phpcr.github.io/- ElasticSearch : http://www.elasticsearch.org/guide/en/elasticsearch/client/php-api/current/

Voir aussi https://github.com/ziadoz/awesome-php#orm-and-datamapping

Sérialisation des objetsreturn new JsonResponse($object->toArray());

Composant Serializerhttp://symfony.com/fr/doc/current/components/serializer.html

JMSSerializerBundlehttps://github.com/schmittjoh/JMSSerializerBundle

Exposer une API REST- FOSRestBundle : https://github.com/FriendsOfSymfony/FOSRestBundle

- NelmioApiDocBundle :https://github.com/nelmio/NelmioApiDocBundle

- JMSSerializerBundle :http://jmsyst.com/bundles/JMSSerializerBundle

Envoyer des données

- “Désérialisation” du JSON ou du XML :JMSSerializerBundle

- Validation des données et mise à jour des objets :Symfony Form framework

Gestion des assets

- Less, SASS- Minify, Uglify, YUI Compressor, …- Bower

Avec Symfony : AsseticSans Symfony : Grunt + Yeoman

Show me the code

Exemple KISS /**

* @Route(path="/user/{id}", name="user_show")

*/

public function showAction($id)

{

$user = $this

->getDoctrine()

->getRepository('AcmeDemoBundle:User')

->find($id)

;

if (!$user) {

throw $this->createNotFoundException(sprintf('User %s not found.', $id));

}

return new JsonResponse($user->toArray());

}

Exemple (encore plus court) /**

* @Route(path="/user/{id}", name="user_show")

*/

public function showAction(User $user)

{

return new JsonResponse($user->toArray());

}

Behat-LauncherCôté serveur (80%)- Silex- Composant Serializer

Côté client (20%)- Twitter Bootstrap- AngularJS- Internationalisation- Grunthttp://github.com/alexandresalome/behat-launcher

DunglasTodoMVCBundle

Côté serveur (50%)- Symfony- FOSRest / JMSSerializer

Côté client (50%)- Backbone.js et Chaplin.js- CoffeeScript

http://github.com/dunglas/DunglasTodoMVCBundle

Aller plus loin

Référencement

- Google ne sait pas exécuter le JavaScript- Les SPA ne sont pas référencées par défaut

Solution : Prerender.io (snapshots)http://prerender.iohttps://github.com/rjanot/YuccaPrerenderBundle

Sécurité

- Protection CSRF d’une SPAhttps://github.com/dunglas/DunglasAngularCsrfBundle

- Utilisation de l’objet JsonResponseJSON Vulnerability

Hypermedia API

Découverte dynamique des serveurs par les clients :

- HATEOAS (HAL+JSON)http://hateoas-php.org/- Hydra / JSON-LD http://www.markus-lanthaler.com/hydra/

Des questions ?Une bière !

top related