SlideShare une entreprise Scribd logo
La validation des contrats
d’interfaces au format OpenAPI
Meetup - 16 Mai 2017
Marseille PHP User Group - AFUP
Nicolas Macherey – Fondateur WakeOnWeb
OpenAPI/Swagger: Qu’est-ce que c’est ?
• Un format simple, compréhensible et collaboratif
• Complet, très répandu
• YAML ou JSON
• Structuré et respectant l’HTTP
• Facile à intégrer au SCM (Git ou autre)
• Permet de sortir une doc simple et compréhensible
• Des outils dédiés
• Swagger Editor: Editeur web avancé avec système de validation
• Swagger UI: Générateur de documentation à partir de la spec
• Swagger CodeGen: Générateur de code client/serveur
Swagger UI permet aussi de tester les APIs manuellement en
faisant des appels depuis l’interface exposant la documentation.
http://swagger.io/
swagger: '2.0’
info:
version: "1.0.0"
title: Basic Auth Example
description: |
An example for how to use Basic Auth with Swagger.
**User Name and Password**
* User Name: `user`
* Password: `pass`
host: basic-auth-server.herokuapp.com
schemes:
- http
- https
securityDefinitions:
basicAuth:
type: basic
description: HTTP Basic Authentication….
paths:
/:
get:
security:
- basicAuth: []
responses:
200:
description: Will send `Authenticated`…
Méthodologies: Contract First/Last mais pourquoi ?
Contract Last
Les spécifications d’API sont extraites du code comme un
constat de ce qui a été fait…
• Agile/Plus rapide
• Moins collaboratif Très difficile de paralléliser le travail
• Correspond toujours à la réalité de l’API
Contract First
Les spécifications sont le cœur central du développement
elles sont faites au moment des phases de spécifications
• Facilite le travail parallèle (Gain de productivité)
• Moins agile, nécessite la mise en place de
communications dédiées
• Peut contenir des différences à l’implémentation
(Recette)
• Permet la génération automatique de code serveur
Les enjeux architecturaux récents…
• Propriétés
• Chaque service peut être (et est) conçu, développé, testé et déployé
indépendamment.
• De ce fait, il peut évoluer a son rythme.
• Bénéficie d’une forte cohésion interne à l’application.
• Est parfaitement adapté aux technologies de type docker, permettant
de déployer chaque service dans un conteneur dédié.
• Avantages
• Réduction du Time To Market, notamment en parallélisant les
développements
• Flexibilité technologique et indépendance pour chaque service
• Extensibilité / Evolutivité largement facilité
• Résilience augmentée
• Réduction des coûts de maintenance et d’évolution
• Réduction des risques
Mais il y a tout de même des règles à respecter pour que cela se
passe bien…
API GATEWAY
L’importance de valider que les nouvelles évolutions
respectent les contrats d’interface dans une suite distribuée
(entrée/sortie)
Intégration aux tests automatisés
Intégration continue
Non-Régression
Objectif n°1: Mieux gérer ses évolutions
Identifier les erreurs
Sécuriser ses API
Faciliter ses traitements métiers
Intégration aux frameworks
Intégration en production
Objectif n°2: Faciliter le traitement des requêtes HTTP
WakeOnWeb/swagger: Présentation
▪ Répondre à un besoin (d’abord perso...)
▪ L’existant n’était pas satisfaisant
▪ Faciliter nos phases d’intégrations front/back ou dans nos suites de services
▪ Une première ouverture vers l’OpenSource/Contribution communautaire
▪ Un composant utilisable au sein de tous les frameworks PHP (Silex, Laravel, Symfony…)
▪ Extensible et rapide
▪ Compatible avec différents validateurs de données JSON (JustinRainbow/Jval…)
WakeOnWeb/swagger: Fonctionnalités
▪ Ajout de validateurs personnalisés
▪ Compatibilité PSR-7 (MessageInterface)
▪ Compatibilité PSR-6 (Cache)
▪ Respect de la spécification OpenAPI au format Swagger 2.0 (3.0 à venir)
▪ Gestion des extensions vendor spécifiques
▪ Intégration PHPUnit/Behat
▪ Intégration Symfony
WakeOnWeb/swagger: Installation
> composer require wakeonweb/swagger
> composer require justinrainbow/json-schema
Le composant intègre 1 bridge et permet d’en intégrer
d’autres
// File system for cache storage

