Vous êtes sur la page 1sur 10

2/14/23, 2:00 PM Qu'est-ce que le REPOS 

? | Codecademy

English French

Catégories d'articles →

Équipe Codecademy

Qu'est-ce que le REPOS ?


Partager

Découvrez le paradigme REST (Representational State Transfer) et comment


l'architecture REST rationalise la communication entre les composants Web.

RESTFUL API

Transfert d'État représentatif


REST, ou REpresentational State Transfer, est un style architectural permettant de fournir des
normes entre les systèmes informatiques sur le Web, facilitant ainsi la communication entre les
systèmes. Les systèmes conformes à REST, souvent appelés systèmes RESTful, se caractérisent par
la façon dont ils sont sans état et séparent les préoccupations du client et du serveur. Nous
verrons ce que signifient ces termes et pourquoi ils sont des caractéristiques bénéfiques pour les

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 1/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

services sur le Web. Portez une attention particulière : si vous recherchez une carrière dans le
domaine de la technologie, il se peut qu'on vous demande de définir le repos lors d'un entretien.

Séparation du client et du serveur


Dans le style architectural REST, l'implémentation du client et l'implémentation du serveur
peuvent se faire indépendamment sans que l'une se connaisse. Cela signifie que le code côté
client peut être modifié à tout moment sans affecter le fonctionnement du serveur, et que le
code côté serveur peut être modifié sans affecter le fonctionnement du client.

Tant que chaque côté sait quel format de messages envoyer à l'autre, ils peuvent rester
modulaires et séparés. En séparant les problèmes d'interface utilisateur des problèmes de
stockage de données, nous améliorons la flexibilité de l'interface sur toutes les plates-formes et
améliorons l'évolutivité en simplifiant les composants du serveur. De plus, la séparation permet à
chaque composant d'évoluer indépendamment.

En utilisant une interface REST, différents clients accèdent aux mêmes points de terminaison
REST, effectuent les mêmes actions et reçoivent les mêmes réponses.

Apatridie
Les systèmes qui suivent le paradigme REST sont sans état, ce qui signifie que le serveur n'a pas
besoin de savoir dans quel état se trouve le client et vice versa. De cette façon, le serveur et le
client peuvent comprendre n'importe quel message reçu, même sans voir les messages
précédents. Cette contrainte d'apatridie est appliquée par l'utilisation de ressources plutôt que
par des commandes . Les ressources sont les noms du Web - elles décrivent tout objet,
document ou chose que vous pourriez avoir besoin de stocker ou d'envoyer à d'autres services.

Étant donné que les systèmes REST interagissent via des opérations standard sur les ressources,
ils ne reposent pas sur l'implémentation d'interfaces.

Ces contraintes aident les applications RESTful à atteindre la fiabilité, les performances rapides et
l'évolutivité, en tant que composants pouvant être gérés, mis à jour et réutilisés sans affecter le
système dans son ensemble, même pendant le fonctionnement du système.

Maintenant, nous allons explorer comment la communication entre le client et le serveur se


produit réellement lorsque nous implémentons une interface RESTful.

Communication entre Client et Serveur


Dans l'architecture REST, les clients envoient des requêtes pour récupérer ou modifier des
ressources, et les serveurs envoient des réponses à ces requêtes. Jetons un coup d'œil aux
https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 2/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

méthodes standard pour faire des demandes et envoyer des réponses.

Faire des demandes


REST nécessite qu'un client fasse une requête au serveur afin de récupérer ou de modifier des
données sur le serveur. Une demande consiste généralement en :

un verbe HTTP, qui définit le type d'opération à effectuer


un en-tête , qui permet au client de transmettre des informations sur la requête
un chemin vers une ressource
un corps de message facultatif contenant des données

Verbes HTTP
Il existe 4 verbes HTTP de base que nous utilisons dans les requêtes pour interagir avec les
ressources dans un système REST :

GET — récupère une ressource spécifique (par identifiant) ou une collection de ressources
POST — créer une nouvelle ressource
PUT - mettre à jour une ressource spécifique (par identifiant)
SUPPRIMER - supprimer une ressource spécifique par identifiant

Vous pouvez en savoir plus sur ces verbes HTTP dans l'article Codecademy suivant :

Qu'est-ce que CRUD ?

En-têtes et paramètres d'acceptation


