Übersetzung der englischen Originalseite. Bei Abweichungen gilt die englische Fassung.
Typisierte Clients
DaloyJS bietet zwei Wege, Ihre API vollständig typsicher aufzurufen. Nehmen Sie den, der zu Ihrem Consumer passt.
1. Typisierter In-Process-Client (ohne Codegenerierung)
Für TypeScript-Consumer im selben Monorepo (Tests, interne Werkzeuge, Server Actions in Next.js):
Der Client ist nach operationId geordnet, gibt eine diskriminierte Union aus {status, body, headers} zurück und leitet alles aus der Routendefinition selbst ab. Kein Build-Schritt.
Pfadparameter
Pfadparameter werden segmentweise ersetzt, daher passt :id nie innerhalb von :idx, und jeder Wert wird prozentkodiert in sein eigenes Segment eingesetzt. Seit 1.3.7 wirft eine generierte Methode einen TypeError, bevor überhaupt ein Request gesendet wird, wenn ein Parameter fehlt, leer ist oder . bzw. .. lautet. Das URL-Parsing würde ein Punktsegment auflösen (auch als %2E%2E) und den Aufruf stillschweigend umlenken, zum Beispiel DELETE /orgs/:org/members/.. in DELETE /orgs/:org verwandeln. Wildcard-Routen (*path oder ein bloßes * mit dem Namen wildcard) akzeptieren einen durch / getrennten Wert; jedes Segment wird auf dieselbe Weise kodiert und geprüft.
2. Hey-API-SDK (sprachübergreifend, repo-übergreifend, zur Build-Zeit)
Für Consumer außerhalb des Monorepos oder in anderen Sprachen generieren Sie mit @hey-api/openapi-ts ein vollständig typisiertes fetch-SDK.
- 01Routenapp.route(...)
- 02generateOpenAPI@daloyjs/core/openapi
- 03openapi.jsonOpenAPI-3.1-Spezifikation auf der Festplatte
- 04openapi-tsGenerator von Hey API
- 05Typisiertes SDKsdk.gen.ts · types.gen.ts
- 06Consumervollständig typisierte fetch-Aufrufe
Das generierte SDK verwenden
Welchen soll ich verwenden?
| Anwendungsfall | Wahl |
|---|---|
| TypeScript-Aufrufer im selben Repo (Tests, interne Werkzeuge) | createInProcessClient |
| Web-App / React-Native-Bundle in einem separaten Repo | Hey-API-SDK |
| Consumer ohne TypeScript (Python, Swift, Kotlin) | OpenAPI-Dokument + ihr bevorzugter Generator |
| Öffentliches SDK für Dritte | Hey-API-SDK, als eigenes Paket veröffentlicht |
Sie kommen von ts-rest?
ts-rest ist eine beliebte Contract-first-Bibliothek, die Ihnen durchgängige TypeScript-Typen ohne Codegenerierung liefert, indem ein Vertrag (initContract) zwischen einem adapterbasierten Server (Express, Fastify, NestJS, Next.js) und einem fetch-Client (initClient) geteilt wird. Gefällt Ihnen dieses Modell, wird sich DaloyJS vertraut anfühlen, mit zwei Unterschieden.
Erstens ist in DaloyJS die Routendefinition der Vertrag; es gibt kein separates Vertragsobjekt, das synchron gehalten werden muss. Der oben gezeigte In-Process-createClient bietet TypeScript-Aufrufern im selben Repo dieselbe Erfahrung ohne Codegenerierung und mit geteilten Typen.
Zweitens ist die Typsicherheit von ts-rest auf TypeScript beschränkt und verlangt, dass der Client den Vertrag importiert. DaloyJS erzeugt aus denselben Routen eine vollwertige OpenAPI-3.1-Spezifikation und ein Hey-API-SDK, sodass auch Consumer abgedeckt sind, die Ihre Typen nicht importieren können (andere Repos, andere Sprachen, öffentliche SDKs). In ts-rest ist OpenAPI eine optionale Erweiterung (@ts-rest/open-api). DaloyJS ist außerdem selbst Server und Laufzeitschicht, portabel über Node, Bun, Deno, Cloudflare und Vercel, statt einer Typisierungsschicht auf einem separaten Framework.
| ts-rest | DaloyJS | |
|---|---|---|
| Quelle des Vertrags | Separates initContract-Objekt | Die Routendefinition selbst |
| Typisierter Client ohne Codegenerierung | Ja (initClient, nur TypeScript) | Ja (createClient, nur TypeScript) |
| Sprach- und repo-übergreifende Clients | OpenAPI-Erweiterung (@ts-rest/open-api) | OpenAPI 3.1 + Hey-API-SDK, vollwertig |
| Server | Adapter auf Express / Fastify / NestJS / Next.js | Eingebaut, portabel über Laufzeiten |
| Validierung zur Laufzeit | Standard Schema (Zod / Valibot / ArkType) | Standard Schema (Zod / Valibot / ArkType / TypeBox) |
| Sicherheitsstandards | Selbst mitbringen | Header und Body-Limits standardmäßig aktiv; CSRF und Rate Limits eine Zeile entfernt |
Sie brauchen einen größeren Vertrag, um die Ausgabe Ihres Generators zu prüfen? Nehmen Sie die große Fake-REST-Demo (auf Englisch) als Belastungsfall statt einer minimalen Tutorial-App.
Zuletzt aktualisiert: