1. Méthode GET
Après cette quête, tu comprendras l'utilité de la méthode GET et tu sauras comment en envoyer avec PostMan
Objectifs
- Comprendre l'utilisation de la méthode GET
- Utiliser la méthode GET
- Utiliser PostMan pour effectuer des requêtes GET
- Notion d'idempotence
S'il vous plaît, serveur !
On aime tous manger au restaurant de temps en temps. Les plats sont préparés, nous n'avons plus qu'à mettre les pieds sous la table, quoique ceci implique un sacrifice pécuniaire plus ou moins conséquent en fonction des prix du restaurant et de l'appétit de chacun.
Mr. Nérouge a encore soif pendant le repas. Il attrape le serveur au vol pour lui demander une troisième bière. Le serveur, après avoir pris le reste des commandes, adresse une requête aux cuisiniers pour préparer les plats, puis va au bar pour préparer les boissons qu'il servira aux clients. Ici, nous avons un exemple de protocole de communication entre client.e de restaurant et serveur.se.
Aujourd'hui, on va apprendre à se mettre dans la peau d'un.e client.e pour comprendre les serveur.se.s.

La méthode GET
Quand un.e client.e dans un restaurant commande un plat ou une boisson, il/elle adresse une requête de récupération du bien qu'il/elle achète. Il/elle ne demande rien d'autre que de récupérer ce qu'il/elle a commandé pour étancher sa soif ou se remplir l'estomac. En aucun cas, il/elle n'interagit sur la confection de son plat. Il/elle ne fait que récupérer une ressource pour laquelle il/elle payera plus tard.

Eh bien il existe une méthode dans le protocole HTTP qui a pour unique utilité de récupérer du contenu. Il s'agit de la méthode GET.
GET est une méthode simple qui exprime une demande de récupération de ressource. GET est l'action de demande de contenu sur une page web. Lorsque tu te balades sur la Toile et que tu visites des pages, c'est presque toujours la requête GET qui est utilisée pour récupérer une de tes pages. Lorsque tu demandes facebook.com, une requête GET est envoyée à l'URL https://facebook.com. La réponse de la requête GET est la page d'accueil où un des serveurs de Facebook te propose de te connecter ou de créer ton compte.
En clair, cette méthode est énormément utilisée pour régir les communications entre client (navigateur) et serveur (site internet). C'est la première méthode à connaître avant d'aller plus loin dans l'utilisation du protocole. Tu dois comprendre l'utilité de la méthode GET avant toute chose pour avoir un aperçu du fonctionnement du Web.
GET est utilisée pour récupérer des pages, mais est-ce que c'est tout ?
Documentation officielle de fondation Mozilla
Idempotence
Lorsque tu commandes une même bière dans un même bar et qu'elle t'est servie, elle a le même goût, la même couleur que la précédente que tu as commandée. Le.a serveur.se a effectué la même action pour te servir la bière. Dans le cas d'une pression, il/elle actionne le levier pour remplir ton verre puis te le donne. Toujours et inlassablement la même action pour te servir la même bière au même bar, ce qui est plutôt normal si tu commandes toujours la même bière au même bar.

