Traduction de la page originale en anglais. En cas de divergence, la version anglaise fait foi.
Clients typés
DaloyJS propose deux façons d’appeler votre API avec une sûreté de typage complète. Utilisez celle qui convient à votre consommateur.
1. Client typé en processus (sans génération de code)
Pour les consommateurs TypeScript du même monorepo (tests, outils internes, server actions Next.js) :
Le client est indexé par operationId, renvoie une union discriminée de {status, body, headers} et infère tout à partir de la définition de route elle-même. Aucune étape de build.
Paramètres de chemin
Les paramètres de chemin sont substitués segment entier par segment entier : :id ne correspond donc jamais à l’intérieur de :idx, et chaque valeur est encodée en pourcentage dans son propre segment. Depuis la 1.3.7, une méthode générée lève une TypeError, avant l’envoi de toute requête, lorsqu’un paramètre est manquant, vide, . ou ... L’analyse d’URL résoudrait un segment point (même sous la forme %2E%2E) et redirigerait silencieusement l’appel, par exemple en transformant DELETE /orgs/:org/members/.. en DELETE /orgs/:org. Les routes joker (*path, ou un * seul nommé wildcard) acceptent une valeur séparée par des / ; chaque segment est encodé et vérifié de la même façon.
2. SDK Hey API (multilangage, multidépôt, au build)
Pour les consommateurs situés hors du monorepo ou écrits dans d’autres langages, générez un SDK fetch entièrement typé avec @hey-api/openapi-ts.
- 01Routesapp.route(...)
- 02generateOpenAPI@daloyjs/core/openapi
- 03openapi.jsonspécification OpenAPI 3.1 sur disque
- 04openapi-tsgénérateur Hey API
- 05SDK typésdk.gen.ts · types.gen.ts
- 06Consommateurappels fetch entièrement typés
Utiliser le SDK généré
Lequel choisir ?
| Cas d’usage | Choix |
|---|---|
| Appelant TypeScript dans le même dépôt (tests, outils internes) | createInProcessClient |
| Application web / bundle mobile React Native dans un dépôt séparé | SDK Hey API |
| Consommateur non TypeScript (Python, Swift, Kotlin) | Document OpenAPI + son générateur préféré |
| SDK public pour des tiers | SDK Hey API, publié comme paquet à part |
Vous venez de ts-rest ?
ts-rest est une bibliothèque orientée contrat populaire qui fournit des types TypeScript de bout en bout sans génération de code en partageant un contrat (initContract) entre un serveur à base d’adaptateurs (Express, Fastify, NestJS, Next.js) et un client fetch (initClient). Si ce modèle vous plaît, DaloyJS vous semblera familier, à deux différences près.
D’abord, dans DaloyJS, la définition de route est le contrat : il n’y a pas d’objet de contrat séparé à garder synchronisé. Le createClient en processus présenté plus haut offre la même expérience sans génération de code, avec des types partagés, pour les appelants TypeScript du même dépôt.
Ensuite, la sûreté de typage de ts-rest est limitée à TypeScript et exige que le client importe le contrat. DaloyJS produit une spécification OpenAPI 3.1 de premier plan et un SDK Hey API à partir des mêmes routes : les consommateurs qui ne peuvent pas importer vos types (autres dépôts, autres langages, SDK publics) sont donc couverts aussi. Dans ts-rest, OpenAPI est un module complémentaire facultatif (@ts-rest/open-api). DaloyJS est aussi le serveur et le runtime lui-même, portable sur Node, Bun, Deno, Cloudflare et Vercel, plutôt qu’une couche de typage montée sur un framework séparé.
| ts-rest | DaloyJS | |
|---|---|---|
| Source du contrat | Objet initContract séparé | La définition de route elle-même |
| Client typé sans génération de code | Oui (initClient, TypeScript uniquement) | Oui (createClient, TypeScript uniquement) |
| Clients multilangages / multidépôts | Module OpenAPI (@ts-rest/open-api) | OpenAPI 3.1 + SDK Hey API, de premier plan |
| Serveur | Adaptateur sur Express / Fastify / NestJS / Next.js | Intégré, portable entre runtimes |
| Validation à l’exécution | Standard Schema (Zod / Valibot / ArkType) | Standard Schema (Zod / Valibot / ArkType / TypeBox) |
| Sécurité par défaut | À vous de la fournir | En-têtes et limites de corps actifs par défaut ; CSRF et limitation de débit à une ligne près |
Besoin d’un contrat plus volumineux pour valider la sortie de votre générateur ? Utilisez la grande démo REST factice (en anglais) comme cas de stress plutôt qu’une application de tutoriel minimale.
Dernière mise à jour :