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.
4. 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"}'
5. 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
10. - 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, Doctrine
http://symfony.com / http://github.com/symfony/symfony
Symfony2
11. AngularJS
- Framework JavaScript MVC complet
- Maintenu par Google
- Communauté importante
- S’intègre parfaitement avec Symfony
http://angularjs.org/
12. 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/
16. Sérialisation des objets
return new JsonResponse($object->toArray());
Composant Serializer
http://symfony.com/fr/doc/current/components/serializer.html
JMSSerializerBundle
https://github.com/schmittjoh/JMSSerializerBundle
17. Exposer une API REST
- FOSRestBundle :
https://github.com/FriendsOfSymfony/FOSRestBundle
- NelmioApiDocBundle :
https://github.com/nelmio/NelmioApiDocBundle
- JMSSerializerBundle :
http://jmsyst.com/bundles/JMSSerializerBundle
18. 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
19. Gestion des assets
- Less, SASS
- Minify, Uglify, YUI Compressor, …
- Bower
Avec Symfony : Assetic
Sans Symfony : Grunt + Yeoman
21. 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());
}
22. Exemple (encore plus court)
/**
* @Route(path="/user/{id}", name="user_show")
*/
public function showAction(User $user)
{
return new JsonResponse($user->toArray());
}
26. 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.io
https://github.com/rjanot/YuccaPrerenderBundle
27. Sécurité
- Protection CSRF d’une SPA
https://github.com/dunglas/DunglasAngularCsrfBundle
- Utilisation de l’objet JsonResponse
JSON Vulnerability
28. 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/