Routes API

Les fichiers dans src/app/api/<name>/route.ts deviennent des points d'accès à /api/<name>. Chaque gestionnaire est de la forme (req: Request) => Response. Testez le point d'accès /api/echo fourni avec cette démonstration avec les commandes curl ci-dessous.

Astuce
Ajoutez une méthode manquante à la volée : modifiez route.ts, sauvegardez — le watcher recompile en ~1 s. Les méthodes non exportées retournent automatiquement 405 ; pas besoin de les déclarer explicitement.

Tester chaque méthode

terminal.shShell
# GET — query params surface in the response
curl https://demo.bext.dev/api/echo?hello=world

# POST / PUT / PATCH — body is echoed back
curl -X POST   https://demo.bext.dev/api/echo -d '{"a":1}'
curl -X PUT    https://demo.bext.dev/api/echo -d 'raw body'
curl -X PATCH  https://demo.bext.dev/api/echo -d 'partial'

# DELETE — no body, but the method round-trips
curl -X DELETE https://demo.bext.dev/api/echo

# HEAD — 204 with custom header
curl -I -X HEAD https://demo.bext.dev/api/echo

# OPTIONS — Allow header lists every implemented method
curl -X OPTIONS -i https://demo.bext.dev/api/echo

# Unimplemented method — auto-405 from the runtime
curl -X TRACE -i https://demo.bext.dev/api/echo
src/app/api/echo/route.tsTypeScript
// src/app/api/echo/route.ts
// One file, every HTTP method — missing methods auto-405.

export async function GET(req: Request)    { return summary(req); }
export async function POST(req: Request)   { return summary(req, await req.text()); }
export async function PUT(req: Request)    { return summary(req, await req.text()); }
export async function PATCH(req: Request)  { return summary(req, await req.text()); }
export async function DELETE(req: Request) { return summary(req); }
export async function HEAD()               { return new Response(null, { status: 204 }); }
export async function OPTIONS() {
  return new Response(null, {
    status: 204,
    headers: { Allow: "GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS" },
  });
}