Les bonnes pratiques à retenir de l’API Platform Con 2022

Retour sur cette conférence organisée par les tilleuls.coop, les 15 et 16 septembre à Lille et en ligne.

CBTW
L’Actualité Tech — Blog CBTW
10 min readOct 27, 2022

--

API Platform Con 2022

API Platform est un framework web écrit en PHP et basé sur Symfony, créé en 2015 par Kévin Dunglas. Il permet de générer facilement des API REST et GraphQL pour concevoir des applications API first.

Pour la deuxième édition de l’API Platform Con, les équipes Linkvalue et Positive Thinking Company faisaient partie des sponsors, ainsi que des 700 participants aux talks.
Pendant ces deux jours, nous avons eu l’occasion d’assister à différentes conférences anglophones et francophones.

Dans cet article, nous vous partageons un résumé des points clés à retenir sur l’ensemble des conférences que nous avons le plus appréciées.

API Platform 3 : La release

Kévin Dunglas lui-même a ouvert l’événement avec une mise en ligne en direct de la version 3.0.0 du framework.

Cette nouvelle version implique des changements majeurs en termes de design, d’expérience utilisateur et d’autonomie des outils. En plus de limiter la dette technique, elle facilite l’adaptation avec les principes de DDD et de micro-services, apporte une clarification vers un framework orienté ressource et la possibilité d’import de modèles de données.

L’ensemble des nouvelles fonctionnalités et des changements de cette version sont détaillés dans un fichier CHANGELOG, et un guide est mis à disposition pour aider à la mise à jour de version.

Domain Driven Design avec API Platform 3

Mathias Arlaud et Robin Chalas, deux experts Symfony chez Les Tilleuls, sont adeptes du DDD. Pas tant pour gagner en rapidité que pour se simplifier la vie quand on a des attentes métier complexes.
Le Domain Driven Design est en effet une approche basée sur la compréhension d’un métier pour résoudre des problématiques.

Ils présentent donc comment le DDD, mais aussi l’architecture hexagonale, peut être mis en place avec API Platform 3.
Cela commence par une architecture de dossier plus complète, qui permet de comprendre le métier d’un coup d’œil.

Par exemple, au lieu de tout mettre dans une entité Book et un BookRepository, on retrouve un système de sous-dossiers BookStore > Application > Command > DiscountBookCommand.php

Exemples d’architecture de dossiers

Et avec l’architecture hexagonale, le répertoire comporte 3 dossiers :
- Domain : Models, Value Objects, Events, Repositories
- Application : Use cases, Application services, DTOs, Commands, Queries
- Infrastructure : Controller, Databases, Caches, Vendors

Architecture hexagonale

Cela comporte différents avantages :

  • Seul le dossier infrastructure connaît les autres dossiers et peut communiquer avec eux,
  • L’intégrité du domaine est préservée,
  • Le code peut davantage être testé,
  • Les décisions technologiques peuvent être différées,
  • Le domaine est agnostique vis-à-vis de l’extérieur.

Un exemple de projet utilisant API Platform 3 et suivant les principes de l’architecture hexagonale est disponible ici : github.com/mtarld/apip-ddd

API Platform au quotidien dans une entreprise e-commerce et logistique

Pendant ce talk, Clément Sanchez et Kévin Verschaeve, tous les deux lead developer chez PerfectDraft, ont présenté les situations auxquelles ils ont été confrontés et comment ils les ont résolues avec API Platform.

ContextBuilder

Problématique rencontrée : Comment gérer les besoins de 2 clients utilisant les mêmes endpoints ?
Solution : Utiliser le ContextBuilder pour distinguer ce qu’il faut renvoyer au client.

Un ContextBuilder permet effectivement de changer dynamiquement le contexte (par exemple les groupes de sérialisation) d’une requête pour envoyer différentes données aux clients.

DataPersister

Problématique rencontrée : Comment ajouter une fonctionnalité SoftDelete avec des données historiques qui ne peuvent pas être supprimées, mais qui ne sont plus utilisées en dehors des exports ?

Solution : Utiliser un DataPersister personnalisé avec une interface (isActive, setActive) pour les entités concernées et une méthode remove qui met active à false.

Il faut alors passer par une extension pour ne pas retourner les objets inactifs si l’entité implémente l’interface.
Un DataPersister permet de gérer la manière dont une ressource doit être sauvegardée ou supprimée.

Extension

Problématique rencontrée : Des données sont accessibles par différentes organisations. Ce qui n’est pas sécurisé ou en accord avec le cadre RGDP. Comment isoler et protéger ses données ?

Solution : Ajouter une extension. Ainsi, si l’entité implémente une interface, on récupère l’organisation du header et on enlève les données auxquelles l’organisation n’a pas accès.

Filter

Problématique : Faire une recherche par numéro de téléphone, avec une donnée qui peut être sauvegardée à différents endroits.
Comment faire une recherche sur différents champs à la fois dans une base de données ?

