Dans le développement moderne d’applications, l’interaction avec des webservices est devenue incontournable. Cependant, que se passe-t-il lorsque ces services ne sont pas disponibles, en cours de développement eux aussi, ou simplement instables ? C’est là que Mockoon entre en scène pour sauver la situation.
Qu’est-ce que Mockoon ?
Mockoon est un outil puissant permettant de simuler des webservices. Mais avant de plonger dans ses fonctionnalités, clarifions le concept :
Un mock (ou bouchon) est une imitation contrôlée d’un composant réel. Dans le contexte des webservices, il peut s’agir d’une réponse HTTP contenant des données factices.
Mockoon se présente sous deux formes :
- Une interface graphique (GUI) : pour configurer visuellement vos mocks
- Une interface en ligne de commande (CLI) : pour l’intégration dans vos pipelines de CI/CD ou environnements de déploiement
L’interface graphique de Mockoon
L’interface de Mockoon est organisée autour de concepts clés :
- Environnements : Espaces indépendants représentants un ou plusieurs webservices
- Endpoints : Les routes de votre webservice simulé, chacune configurée pour répondre à des requêtes spécifiques
- Configuration des endpoints : Verbe HTTP (GET, POST, etc.), chemin, en-têtes, et autres paramètres
- Configuration des réponses : Code de statut HTTP, en-têtes, contenu du body (avec support de templates)
Cette interface permet de mettre en place un mock fonctionnel en quelques clics, sans écrire (ou presque) une seule ligne de code.
Démonstration des fonctionnalités
Import depuis Swagger/OpenAPI
L’un des atouts de Mockoon est sa capacité à importer des contrats d’interface OpenAPI. Cette fonctionnalité permet de :
- Importer un fichier de spécification existant
- Créer automatiquement toutes les routes définies
- Générer des données aléatoires cohérentes grâce à FakerJS
- Personnaliser ces réponses avec le système de templating intégré
Exemple
Ce contrat d’interface open API peut être importé par Mockoon, qui créera des routes HTTP permettant de reproduire le comportement d’un webservice factice respectant le contrat :
Template
Le body des requêtes peut être configuré dynamiquement à l’aide d’un système de templating. Dans notre exemple, une configuration possible est la suivante :
|
|
repeat
fait partie des helpers de Mockoon et permet de répéter plusieurs fois un blockfaker
est une librairie JavaScript utilisée pour produire des données factices- les helpers
oneOf
etarray
permettent ici de ne renvoyer qu’un élément d’une liste prédéfinie, pour correspondre aux valeurs possibles d’une enum
Résultat
Cet endpoint permet désormais de générer une réponse de ce type sur http://localhost:3000/clones/
:
|
|
Data Buckets
Les data buckets sont des réservoirs de données qui permettent de stocker et de réutiliser des informations à travers différentes routes. Ils sont particulièrement utiles pour :
- Maintenir la cohérence des données entre les appels
- Implémenter des fonctionnalités comme la pagination
- Simuler des opérations CRUD complètes
Dans notre cas, on peut simplement créer un databucket à partir des données générées sur le endpoint /clones
. Créer ensuite une route CRUD à partir de ce databucket ouvre la voie à l’utilisation de tous les verbes HTTP courants (GET, POST, PUT, PATCH, DELETE).
De plus, entre chaque action, l’état du databucket est mis à jour, ce qui rapproche le fonctionnement du mock de celui d’un webservice réel. Un redémarrage de l’environnement permet de réinitialiser l’état du databucket.
Mode Proxy
Que faire si vous ne disposez pas d’un contrat d’interface pour un service ? Mockoon propose un mode proxy qui :
- Redirige les requêtes vers le webservice réel
- Enregistre automatiquement les réponses
- Permet de transformer ces réponses en templates réutilisables
Ce mode est idéal pour capturer le comportement d’APIs existantes avant de les simuler localement.
Il se configure simplement dans l’onglet proxy
de Mockoon :
Une fois que des appels HTTP ont été interceptés par Mockoon, un simple clic les transforme en endpoints de mock :
Règles et filtres
Mockoon ne se contente pas de réponses statiques. Le système de règles permet, entre autres, de :
- Filtrer les requêtes selon des paramètres spécifiques (query param, body…)
- Personnaliser dynamiquement vos réponses selon le contexte
- Et bien d’autres possibilités ! Par exemple, lire les rôles d’un utilisateur dans un token JWT pour adapter la réponse.
Lecture d’un token JWT
Cette commande permet, par exemple, de récupérer les rôles de l’utilisateur : {{{stringify (jwtPayload (header 'Authorization') 'realm_access')}}}
Utilisée dans une règle, elle permet par exemple de ne répondre un code 200 qu’aux utilisateurs possédant le rôle sith
:
Déploiement du serveur de mock
Une fois vos environnements de mock prêts, Mockoon permet plusieurs options de déploiement :
Via npm
|
|
Pour déployer plusieurs environnements d’un coup :
|
|
Via un conteneur
Mockoon permet de générer un Containerfile adapté à votre configuration :
|
|
Il ne vous reste plus qu’à le construire puis l’exécuter :
|
|
Via GitHub Actions
Mockoon propose également une action GitHub officielle : mockoon/cli-action@v2
Mockoon vs Wiremock
Si vous connaissez déjà Wiremock, vous vous demandez peut-être pourquoi choisir Mockoon ? Voici mes pour et contre :
- ✅ Plus rapide à mettre en place
- ✅ Plus simple à configurer grâce à son interface graphique intuitive
- ❌ Moins de fonctionnalités avancées que Wiremock (mais couvre la plupart des besoins courants)
Contribuer au projet
Mockoon est un projet open-source en constante évolution. Vous pouvez contribuer ou suivre son développement sur GitHub.
Conclusion
Mockoon représente une solution élégante et efficace pour le mocking de webservices, accessible tant aux débutants qu’aux développeurs expérimentés. Sa flexibilité, sa simplicité et sa puissance en font un outil incontournable dans l’arsenal de tout développeur.
Que vous cherchiez à développer votre frontend indépendamment du backend, à déployer un environnement de test isolé, ou simplement à travailler hors connexion, Mockoon est là pour vous faciliter la tâche !