En guise de préparation, j’ai pensé jeter un coup d’œil au fonctionnement général de HTTP et à la façon dont vous pouvez utiliser les fonctions natives de WordPress pour travailler avec lui, ouvrant ainsi vos produits à l’intégration avec Twitter, Facebook, Mailchimp et toutes sortes d’autres outils.

Dans cet article – partie 1 sur 2 – je vous montrerai les bases des requêtes HTTP, comment elles sont structurées, les informations qu’elles contiennent et comment y donner du sens. Dans la partie 2, nous mettrons nos connaissances en pratique – grâce à WordPress.

Qu’est-ce que HTTP

HTTP est le principal protocole utilisé sur le web aujourd’hui, c’est l’abréviation de Hypertext Transfer Protocol et c’est lui qui vous affiche le HTML, les images et autres. Les clients HTTP, comme votre navigateur, envoient des requêtes aux serveurs HTTP qui renvoient une réponse.

Par exemple, si vous dirigez votre navigateur vers Kinsta.com, vous envoyez une requête aux serveurs de Kinsta. Le serveur lit votre requête, détermine ce dont vous avez besoin (nous parlerons bientôt de la façon dont cela se passe) et renvoie une réponse qui contient le code HTML de la page. Votre navigateur lit la réponse et rend le code HTML à l’écran.

Bases des requêtes HTTP

Toute transaction entre un client et un serveur commence par une requête HTTP. Les deux parties les plus importantes d’une requête sont le nom de la méthode et l’URL de la ressource demandée. Commençons par cette dernière.

Ressources

Une ressource est un élément de données qui peut être identifié par une URL. Par exemple : http://monblog.com/mon-super-article retournera probablement un fichier HTML – le code nécessaire pour rendre votre article génial.

Noms des méthodes

Les noms des méthodes identifient le type d’action que vous voulez effectuer sur la ressource. Les navigateurs utilisent presque toujours GET qui indique que vous voulez récupérer la ressource.

Les autres méthodes comprennent POST pour créer de nouveaux articles, PUT pour mettre à jour des articles, DELETE pour supprimer des articles et HEAD pour récupérer des informations d’en-tête.

Ces noms de méthodes, ainsi que les URL, constituent la base des REST API. Vous pourriez envoyer une requête get à /article/4 pour récupérer l’article 4. Vous pourriez aussi envoyer une requête PUT avec des données pour les modifier, ou une requête DELETE pour les supprimer.

La structure de HTTP

Les requêtes et les réponses HTTP sont très similaires d’un point de vue structurel. Chacune d’entre elles comporte quatre parties distinctes :

  • Une ligne initiale qui est différente pour la requête et la réponse
  • Des en-têtes facultatifs qui contiennent des informations sur la requête ou la réponse
  • Une ligne vide
  • Le contenu du corps facultatif

1. La ligne initiale

Pour les requêtes, la ligne initiale contient trois informations : le nom de la méthode, le chemin des ressources et la version HTTP utilisée. Voici à quoi cela peut ressembler :

GET /users/4 HTTP/1.1

Notez que cette ligne contient le chemin relatif local et non l’URL complète. L’URL de base est envoyée dans un en-tête (l’en-tête Host), nous verrons bientôt les en-têtes. Les réponses contiennent également trois informations : la version HTTP, le code d’état et une raison qui décrit le code d’état.

HTTP/1.1 302 Moved Temporarily

Pour obtenir une liste de tous les codes d’état et une explication de chacun d’entre eux, consultez la Spécification des codes d’état HTTP, tout y est très clair.

2. En-têtes

Les en-têtes sont essentiellement des paires nom-valeur d’informations. L’en-tête Host mentionné précédemment est un bon exemple, en fait, c’est le seul en-tête obligatoire dans HTTP 1.1. Les en-têtes vous donnent plus de contrôle et plus d’informations. L’en-tête Accept vous permet de spécifier le type de contenu que vous autorisez dans une requête. L’en-tête Accept-Language vous permet de contrôler la langue du contenu que vous êtes à accepter. Les deux sont des formes de négociation de contenu.

L’en-tête Authorization est un en-tête que vous utiliserez beaucoup lorsque vous travaillerez avec des API pour accéder à des actions nécessitant une autorisation, comme la suppression d’un Tweet ou l’accès à votre compte utilisateur.

3. Corps

Le corps est l’endroit où la ressource est renvoyée ou où des explications supplémentaires peuvent être données si vous avez rencontré une erreur. Vous pouvez utiliser le langage de votre choix pour lire les données du corps et les afficher, ou l’utiliser en interne pour traiter les erreurs.

Utiliser HTTP

J’ai trouvé que comprendre HTTP était extrêmement utile pour négocier la documentation des API tierces. Ce qui complique l’utilisation de HTTP, c’est que vous l’utilisez généralement dans un langage de programmation, ce qui signifie que vous devez connaître la façon dont ce langage met en œuvre HTTP ainsi que HTTP lui-même.

Une fois que vous avez fait la requête, vous devez lire la réponse, savoir quelles informations en extraire et peut-être même faire passer la réponse par certaines fonctions pour la convertir dans le format dont vous avez besoin. Une fois que vous avez ces informations, vous pouvez les afficher, les enregistrer dans une base de données ou les manipuler d’une autre manière.

HTTP en soi n’est pas difficile, mais les tâches que vous devez effectuer en plus de faire/recevoir une requête peuvent s’accumuler assez rapidement, masquant la simplicité de HTTP dans un linceul de complexité. De plus, de nombreuses API vous demanderont de vous authentifier, ce qui ajoute une couche supplémentaire à tout cela.

cURL

cURL est un moyen d’interagir avec HTTP mais il est plutôt complexe. Il peut être utilisé à partir du terminal, mais PHP a également une prise en charge de cURL. Pour récupérer le contenu d’une URL, vous pouvez utiliser ce qui suit dans le terminal.

curl http://kinsta.com

Le problème est que l’utilisation de cURL dans le terminal peut devenir assez complexe. Pour afficher uniquement les informations d’en-tête, vous devriez utiliser la forme suivante :

curl -s -D - http://danielpataki.com -o /dev/null

Vous pouvez afficher une liste de tous les paramètres mais il y a de fortes chances que vous utilisiez cURL dans votre application web, alors regardons cURL en PHP. Voici comment obtenir le contenu de la même page :

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

C’est encore un peu lourd, mais en utilisant le Guide PHP, vous pouvez comprendre ce qui se passe.

Utiliser WordPress

cURL est génial, mais ajouter des en-têtes et traiter les informations renvoyées n’est pas aussi facile que ce à quoi vous êtes habitué si vous avez travaillé avec des classes et des fonctions PHP joliment codées. Heureusement, WordPress nous protège avec son API HTTP. Nous l’examinerons en détail dans le prochain article, pour l’instant, voici un exemple avec la fonction native de WordPress, y compris l’ajout d’en-têtes :

$request = wp_remote_get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kinsta, array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
    ),
));

Résumé

HTTP est la base de tout ce que nous faisons sur le web et savoir ce qui se passe dans une requête et une réponse nous donne de grandes capacités de dépannage et nous permet de mieux contrôler nos applications.

En maîtrisant les bases de HTTP, vous pourrez utiliser les API externes plus rapidement et plus efficacement, en sachant exactement quoi faire avec les informations qui vous sont données dans les guides d’API.

Dans le prochain article de la série, je verrai comment vous pouvez gérer les données HTTP avec WordPress et comment vous pouvez très facilement connecter WordPress à un service tiers.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.