Slides du MeetUp PHP organisé à NiortTech, Niort le mardi 27 novembre 2018.
Mise en place d'une API avec API Platform de la création du projet Symfony à l'utilisation de l'API + quelques conseils & astuces que j'utilise au quotidien
5. Donovan Bourlard | Créer une API en 5 minutes 5
API PLATFORM
LES OUTILS
Présentation
API Platform est un framework libre (licence MIT) écrit en PHP 7
et basé sur Symfony destiné à la création d’API Web modernes,
puissantes et sécurisées. Cet outil est particulièrement adapté à
la construction de systèmes d’informations « API-centric » basés
sur l’hypermédia et le Web des données (linked data). Il permet
de réaliser facilement des applications d’une seule page
(single-page applications) ou dédiées aux mobiles en utilisant des
bibliothèques JavaScript telles que React ou AngularJS.
10. Donovan Bourlard | Créer une API en 5 minutes 10
18.30 AM
C ré e r u n
p roj et Sy mfony
C ré e r la
b as e d e d on n é e s
18.31 AM
VUE D’ENSEMBLE
LA THÉORIE
11. Donovan Bourlard | Créer une API en 5 minutes 11
B ran c h e r
A PI Platfor m
C ré e r s on
s c h é ma 18.34 PM
18.35 PM
LA THÉORIE
VUE D’ENSEMBLE
15. Donovan Bourlard | Créer une API en 5 minutes 15
C ré e r u n
p roj et Sy mfony
EN PRATIQUE
UN PROJET
16. Donovan Bourlard | Créer une API en 5 minutes 16
EN PRATIQUE
CRÉER UN PROJET SYMFONY
composer create-project symfony/skeleton beer-factory
beer-factory/
├─ bin/
│ └─ console
├─ config/
└─ public/
│ └─ index.php
├─ src/
│ └─ Kernel.php
├─ var/
│ ├─ cache/
│ └─ log/
└─ vendor/
17. Donovan Bourlard | Créer une API en 5 minutes 17
EN PRATIQUE
CRÉER UN PROJET SYMFONY
beer-factory/
├─ config/
│ └─ api-platform/
│ └─ packages/
│ └─ routes/
│ └─ serialization/
│ └─ validation/
├─ src/
└─ Entity/
Nos ressources API Platform
Nos validations de données
Nos schéma de données
Nos paramètres de configurations
Nos serializations de données
Nos routes Symfony
………....
……………....
………………....
.……....
…………....
………………....
18. Donovan Bourlard | Créer une API en 5 minutes 18
C ré e r u n
p roj et Sy mfony
EN PRATIQUE
UN PROJET
C ré e r la
b as e d e d on n é e s
19. Donovan Bourlard | Créer une API en 5 minutes 19
EN PRATIQUE
CRÉER LA BASE DE DONNÉES
# .env
DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db
# config/packages/doctrine.yaml
doctrine:
dbal:
driver: 'pdo_sqlite'
composer require orm
20. Donovan Bourlard | Créer une API en 5 minutes 20
C ré e r u n
p roj et Sy mfony
EN PRATIQUE
UN PROJET
C ré e r la
b as e d e d on n é e s
C ré e r s on
s c hé ma
22. Donovan Bourlard | Créer une API en 5 minutes 22
EN PRATIQUE
CRÉER SON SCHÉMA
bin/console doctrine:database:create
bin/console doctrine:schema:create
23. Donovan Bourlard | Créer une API en 5 minutes 23
C ré e r u n
p roj et Sy mfony
EN PRATIQUE
UN PROJET
C ré e r la
b as e d e d on n é e s
C ré e r s on
s c hé ma
B ran c h e r
A PI Platfor m
24. Donovan Bourlard | Créer une API en 5 minutes 24
EN PRATIQUE
BRANCHER API PLATFORM
composer require api
/**
* @ORMEntity
* @ApiResource
*/
class Beer { /**/ }
Si l’on suit la documentation …
25. Donovan Bourlard | Créer une API en 5 minutes 25
EN PRATIQUE
BRANCHER API PLATFORM
26. Donovan Bourlard | Créer une API en 5 minutes 26
C ré e r u n
p roj et Sy mfony
EN PRATIQUE
UN PROJET
C ré e r la
b as e d e d on n é e s
C ré e r s on
s c hé ma
B ran c h e r
A PI Platfor m
OPÉRATIONNEL
27. Donovan Bourlard | Créer une API en 5 minutes 27
JOUONS AVEC l’API
Créer une catégorie
EN PRATIQUE
28. Donovan Bourlard | Créer une API en 5 minutes 28
JOUONS AVEC l’API
Créer une bière dans cette catégorie
EN PRATIQUE
29. Donovan Bourlard | Créer une API en 5 minutes 29
JOUONS AVEC l’API
Afficher la liste des bières
EN PRATIQUE
30. Donovan Bourlard | Créer une API en 5 minutes 30
JOUONS AVEC l’API
Modifier la bière
EN PRATIQUE
31. Donovan Bourlard | Créer une API en 5 minutes 31
JOUONS AVEC l’API
La modification apparait dans la liste
EN PRATIQUE
32. Donovan Bourlard | Créer une API en 5 minutes 32
JOUONS AVEC l’API
Supprimer une bière
EN PRATIQUE
33. Donovan Bourlard | Créer une API en 5 minutes 33
JOUONS AVEC l’API
Nous n’avons plus de bière
Don't worry…
EN PRATIQUE
36. Donovan Bourlard | Créer une API en 5 minutes 36
ANNOTATION VS YAML
Utilisez YAML
# config/packages/api-platform.yaml
api_platform:
mapping:
paths: ['%kernel.project_dir%/src/Entity']
# config/packages/api-platform.yaml
api_platform:
mapping:
paths: ['%kernel.project_dir%/config/api-platform']
Annotation
YAML
MES CONSEILS ET ASTUCES
37. Donovan Bourlard | Créer une API en 5 minutes 37
ANNOTATION VS YAML
Configuration des ressources YAML
beer-factory/
├─ bin/
├─ config/
│ └─ api-platform/
│ └─ beer.yaml
│ └─ category.yaml
└─ public/
├─ src/
├─ var/
└─ vendor/
# config/api-platform/beer.yaml
AppEntityBeer: ~
# config/api-platform/category.yaml
AppEntityCategory: ~
MES CONSEILS ET ASTUCES
38. Donovan Bourlard | Créer une API en 5 minutes 38
ANNOTATION VS YAML
Configuration des ressources YAML
MES CONSEILS ET ASTUCES
39. Donovan Bourlard | Créer une API en 5 minutes 39
MES CONSEILS ET ASTUCES
VALIDER LES DONNÉES
Que se passe-t-il si j’envoie des données erronées ?
Le champ description est nullable, OK
40. Donovan Bourlard | Créer une API en 5 minutes 40
MES CONSEILS ET ASTUCES
VALIDER LES DONNÉES
Que se passe-t-il si j’envoie des données erronées ?
Le champ name est obligatoire, ERREUR 500
41. Donovan Bourlard | Créer une API en 5 minutes 41
MES CONSEILS ET ASTUCES
VALIDER LES DONNÉES
Que se passe-t-il si j’envoie des données erronées ?
# config/packages/validator.yaml
framework:
validation:
mapping:
paths: ['%kernel.project_dir%/config/validation']
# config/validation/beer.yaml
AppEntityBeer:
properties:
name:
- NotBlank: ~
42. Donovan Bourlard | Créer une API en 5 minutes 42
MES CONSEILS ET ASTUCES
VALIDER LES DONNÉES
Que se passe-t-il si j’envoie des données erronées ?
Le champ name est obligatoire, ERREUR 400
43. Donovan Bourlard | Créer une API en 5 minutes 43
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Je ne souhaite pas exposer tous les champs
Serialization
« Composant permettant de transformer des objets en différents
formats (JSON, XML, …) »
à On veut « cacher » des champs dans certaines routes de Beer
beer-factory/
├─ bin/
├─ config/
│ └─ packages/
│ └─ serializer.yaml
│ └─ serialization/
│ └─ beer.yaml
└─ public/
├─ src/
├─ var/
└─ vendor/
44. Donovan Bourlard | Créer une API en 5 minutes 44
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Paramétrage de la serialization
# config/api-platform/beer.yaml
AppEntityBeer:
attributes:
denormalization_context: { groups: ['beer_write'] }
normalization_context: { groups: ['beer_read'] }
collectionOperations:
get:
method: 'GET'
normalization_context: { groups: ['beer_read_collection'] }
post:
method: 'POST'
# Optionnal since it's default config
denormalization_context: { groups: ['beer_write'] }
normalization_context: { groups: ['beer_read'] }
itemOperations:
get:
method: 'GET’
# Optionnal since it's default config
# denormalization_context: { groups: ['beer_write'] }
# normalization_context: { groups: ['beer_read'] }
put:
method: 'PUT'
delete:
method: 'DELETE'
# config/packages/serializer.yaml
framework:
serializer:
mapping:
paths: ['%kernel.project_dir%/config/serialization']
On déclare où vont se trouver les fichiers de
serialization
45. Donovan Bourlard | Créer une API en 5 minutes 45
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Les données en lecture
AppEntityBeer:
attributes:
name:
groups: ['beer_read_collection']
AppEntityBeer:
attributes:
name:
groups: ['beer_read']
description:
groups: ['beer_read']
# config/serialization/beer.yaml
AppEntityBeer:
attributes:
name:
groups: ['beer_read’, 'beer_read_collection']
description:
groups: ['beer_read']
N’afficher que le nom dans la liste Ajouter la description dans le détail
46. Donovan Bourlard | Créer une API en 5 minutes 46
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Les données en lecture
On ne voit que le champ name dans la liste des bières
47. Donovan Bourlard | Créer une API en 5 minutes 47
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Les données en lecture
On voit que les champs name et description dans le détail d’une bière
48. Donovan Bourlard | Créer une API en 5 minutes 48
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Les données en écriture
AppEntityBeer:
attributes:
name:
groups: ['beer_read', 'beer_read_collection', 'beer_write']
description:
groups: ['beer_read', 'beer_write']
organic:
groups: ['beer_write']
status:
groups: ['beer_write']
Même chose pour les champs où l’on peut écrire …
49. Donovan Bourlard | Créer une API en 5 minutes 49
MES CONSEILS ET ASTUCES
SÉLECTION DES DONNÉES
Les données en écriture
- On peut soumettre tous les champs avec le groupe beer_write
- On voit les champs avec le groupe beer_read
50. Ascend | Presentation 56
Quelques ressources
SLACK
https://symfony-devs.slack.com
Channel #api-platform
GITHUB
https://github.com/Awkan/
meetup-api-platform
API PLATFORM
https://api-platform.com/
51. Donovan Bourlard | Créer une API en 5 minutes 57
Merci de votre attention
Avez-vous des questions ?