$filesystem = new Filesystem(new Local('path/to/wakeonweb/swagger'));

$factory = new SwaggerFactory(new FilesystemCachePool($filesystem));



// Add loader Yaml and JSON supported

$factory->addLoader(new YamlLoader());



// Parse file and store to cache directory and/or read the file content

$swagger = $factory->buildFrom('path/to/swagger.yml');

$this->swaggerValidator = new SwaggerValidator($swagger);



// Register the appropriate JSON Schema Validator for Content validation

$this->swaggerValidator->registerContentValidator(new JustinRainbowJsonSchemaValidator());



// Converts the response to a PRS-7 compliant format.

$response = (new DiactorosFactory())->createResponse($response);



// Validate the response for the given path/method/status

$this->swaggerValidator->validateResponseFor(
$response,

PathItem::METHOD_GET, '/api/users/{id}/orders', 200
);
WakeOnWeb/swagger: Utilisation
WakeOnWeb/swagger: Exemple d’intégration a Behat
class OpenApiValidationContext implements Context, SnippetAcceptingContext

{

use KernelDictionary;

private $swaggerValidator;



/**

* @BeforeScenario

*/

public function loadSwaggerValidator()

{

$kernel = $this->getContainer()->get('kernel'); 

$filesystem = new Filesystem(new Local($kernel->getCacheDir() . '/wakeonweb/swagger'));

$factory = new SwaggerFactory(new FilesystemCachePool($filesystem));

$factory->addLoader(new YamlLoader());

$swagger = $factory->buildFrom($kernel->getRootDir() . '/../docs/api/swagger.yml');

$this->swaggerValidator = new SwaggerValidator($swagger);

$this->swaggerValidator->registerContentValidator(new JustinRainbowJsonSchemaValidator());

} 



/**

* @Then The response should validate :path open api specification with :method method and :statusCode status

*/

public function validateOpenApiSpecification($path, $method = PathItem::METHOD_GET, $statusCode = 200)

{

$this->swaggerValidator->validateResponseFor(
(new DiactorosFactory())->createResponse($this->response), $method, $path, $statusCode);

}
}
WakeOnWeb/swagger: Roadmap
▪ 7 Issues fonctionnelles planifiées pour faire évoluer le système (Juin 2016)
▪ Un travail pour permettre la validation des requêtes en production
▪ Analyse de performances
▪ Optimisation des traitements
▪ Evolutions des validateurs/JSON Schema
▪ Amélioration du processus de mise en cache
▪ Une intégration sous forme de bundle Symfony (Sept 2016) suivant 2 modes:
▪ Listener de requêtes
▪ Annotation
▪ Objectif: Profiter des fonctionnalités du Framework pour matcher les Routes avec les paths swagger
directement dans les Controllers, Intégration au système de gestion du cache de Symfony.
▪ Intégration avec Nelmio/ApiDocBunde (Compatible avec le format OpenAPI)
Merci
Si vous avez des questions…

Contenu connexe

Tendances

Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
Amélie DUVERNET
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
Xavier Gorse
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
Pascal MARTIN
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
Anthony Sigogne
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
Hugo Hamon
 
Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016
Julia Mateo
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
Erwann Robin
 
Introduction webextensions
Introduction webextensionsIntroduction webextensions
Introduction webextensions
Christophe Villeneuve
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
Nicolas Lœuillet
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
Mickael Couzinet
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Silicon Comté
 
Du Docker dans notre workflow de dev
Du Docker dans notre workflow de devDu Docker dans notre workflow de dev
Du Docker dans notre workflow de dev
Kodo Kojo
 
