Aller au contenu principal

Définir des Routes HTTP

Une fois que tu as posé ton décorateur @Controller sur ta classe, il faut définir les points d'entrée. C'est ici qu'on utilise les Verbes HTTP.

Les Verbes Standards

Pas de surprise ici, on retrouve les classiques REST. Chaque décorateur accepte un argument optionnel path.

Le Standard CRUD

Si tu construis une API REST, tu vas passer la majorité de ton temps à faire du CRUD (Create, Read, Update, Delete). C'est le cycle de vie standard d'une ressource (comme un utilisateur ou un produit).

Voici comment mapper tes actions avec my-fastify-decorators :

ActionSignificationVerbe HTTPDécorateurUsage
CreateCréerPOST@Post()Ajouter une nouvelle donnée.
ReadLireGET@Get()Récupérer une liste ou un élément unique.
UpdateMettre à jourPUT / PATCH@Put() / @Patch()Modifier une donnée existante.
DeleteSupprimerDELETE@Delete()Retirer une donnée.
PUT vs PATCH : Le duel
  • Utilise @Put() quand tu remplaces toute la ressource (remise à zéro).
  • Utilise @Patch() quand tu modifies seulement une partie de la ressource (ex: changer juste le mot de passe).

Exemple Complet

Voici à quoi ressemble un contrôleur CRUD typique pour gérer des chats 🐱 :

import { Get, Post, Put, Patch, Delete } from 'my-fastify-decorators';

@Controller('/cats')
export class CatsController {

// READ (All)
@Get() // GET /cats
findAll() { ... }

// READ (One)
@Get('/:id') // GET /cats/:id
findOne() { ... }

// CREATE
@Post() // POST /cats
create() { ... }

// UPDATE (Replace)
@Put('/:id') // PUT /cats/:id
update() { ... }

// DELETE
@Delete('/:id') // DELETE /cats/:id
remove() { ... }
}

Options de Réponse

Parfois, retourner un simple objet JSON ne suffit pas. Tu veux peut-être changer le code de statut ou ajouter des headers spécifiques.

@HttpCode(status)

Par défaut, Fastify renvoie 200 OK (ou 500 en cas d'erreur). Pour un POST, on préfère souvent un 201 Created.

import { HttpCode, Post } from 'my-fastify-decorators';

@Post()
@HttpCode(201)
create() {
return { id: 1, status: 'created' };
}

@Header(key, value)

Pour ajouter des méta-données à ta réponse (ex: Cache, Content-Type spécifique, etc.).

import { Header, Get } from 'my-fastify-decorators';

@Get('/file')
@Header('Content-Type', 'application/pdf')
@Header('X-Custom-Header', 'Hello')
getPdf() {
// ... renvoie le buffer du PDF
}

@Redirect(url, code?)

Si tu veux rediriger l'utilisateur ailleurs.

import { Redirect, Get } from 'my-fastify-decorators';

@Get('/v1/old-route')
@Redirect('/v2/new-route', 301) // 301 = Moved Permanently
oldRoute() {
return; // Le retour est ignoré
}