Gestionnaires de route

Gestionnaires full-stack app/api/*/route.ts, réécritures et proxy vers un démon local.

Les gestionnaires de route définissent des points de terminaison d’API dans le répertoire app avec les API Web Request et Response.

Convention

app/api/health/route.tsts
export function GET(): Response {  return Response.json({ status: "ok" });}

Exportez GET, POST, PUT, PATCH, DELETE, HEAD ou OPTIONS. Les gestionnaires s’exécutent avec text dev, text start et chaque adaptateur de déploiement côté serveur, après le middleware. Mettez les gestionnaires GET en cache avec la configuration des segments de route.

Gestionnaires dynamiques

app/api/sessions/[id]/route.tsts
export async function GET(_req: Request, { params }: { params: { id: string } }) {  const session = await db.sessions.find(params.id);  return session ? Response.json(session) : new Response("Not found", { status: 404 });}

Les valeurs de params sont décodées. Un chemin contenant une barre oblique ou une barre oblique inverse encodée (%2F, %5C) reçoit un 400, alors transmettez les identifiants susceptibles de contenir / dans un paramètre de requête ou encodez-les en base64url.

Diffusion en continu

Renvoyez un ReadableStream pour les événements envoyés par le serveur :

app/api/ticks/route.tsts
export function GET() {  let n = 0;  const stream = new ReadableStream({    start(c) {      setInterval(() => c.enqueue(`data: ${n++}\n\n`), 1000);    },  });  return new Response(stream, { headers: { "content-type": "text/event-stream" } });}

Réécritures

Le serveur relaie les requêtes vers les destinations externes, le navigateur n’effectue donc aucune requête interorigine.

text.config.tsts
export default defineConfig({  rewrites: [{ source: "/api/opencode/:path*", destination: "http://127.0.0.1:4096/:path*" }],});

Accès à un démon local par proxy

Utilisez proxy pour accéder à un processus sur votre machine :

text.config.tsts
export default defineConfig({  proxy: { "/api/opencode": { target: "http://127.0.0.1:4096", changeOrigin: true } },});

C’est ainsi que le modèle OpenCode se connecte à un serveur local.

Modifier cette page sur GitHub