Le problème de la validation
Les données viennent de partout : frontend, API, blockchain. Sans validation rigoureuse, les bugs s'accumulent.
Zod pour la validation
import { z } from 'zod';
const TransactionSchema = z.object({
to: z.string().regex(/^0x[a-fA-F0-9]{40}$/),
value: z.bigint().positive(),
data: z.string().optional(),
});
type Transaction = z.infer;
tRPC pour l'API
import { initTRPC } from '@trpc/server';
const t = initTRPC.create();
export const appRouter = t.router({
getToken: t.procedure
.input(z.object({ address: z.string() }))
.query(async ({ input }) => {
return await fetchTokenData(input.address);
}),
});
Avantages
- Types partagés client/serveur automatiquement
- Erreurs de validation explicites
- Pas de duplication de schémas