Routes d'API
Déposez un fichier dans src/api/ et exportez des gestionnaires par méthode HTTP — ils
sont servis sous /api/*.
// src/api/hello.ts → /api/hello
export function GET() {
return Response.json({ message: 'bonjour' });
}
export function POST(request: Request) {
return Response.json({ method: 'POST' });
}
Exportez une fonction par méthode prise en charge : GET, POST, PUT, PATCH,
DELETE, HEAD, OPTIONS. Le dossier se configure via apiDir dans fluixi.config ;
src/api est la valeur par défaut.
Valeurs de retour
Un gestionnaire renvoie une Response Web, ou n'importe quelle valeur — envoyée en JSON :
export function GET() {
return { ok: true }; // → application/json
}
export function GET() {
return Response.json({ ok: true }, { status: 201 }); // contrôle total
}
export function GET() {
return new Response('texte', { headers: { 'content-type': 'text/plain' } });
}
Renvoyez vous-même une Response dès qu'il vous faut un statut autre que 200, des en-têtes
particuliers, une redirection ou un corps non-JSON. La forme « valeur simple » existe pour
que le cas courant reste court.
Paramètres et attrape-tout
Le chemin du fichier est la route, avec les mêmes conventions que les pages :
// src/api/users/[id].ts → /api/users/:id
export function GET(_req: Request, { params }: { params: { id: string } }) {
return Response.json({ id: params.id });
}
// src/api/files/[...path].ts → attrape-tout, /api/files/**
Les paramètres arrivent en chaînes simples sur le second argument, pas en accesseurs : un gestionnaire d'API s'exécute une fois par requête, il n'y a rien de réactif là-dedans.
Tout le reste vient de la Request standard : la chaîne de requête via
new URL(request.url).searchParams, le corps via await request.json() ou
await request.formData(), les en-têtes via request.headers.
Les codes de statut offerts
Une requête vers un chemin existant avec une méthode que vous n'avez pas exportée renvoie
405, avec un en-tête Allow listant les méthodes réellement exportées ; un chemin
/api/* inconnu renvoie 404. Vous n'avez à écrire ni l'un ni l'autre.
Route d'API ou fonction serveur ?
Les deux ne s'exécutent que sur le serveur : le choix porte donc sur l'appelant.
- Une fonction serveur s'adresse à votre propre code client. Elle est typée de bout en bout, et l'appel ressemble à un appel de fonction plutôt qu'à un fetch.
- Une route d'API s'adresse à des appelants que vous ne contrôlez pas — un webhook, une application mobile, un CLI : tout ce qui a besoin d'une URL stable, d'un code de statut précis ou d'un corps non-JSON.
Si vous écrivez fetch('/api/…') depuis votre propre application, une
fonction serveur est généralement le chemin le plus court.
Ensuite : Middleware.