veilletech.fr
21 oct. Feed du jour
#06 SYMFONY Article

Symfony 8.2 : JSON Schema généré depuis vos types PHP

Vos types PHP écrivent le schéma que les agents lisent.

Symfony 8.2 introduit le composant JsonSchema, qui génère des schémas JSON Schema à partir des types PHP, en suivant les métadonnées du serializer et les contraintes de validation. Il sait produire des schémas OpenAPI 3.1 ou 3.0 et décrire les paramètres d'une méthode PHP pour un outil d'agent ou de serveur MCP. Il demande PHP 8.2 et fonctionne avec les composants Symfony 7.4 (Antoine Bluchet, #66685).

3 min de lectureintermédiairevidéo 1:21
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Comment ça marche
  3. Dans une application Symfony
  4. Ce qu'il faut savoir
  5. À retenir

Ce qui se passe

JSON Schema décrit la forme de données JSON. OpenAPI s'en sert pour documenter les corps de requête et de réponse d'une API, et les agents IA pour savoir quels arguments attendent les outils qu'ils appellent, par exemple sur un serveur MCP. Symfony 8.2 ajoute un composant JsonSchema qui génère ces schémas depuis des types PHP. Son moteur provient du paquet json-schema d'API Platform, amputé de ce qui est propre à API Platform. Contribution d'Antoine Bluchet, pull request #66685.

Comment ça marche

Le générateur transforme un type TypeInfo en schéma. Il lit les propriétés de la classe avec PropertyInfo, ce qui fait suivre au schéma les métadonnées du serializer (groupes, convertisseur de noms, maps de discriminants) et les contraintes de validation. Deux exemples donnés par le billet : NotBlank devient minLength: 1, et une propriété sans valeur par défaut est obligatoire.

OpenAPI : un même objet n'a pas la même forme en entrée et en sortie (l'id est renvoyé, jamais envoyé), et chaque version d'OpenAPI a sa variante de JSON Schema. La classe Configuration règle donc :

Pour un document OpenAPI complet, passer le même SchemaDocument à chaque appel de generate() partage les définitions entre schémas.

Outils d'agents : l'entrée d'un outil est l'ensemble des paramètres de la méthode PHP qui l'implémente. generateForParameters() les décrit avec leurs types, valeurs par défaut, descriptions @param (il faut alors phpstan/phpdoc-parser) et le nouvel attribut #[JsonSchemaConstraint]. Sans valeur par défaut, un paramètre est obligatoire. Les paramètres objet sont rangés en définitions référencées par $ref ; flatten() les remet en ligne et donne le schéma autonome qu'attendent en général les clients MCP et les fournisseurs de modèles. allowExtraAttributes: false refuse les propriétés inconnues.

Dans une application Symfony

Aucune configuration : on installe le composant et on injecte le générateur. Avec le Serializer et le Validator activés, il suit leur mapping ainsi que les options datetime_format et uid_normalization_format du contexte par défaut du serializer, pour que les schémas collent au JSON réellement produit. Les services qui implémentent les interfaces d'extension du composant sont autoconfigurés.

Ce qu'il faut savoir

Source : Symfony, 20 octobre 2026. Source en anglais.