Développer une API Rest avec NodeJS, Express et MongoDB: #3 Les verbes HTTP
Tags: node, mongodb, express, french
Published: 2022-09-18 12:06:15

---
title: Développer une API Rest avec NodeJS, Express et MongoDB: #3 Les verbes HTTP
published: true
description:  Avant de pouvoir commencer à nous amuser avec des vrais users et tout le tointoin, il nous faut comprendre les "Verbes HTTP". Les 4 chevaliers de la joie (et non de l'apocalypse) GET/POST/PUT/DELETE
tags: node, mongodb, express, french
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
---

Les verbes HTTP... nous n'allons pas lire Rimbaud, calme-toi!
Une facon toute conne de décrire ce qu'est un verbe serait de dire: 

"Les verbes HTTP me servent à donner des ordres à mon serveur"

## `GET`: donne moi un truc
C'est le seul qu'on a pu tester pour le moment, car la facon la plus simple de faire un `GET` est de lancer un navigateur et de taper une url quelconque, par contre si je veux mettre des paramètre, c'est cuit.

Rappel de la syntaxe du `GET` en ExpressJS:
```js
app.get("/", (request, response) => {
  response.statusCode = 200
  response.send({ message: "Mon premier JSON!" })
})
```

## Halte! un outils important
Avant de pouvoir continuer, on va devoir installer un outils indispensable pour le bon dévelopeur d'API que je suis:
[Postman](https://www.postman.com/downloads/)


### Le tour des lieux
Ca va etre assez simple, Postman permet de créer des requetes de tout types avec modification des en-tetes, parametres et tout le reste.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/epfnvf1jw7n9sfd7lyu3.png)

On connais déjà la syntaxe:

```js
app.get("/bonjour", (request, response) => {
  response.send({ message: "Bonjou!" })
})
```

On teste ca:
Postman est super simple et encore plus simple lorsqu'on utilise que l'URL. Je vais bientot commencer à utiliser des Headers etc...
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1hinen3nhy4wzc6q35j.gif)


## `POST`: crée un truc et que ca saute!
### Crée moi ca

```js
app.post("/champion", (request, response) => {
  response.send({ message: "J'ai t'ai créé ton truc 🤞 (je mens)!" })
})
```

On teste ca:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h7v27t7ow63c86i4qsv.gif)

Si tu te souviens bien des autres routes que nous avions créé, j'avais une route `GET /champions` et pourtant il n'a pas confondu le `POST /champions`. Voilà où réside la logique des verbes:
1. Je garde le meme nom de resource `/champions`
2. Je décline en plusieurs verbes
- `GET /champions`: Donne moi tous les champions
- `POST /champions`: Crée moi un nouveau champion
- `PUT /champions/1`: Modifie le champion dont l'ID est `1` (on va voir les params après)
- `GET /champions/1`: Donne moi le champions dont l'ID est `1`
- `DELETE /champions/1`: Supprime le champions dont l'ID est `1`

## `PUT`: modifie moi un truc
```js
app.put("/champions/:id", (request, response) => {
  response.send({
    message: `J'ai modifié le chapmion ${request.params.id}🤞 (je mens)!`,
  })
})
```

On teste ca:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wfhmng5snag3xq3hi339.gif)


## `DELETE`: j'ai changé d'avis, supprime-moi ca!
Normalement arrivé ici, tu dois commencer à voir l'idée et tu peux deviner la prochaine syntaxe ainsi que la requete:

```js
app.delete("/champions/:id", (request, response) => {
  response.send({
    message: `J'ai supprimé le chapmion ${request.params.id}🤞 (je mens)!`,
  })
})
```

On teste ca:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6c0j3nxtfadh4gya94fu.gif)

Si t'as bien suivi jusqu'ici, tu devrais te poser des question sur le comment je fais pour:
- Créer un champion avec un nom, description, blabla
- Mettre à jour la description de ce champion

Là on va passer vers une autre partie:
- Le body
- Les paramètres