Back

Standard Schema expliqué : validation flexible sans verrouillage technologique

Standard Schema expliqué : validation flexible sans verrouillage technologique

Vous avez construit votre application avec Zod. Vos formulaires fonctionnent, votre API valide les requêtes, et TypeScript détecte les incompatibilités de types à la compilation. Puis votre équipe adopte un nouveau routeur qui ne supporte que Valibot. Ou vous souhaitez essayer ArkType pour ses avantages en termes de performance. Soudain, vous faites face à une réécriture complète—ou au maintien d’adaptateurs entre des bibliothèques de validation incompatibles.

C’est le problème de verrouillage technologique que Standard Schema résout. Il s’agit d’une petite interface qui permet aux bibliothèques de validation de parler un langage commun, de sorte que les outils qui les consomment n’ont pas besoin de se soucier de la bibliothèque que vous avez choisie.

Points clés à retenir

  • Standard Schema est une interface TypeScript (et non une bibliothèque de validation) qui permet l’interopérabilité entre les bibliothèques de validation comme Zod, Valibot et ArkType.
  • Il réduit le problème des adaptateurs de N×M relations à N+M en fournissant un contrat commun entre les producteurs et les consommateurs de schémas.
  • Les principales bibliothèques de validation et les outils de l’écosystème supportent déjà la spécification, vous permettant de changer de validateur sans réécrire vos formulaires, routeurs ou gestionnaires d’API.
  • La propriété ~standard expose une méthode validate, des utilitaires d’inférence de types et un contrat versionné stable.

Ce qu’est Standard Schema (et ce qu’il n’est pas)

Standard Schema n’est pas une énième bibliothèque de validation. Il n’est pas en concurrence avec Zod, Valibot ou ArkType. Il n’a également aucun lien avec JSON Schema ou schema.org.

Il s’agit plutôt d’une interface TypeScript—environ 60 lignes de types—que les bibliothèques de validation peuvent implémenter. Lorsqu’une bibliothèque expose la propriété ~standard sur ses schémas, tout outil qui comprend Standard Schema peut valider des données sans savoir quelle bibliothèque a créé le schéma.

Considérez-le comme un contrat producteur-consommateur. Les bibliothèques de validation sont les producteurs : elles définissent des schémas et implémentent l’interface. Les frameworks et outils sont les consommateurs : ils acceptent tout schéma qui respecte le contrat.

Le problème de la prolifération des adaptateurs

Avant Standard Schema, les outils de l’écosystème faisaient face à un fardeau de maintenance impossible. Considérez les mathématiques : si vous avez 6 bibliothèques de validation populaires et 50 outils nécessitant de la validation, vous devez gérer 300 adaptateurs potentiels. Chaque adaptateur nécessite maintenance, tests et mises à jour lorsque l’un ou l’autre côté change.

L’écosystème Zod, Valibot et ArkType s’est développé rapidement, mais cette croissance a créé de la fragmentation. Une bibliothèque de formulaires pouvait supporter Zod nativement mais nécessiter des adaptateurs communautaires pour tout le reste. Ces adaptateurs accusaient souvent du retard, se cassaient lors des mises à jour, ou n’existaient tout simplement pas.

Standard Schema réduit cela de N×M relations à N+M. Les bibliothèques implémentent la spécification une fois. Les outils la consomment une fois. Tout le monde en bénéficie.

Comment fonctionne l’interface

La spécification définit trois éléments essentiels :

Une méthode validate qui accepte une entrée inconnue et retourne soit un résultat de succès avec la valeur typée, soit un résultat d’échec avec un tableau de problèmes.

Des utilitaires d’inférence de types qui permettent aux outils d’extraire les types d’entrée et de sortie de n’importe quel schéma conforme, quelle que soit la bibliothèque qui l’a créé.

Un contrat stable versionné comme StandardSchemaV1 avec une garantie d’absence de changements majeurs sans incrémentation de version majeure.

La propriété ~standard utilise délibérément un préfixe tilde—elle apparaît en bas des listes d’autocomplétion, restant discrète pendant le développement normal.

Validation neutre vis-à-vis des fournisseurs en pratique

Cette validation flexible sans verrouillage technologique se manifeste à travers toute votre stack :

Formulaires : TanStack Form et React Hook Form acceptent les validateurs Standard Schema. Écrivez votre logique de validation une fois, changez de bibliothèque sans toucher au code des formulaires.

Routage : TanStack Router valide les paramètres de route et les paramètres de recherche en utilisant n’importe quel schéma conforme. Standard Schema dans les formulaires et le routage signifie des modèles de validation cohérents dans toute votre application.

APIs : Des outils comme tRPC valident les corps de requête sans couplage à une bibliothèque de validation spécifique.

Configuration : Des outils comme envin valident les variables d’environnement au moment de la compilation en utilisant le validateur de votre choix.

Tests : Vérifiez les formes de réponse dans les tests en utilisant les mêmes schémas qui valident les données de production.

Bibliothèques qui implémentent la spécification

Les acteurs majeurs supportent déjà Standard Schema :

  • Zod (v3.24.0+)
  • Valibot (v1.0+)
  • ArkType (v2.0+)
  • Yup (v1.6.0+)
  • Typia (v7.3.0+)

De nombreuses bibliothèques implémentent désormais la spécification, avec des dizaines d’outils qui la consomment. Consultez le dépôt officiel Standard Schema pour la liste actuelle des bibliothèques supportées et leurs versions minimales.

Ce que cela signifie pour votre stack

Vous pouvez commencer avec Zod parce qu’il est familier, passer à Valibot pour des bundles plus légers, ou adopter ArkType pour la validation au niveau des types—le tout sans réécrire vos formulaires, routeurs ou gestionnaires d’API.

L’approche de validation neutre vis-à-vis des fournisseurs signifie que vos décisions architecturales ne sont pas permanentes. Vous évaluez les bibliothèques sur leurs mérites : conception de l’API, taille du bundle, performance, messages d’erreur. Le reste de votre stack reste stable.

Conclusion

Standard Schema représente un écosystème qui arrive à maturité. Au lieu que des bibliothèques de validation concurrentes fragmentent le paysage des outils, nous obtenons l’interopérabilité. Votre choix de validateur devient une décision locale plutôt qu’un engagement à l’échelle de toute la stack.

Vérifiez si vos outils actuels supportent la spécification. Si c’est le cas, vous disposez déjà d’une validation flexible sans verrouillage technologique—il vous suffit de l’utiliser.

FAQ

Non. Standard Schema est simplement une spécification d'interface TypeScript. Les bibliothèques de validation qui la supportent exposent automatiquement la propriété ~standard. Vous utilisez votre bibliothèque de validation choisie comme d'habitude, et les outils compatibles détectent l'interface sans dépendances supplémentaires.

Changer de bibliothèque nécessite de réécrire vos définitions de schémas puisque chaque bibliothèque a sa propre API. Cependant, les outils consommateurs comme les bibliothèques de formulaires et les routeurs continueront de fonctionner sans changements car ils interagissent via l'interface Standard Schema, et non l'API spécifique à la bibliothèque.

Recherchez la mention de Standard Schema dans la documentation de l'outil, généralement dans les sections concernant la validation ou la sécurité des types. Vous pouvez également vérifier si l'outil accepte des schémas avec une propriété ~standard ou référence StandardSchemaV1 dans ses types TypeScript.

Vous pouvez créer un wrapper léger qui implémente l'interface ~standard autour de vos schémas existants. Cela implique d'exposer une méthode validate qui retourne le format de résultat attendu. Consultez le dépôt Standard Schema pour des exemples d'implémentation et des conseils.

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay