Texte & documents
Nombres & calcul
Données & formats
Sécurité
Développement & DevOps
Intelligence artificielle
Finances
Santé et bien-être
Productivité
Jeux et divertissement
Multimédia & design
Entreprise
Guide d'utilisation
Ce que c'est et ce que ce n'est PAS

Un atelier pour APIs HTTP qui tourne entièrement dans ton navigateur : pas de serveur, pas de compte, pas d'extension. Il fait quatre choses : il envoie des requêtes et t'explique pourquoi elles échouent, convertit des collections entre Postman, Bruno, Insomnia, OpenAPI, HAR et curl, génère du code en onze langages, et compare deux versions d'une API pour te dire ce qui casse.

Ce qu'il n'est PAS : un remplaçant de Postman ou Bruno. Une page web ne peut appeler ni localhost ni aucune API qui ne publie pas d'en-têtes CORS — ce n'est pas une limitation de cet outil, c'est ainsi que fonctionnent les navigateurs. Pour ton API locale, un client de bureau. Ici, en revanche, tu as ce qu'ils ne peuvent pas te donner : savoir ce que le navigateur a vraiment fait.

Le légiste du CORS — ce qu'on ne peut faire que d'ici

Quand une requête vers un autre domaine échoue, le navigateur dit seulement TypeError: Failed to fetch et rien de plus. Avec ce message, impossible de distinguer « mon serveur est en panne » de « mon serveur a répondu et le navigateur m'a caché la réponse » — deux problèmes aux solutions opposées.

Cet outil les sépare : en cas d'échec, il envoie une seconde requête opaque vers la même adresse. Celle-là, le navigateur l'envoie bel et bien et ne la rejette pas pour cause de CORS. Si elle aboutit, ton serveur a répondu et ce qui manque, ce sont des en-têtes. Si elle échoue aussi, le serveur n'a pas été atteint et le CORS n'y est pour rien.

Postman et Bruno ne peuvent pas faire ça : ce sont des programmes de bureau et le CORS ne s'applique pas à eux.

Le preflight, signalé avant l'envoi

Avec des méthodes comme PUT, PATCH ou DELETE, avec un Content-Type qui n'est pas un type de formulaire, ou avec n'importe quel en-tête personnalisé, le navigateur envoie d'abord une requête OPTIONS pour demander la permission. Si ton serveur n'y répond pas, la requête réelle ne part jamais même si ton API fonctionne parfaitement.

L'outil te le dit avant l'envoi et te signale laquelle des trois causes en est responsable, car la solution est différente dans chaque cas.

Pourquoi tu ne vois pas tous les en-têtes de la réponse

Le navigateur ne laisse lire que sept en-têtes (content-type, cache-control…). Les autres sont là —tu les vois dans l'onglet Réseau— mais JavaScript ne peut pas y toucher, sauf si le serveur les publie avec Access-Control-Expose-Headers.

S'il te manque ton X-RateLimit-Remaining, ce n'est pas un bug : c'est ça. L'outil te prévient quand seuls les sept arrivent.

Pareil à l'envoi : il y a des en-têtes que le navigateur ne te laisse pas définir (Host, Origin, Cookie, User-Agent…). Ils sont abandonnés, et on te dit lesquels, plutôt que de faire semblant qu'ils ont été envoyés.

Convertir des collections (et pourquoi le hors-ligne compte)

Colle ou dépose un export de Postman, d'Insomnia, un HAR du navigateur, une spécification OpenAPI (JSON ou YAML), un fichier .bru de Bruno ou une poignée de commandes curl : le format est reconnu tout seul. Le résultat est une collection Bruno (un .zip avec son arborescence de dossiers), une collection Postman ou des commandes curl.

Pourquoi ici et pas dans un convertisseur web quelconque : une collection exportée transporte tes tokens à l'intérieur. C'est exactement le fichier que tu ne devrais pas envoyer sur un serveur tiers pour le convertir. Ici, il ne quitte jamais le navigateur — et l'outil te liste les identifiants qu'il trouve, masqués, pour que tu saches ce que tu es sur le point de partager.

Ce qui ne peut pas être converti est dit, pas caché

Les scripts de Postman (pm.test, pm.environment) et ceux de Bruno sont du code écrit contre un environnement qui n'existe pas ici : ils ne sont pas traduits. Les champs de fichier gardent le chemin disque de la personne qui a exporté, pas le contenu. Les modèles Insomnia n'ont de sens que dans Insomnia.

Tout ça apparaît comme un avertissement à l'import. Une migration qui avale tes scripts sans le dire, c'est le genre de chose que tu découvres en production.

Générer du code

La requête que tu as montée, prête à coller dans onze cibles : cURL, fetch, axios, Python (requests), HTTPie, Go, Java, C#, PHP, PowerShell et Rust.

Ce ne sont pas des exemples illustratifs : ils viennent avec leurs import, avec les échappements de chaque langage —une apostrophe dans le corps ne te casse pas la commande— et avec les détails qu'on fait mal par habitude (en C# le Content-Type va dans le contenu et pas dans les en-têtes ; en Go un import inutilisé ne compile pas).

Ce qui casse entre deux versions de ton API

Colle deux spécifications OpenAPI et il te dit ce qui a changé et lesquels de ces changements cassent un client déjà existant. C'est la vraie question avant de déployer, et c'est ce qu'un diff en couleurs ne répond pas.

Des paires qui se ressemblent dans un diff et signifient le contraire : ajouter un paramètre optionnel ne casse rien, l'ajouter obligatoire si ; ajouter une valeur à une liste ne casse rien, la retirer si ; retirer un paramètre de query est ignoré, en retirer un de chemin change l'URL.

Chaque constat dit pourquoi, pas seulement quoi : un verdict sans le pourquoi t'oblige à le croire sur parole, et avec lui on peut en discuter. Le rapport sort en Markdown pour que tu le colles dans une pull request.

Ce qui sort de ton navigateur, et quand

Convertir, générer du code et comparer des spécifications n'envoient rien nulle part : tout se passe entièrement dans ton navigateur.

Envoyer une requête, ça sort bel et bien, évidemment : ça va au serveur que tu indiques, avec tes en-têtes et ton corps. La première fois, on te montre exactement ce qui va être envoyé —méthode, adresse, chaque en-tête et le corps— avec les identifiants masqués mais comptés. Ensuite, l'avertissement à côté du bouton continue à te dire vers quelle machine part chaque envoi.

Et pour pouvoir diagnostiquer un échec, une seconde requête est envoyée vers cette même adresse, sans en-têtes et sans lire la réponse, juste pour savoir si le serveur est vivant.

Atelier d'APIEnvoyez des requêtes, convertissez des collections et comparez des versions
Atelier d'APIsEnvoie des requêtes et comprends pourquoi elles échouent · convertis des collections · génère du code · compare des versions

Ceci sort de ton navigateur. Va vers api.github.com. Envía la petición que has escrito al servidor que has puesto en la URL.

En-têtes