Sortie d'API Platform 4.3 : rencontre avec l'IA
Publié le 13 mars 2026
Nous sommes ravis d'annoncer la sortie d'API Platform 4.3 ! Cette version introduit une fonctionnalité majeure : le support natif du Model Context Protocol (MCP), permettant à vos ressources d'être directement consommées par des agents IA. Au-delà du MCP, cette version apporte des capacités de filtrage avancées, des optimisations de sécurité, une meilleure conformité aux standards et une toute nouvelle interface pour la doc.
Depuis la 4.2, la communauté a été particulièrement active : 349 contributions ont été mergées par 60 contributeurs et contributrices. Un immense merci à toutes celles et ceux qui nous ont aidés ! Cet article est disponible dans sa langue d'origine.
#Le composant MCP : Exposez votre API aux agents IA
La grande nouveauté de cette 4.3 est notre nouveau composant MCP (Model Context Protocol). Le MCP est un standard ouvert qui permet aux agents IA (comme Claude, ChatGPT ou vos propres outils basés sur les LLM) de découvrir et d'interagir avec les APIs de manière structurée. Avec API Platform, vos ressources existantes peuvent désormais être exposées comme outils et ressources MCP avec un minimum de configuration.
L’attribut McpTool transforme n’importe quelle classe en un outil appelable par une IA. Définissez un schéma d'entrée via les propriétés de votre classe, pointez vers un processor, et le tour est joué :
use ApiPlatform\Metadata\McpTool;
#[McpTool(
name: 'process_message',
description: 'Process a message with priority',
processor: [McpToolAttribute::class, 'process']
)]
class McpToolAttribute
{
public function __construct(
private string $message,
private int $priority = 1,
) {
}
public static function process($data): mixed
{
$data->setMessage('Processed: ' . $data->getMessage());
$data->setPriority($data->getPriority() + 10);
return $data;
}
}Les propriétés de la classe génèrent automatiquement le JSON Schema d'entrée de l'outil. L'agent IA voit un outil nommé process_message, sait qu'il accepte une chaîne message et un entier optionnel priority, et peut l'appeler directement.
Le composant MCP supporte également les collections d'outils (McpToolCollection), les ressources en lecture seule (McpResource), Laravel, ainsi que le contenu structuré pour des interactions plus riches. Consultez la documentation complète du MCP pour plus de détails.
Scalar API Reference
En plus de Swagger UI et ReDoc, vous pouvez désormais utiliser Scalar comme interface de documentation. Activez-le ainsi :
api_platform:
enable_scalar: trueAccédez-y ensuite via le paramètre ?ui=scalar sur votre endpoint de doc. Scalar offre une interface moderne et léchée pour explorer votre spécification OpenAPI. Il se charge via CDN, il n'y a donc aucun bundle supplémentaire à installer.
Filtrage avancé
API Platform 4.3 apporte plusieurs améliorations majeures au système de filtres.
Le nouveau ComparisonFilter est un décorateur qui enveloppe n'importe quel filtre existant (comme ExactFilter ou UuidFilter) pour y ajouter des opérateurs de comparaison : gt (plus grand que), gte, lt (plus petit que), lte et ne (différent de).
php
use ApiPlatform\Doctrine\Orm\Filter\ComparisonFilter;
use ApiPlatform\Doctrine\Orm\Filter\ExactFilter;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\QueryParameter;
#[GetCollection(
parameters: [
'name' => new QueryParameter(filter: new ExactFilter()),
'nameComparison' => new QueryParameter(
filter: new ComparisonFilter(new ExactFilter()),
property: 'name',
),
],
)]
class Product
{
// ...
}Un filtre dédié aux propriétés UUID, cumulable avec le ComparisonFilter.
php
use ApiPlatform\Doctrine\Orm\Filter\ComparisonFilter;
use ApiPlatform\Doctrine\Orm\Filter\UuidFilter;
use ApiPlatform\Metadata\QueryParameter;
use Symfony\Component\Uid\Uuid;
#[GetCollection(
parameters: [
'id' => new QueryParameter(filter: new UuidFilter()),
'idComparison' => new QueryParameter(
filter: new ComparisonFilter(new UuidFilter()),
property: 'id',
),
]
)]
class Device
{
public Uuid $id;
}IriFilter et UuidFilter fonctionnent désormais sur les relations imbriquées. Filtrez par une propriété d'une entité liée sans aucun code spécifique (ex: publisher.country).
php
use ApiPlatform\Doctrine\Orm\Filter\IriFilter;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\QueryParameter;
#[GetCollection(
parameters: [
'publisher' => new QueryParameter(filter: new IriFilter()),
'publisherCountry' => new QueryParameter(
filter: new IriFilter(),
property: 'publisher.country',
),
'bookPublisher' => new QueryParameter(
filter: new IriFilter(),
property: 'books.publisher',
),
]
)]
class Author
{
// ...relations to Publisher, Book, etc.
}Pour les utilisateurs de MongoDB, le nouveau SortFilter basé sur les paramètres supporte le tri sur les propriétés imbriquées, alignant ainsi les capacités de l'ODM sur celles de l'ORM.
isGranted évalué avant le Provider
Lorsqu'une expression security ne fait pas référence à l'objet (object), API Platform l'évalue désormais avant d'appeler le provider. Cela signifie que la requête en base de données est totalement ignorée pour les requêtes refusées : un gain de performance immédiat.
php
use ApiPlatform\Metadata\Get;
// Provider is NOT called if the user lacks ROLE_ADMIN
#[Get(
uriTemplate: 'is_granted_test_call_provider/{id}',
security: 'is_granted("ROLE_ADMIN")',
provider: [self::class, 'provideShouldNotBeCalled']
)]
class IsGrantedTestResource
{
public static function provideShouldNotBeCalled(): never
{
throw new \RuntimeException('provider should not get called');
}
}Si votre expression de sécurité référence object ou previous_object, le provider s'exécute toujours en premier comme prévu. Cette optimisation est automatique.
Conformité aux standards
API Platform ajoute désormais automatiquement les headers Accept-Post et Allow conformément à la spécification Linked Data Platform. Cela améliore la découvrabilité pour les clients hypermédia.
Le mapping des champs RFC 7807 (Problem Detail) est désormais supporté via ProblemExceptionInterface, permettant de mapper directement vos exceptions vers les champs type, title, detail, etc.
Améliorations DX & Performance
- Paramètres par défaut :
new QueryParameter(default: 'foo')permet désormais de définir une valeur par défaut lorsqu'un paramètre est absent de la requête. - Cache des métadonnées d'opération : Utilisation d'une couche de cache PSR pour accélérer la résolution des métadonnées.
- Support OpenSearch : Le composant Elasticsearch est désormais pleinement compatible avec OpenSearch.
- PartialSearchFilter :
new PartialSearchFilter(true)permet d'activer la sensibilité à la casse pour vos recherches partielles - Entités Readonly : Les entités marquées comme
readonlyvoient leurs opérations PUT/PATCH automatiquement retirées. - Validation UUID/ULID : Les paramètres de requête et de headers au format
uuidouulidsont désormais validés automatiquement. - Attribut SkipAutoconfigure : Pour les utilisateurs de Laravel, vous pouvez maintenant désactiver l'auto-discovery pour des ressources spécifiques.
- JSON Schema : Les schémas de normalisation et de dénormalisation peuvent désormais être pilotés finement par attribut.
Place à la mise à jour !
composer update api-platform/symfony:^4.3
# ou
composer update api-platform/laravel:^4.3Un immense merci aux 60 contributeurs et contributrices qui ont rendu cette release possible. Consultez le changelog complet pour la liste exhaustive des changements. Si vous avez besoin d'un accompagnement sur API Platform, contactez nos expert·es qui maintiennent le framework, ou rencontrez-nous à l'API Platform Conference 2026, prévue les 17 et 18 septembre 2026 !



