Les fichiers .http évoluent avec Visual Studio 2022
Publié le 22/08/2024
Par  Christophe MOMMER

Lorsqu'on développe une API, il est plutôt courant de mettre en place un système d'authentification à base de token. Et même, il arrive parfois qu'on ait besoin du résultat d'une requête précédente pour faire une nouvelle requête, car les API REST sont par nature stateless (elles n'ont pas connaissance de l'appel précédent, c'est à l'appelant d'envoyer les informations).

Il faut avouer qu'avec les fichiers .http de Visual Studio, il était nécessaire (et c'était un peu pénible) de faire des copier-coller entre les appels pour récupérer la valeur du token. Voici un exemple :

@HttpFileTests_HostAddress = http://localhost:5024

@Login = chris@hts-learning.com
@Password = Password123!

POST {{HttpFileTests_HostAddress}}/login/
Accept: application/json
Content-Type: application/json

{
  "email": "{{Login}}",
  "password": "{{Password}}"
}

###

GET {{HttpFileTests_HostAddress}}/secure/
Accept: application/json
Authorization: Bearer abc123

On se retrouvait donc avec ce contenu dans Visual Studio, on exécutait le premier endpoint, et on récupérait le contenu de la réponse pour aller le coller dans tous les autres appels à la place de "abc123". Pas très glorieux, répétitif, et source d'erreurs.

Avec la dernière preview de Visual Studio 2022 (17.12), c'est fini, car il est possible d'indiquer à l'IDE d'extraire automatiquement l'information du résultat de la requête !

Comment ? En utilisant la syntaxe permettant de parcourir le json de résultat pour obtenir l'information (note : c'est aussi valide avec XML et une requête XPath). Attention, il est nécessaire de nommer sa requête pour que l'IDE puisse savoir de quelle requête on parle afin d'en extraire le résultat :

@HttpFileTests_HostAddress = http://localhost:5024

@Login = chris@hts-learning.com
@Password = Password123!

# @name login
POST {{HttpFileTests_HostAddress}}/login/
Accept: application/json
Content-Type: application/json

{
  "email": "{{Login}}",
  "password": "{{Password}}"
}

###

GET {{HttpFileTests_HostAddress}}/secure/
Accept: application/json
Authorization: Bearer {{login.response.body.$.token}}

Remarquez les changements :

  • # @name login => cela permet de nommer une requête pour en extraire l'information
  • {{login.response.body.$.token}} => cela permet de dire au moteur de fichier .http d'extraire depuis le corps de résultat la valeur stockée dans la clé "token" de la réponse de l'endpoint login

Avec cela, il est possible d'enchainer les appels sans utiliser le copier-coller et donc d'aller plus vite.

La durée de vie de l'information est liée à la durée de vie de l'onglet ouvert, c'est à dire que tant que vous ne fermez pas l'onglet de votre fichier .http dans Visual Studio, l'information récupérée par l'appel sera disponible. Cela veut également dire que différents onglets ne peuvent pas partager la même information, chacun ayant son propre contexte.

Dernier point : le mot de passe dans le fichier .http n'EST PAS une bonne pratique, c'est uniquement à des fins de tests. Si vous souhaitez mettre des données sensibles dans vos fichiers .http, il faudra passer par les secrets dans les fichiers .http. 

Microsoft continue de s'inspirer de REST Client pour Visual Studio Code, et il y a encore de beaux changements à venir dans ces fichiers .http, afin de pouvoir faire des appels HTTP tout en restant dans le confort de l'IDE.