SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
agence-anode.fr
DonovanBourlard
Donovan Bourlard
Web Developer
Awkan
Créer une API en 5min
avec API Platform
Créer une API en 5min
avec API Platform
Les outils
La théorie
En pratique
Mes conseils et astuces
LES OUTILS
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.
Donovan Bourlard | Créer une API en 5 minutes 6
API PLATFORM
LES OUTILS
Donovan Bourlard | Créer une API en 5 minutes 7
LES OUTILS
API PLATFORM
api-platform/core
Donovan Bourlard | Créer une API en 5 minutes 8
LES OUTILS
API PLATFORM
Great !!!
LA THÉORIE
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
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
En pratique
Donovan Bourlard | Créer une API en 5 minutes 13
EN PRATIQUE
UN PROJET
Donovan Bourlard | Créer une API en 5 minutes 14
EN PRATIQUE
UN PROJET
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
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/
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
………....
……………....
………………....
.……....
…………....
………………....
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
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
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
Donovan Bourlard | Créer une API en 5 minutes 21
EN PRATIQUE
CRÉER SON SCHÉMA
/**
* @ORMEntity
*/
class Beer
{
const ONLINE_STATUS = 1;
const OFFLINE_STATUS = 2;
/**
* @ORMId
* @ORMColumn(type="uuid", unique=true)
* @ORMGeneratedValue(strategy="CUSTOM")
* @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator")
*/
private $id;
/**
* @ORMColumn(type="string")
*/
private $name;
/**
* @ORMColumn(type="text", nullable=true)
*/
private $description;
/**
* @ORMColumn(type="boolean")
*/
private $organic;
/**
* @ORMManyToOne(targetEntity="Category", inversedBy="beers")
*/
private $category;
/**
* @ORMColumn(type="smallint")
*/
private $status;
// Getters + Setters
}
/**
* @ORMEntity
*/
class Category
{
/**
* @ORMId
* @ORMColumn(type="uuid", unique=true)
* @ORMGeneratedValue(strategy="CUSTOM")
* @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator")
*/
private $id;
/**
* @ORMColumn(type="string")
*/
private $name;
/**
* @ORMOneToMany(targetEntity="Beer", mappedBy="category")
*/
private $beers;
// Getters + Setters
}
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
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
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 …
Donovan Bourlard | Créer une API en 5 minutes 25
EN PRATIQUE
BRANCHER API PLATFORM
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
Donovan Bourlard | Créer une API en 5 minutes 27
JOUONS AVEC l’API
Créer une catégorie
EN PRATIQUE
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
Donovan Bourlard | Créer une API en 5 minutes 29
JOUONS AVEC l’API
Afficher la liste des bières
EN PRATIQUE
Donovan Bourlard | Créer une API en 5 minutes 30
JOUONS AVEC l’API
Modifier la bière
EN PRATIQUE
Donovan Bourlard | Créer une API en 5 minutes 31
JOUONS AVEC l’API
La modification apparait dans la liste
EN PRATIQUE
Donovan Bourlard | Créer une API en 5 minutes 32
JOUONS AVEC l’API
Supprimer une bière
EN PRATIQUE
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
Mes conseils et
astuces
Donovan Bourlard | Créer une API en 5 minutes 35
MES CONSEILS ET ASTUCES
ANNOTATION VS YAML
/**
* @ORMEntity
* @ApiResource({
* attributes={
* normalizationContext={"beer_read"},
* denormalizationContext={"beer_write"},
* validationGroups={"beer_write"},
* order={"createdAt": "DESC"}
* },
* collectionOperations={
* "get"={
* method="GET",
* normalizationContext={"beer_read_collection"},
* filters={
* "beer.date_filter",
* "beer.order_filter",
* "beer.search_filter"
* }
* },
* "post"={
* method="POST",
* accessControl="is_granted('ROLE_ADMIN')",
* normalizationContext={"beer_create"},
* denormalizationContext={"beer_post"},
* validationGroups="{"beer_create"}"
* },
*
* ...
* }
* })
*/
class Beer
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
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
Donovan Bourlard | Créer une API en 5 minutes 38
ANNOTATION VS YAML
Configuration des ressources YAML
MES CONSEILS ET ASTUCES
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
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
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: ~
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
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/
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
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
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
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
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 …
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
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/
Donovan Bourlard | Créer une API en 5 minutes 57
Merci de votre attention
Avez-vous des questions ?
agence-anode.fr
DonovanBourlard
Donovan Bourlard
Web Developer
Awkan

Contenu connexe

