Tester une API en local depuis Internet

Tester une API en local depuis Internet

Il vous est surement arrivé de vouloir / ou devoir tester une API ou un site sur votre machine de développement depuis Internet, sans vouloir forcément la mettre en production, pousser sur un Cloud et tout le toutim.

Allez, avouez 😊

Il m'est arrivé récemment de devoir tester un callback depuis un service sur Internet. Le problème est simple : j'appelle un service sur une Url, je lui fournis une Url de retour (callback_url), et il m'appelle sur cette Url de retour.

Or, pour faire des tests, j'ai besoin que cette callback_url soit celle de mon poste de développement. Ah oui, c'est moins facile, il y a pas mal de murs entre mon poste de dév et Internet (et heureusement, d'ailleurs !).

L'environnement :

  • Windows 11
  • API en Python qui tourne avec uvicorn
  • Fournisseur d'accès : Free

La recette est assez simple.

  1. Ouvrir l'accès sur la Freebox
💡
Attention : sur la Freebox, il est important de demander une IP fixe pour contrôler la totalité des ports (sinon, vous n'aurez pas accès à tous les ports).

Vous pouvez visiter ce lien : https://assistance.free.fr/articles/1758

Une fois que c'est fait, rendez vous sur votre interface Freebox : http://mafreebox.freebox.fr/

Allez dans les paramètres, Gestion des ports :

Et cliquer sur Ajouter une redirection :

💡
Il faut connaître l'IP de votre machine sur votre réseau local ; pour Windows, ouvrez un CMD et tapez : ipconfig, vous pourrez voir l'ip locale.

Sur la Freebox, vous aurez la liste des IP de votre réseau local, donc peu de chance de se tromper !

IP Source : Toutes

Port de début / de fin : le port utilisé par votre API, ou votre serveur web.

Mettez un commentaire, ça servira dans deux semaines quand vous reviendrez sur la Freebox et vous vous demanderez pourquoi vous avez ouvert un port !

  1. Trouver son IP publique

Hé oui, il va falloir trouver comment on peut vous appeler depuis l'extérieur. Rendez vous sur : https://whatismyipaddress.com/

  1. Faire tourner le serveur web / l'API

Ici, une petite subtilité : j'utilise uvicorn, qui par défaut fait tourner un serveur web sur l'adresse 0.0.0.0.

Ca pose un problème : en effet, quand on va appeler l'IP publique:port, la freebox va router l'appel vers l'IP locale de votre poste de développement. Or, uvicorn ne répondra pas à l'IP locale, juste à 0.0.0.0

Pour résoudre le problème, démarrer uvicorn de la façon suivante :

uvicorn main:app --host MON_IP_LOCALE --port MON_PORT --reload

  1. Tester

Vous pouvez tester via Postman ou même un navigateur en tapant votre IP publique, pour vérifier que ça fonctionne.

💡
Et n'oubliez pas de retirer la redirection de la Freebox quand vous n'en avez plus besoin ! C'est un vrai trou de sécurité !