Solution : Ajout d’un custom filter avec une requête dql custom. Cela permet de changer la requête transmise à la base de données et de définir les propriétés auxquelles elle s’applique.

Normalizer

Problématique : Besoin de données calculées complexes (API Externe / ES / Service…).
Comment faire ces calculs avant de transmettre une réponse au client ?

Solution : Ajout d’un normalizer custom pour calculer des données le moment voulu. Un normalizer permet de passer d’un objet à un array et inversement en ajoutant des calculs personnalisés sur des champs spécifiques.

DataProvider

Problématique : Des produits sont dupliqués, et certains sont identifiés par un code barre et d’autres par un identifiant. Comment retrouver un produit facilement à partir de l’une de ces données ?

Solution : Paramétrer un DataProvider qui vérifie le code barre d’un produit. Et si celui est inexistant, qui effectue une recherche par identifiant.

Un DataProvider permet de gérer la manière dont une ressource est recherchée.

IriConverter

Problématique : On peut retrouver un produit depuis son code barre ou son identifiant, mais il faut que ce soit le code barre qui apparaît dans l’IRI. Est-il possible de construire une IRI à partir d’un autre champ ?

Solution : IriConverter, permet d’avoir le code barre dans l’IRI s’il est disponible.
Un IriConverter est utilisé pour construire un identifiant pour toutes les ressources de l’application.

Ces différents points permettent d’affirmer qu’API Platform est autant pratique dans le cadre de petits projets que de plus gros, comme c’est le cas chez Perfect Draft.
Ces multiples fonctionnalités et l’aspect open source de la plateforme permettent de personnaliser selon ses besoins et de proposer des optimisations.

Comment Alice Garden’s gère-t-elle son code métier via les évènements ?

Il est aussi intéressant de souligner que l’utilisation d’API Platform n’est pas l’apanage des entreprises tech, mais un outil que tous types d’entreprises peuvent s’approprier.
Par exemple, Alice Garden, spécialiste de la vente de mobilier d’extérieur s’appuie sur API Platform pour atteindre ses objectifs.
Leurs défis sont de maintenir à jour leurs applications en conservant des exigences techniques et de faire grandir la société et le chiffre d’affaires.

En se basant sur la stack technique déjà présente : Symfony, RabbitMQ, MariaDB et sans tout refondre, comment faire pour mieux gérer le code métier, actuellement éparpillé ?
Nicolas Lemahieu, expert Symfony dans l’entreprise, explique qu’en effet leur code métier était découpé et dispersé, mais manquait aussi de typage et de tests réalisés.
Après avoir mutualisé leurs deux bases de données et leurs deux back office avec Symfony et Gitflow et une mise en place de la CI, ils ont également adopté d’autres bonnes pratiques.
À commencer par le rangement et la création d’objets métier avec un typage fort et facilement testables, une refactorisation du code métier et des services, la création d’un event bundle, mais aussi la mise en place des principes de DDD et de provider d’événement.

Ces changements leur ont permis d’avoir un seul maître des subscribers, et un code beaucoup plus ordonné et plus simple à tester, et donc plus propre et maintenable, et de faciliter les montées de version.

Pourquoi je n’utilise pas API Platform

Le marché de la gestion des APIs est en croissance de plus de 28% par an selon le cabinet Adroit Market Research.
Toutefois l’utilisation d’API Platform n’est pas toujours une évidence et peut parfois être remise en question.
Frédéric Bouchery, expert PHP, fait notamment partie des personnes qui ne sont pas utilisatrices.