Similaire à Créer une API en 5 mins avec API Platform

CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeadsRNS
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2Ahmed ABATAL
 
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
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerDamien Seguy
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015Wisembly
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...TheFamily
 
Alphorm.com - Formation programmer en Visual Basic .NET
Alphorm.com - Formation programmer en Visual Basic .NETAlphorm.com - Formation programmer en Visual Basic .NET
Alphorm.com - Formation programmer en Visual Basic .NETAlphorm
 

Similaire à Créer une API en 5 mins avec API Platform (20)

Tdd cara nov2010
Tdd cara nov2010Tdd cara nov2010
Tdd cara nov2010
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
 
PJ Tool Box
PJ Tool BoxPJ Tool Box
PJ Tool Box
 
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
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Techdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguerTechdays 2010 : comment hacker PHP sans se fatiguer
Techdays 2010 : comment hacker PHP sans se fatiguer
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Rmll.securite
Rmll.securiteRmll.securite
Rmll.securite
 
Formation php pdo
Formation php pdoFormation php pdo
Formation php pdo
 
What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015What we've learnt from Ember.js - The family talk april 2015
What we've learnt from Ember.js - The family talk april 2015
 
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot..."What we've learnt from Ember.js developing our new product" by Guillaume Pot...
"What we've learnt from Ember.js developing our new product" by Guillaume Pot...
 
Alphorm.com - Formation programmer en Visual Basic .NET
Alphorm.com - Formation programmer en Visual Basic .NETAlphorm.com - Formation programmer en Visual Basic .NET
Alphorm.com - Formation programmer en Visual Basic .NET
 

Dernier

La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfssuser40e112
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 

Dernier (20)

La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 

Créer une API en 5 mins avec API Platform

  • 2. Créer une API en 5min avec API Platform
  • 3. Créer une API en 5min avec API Platform Les outils La théorie En pratique Mes conseils et astuces
  • 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.
  • 6. Donovan Bourlard | Créer une API en 5 minutes 6 API PLATFORM LES OUTILS
  • 7. Donovan Bourlard | Créer une API en 5 minutes 7 LES OUTILS API PLATFORM api-platform/core
  • 8. Donovan Bourlard | Créer une API en 5 minutes 8 LES OUTILS API PLATFORM Great !!!
  • 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
  • 13. Donovan Bourlard | Créer une API en 5 minutes 13 EN PRATIQUE UN PROJET
  • 14. Donovan Bourlard | Créer une API en 5 minutes 14 EN PRATIQUE UN PROJET
  • 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
  • 21. Donovan Bourlard | Créer une API en 5 minutes 21 EN PRATIQUE CRÉER SON SCHÉMA /** * @ORMEntity */ class Beer { const ONLINE_STATUS = 1; const OFFLINE_STATUS = 2; /** * @ORMId * @ORMColumn(type="uuid", unique=true) * @ORMGeneratedValue(strategy="CUSTOM") * @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator") */ private $id; /** * @ORMColumn(type="string") */ private $name; /** * @ORMColumn(type="text", nullable=true) */ private $description; /** * @ORMColumn(type="boolean") */ private $organic; /** * @ORMManyToOne(targetEntity="Category", inversedBy="beers") */ private $category; /** * @ORMColumn(type="smallint") */ private $status; // Getters + Setters } /** * @ORMEntity */ class Category { /** * @ORMId * @ORMColumn(type="uuid", unique=true) * @ORMGeneratedValue(strategy="CUSTOM") * @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator") */ private $id; /** * @ORMColumn(type="string") */ private $name; /** * @ORMOneToMany(targetEntity="Beer", mappedBy="category") */ private $beers; // Getters + Setters }
  • 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
  • 35. Donovan Bourlard | Créer une API en 5 minutes 35 MES CONSEILS ET ASTUCES ANNOTATION VS YAML /** * @ORMEntity * @ApiResource({ * attributes={ * normalizationContext={"beer_read"}, * denormalizationContext={"beer_write"}, * validationGroups={"beer_write"}, * order={"createdAt": "DESC"} * }, * collectionOperations={ * "get"={ * method="GET", * normalizationContext={"beer_read_collection"}, * filters={ * "beer.date_filter", * "beer.order_filter", * "beer.search_filter" * } * }, * "post"={ * method="POST", * accessControl="is_granted('ROLE_ADMIN')", * normalizationContext={"beer_create"}, * denormalizationContext={"beer_post"}, * validationGroups="{"beer_create"}" * }, * * ... * } * }) */ class Beer
  • 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 ?