Retour sur la conférence Api Platform 2024 : Keynote d'ouverture par Kévin Dunglas

Ahmed Eben Hassine
Ahmed Eben hassine
25 septembre 2024

Codéin, expert en développement Symfony, utilise API Platform dans ses projets. En tant que sponsor et participant à l'API Platform Conference 2024, nous avons eu l’occasion de plonger au cœur des discussions techniques.

Cet événement, destiné avant tout à un public technique expérimenté, s'est distingué par la qualité de son contenu, en faisant un rendez-vous incontournable pour les professionnels du secteur. Pour vous faire revivre les moments clés des conférences, nous avons préparé une série d’articles. Que vous soyez un développeur aguerri ou simplement curieux des dernières innovations autour des API, on espère vous inspirer et vous donner des pistes pour vos projets.

Ces articles condensent nos notes avec les points les plus intéressants que nous avons retenus.

Dans ce premier article, nous vous proposons un retour détaillé sur la keynote d'ouverture.  

 

Opening Keynote

Kévin DUNGLAS https://x.com/dunglas

Kévin Douglas est le fondateur de la scop Les-Tilleuls.coop et créateur de solutions open-source telle que : Api Platform, Mercure, Franken PHP, Volcain et bien d'autres !

Kevin Dunglas_ApiPlatformcon2024

Depuis la version 2, API Platform est devenu une bibliothèque PHP standalone, permettant son utilisation en dehors de tout framework. Vous pouvez désormais l'installer et l'utiliser sans être lié à un framework spécifique. Pour savoir comment l'implémenter de manière indépendante, consultez la documentation détaillée ici : https://api-platform.com/docs/core/bootstrap.
API Platform simplifie la création d'API REST tout en facilitant l'extension de ses composants, en respectant les standards de l'industrie comme JSON-LD/RDF, JSON, HAL, ainsi que diverses RFCs. Il prend en charge une large gamme de bases de données, notamment PostgreSQL, MongoDB, ElasticSearch, SQLite, MySQL, MariaDB, SQL Server et Oracle.

Compatibilité d'API Platform avec Symfony et Laravel

Depuis la version 4 d’API Platform, deux intégrations officielles sont proposées :

  • api-platform/symfony : conçu pour Symfony, ce support est disponible depuis la création du framework, à noter que le premier release nommé DunglasApiBundle date d'environ 2015 ⏰
  • api-platform/laravel : destiné à Laravel, introduit dans la version 4, avec une contribution majeure de la part de soyuka en juin 2023 (PR 5882) ⚡

Symfony et Laravel sont tous deux considérés comme des first-class citizens, avec le même niveau de support et de fonctionnalités.  
Kevin a mentionné pendant le talk que la plupart des features sont disponibles à approximativement ~90% pour les deux frameworks.

Un code partagé pour deux frameworks

Les intégrations de Symfony et Laravel partagent la même base de code. API Platform utilise un monolithic api-platform/core repository avec une gestion via read-only subtree, garantissant une mise à jour centralisée et uniforme pour les deux frameworks.

 

Changelog de la release 4.0 : les features à retenir

  • Support du CsvEncoder (PR 6617) lorsqu'il s'agit d'adapter la réponse lors du mécanisme du `content négocation` à noter que par défaut, la réponse est au format JSON-LD.
  • Support pour plusieurs types Eloquent. (PR 6544)
  • Activation de GraphQL, via la configuration config/api-platform.php avec l'option graphql.enabled
  • Gestion des policies, authentification, et autorisations via policy, auth, et gate. (PR 6523)
  • Filtres de recherche de données : search, date, equals, or (PR 6534) (PR 6593)
  • Règles de validation pour les filtres.
  • Pagination automatique des collections de données
  • Possibilité d'exposer un modèle Eloquent en incorporant le trait ApiPlatform\Metadata\IsApiResource . (PR 6543)

 

Optimisations générales
  • Suppression du préfixe Hydra, "hydra:member " serait "member " "hydra:view " serait "view " etc (PR 6418)
  • Génération automatique des routes REST, documentation OpenAPI et support avancé de GraphQL compatible avec les spécifications Relay.
  • Nouveau filtre pour les entités utilisant doctrine enum type. (PR 6547)
 * use ApiPlatform\Doctrine\Orm\Filter\BackedEnumFilter;
 *
 * #[ApiResource]
 * #[ApiFilter(BackedEnumFilter::class, properties: ['status'])]
 * class Book
 
