Inkrementell adoptierbarer RPC-ähnlicher Client- und Serverhelfer für ein magisches Ende-zu-End-Typisierererlebnis?
TS-REST bietet eine einfache Möglichkeit, einen Vertrag für Ihre API zu definieren, der sowohl von Ihrer Anwendung konsumiert als auch implementiert werden kann, wodurch Sie die Sicherheit von End-to-End-Typ ohne die Erzeugung oder die Code-Erzeugung beenden können.
Definieren Sie Ihren API -Vertrag an einem gemeinsam genutzten Ort einfach
const contract = c . router ( {
getPosts : {
method : 'GET' ,
path : '/posts' ,
query : z . object ( {
skip : z . number ( ) ,
take : z . number ( ) ,
} ) , // <-- Zod schema
responses : {
200 : c . type < Post [ ] > ( ) , // <-- OR normal TS types
} ,
headers : z . object ( {
'x-pagination-page' : z . coerce . number ( ) . optional ( ) ,
} ) ,
} ,
} ) ;Erfüllen Sie den Vertrag auf Ihrem Server mit einem Typ-sicheren Router:
const router = s . router ( contract , {
getPosts : async ( { params : { id } } ) => {
return {
status : 200 ,
body : prisma . post . findUnique ( { where : { id } } ) ,
} ;
} ,
} ) ;Konsumieren Sie die API auf dem Client mit einer RPC-ähnlichen Schnittstelle:
const result = await client . getPosts ( {
headers : { 'x-pagination-page' : 1 } ,
query : { skip : 0 , take : 10 } ,
// ^-- Fully typed!
} ) ; Erstellen Sie einen Vertrag, implementieren Sie ihn auf Ihrem Server und konsumieren Sie ihn in Ihrem Client. Übernehmen Sie schrittweise, probieren Sie es mit Ihrem Team und erhalten Sie dann schneller.
Dank all diese wunderbaren Menschen (Emoji Key), die dazu beigetragen haben, TS-REST möglich zu machen:
Youssef Gaber ? | Per Hermansson | Grégory Houllier | Michael Angelo | Pieter Venter | Rifaldhi aw | Jonathan White |
Max Brosnahan ? | Oliver Butler ? ? ? | Adrian Baryylski | Neil A. Dobson | Eric tun | Ben | Lw ? |
Andrew Vance |
Seit unserem ersten Commit im Jahr 2022 sind wir stetig gewachsen. Wir sind stolz auf unsere Fortschritte und freuen uns über die Zukunft.