Définir des routeurs et des procédures
Créer des requêtes et des mutations avec validation des entrées.
Définir des routeurs et des procédures est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.
Initialiser tRPC
Chaque serveur tRPC commence par la création d’une instance avec initTRPC. Celle-ci fournit des générateurs pour les routeurs et les procédures. Vous la créez généralement une seule fois, puis vous exportez les éléments dont vous avez besoin.
import { initTRPC } from '@trpc/server';
const t = initTRPC.create();
export const router = t.router;
export const publicProcedure = t.procedure;Une première procédure
Une procédure est un point d’accès unique de l’API. La plus simple est une query qui renvoie une valeur. publicProcedure.query définit un point d’accès consultable sans entrée.
import { router, publicProcedure } from './trpc';
const appRouter = router({
health: publicProcedure.query(() => 'ok'),
});Valider les entrées
Les procédures déclarent leur entrée à l’aide d’un validateur, généralement un schéma zod. .input(schema) valide l’entrée à l’exécution et infère également le type d’entrée pour le résolveur et le client.
import { z } from 'zod';
const greet = publicProcedure
.input(z.object({ name: z.string() }))
.query(({ input }) => 'Hello, ' + input.name);Lire l’entrée
Dans le résolveur, l’entrée validée est disponible sous la forme de input et son type est entièrement déduit du schéma. Aucun transtypage manuel n’est nécessaire ; zod et tRPC infèrent ensemble la structure.
const byId = publicProcedure
.input(z.object({ id: z.number() }))
.query(({ input }) => {
// input.id is number
return { id: input.id, name: 'Alice' };
});Opérations mutation
Utilisez .mutation pour les opérations qui modifient des données. La structure est la même que pour une query, mais elle signale une écriture, ce qui influence la mise en cache du client et la méthode HTTP.
const createUser = publicProcedure
.input(z.object({ name: z.string() }))
.mutation(({ input }) => {
return { id: 1, name: input.name };
});Construire le routeur de l’application
Regroupez les procédures dans un routeur en transmettant un objet à router(...). Chaque clé devient le nom d’une procédure appelable. Cet appRouter constitue toute votre API.
const appRouter = router({
greet,
byId,
createUser,
});Routeurs imbriqués
Les routeurs s’imbriquent pour organiser les grandes API. Une valeur de l’objet du routeur peut elle-même être un routeur, ce qui produit des appels avec espace de noms comme user.byId.
const userRouter = router({ byId, createUser });
const appRouter = router({
user: userRouter,
greet,
});
// call paths: user.byId, user.createUser, greetExporter le type du routeur
L’export le plus important est le type du routeur. Le client l’importera pour bénéficier d’une sûreté complète des types. Exportez la valeur pour l’adaptateur du serveur et le type pour le client.
export const appRouter = router({ user: userRouter });
export type AppRouter = typeof appRouter;Associer un adaptateur
Pour exposer le routeur via HTTP, associez-lui un adaptateur. tRPC fournit des adaptateurs pour Node autonome, Express, Next.js, Fetch et bien d’autres environnements. L’adaptateur transforme les requêtes entrantes en appels de procédures.
import { createHTTPServer } from '@trpc/server/adapters/standalone';
createHTTPServer({ router: appRouter }).listen(3000);Organiser les fichiers
Une organisation courante consiste à avoir un trpc.ts contenant initTRPC ainsi que le router/publicProcedure exporté, des routeurs de fonctionnalités dans leurs propres fichiers et un appRouter racine qui les compose. Garder initTRPC au même endroit évite de créer plusieurs instances.
// trpc.ts: initTRPC.create(), export router + publicProcedure
// routers/user.ts: userRouter
// router.ts: appRouter = router({ user: userRouter })Récapitulatif de l’inférence des entrées
Comme .input(schema) valide et infère à la fois, vous écrivez le schéma une seule fois et obtenez un contrôle à l’exécution ainsi qu’un type statique. Le client verra exactement l’entrée attendue par chaque procédure, dérivée de ces schémas.
const search = publicProcedure
.input(z.object({ q: z.string(), page: z.number().optional() }))
.query(({ input }) => ({ q: input.q, page: input.page ?? 1 }));Vérification rapide
Testez votre compréhension des routeurs et des procédures.
Récapitulatif
Vous avez construit un serveur tRPC.
initTRPC.create()fournit les générateursrouteretprocedure..input(schema)valide et infère l’entrée..querylit les données ;.mutationles écrit.- Composez les procédures dans
appRouteret exporteztype AppRouter = typeof appRouter.
Ensuite : utiliser ce serveur avec un client entièrement typé.
Questions Fréquemment Posées
La leçon « Définir des routeurs et des procédures » est-elle gratuite ?
Oui — le texte complet de « Définir des routeurs et des procédures » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Définir des routeurs et des procédures » ?
Créer des requêtes et des mutations avec validation des entrées. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer TypeScript Academy ?
Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Définir des routeurs et des procédures » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?
Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- L’architecture tRPC
- Définir des routeurs et des procédures
- Inférence des types client-serveur
- Intergiciel et contexte