Dans l'en-tête de la requête, le client envoie le type de contenu qu'il est en mesure de recevoir
du serveur. C'est ce qu'on appelle le Accept champ, et il garantit que le serveur n'envoie pas de
données qui ne peuvent pas être comprises ou traitées par le client. Les options pour les types de
contenu sont les types MIME (ou les extensions de messagerie Internet polyvalentes, sur lesquelles
vous pouvez en savoir plus dans les documents Web MDN .

Les types MIME, utilisés pour spécifier les types de contenu dans le Accept champ, consistent en a
type et a subtype . Ils sont séparés par une barre oblique (/).

Par exemple, un fichier texte contenant du HTML serait spécifié avec le type text/html . Si ce fichier
texte contenait du CSS à la place, il serait spécifié comme text/css . Un fichier texte générique
serait noté text/plain . Cette valeur par défaut, text/plain , n'est cependant pas un fourre-tout. Si un
client attend text/css et reçoit text/plain , il ne pourra pas reconnaître le contenu.

Autres types et sous-types couramment utilisés :

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 3/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

image — image/png , image/jpeg , image/gif


audio — audio/wav , audio/mpeg
video — video/mp4 , video/ogg
application — application/json , application/pdf , application/xml , application/octet-stream

Par exemple, un client accédant à une ressource avec id 23 dans une articles ressource sur un
serveur peut envoyer une requête GET comme celle-ci :

GET /articles/23
Accept: text/html, application/xhtml

Le Accept champ d'en-tête dans ce cas indique que le client acceptera le contenu dans
text/html ou application/xhtml .

Chemins
Les requêtes doivent contenir un chemin vers une ressource sur laquelle l'opération doit être
effectuée. Dans les API RESTful, les chemins doivent être conçus pour aider le client à savoir ce
qui se passe.

Classiquement, la première partie du chemin doit être la forme plurielle de la ressource. Cela
permet de garder les chemins imbriqués simples à lire et faciles à comprendre.

Un chemin comme fashionboutique.com/customers/223/orders/12 est clair dans ce vers quoi il pointe,


même si vous n'avez jamais vu ce chemin spécifique auparavant, car il est hiérarchique et
descriptif. Nous pouvons voir que nous accédons à la commande avec id 12 pour le client avec
id 223.

Les chemins doivent contenir les informations nécessaires pour localiser une ressource avec le
degré de spécificité nécessaire. Lorsque vous faites référence à une liste ou à une collection de
ressources, il n'est pas toujours nécessaire d'ajouter un id . Par exemple, une requête POST au
fashionboutique.com/customers chemin n'aurait pas besoin d'un identifiant supplémentaire, car le
serveur générera un id pour le nouvel objet.

Si nous essayons d'accéder à une seule ressource, nous aurions besoin d'ajouter un id au chemin.
Par exemple : GET fashionboutique.com/customers/:id — récupère l'élément dans la customers ressource
avec le id spécifié. DELETE fashionboutique.com/customers/:id — supprime l'élément dans la
customers ressource avec le id spécifié.

Envoi de réponses

Types de contenu
https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 4/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

Dans les cas où le serveur envoie une charge utile de données au client, le serveur doit inclure un
content-type dans l'en-tête de la réponse. Ce content-type champ d'en-tête alerte le client sur le type
de données qu'il envoie dans le corps de la réponse. Ces types de contenu sont des types MIME,
tout comme ils le sont dans le accept champ de l'en-tête de la requête. Le content-type que le
serveur renvoie dans la réponse doit être l'une des options que le client a spécifiées dans le
accept champ de la requête.

Par exemple, lorsqu'un client accède à une ressource avec id 23 dans une articles ressource avec
cette requête GET :

GET /articles/23 HTTP/1.1


Accept: text/html, application/xhtml

Le serveur peut renvoyer le contenu avec l'en-tête de réponse :

HTTP/1.1 200 (OK)


Content-Type: text/html

Cela signifierait que le contenu demandé est renvoyé dans le corps de la réponse avec un content-
type of text/html , ce que le client a déclaré pouvoir accepter.

Codes de réponse
Les réponses du serveur contiennent des codes d'état pour alerter le client des informations sur
le succès de l'opération. En tant que développeur, vous n'avez pas besoin de connaître tous les
codes d'état (il y en a beaucoup ), mais vous devez connaître les plus courants et leur utilisation :

Code d'état Signification

200 (d'accord) Il s'agit de la réponse standard pour les requêtes HTTP réussies.

Il s'agit de la réponse standard pour une requête HTTP qui a abouti à la


201 (CRÉÉ)
création réussie d'un élément.
Il s'agit de la réponse standard pour les requêtes HTTP réussies, où
204 (AUCUN CONTENU)
rien n'est renvoyé dans le corps de la réponse.
400 (MAUVAISE La demande ne peut pas être traitée en raison d'une mauvaise syntaxe de
DEMANDE) demande, d'une taille excessive ou d'une autre erreur client.

403 (INTERDIT) Le client n'a pas l'autorisation d'accéder à cette ressource.


La ressource est introuvable pour le moment. Il est possible qu'il ait
404 (NON TROUVÉ)
été supprimé ou qu'il n'existe pas encore.
500 (ERREUR DE La réponse générique à un échec inattendu s'il n'y a pas d'informations
SERVEUR INTERNE) plus spécifiques disponibles.

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 5/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

Pour chaque verbe HTTP, il existe des codes d'état attendus qu'un serveur doit renvoyer en cas
de succès :

GET - renvoie 200 (OK)


POST — renvoie 201 (CRÉÉ)
PUT — renvoie 200 (OK)
DELETE — return 204 (NO CONTENT) Si l'opération échoue, renvoie le code d'état le plus
spécifique possible correspondant au problème rencontré.

Exemples de demandes et de réponses


Supposons que nous ayons une application qui vous permet d'afficher, de créer, de modifier et de
supprimer des clients et des commandes pour un petit magasin de vêtements hébergé sur
fashionboutique.com . Nous pourrions créer une API HTTP permettant à un client d'effectuer ces
fonctions :

Si nous voulions voir tous les clients, la requête ressemblerait à ceci :

GET http://fashionboutique.com/customers
Accept: application/json

Un en-tête de réponse possible ressemblerait à :

Status Code: 200 (OK)


Content-type: application/json

suivi des customers données demandées au application/json format.

Créez un nouveau client en publiant les données :

POST http://fashionboutique.com/customers
Body:
{
“customer”: {
“name” = “Scylla Buss”,
“email” = “scylla.buss@codecademy.org”
}
}

Le serveur génère ensuite un id pour cet objet et le renvoie au client, avec un en-tête comme :

201 (CREATED)
Content-type: application/json

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 6/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

Pour afficher un seul client, nous l' obtenons en spécifiant l'identifiant de ce client :

GET http://fashionboutique.com/customers/123
Accept: application/json

Un en-tête de réponse possible ressemblerait à :

Status Code: 200 (OK)


Content-type: application/json

suivi des données de la customer ressource au format id 23 application/json .

Nous pouvons mettre à jour ce client en mettant les nouvelles données :

PUT http://fashionboutique.com/customers/123
Body:
{
“customer”: {
“name” = “Scylla Buss”,
“email” = “scyllabuss1@codecademy.com”
}
}

Un en-tête de réponse possible aurait Status Code: 200 (OK) , pour notifier au client que l'élément
avec id 123 a été modifié.

Nous pouvons également SUPPRIMER ce client en précisant son id :

DELETE http://fashionboutique.com/customers/123

La réponse aurait un en-tête contenant Status Code: 204 (NO CONTENT) , informant le client que
l'élément avec id 123 a été supprimé, et rien dans le corps.

Entraînez-vous avec REST


Imaginons que nous construisons un site de collection de photos. Nous voulons créer une API
pour suivre les utilisateurs, les lieux et les photos de ces lieux. Ce site a un index.html et un
style.css . Chaque utilisateur a un nom d'utilisateur et un mot de passe. Chaque photo a un lieu et
un propriétaire (c'est-à-dire l'utilisateur qui a pris la photo). Chaque lieu a un nom et une adresse.
Pouvez-vous concevoir un système REST qui accepterait :

stocker les utilisateurs, les photos et les lieux

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 7/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

accéder aux lieux et accéder à certaines photos d'un certain lieu

Commencez par écrire :

quels types de demandes nous voudrions faire


quelles réponses le serveur doit renvoyer
ce que content-type devrait être chaque réponse

Solution Possible - Modèles


{
“user”: {
"id": <Integer>,
“username”: <String>,
“password”: <String>
}
}

{
“photo”: {
"id": <Integer>,
“venue_id”: <Integer>,
“author_id”: <Integer>
}
}

{
“venue”: {
"id": <Integer>,
“name”: <String>,
“address”: <String>
}
}

Solution possible - Demandes/Réponses


Requêtes GET
Demande - GET /index.html Accepter : text/html Réponse - 200 (OK) Type de contenu : text/html

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 8/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

Demande - GET /style.css Accepter : text/css Réponse - 200 (OK) Type de contenu : text/css

Request- GET /venues Accept: application/json Response- 200 (OK) Content-type: application/json

Request- GET /venues/:id Accept: application/json Response- 200 (OK) Content-type: application/json

Request- GET /venues/:id/photos/:id Accept: application/json Response- 200 (OK) Content-type:


image/png

POST Requests
Request- POST /users Response- 201 (CREATED) Content-type: application/json

Request- POST /venues Response- 201 (CREATED) Content-type: application/json

Request- POST /venues/:id/photos Response- 201 (CREATED) Content-type: application/json

PUT Requests
Request- PUT /users/:id Response- 200 (OK)

Request- PUT /venues/:id Response- 200 (OK)

Request- PUT /venues/:id/photos/:id Response- 200 (OK)

DELETE Requests
Request- DELETE /venues/:id Response- 204 (NO CONTENT)

Request- DELETE /venues/:id/photos/:id Response- 204 (NO CONTENT)

Share

Learn More on Codecademy

Skill Path

Create a Back-End App with JavaScript


Beginner friendly, 29 Lessons

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 9/10
2/14/23, 2:00 PM Qu'est-ce que le REPOS ? | Codecademy

Course

Learn Node.js
Intermediate, 4 Lessons

https://www-codecademy-com.translate.goog/article/what-is-rest?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=en&_x_tr_pto=wapp 10/10

Vous aimerez peut-être aussi