Design Patterns de persistance des données
        Data Mapper Pattern (Doctrine) :

        Ce modèle dissocie entièrement la logique de persistance des données de la logique métier. Un mapper est responsable de la gestion de la liaison entre les objets et la base de données, ce qui permet une flexibilité accrue etfacilite les tests.

        Active Record Pattern (Eloquent) :

        Dans ce modèle, chaque objet est directement associé à une table de la base de données. Les opérations CRUD (Create, Read, Update, Delete) sont intégrées directement dans les objets, simplifiant ainsi la gestion de la persistance des données.

Dans le contexte du Laravel, API Platform effectue automatiquement une pré-requête de la base de données (colonnes, types, contraintes...) pour générer les métadonnées essentielles à la génération des ressources API ainsi qu'à la documentation OpenAPI et Hydra. Ces métadonnées sont mises en cache afin d'optimiser les performances.

Guide d'implémentation avec Laravel

1. Installer la dépendence API Platform :

composer require api-platform/laravel:^4

2. Créer un modèle Eloquent intitulé par exemple Book en héritant de la classe Illuminate\Database\Eloquent\Model.

3. Générer une migration et l'exécuter :

php artisan make:migration && php artisan migrate

4. Exposer le modèle en utilisant l'attribut #[ApiResource], et instantanément, nous obtiendrons une API fonctionnelle avec une spécification OpenAPI, accessible via Swagger UI.

Gestion des filtres dans API Platform

API Platform met à disposition de Laravel plusieurs built-in filters pour simplifier les recherches :

Pour garantir l'intégrité des données, API Platform se charge de la validation de ces filtres

Possibilité d'ajouter des filtres personnalisés et d'en valider les valeurs, ou alors décorer les filtres existants.

Pour connecter un filtre sur une ressource existante, il est recommandé l'utilisation de QueryParameter plutôt qu'ApiFilter pour plus de flexibilité. Cela pourrait changer dans la prochaine version majeure.

 

Configuration de l'API ⚙️

API Platform est hautement configurable :

  • Globalement via le fichier config/api-platform.yaml pour des réglages communs.
  • Par ressource avec l'attribut#[ApiResource] pour personnaliser une ressource spécifique.
  • Par opération en utilisant des attributs comme #[Post] pour ajuster les comportements des actions (POST, PATCH, GET).
  • API Platform permet de contrôler quels champs seront exposés publiquement par l'API en utilisant la même syntaxe que la sérialisation Eloquent :
use ApiPlatform\Metadata\ApiResource;
use Illuminate\Database\Eloquent\Model;

#[ApiResource]
class Book extends Model
{
    /**
     * Les attributs qui doivent être masqués.
     *
     * @var array
     */
    protected $hidden = ['isbn'];
}
 
Authentification ꗃ

API Platform s’intègre nativement avec les mécanismes d'authentification de Laravel, prenant en charge :

  • Laravel Sanctum : pour les Single Page Applications (SPA) et les API utilisant des tokens.
  • Laravel Passport : pour configurer un serveur OAuth.
  • Laravel Socialite : pour l'authentification via des services tiers (Facebook, X, LinkedIn, Google, GitHub, etc.).

Ces intégrations permettent de gérer divers niveaux de sécurité et d'authentification, selon les besoins.

 

Validation et Autorisation des opérations d’écriture

Pour autoriser des opérations comme POST, PATCH, ou PUT tout en validant les entrées utilisateur, vous pouvez générer une classe Form Request via :

php artisan make:request BookFormRequest

Cette approche permet de centraliser la validation des données, ce qui rend le code plus maintenable et sécurisé. Pour plus de détails, n'hésitez pas à consulter la documentation à l'adresse suivante : https://laravel.com/docs/11.x/validation#creating-form-requests

 

FrankenPHP (◕‿◕)

 

FrankenPHP

 

Un autre sujet abordé est FrankenPHP, un serveur d'applications PHP performant, écrit en GO qui :

  • Supporte nativement HTTP/1, HTTP/2, HTTP/3 et gère automatiquement les certificats TLS.
  • Améliore les performances avec les Early Hints et un mode worker.
  • Gère le temps réel via Mercure (alternative aux WebSockets).
  • Intègre Xdebug et OpCache.

Pour l'utiliser avec le framework Laravel :

composer require laravel/octane  
php artisan octane:install --server=frankenphp  
php artisan octane:frankenphp

 

Chez Codéin, nous apprécions API Platform pour sa flexibilité et sa capacité à s'intégrer facilement dans nos projets Symfony, et nous l'utilisons régulièrement à cet effet. L'ajout du support pour Laravel nous ouvre de nouvelles perspectives, notamment pour des projets internationaux.

À la recherche d'une nouvelle opportunité ? Voir toutes les offres
Découvrez quelques uns de nos projets Symfony Voir les projets

A lire aussi

Notre point de vue technique sur la DXP Ibexa
Voir tous les articles