Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire une requête HTTP et sa réponse

Après cette leçon: Je peux lire une requête HTTP et sa réponse.

Leçon de 55 min7 commandesLab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

Qu'est-ce qu'une requête HTTP ?

Une requête HTTP (HyperText Transfer Protocol) est le message qu'un client envoie à un serveur pour demander une page ou des données. La réponse revient dans un format tout aussi régulier.

Savoir lire une requête et sa réponse est le premier geste de quiconque construit ou dépanne une application web. Quand une page ne s'affiche pas, c'est là qu'on cherche.

À la fin de cette leçon

Remarque

Je peux lire une requête HTTP et sa réponse.

Mots clés

MotCe que ça veut direExemple
Clientle programme qui envoie une requêteun navigateur
Serveurle programme qui attend les requêtes et y répond
Méthodele verbe de la requête : ce qu'on demande de faireGET
En-têteune ligne « nom : valeur » qui décrit la requête ou la réponseHost: api:3000
Corpsles données transportées après les en-têtes
Code de statutun nombre à trois chiffres qui dit comment la requête s'est passée200

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une requête a trois parties

Une requête commence par une ligne : la méthode, le chemin et la version du protocole. Viennent ensuite les en-têtes, à raison d'une ligne chacun. Une ligne vide termine les en-têtes.

Le corps suit, s'il y en a un. Une lecture n'en a presque jamais. Un ajout y met les données à envoyer.

Exemple : une requête qui ajoute un livre

Code: bash
POST /livres HTTP/1.1
Host: api:3000
Content-Type: application/json

{"titre": "Nana", "auteur": "Emile Zola", "annee": 1880}

Préparer le catalogue de la bibliothèque

Dans ce laboratoire, un serveur nommé PostgREST met chaque table de la base derrière une adresse web. Le terminal contient psql pour la base et curl pour envoyer des requêtes.

Le Run suivant crée la table livres avec cinq livres. Il peut être relancé pour repartir de zéro. Attendez une seconde ensuite, le temps que le serveur relise la base.

Créer la table des livres

Commande
PGPASSWORD=shop psql -q -h db -U shop -c "set client_min_messages to warning; drop table if exists livres; create table livres (id serial primary key, titre text not null unique, auteur text not null, annee integer not null, exemplaires integer not null default 1 check (exemplaires >= 0), disponible boolean not null default true, resume text); insert into livres (titre, auteur, annee, exemplaires, disponible) values ('Germinal', 'Emile Zola', 1885, 3, true), ('Candide', 'Voltaire', 1759, 0, false), ('Madame Bovary', 'Gustave Flaubert', 1857, 2, true), ('La Peste', 'Albert Camus', 1947, 4, true), ('Bel-Ami', 'Guy de Maupassant', 1885, 1, true); notify pgrst, 'reload schema'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Voir la requête que curl envoie

Commande
curl -s -v -o /dev/null "http://api:3000/livres?id=eq.1" 2>&1 | grep -E '^> (GET|Host)'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une réponse a la même forme

Le serveur répond avec une ligne de statut, des en-têtes, une ligne vide, puis le corps. La ligne de statut donne la version, le code et un mot : HTTP/1.1 200 OK.

Le code est ce qu'un programme lit en premier. Il dit si la requête a réussi, sans qu'il faille lire le corps.

Exemple : les parties d'une réponse

PartieExempleCe qu'elle dit
Ligne de statutHTTP/1.1 200 OKLa requête a réussi
En-têteContent-Type: application/jsonLe corps est du JSON
Ligne vide(rien)Les en-têtes sont finis
CorpsUne liste de livresLes données demandées

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lire le code de statut seul

Commande
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/livres?id=eq.1"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire la ligne de statut

Commande
curl -s -D - -o /dev/null "http://api:3000/livres" | head -n 1

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire l'en-tête Content-Type

Commande
curl -s -D - -o /dev/null "http://api:3000/livres" | grep -i '^content-type'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire le corps pour un seul livre

Commande
curl -s -w "\n" "http://api:3000/livres?id=eq.1"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que l'adresse seule dit ce que le serveur fait. C'est faux : c'est la méthode et l'adresse ensemble. GET /livres lit les livres, DELETE /livres les supprime. Lisez toujours les deux avant d'envoyer.

Une adresse inconnue donne un code 404

Le serveur ne devine pas. Si le chemin ne désigne aucune table, il répond 404, qui veut dire « introuvable ».

Le code 404 et le code 200 ne se lisent pas dans le corps mais dans la ligne de statut. Essayez avec une table qui n'existe pas.

Demander une table qui n'existe pas

Commande
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/rayons"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

À propos de ce labo et de sa source: Lab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.