Dans le protocole HTTP, la méthode GET a de spécial qu'elle ne sert qu'à récupérer du contenu, et qu'elle pointera toujours et encore sur la même ressource. De sorte que si tu accèdes plusieurs fois à la même ressource avec un GET, tu es assuré que le contenu de la réponse à ta requête sera le même.
Dans la spécification de la RFC 7231, un passage parle des méthodes idempotentes. Mais qu'est-ce que ça peut bien vouloir dire ? L'idempotence pour les matheux est une opération qui fournit toujours le même résultat quand elle est réalisée. Si on effectue une opération idempotente plusieurs fois, le résultat sera toujours le même.
L'essence du concept d'idempotence en mathématiques a été transposée à l'informatique. C'est-à-dire qu'une méthode dite "idempotente" renverra toujours et encore la même ressource. Vous pouvez l'appeler mille fois, si l'URL appelée lors de la requête GET ne change pas, la même ressource sera impitoyablement renvoyée à chaque traitement de la même requête par le serveur.
Eh bien GET est une méthode idempotente. Elle ne devrait pas renvoyer deux résultats différents après deux appels identiques. GET ne devrait pas modifier le contenu du site, elle devrait uniquement servir à récupérer le contenu désiré sans l'altérer, point barre ...
Waouh, cette méthode est stricte ! On obtient toujours la même page à chaque fois ? Et dans le cas où je me connecte avec un utilisateur, l'affichage ne sera pas le même pour la même URL, pourtant ?
Les paramètres de la requête
Tu fais peut-être partie des gens qui aiment personnaliser leurs boissons alors qu'ils commandent dans un bar. Donc, lorsque tu commandes une bière blanche, tu aimerais que le serveur rajoute une rondelle de citron, et/ou bien qu'un peu de sirop de citron ou de grenadine y soit mélangé. Pour faire ça, tu commandes une bière au/à la serveur.se puis tu lui spécifies les détails de la bière que tu désires. Une fois que le/la serveur.se a terminé de te faire la couleur et y a ajouté les éléments que tu désires, tu récupères ta bière personnalisée avec des paramètres que tu as spécifiés au/à la serveur.se.

Tout comme dans la réalité, il est possible de demander une modulation avec des paramètres de la ressource que tu demandes dans un contexte d'échange HTTP. Tu peux demander tous les articles d'un blog ou seulement les 25 premiers. Pour personnaliser ta requête et la rendre plus précise, tu passes des paramètres à ta requête GET.
Un paramètre GET est noté avec un ?[nom du paramètre]=valeur à la fin de l'URL. Plusieurs paramètres GET sont séparés d'une esperluette (&). Ainsi, un exemple de requête GET avec des paramètres pourrait être ceci : https://site-de-vente-d-animaux.com/chat/liste?couleur=noir&race=gouttiere. La requête précédente demande à un site de vente d'animaux tous les chats de couleur noire de race chat de gouttière. Ainsi, il est possible de moduler la restitution de la ressource avec des paramètres passés à la fin de l'URL.
Si on prend maintenant l'exemple d'une recherche Google du mot "chat": https://www.google.com/search?source=hp&ei=Pr6lXdngOJDCUorYk4AJ&q=chat&oq=chat&gs_l=psy-ab.3..0l10.525.2253..2411...3.0..0.57.368.7......0....1..gws-wiz.....0.IHqdc0zYSrU&ved=0ahUKEwjZ967RpJ7lAhUQoRQKHQrsBJAQ4dUDCAU&uact=5. C'est bien plus compliqué, mais le compte y est : des paramètres modifient le résultat de la requête qui vient d'être envoyée.
Lire la partie 4.2.2 sur l'idempotence
PostMan
Pour effectuer le challenge de cette quête, tu vas utiliser un outil qui s'appelle PostMan. Il s'agit d'un logiciel qui, entre autres, sert à envoyer des requêtes HTTP. Il permet de les enregistrer, de les nommer et de les analyser de manière beaucoup plus simple que si c'était fait "à la main" (ce qui est plutôt déconseillé). Il permet même d'automatiser des tests, mais nous sommes encore assez loin d'utiliser cette fonctionnalité.
Télécharge-le ici. Une fois lancé, pas besoin de te créer un compte, tu peux cliquer sur le texte souligné en bas pour continuer sans authentification.
La vidéo ci-bas présente comment envoyer une requête GET et explique un peu les fonctionnalités basiques de PostMan.
Comme tu le sais, il est possible de passer des paramètres à ta requête GET. PostMan propose une manière simple d'ajouter des paramètres à ta requête, avec le menu qui se situe entre la barre et l'affichage du résultat. Rentre un paramètre avec une valeur et observe ton URL.
Elle a été changée automatiquement pour envoyer des paramètres. Si c'est pas génial, ça !
Regarder en x1.5 si trop lent
Challenge
Communiquer avec une API
Visite https://www.ipify.org. ipify est un service très simple qui renvoie l'adresse IP du réseau. Récupère l'adresse IP du réseau de ton campus avec PostMan au format JSON.
Critères de validation
- Capture vidéo de la procédure