Traduction de la page originale en anglais. En cas de divergence, la version anglaise fait foi.
Validation
DaloyJS valide les entrées via Standard Schema, une petite interface exposée par des validateurs comme Zod, Valibot, ArkType, et TypeBox via un adaptateur Standard Schema. Choisissez le validateur adapté à votre projet. Le contrat DaloyJS reste le même.
Ce qui est validé
Pour chaque route, vous pouvez déclarer des schémas pour :
request.params: les paramètres de chemin décodés. Ce sont d’abord des chaînes. Convertissez-les dans votre schéma si vous voulez des nombres, des UUID ou des enums.request.query: les valeurs de la query string. Les clés répétées deviennent des tableaux avant la validation.request.headers: les en-têtes de requête, avec des noms en minuscules.request.body: les corps de requête analysés. Le corps n’est lu que si la route déclare un schéma de corps.responses[status].body: des corps de réponse typés et validés.
Les query strings, les champs de formulaire et les champs multipart suppriment avant la validation les clés de pollution de prototype comme __proto__, constructor et prototype.
Bornez les champs numériques (montants, quantités, identifiants)
Un simple z.number() accepte 1e308, -Infinity après une erreur de conversion, et d’autres valeurs acceptables pour des flottants IEEE mais désastreuses pour de l’argent, un inventaire ou une pagination. Placez toujours des bornes métier sur les champs numériques des requêtes :
Zod 4 rejette déjà dans bien des cas les nombres NaN ou non finis pour z.number(), mais un plafond (.max()) et une contrainte de signe (.positive() / .nonnegative()) restent votre dernier rempart contre la fraude aux remboursements et les débordements. Associez cela à des schémas de réponse pour que les champs sensibles ne fuient jamais vers l’extérieur.
Exemple de bout en bout
Choisissez votre validateur
- Zod (en anglais) : le choix par défaut pour la plupart des équipes. API chaînable, vaste écosystème, facile à apprendre.
- Valibot (en anglais) : modulaire et tree-shakeable. Idéal pour les runtimes edge et les contrats livrés au navigateur.
Les schémas ArkType et compatibles TypeBox fonctionnent aussi s’ils exposent la même propriété ~standard, mais DaloyJS ne fournit de documentation et de modèles officiels que pour Zod et Valibot.
Côte à côte
Dès qu’un schéma expose ~standard, DaloyJS infère les types des handlers, génère OpenAPI et renvoie des erreurs problem+json de la même façon, quel que soit le validateur qui l’a produit.
Erreurs
- non fiableRequête bruteparams · query · headers · body
- standard schemaAnalyse du schémavalidate(schema, input)
- en cas d’échec422 problem+jsonerrors: [{ path, message }]
- en cas de succèsHandler typéctx.body / params / query / headers
Sur une entrée invalide, DaloyJS renvoie 422 Unprocessable Entity au format RFC 9457 problem+json, avec un tableau errors d’enregistrements path et message par problème. Vous n’écrivez pas de gestionnaire d’erreurs pour cela : c’est intégré. Voir Erreurs et problem+json.
Validation des réponses
Lorsqu’un schéma de réponse est déclaré, DaloyJS valide la valeur renvoyée par le handler avant de la sérialiser. C’est la valeur validée qui part sur le réseau : les schémas d’objet qui retirent les clés inconnues empêchent donc aussi des champs non déclarés de fuiter vers les clients. Si la validation échoue, le client reçoit en production une réponse problem 500 masquée.
Limites de corps et types de contenu
L’option d’App bodyLimitBytes (1 Mio par défaut) plafonne le Content-Length déclaré et la taille transmise en flux de chaque corps de requête -> 413. Depuis la 1.5.4, cela s’applique à toutes les routes, y compris aux corps qu’un handler lit lui-même depuis ctx.request ; le plafond est vérifié de manière paresseuse, au moment de la lecture du corps.
Lorsqu’une route déclare request.body, DaloyJS impose aussi :
- Le Content-Type par rapport à la liste
acceptsde la route, ou àallowedContentTypesglobal s’il est défini -> 415. - Les types de corps acceptés par défaut :
application/json,application/x-www-form-urlencodedetmultipart/form-data. - Une analyse protégée contre la pollution de prototype pour le JSON, les query strings, les formulaires urlencoded et les formulaires multipart.
Les corps JSON sont analysés en objets, les corps urlencoded via URLSearchParams et les corps multipart via l’API Request.formData() de la plateforme. Si vous autorisez sur une route un type de média texte personnalisé, DaloyJS transmet le texte décodé à votre schéma de corps.
Mélanger les validateurs
Vous pouvez combiner les validateurs route par route. Un schéma Zod dans un fichier et un schéma Valibot dans un autre sont tous deux valides, ce qui est utile pour migrer une base de code existante ou consommer des schémas issus d’un paquet partagé.
Dernière mise à jour :