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.
- Ouvrir l'accès sur la Freebox
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 :

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 !
- 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/
- 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
- Tester
Vous pouvez tester via Postman ou même un navigateur en tapant votre IP publique, pour vérifier que ça fonctionne.