Parmi les raisons invoquées, l’on retrouve :

  • Le fait que le framework soit écrit en PHP. Une technologie dont l’utilisation par les développeurs diminue au profit d’autres langages plus rapides (https://www.jetbrains.com/fr-fr/lp/devecosystem-2021/).
    Malgré cela il faut considérer que plus de la moitié des sites web dans le monde reposent sur du PHP, qui n’est donc pas prêt de disparaître.
  • API Platform se base également sur le framework Symfony qui n’est utilisé qu’en France contrairement à Laravel.
  • Certains aspects de fonctionnement restent opaques avec beaucoup de possibilités pour peu de configuration.
  • Un choix pas toujours adapté sur des projets accumulant déjà beaucoup de dette technique.

Comment contribuer à API Platform ?

API Platform est un projet open source, auquel plus de 700 contributeurs ont collaboré depuis sa création. Dont Jérôme Tanghe, développeur chez Les-Tilleuls.coop.

Pour faire des demandes d’évolution qui correspondent à ses besoins et optimiser le code existant, il est donc possible de contribuer directement.

Pour cela, il convient déjà de sélectionner le dépôt auquel on souhaite contribuer (core, docs…).
Il y a également différents labels pour aider à choisir les tickets que l’on souhaite résoudre (help wanted, easy pick, bug…). Pour débuter les tickets easy pick correspondent à ceux faciles d’accès.

Il n’y aucune pression de délai pour traiter un ticket.
Il faut partir de la branche principale. Et pour une correction, de la version 2.7, car la version 3.0 est similaire mais sans la dette technique. La core team se charge de porter votre modification sur la 3.0 après validation. Et une fois mergée, c’est eux qui prennent le relais.
Aussi, il ne faut pas prendre les retours des évaluateurs de manière personnelle, il s’agit de retours qui se veulent objectifs, bien qu’ils puissent également avoir tort.

Il est aussi possible de contribuer au projet sans développer, que ce soit en signalant des bugs, en suggérant des fonctionnalités, en contribuant à la documentation et en testant les pré-versions.

Des guides de contribution sont disponibles sur le site d’API Platform, ainsi qu’un article de nos équipes :

La revue de code est un art

Les contributions à un projet font l’objet de Pull Request (PR).

L’intérêt de faire des PR est de valider les changements, de contrôler la qualité en prévenant des bugs et oublis, et donc de faire progresser les contributeurs et l’esprit d’équipe. C’est aussi une pratique de transparence qui permet de servir d’historique.

Smaïne Milianni, développeur Symfony certifié, précise qu’une bonne PR permet de faire une bonne revue de code. Pour cela, elle doit être bien décrite en précisant les raisons du changement proposé. Cela passe par un nom de commit précis et une description détaillée.
Il est aussi intéressant de diviser sa PR en plusieurs PR spécifiques par fonctionnalité.
Elle peut également être commentée en avance pour indiquer les endroits critiques et indiquer un avis personnel sur son propre code
La PR doit aussi avoir été testée en amont, puis avoir fait l’objet d’une auto review une fois générée.

Concernant les retours faits suite à la revue de code, il ne s’agit pas de les prendre personnellement mais d’être ouvert aux remarques et réactif aux modifications à apporter.
Et lorsqu’on est relecteur, il faut penser à bien lire la description, regarder les liens et les tests et mesurer le code coverage.
Il faut être en mesure de comprendre ce qu’on va revoir, prendre son temps et donner une approbation qui engage sa responsabilité.

Webauthn : se débarrasser des mots de passe définitivement

Comment sécuriser les API et les applications pour éviter les problèmes de sécurité ? Pour Florent Morselli, développeur PHP, la réponse est : Grâce à WebAuthn.

Le problème avec les mots de passe c’est qu’une majorité d’applications en sont dépendantes bien qu’un bon mot de passe peut être difficile à trouver et à choisir.
Ces derniers peuvent donc facilement être hackés. C’est ainsi qu’en 2019, une archive contenant les informations de plus de 2 milliards de comptes piratés sur différentes plateformes avait été découverte en ligne (cf Collection #1).
De plus la sécurité d’un mot de passe est aussi compromise lorsqu’il est partagé dans le navigateur, pendant son transport jusqu’au serveur et lorsqu’il est partagé à des tiers (collègues par exemple) par des outils de messagerie.
Le problème vient des mots de passe eux-mêmes, qui sont déchiffrables, réutilisables, et partageables.
Du coup ne faudrait-il pas s’en séparer ?

L’alliance FIDO (Fast IDentity Online) œuvre depuis 2013 pour réduire la dépendance aux mots de passe et développer et promouvoir d’autres modes d’identification. Dont des standards comme Webauthn, qui est une simple API qui permet de générer des clés cryptographiques. Cela fonctionne sur un système de clés publiques et privées, qui sont stockées dans le matériel (Google Authenticator, etc.).
Chaque échange est fait via deux requêtes : la première charge les options de sécurité, et ensuite l’utilisateur retourne via une interaction (vocale, digitale, faciale, …) la réponse formatée en json au service d’authentification.

Il est donc possible de se passer des mots de passe grâce aux clés cryptographiques. D’ailleurs un domaine, c’est une paire de clés qui ne quitte pas le système d’authenticator.

Pour l’utilisateur c’est beaucoup d’actions en moins, et moins de choses à se souvenir, car il n’y a plus besoin de validation d’authenticité otp (one-time password).

Côté API Platform, la vérification des mots de passe repose directement sur PHP et Symfony qui gèrent cet aspect via la fonction de hash, la gestion de session, les cookies signés et la protection XSS.

Merci à nos collaborateurs, Gauthier et Gabriel, pour leurs retours sur ces conférences.

Par ailleurs, nous publions régulièrement des articles sur des sujets de développement produit web et mobile, data et analytics, sécurité, cloud, hyperautomatisation et digital workplace.
Suivez-nous pour être notifié des prochains articles et réaliser votre veille professionnelle.

Retrouvez aussi nos publications et notre actualité via notre newsletter, ainsi que nos différents réseaux sociaux : LinkedIn, Twitter, Youtube, Twitch et Instagram

Vous souhaitez en savoir plus ? Consultez notre site web et nos offres d’emploi.

--

--

CBTW
L’Actualité Tech — Blog CBTW

Nos experts partagent leur vision et leur veille en développement web et mobile, data et analytics, sécurité, cloud, hyperautomation et digital workplace.