iGraal et les webextensions
iGraal et les webextensionsiGraal et les webextensions
iGraal et les webextensions
Christophe Fernandes
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924Gregory Boissinot
 
Le portage des WebExtensions
Le portage des WebExtensionsLe portage des WebExtensions
Le portage des WebExtensions
Christophe Villeneuve
 
[French] Discover haxe
[French] Discover haxe[French] Discover haxe
[French] Discover haxe
Axel Anceau
 
Debian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetupDebian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetup
Jean Baptiste Favre
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Aurelien Navarre
 

Tendances (20)

Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
 
Déploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec RancherDéploiement et gestion d'un site web avec Rancher
Déploiement et gestion d'un site web avec Rancher
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016
 
BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
 
Introduction webextensions
Introduction webextensionsIntroduction webextensions
Introduction webextensions
 
wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3wallabag, comment on a migré vers symfony3
wallabag, comment on a migré vers symfony3
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
Du Docker dans notre workflow de dev
Du Docker dans notre workflow de devDu Docker dans notre workflow de dev
Du Docker dans notre workflow de dev
 
iGraal et les webextensions
iGraal et les webextensionsiGraal et les webextensions
iGraal et les webextensions
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
Le portage des WebExtensions
Le portage des WebExtensionsLe portage des WebExtensions
Le portage des WebExtensions
 
[French] Discover haxe
[French] Discover haxe[French] Discover haxe
[French] Discover haxe
 
Debian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetupDebian usage at BlaBlaCar - Debian Paris meetup
Debian usage at BlaBlaCar - Debian Paris meetup
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
 

Similaire à AFUP Aix/Marseille - 16 mai 2017 - Open API

Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
Marc Bojoly
 
Supervision et analyse de script batch
Supervision et analyse de script batchSupervision et analyse de script batch
Supervision et analyse de script batch
schomy
 
CloudUnit le PaaS par TreeptiK
CloudUnit le PaaS par TreeptiKCloudUnit le PaaS par TreeptiK
CloudUnit le PaaS par TreeptiKAmico Fabien
 
Cerberus Testing
Cerberus TestingCerberus Testing
Cerberus Testing
CIVEL Benoit
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
MSDEVMTL
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Investir sur son API web (in French)
Investir sur son API web (in French)Investir sur son API web (in French)
Investir sur son API web (in French)
Restlet
 
Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?
Frederic Dewinne
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
Nicolas Herbaut
 
Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1
Jean-Emmanuel Houdu
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1
Marc Bojoly
 
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
Arcbees
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
Nicolas wallerand
 
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Publicis Sapient Engineering
 
Dossier de competences MA
Dossier de competences MADossier de competences MA
Dossier de competences MA
Clementine D.
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et Web
Christophe Rochefolle
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
Microsoft
 

Similaire à AFUP Aix/Marseille - 16 mai 2017 - Open API (20)

Perf university
Perf universityPerf university
Perf university
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Supervision et analyse de script batch
Supervision et analyse de script batchSupervision et analyse de script batch
Supervision et analyse de script batch
 
CloudUnit le PaaS par TreeptiK
CloudUnit le PaaS par TreeptiKCloudUnit le PaaS par TreeptiK
CloudUnit le PaaS par TreeptiK
 
Cerberus Testing
Cerberus TestingCerberus Testing
Cerberus Testing
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Investir sur son API web (in French)
Investir sur son API web (in French)Investir sur son API web (in French)
Investir sur son API web (in French)
 
Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?Mon environnement de travail a-t-il encore un avenir ?
Mon environnement de travail a-t-il encore un avenir ?
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1
 
Performance ug#1
Performance ug#1Performance ug#1
Performance ug#1
 
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...Uni.sherbrooke 2015   créez la meilleur application grâce à gwt, gwtp et j...
Uni.sherbrooke 2015 créez la meilleur application grâce à gwt, gwtp et j...
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
Open XKE - Introduire le Continuous Delivery dans votre entreprise par Jean-L...
 
