Raconté par Arnaud de Mesmay sur la base d'un cours créé par Rémi Forax et Vincent Jugé.
On réutilise le protocole HTTP pour faire
les appels à des services :
On va utiliser une addresse de base api.foo.bar.com.
On souhaite utiliser l'URI users
pour accéder aux utilisateurs.
Pour créer, lister, mettre à jour ou supprimer des utilisateurs, on utilisera donc l'adresse http://api.foo.bar.com/users.
GET | PUT | POST | DELETE | |
/users/ | liste les utilisateurs | remplace les utilisateurs | crée un nouvel utilisateur | détruit les utilisateurs |
/users/bob | récupère les propriétés d'un utilisateur | met à jour un utilisateur | supprime un utilisateur |
express.js est une bibliothèque qui permet de créer
des points d'entrée (endpoint) REST en JavaScript.
Elle utilise le
« serveur » node.js.
const express = require('express');
const app = express();
app.get('/users', (req, res) => {
res.send('Hello World!');
});
app.listen(3000);
On crée un endpoint sur l'URI /users puis on écoute les clients sur le port TCP 3000 en leur répondant Hello World!.
on utilise les verbes get, post, put, delete (en minuscules).
app.post('/users', (req, res) => {
...
});
app.put('/users', (req, res) => {
...
});
app.delete('/users', (req, res) => {
...
});
La propriété params de l'objet requête permet d'obtenir les paramètres nommés extraits de l'URI.
app.get('/users/:id', (req, res) => {
console.log('user id ' + req.params.id);
});
Les paramètres nommés commencent par ':' dans l'URI.
Les cookies sont stockés par le client et envoyés à chaque requête.
app.get('/users/:id', (req, res) => {
console.log(req.cookies);
});
cookies contient tous les cookies valides pour l'URI.
cookies est un dictionnaire dont les clés sont les noms des cookies.
status permet d'indiquer le code HTTP de la réponse.
app.get('/users/:id', (req, res) => {
res.status(404).send('Oops');
});
send permet d'envoyer une réponse textuelle.
app.get('/users/:id', (req, res) => {
res.send('OK !');
});
Le Content-Length est la longeur de la chaine de caractères.
Si le status n'est pas positionné, la valeur est 200.
sendFile permet d'envoyer un fichier en réponse.
app.get('/users/:id', (req, res) => {
res.sendFile('/absolute/path/to/ok.png');
});
Le Content-Type dépend de l'extension.
Le Content-Length est la taille du fichier.
json permet d'envoyer une réponse au format JSON.
app.get('/users/:id', (req, res) => {
let id = req.params.id;
res.json('{ user: ' + id + ' }');
});
Le Content-Type est application/json.
Sur l'objet réponse, set et append permettent d'ajouter des entêtes de réponse.
app.get('/users/:id', (req, res) => {
res.set('Set-Cookie', 'foo=bar; Path=/; HttpOnly');
});
HttpOnly veut dire pas dans les requêtes AJAX !
type permet d'indiquer le Content-Type.
app.get('/users/:id', (req, res) => {
res.type('text/html').send('
<html>
<body>
Ok
</body>
</html>
');
});