API HTTP

Cette page résume les différentes sections d’une requête HTTP et la récupération des données dans NestJS avec @Param(), @Query() et @Body().

Structure générale d’une requête HTTP

Une requête HTTP envoyée par un client (navigateur, Postman, front-end, etc.) contient généralement :

  • Méthode Indique l’action (GET, POST, PUT, DELETE, etc.)
  • URL / Route Chemin de la ressource (ex. /users/12)
  • Params (Route Params) Valeurs dynamiques dans l’URL
  • Query string Données après ? dans l’URL (optionnelle, ex. ?page=2)
  • Headers Métadonnées (authentification, content-type, etc.)
  • Body (optionnel) Données envoyées au serveur (JSON, form-data, etc.)

Idée-clé : la route + les paramètres décrivent où et comment on agit, le body décrit quelles données on envoie.

Les méthodes HTTP (rappel)

MéthodeUsage typique
GETLire / récupérer des données
POSTCréer une ressource
PUTRemplacer une ressource (mise à jour complète)
PATCHModifier partiellement une ressource
DELETESupprimer une ressource

1) Paramètres de route — @Param()

Les params sont des valeurs dans l’URL (souvent un identifiant).

Exemple : GET /users/1212 est un paramètre.

NestJS

@Get(':id')
findOne(@Param('id') id: string) {
  return `User id: ${id}`;
}

Quand utiliser param ?

✔ Quand l’identifiant fait partie de la structure de la route

✔ Identifier une ressource spécifique

✔ Généralement pour des ID

Exemples :

  • GET /users/5
  • GET /products/10
  • DELETE /orders/3

2) Paramètres de requête (Query) — @Query()

Les query params sont après le ? dans l’URL : filtres, tri, pagination, recherche…

Exemple : GET /users?role=admin&page=2

NestJS

@Get()
findAll(
  @Query('role') role?: string,
  @Query('page') page?: string
) {
  return `role: ${role}, page: ${page}`;
}

Quand utiliser query ?

filtrer (ex. role=admin)

paginer (ex. page=2&limit=10)

trier (ex. sort=createdAt)

rechercher (ex. search=sara)

Exemples :

  • GET /users?role=admin
  • GET /products?minPrice=10&maxPrice=50
  • GET /posts?page=2&limit=10

3) Corps de la requête — @Body()

Le body contient les données envoyées au serveur (souvent JSON).
On l’utilise principalement avec POST / PUT / PATCH.

Exemple : POST /users avec un JSON :

{
  "email": "test@mail.com",
  "password": "123456"
}

NestJS (sans DTO)

@Post()
create(@Body() body: any) {
  return body;
}

NestJS (avec DTO recommandé)

@Post()
create(@Body() dto: CreateUserDto) {
  return dto;
}

Quand utiliser body ?

créer une ressource (POST)

modifier des données (PUT/PATCH)

✔ envoyer des données complexes (objet JSON)

Comment savoir lequel utiliser ? : param vs query vs body ?

Voici une règle simple :

Param

→ Quand tu as besoin d’un identifiant dans l’URL.

  • Identifier une ressource précise
  • Fait partie de l’URL

GET /users/5

Query

→ Quand tu ajoutes des options (souvent facultatives).

  • Filtrer / trier / paginer
  • Optionnel

GET /users?page=2

Body

→ Quand tu crées ou modifies une ressource.

  • Envoyer des données
  • Créer ou modifier

POST /users

Exemple combiné (param + query + body)

Route : PATCH /users/5?notify=true
Body:

{ "email": "new@mail.com" }

NestJS :

@Patch(':id')
update(
  @Param('id') id: string,
  @Query('notify') notify: string,
  @Body() body: UpdateUserDto
) {
  return { id, notify, body };
}

TypeOù ?Sert à…Exemples
ParamDans l’URLIdentifier une ressource/users/5
QueryAprès ?Filtrer / trier / paginer/users?page=2
BodyJSON (request body)Envoyer des donnéesPOST /users + JSON
Quelques bonnes pratiques (REST)

Nom de ressource dans l’URL : /users, /messages, /reports

Action via la méthode HTTP : GET/POST/PATCH/DELETE

ID en param : /users/:id

Filtres en query : ?page=2&limit=10

Données dans le body : DTO JSON