Dossier de competences MA
Dossier de competences MADossier de competences MA
Dossier de competences MA
 
Qualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et WebQualité Logiciel - Outils Open Source pour Java et Web
Qualité Logiciel - Outils Open Source pour Java et Web
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Java dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de JonasJava dans Windows Azure: l'exemple de Jonas
Java dans Windows Azure: l'exemple de Jonas
 

Dernier

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 

Dernier (6)

Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 

AFUP Aix/Marseille - 16 mai 2017 - Open API

  • 1. La validation des contrats d’interfaces au format OpenAPI Meetup - 16 Mai 2017 Marseille PHP User Group - AFUP Nicolas Macherey – Fondateur WakeOnWeb
  • 2. OpenAPI/Swagger: Qu’est-ce que c’est ? • Un format simple, compréhensible et collaboratif • Complet, très répandu • YAML ou JSON • Structuré et respectant l’HTTP • Facile à intégrer au SCM (Git ou autre) • Permet de sortir une doc simple et compréhensible • Des outils dédiés • Swagger Editor: Editeur web avancé avec système de validation • Swagger UI: Générateur de documentation à partir de la spec • Swagger CodeGen: Générateur de code client/serveur Swagger UI permet aussi de tester les APIs manuellement en faisant des appels depuis l’interface exposant la documentation. http://swagger.io/ swagger: '2.0’ info: version: "1.0.0" title: Basic Auth Example description: | An example for how to use Basic Auth with Swagger. **User Name and Password** * User Name: `user` * Password: `pass` host: basic-auth-server.herokuapp.com schemes: - http - https securityDefinitions: basicAuth: type: basic description: HTTP Basic Authentication…. paths: /: get: security: - basicAuth: [] responses: 200: description: Will send `Authenticated`…
  • 3. Méthodologies: Contract First/Last mais pourquoi ? Contract Last Les spécifications d’API sont extraites du code comme un constat de ce qui a été fait… • Agile/Plus rapide • Moins collaboratif Très difficile de paralléliser le travail • Correspond toujours à la réalité de l’API Contract First Les spécifications sont le cœur central du développement elles sont faites au moment des phases de spécifications • Facilite le travail parallèle (Gain de productivité) • Moins agile, nécessite la mise en place de communications dédiées • Peut contenir des différences à l’implémentation (Recette) • Permet la génération automatique de code serveur
  • 4. Les enjeux architecturaux récents… • Propriétés • Chaque service peut être (et est) conçu, développé, testé et déployé indépendamment. • De ce fait, il peut évoluer a son rythme. • Bénéficie d’une forte cohésion interne à l’application. • Est parfaitement adapté aux technologies de type docker, permettant de déployer chaque service dans un conteneur dédié. • Avantages • Réduction du Time To Market, notamment en parallélisant les développements • Flexibilité technologique et indépendance pour chaque service • Extensibilité / Evolutivité largement facilité • Résilience augmentée • Réduction des coûts de maintenance et d’évolution • Réduction des risques Mais il y a tout de même des règles à respecter pour que cela se passe bien… API GATEWAY
  • 5. L’importance de valider que les nouvelles évolutions respectent les contrats d’interface dans une suite distribuée (entrée/sortie) Intégration aux tests automatisés Intégration continue Non-Régression Objectif n°1: Mieux gérer ses évolutions
  • 6. Identifier les erreurs Sécuriser ses API Faciliter ses traitements métiers Intégration aux frameworks Intégration en production Objectif n°2: Faciliter le traitement des requêtes HTTP
  • 7. WakeOnWeb/swagger: Présentation ▪ Répondre à un besoin (d’abord perso...) ▪ L’existant n’était pas satisfaisant ▪ Faciliter nos phases d’intégrations front/back ou dans nos suites de services ▪ Une première ouverture vers l’OpenSource/Contribution communautaire ▪ Un composant utilisable au sein de tous les frameworks PHP (Silex, Laravel, Symfony…) ▪ Extensible et rapide ▪ Compatible avec différents validateurs de données JSON (JustinRainbow/Jval…)
  • 8. WakeOnWeb/swagger: Fonctionnalités ▪ Ajout de validateurs personnalisés ▪ Compatibilité PSR-7 (MessageInterface) ▪ Compatibilité PSR-6 (Cache) ▪ Respect de la spécification OpenAPI au format Swagger 2.0 (3.0 à venir) ▪ Gestion des extensions vendor spécifiques ▪ Intégration PHPUnit/Behat ▪ Intégration Symfony
  • 9. WakeOnWeb/swagger: Installation > composer require wakeonweb/swagger > composer require justinrainbow/json-schema Le composant intègre 1 bridge et permet d’en intégrer d’autres
  • 10. // File system for cache storage
 $filesystem = new Filesystem(new Local('path/to/wakeonweb/swagger'));
 $factory = new SwaggerFactory(new FilesystemCachePool($filesystem));
 
 // Add loader Yaml and JSON supported
 $factory->addLoader(new YamlLoader());
 
 // Parse file and store to cache directory and/or read the file content
 $swagger = $factory->buildFrom('path/to/swagger.yml');
 $this->swaggerValidator = new SwaggerValidator($swagger);
 
 // Register the appropriate JSON Schema Validator for Content validation
 $this->swaggerValidator->registerContentValidator(new JustinRainbowJsonSchemaValidator());
 
 // Converts the response to a PRS-7 compliant format.
 $response = (new DiactorosFactory())->createResponse($response);
 
 // Validate the response for the given path/method/status
 $this->swaggerValidator->validateResponseFor( $response,
 PathItem::METHOD_GET, '/api/users/{id}/orders', 200 ); WakeOnWeb/swagger: Utilisation
  • 11. WakeOnWeb/swagger: Exemple d’intégration a Behat class OpenApiValidationContext implements Context, SnippetAcceptingContext
 {
 use KernelDictionary;
 private $swaggerValidator;
 
 /**
 * @BeforeScenario
 */
 public function loadSwaggerValidator()
 {
 $kernel = $this->getContainer()->get('kernel'); 
 $filesystem = new Filesystem(new Local($kernel->getCacheDir() . '/wakeonweb/swagger'));
 $factory = new SwaggerFactory(new FilesystemCachePool($filesystem));
 $factory->addLoader(new YamlLoader());
 $swagger = $factory->buildFrom($kernel->getRootDir() . '/../docs/api/swagger.yml');
 $this->swaggerValidator = new SwaggerValidator($swagger);
 $this->swaggerValidator->registerContentValidator(new JustinRainbowJsonSchemaValidator());
 } 
 
 /**
 * @Then The response should validate :path open api specification with :method method and :statusCode status
 */
 public function validateOpenApiSpecification($path, $method = PathItem::METHOD_GET, $statusCode = 200)
 {
 $this->swaggerValidator->validateResponseFor( (new DiactorosFactory())->createResponse($this->response), $method, $path, $statusCode);
 } }
  • 12. WakeOnWeb/swagger: Roadmap ▪ 7 Issues fonctionnelles planifiées pour faire évoluer le système (Juin 2016) ▪ Un travail pour permettre la validation des requêtes en production ▪ Analyse de performances ▪ Optimisation des traitements ▪ Evolutions des validateurs/JSON Schema ▪ Amélioration du processus de mise en cache ▪ Une intégration sous forme de bundle Symfony (Sept 2016) suivant 2 modes: ▪ Listener de requêtes ▪ Annotation ▪ Objectif: Profiter des fonctionnalités du Framework pour matcher les Routes avec les paths swagger directement dans les Controllers, Intégration au système de gestion du cache de Symfony. ▪ Intégration avec Nelmio/ApiDocBunde (Compatible avec le format OpenAPI)
  • 13. Merci Si vous avez des questions…