Faire des appels HTTP depuis Visual Studio 2022
Publié le 22/06/2023
Par  Christophe MOMMER

Certains diront, avec raison, "il était temps !". Oui, ça faisait un moment que Rider et VS Code le permettait, mais dorénavant, depuis Visual Studio 2022 17.6, on peut ENFIN faire des appels HTTP directement depuis l'éditeur. Alors, comment et à quoi ça sert ?

Un peu de contexte

Tout d'abord, la majorité des développeurs d'API en .NET utilisaient généralement deux outils : Visual Studio 2022 (pour le code, il paraît que c'est utile) et POSTMAN (pour envoyer des requêtes). POSTMAN, qui à la base était une extension Google Chrome, est rapidement depuis un outil standalone très puissant et massivement utilisé. D'ailleurs, spoiler alert : il restera un indispensable pour les cas d'usages avancés.

Mais, si on considère qu'on souhaite tout simplement faire une requête POST simple vers notre API, comment on fait ? Car avec GET, c'est facile, on peut tester avec le navigateur web après tout. Mais pour POST ?

La cavalerie est arrivée

Visual Studio 2022, constamment mis à jour, permet dorénavant de faire des appels HTTP directement depuis l'éditeur. Il suffit simplement de créer un fichier avec l'extension .http pour activer cette fonctionnalité. Prenons un scénario simple, tiré du TP 3 de mon cours sur le développement d'API.

Dans ce TP, on demande notamment de créer un endpoint de création d'utilisateurs, de pouvoir s'authentifier pour récupérer un token JWT et, si on est admin, de pouvoir lister les utilisateurs.

Étape 1 : créer dans Visual Studio un fichier (appelons le calls.http) :

Étape 2 : créer le contenu "réutilisable dans le fichier

Une fois le fichier créé, nous pouvons créer des variables que l'on pourra réutiliser dans notre fichier. L'avantage, c'est de pouvoir déclarer à un seul endroit des éléments qui permet un changement facile et rapide si on veut tester ailleurs. Ici, on va déclarer l'host et le port :

@hostname=localhost
@port=5555

Les variables dans ces fichiers commencent par le symbole "@" suivi du nom de la variable.

Étape 3 : créer les appels 

Il faut maintenant déclarer les appels que l'on souhaite pouvoir réaliser depuis ce fichier HTTP. Pour faire simple, un appel doit être déclaré entre deux blocs de trois dièses (###), sauf le dernier qui n'est pas obligatoirement fermé, et le premier qui n'est pas obligatoirement ouvert (mais moi, j'aime bien le faire). Faisons le premier appel, qui consiste à créer un utilisateur avec la méthode POST en envoyant en JSON le nom de l'utilisateur et son login (dans ce TP, c'est l'API qui génère le mot de passe pour l'utilisateur) :

POST http://{{hostname}}:{{port}}/users
Content-Type: application/json

{
  "name":"chris",
  "login":"chris"
}

On peut le voir, déclarer un appel, c'est simple : on met le verbe HTTP (ici POST) suivi de l'URL. A la ligne, on peut mettre tous les headers que l'on souhaite (je n'ai mis que le Content-Type, mais il est possible d'en mettre d'autres). Après, on saute une ligne et on déclarer le JSON du body de la requête.

Visual Studio met directement l'interface à jour :

On peut voir la possibilité de faire un envoi de requête (Send request), qui est l'équivalent d'appuyer sur le triangle vert dans la marge. Debug est plus intéressant dans le cas présent car il va lancer l'application  en Debug dans laquelle le fichier http se trouve, et s'il y a des points d'arrêt, ça permet de les atteindre en un clic. 

Et l'authentification ? Et bien, ce n'est rien d'autre qu'un header comme un autre (Authorization suivi de vos infos, typiquement Bearer + token si vous utilisez JWT). Au final, rien n'est bloquant pour les appels simples.

Bon, moi, je vais désinstaller POSTMAN

Hola, pas si vite ! En effet, Microsoft eux-mêmes listent ici (https://learn.microsoft.com/fr-fr/aspnet/core/test/http-files?view=aspnetcore-8.0&WT.mc_id=DT-MVP-5004836#unsupported-syntax) ce qui n'est pas supporté (oui, ça fait beaucoup hein ...). 

Bien qu'ils disent que c'est toujours en préversion (ce qui est partiellement faux vu que c'est sorti avec la version stable de VS, mais soit), tout laisse à penser que ça va encore évoluer sur un point de vue fonctionnel (enfin, si leur télémétrie leur remonte que la feature est utilisée). 

Donc, pour les scénarios simples, c'est un grand OUI, mais pour les scénarios avancés/complexes, il va encore rester un petit peu de travail...

J'ai la flemme, mon API est déjà codée et j'ai plein d'endpoints

Heureusement pour toi, Visual Studio 2022 possède une fonctionnalité (toujours en preview) qui permet de lister les endpoints de ton API et d'en générer les requêtes directement. Il suffit d'afficher l'explorateur d'enpoints (Endpoint explorer). Attention, vu que c'est en preview, tu auras peut-être besoin d'activer la fonctionnalité dans les options de l'IDE. 

Une fois ceci fait, la doc nous dit qu'il suffit de faire un clic droit sur l'endpoint pour générer la requête :

Endpoints Explorer window showing request context menu with 'Generate Request' menu selection highlighted.
(source : Microsoft)

Bon, personnellement, je n'ai pas réussi à faire marcher cette fenêtre avec les minimal APIs (ça doit marcher pour MVC). J'attends donc le peaufinage de cette feature pour gagner du temps, mais probablement que l'utilisation des fichiers .http me sera utile pour éviter de jongler entre plusieurs outils !