En bref
Bruno ne dispose pas de synchronisation cloud intégrée. Les équipes contournent ce problème avec des dépôts Git, des lecteurs réseau partagés ou des conteneurs de développement. Chaque solution de contournement a des limites réelles. Apidog comble désormais cette lacune des deux côtés : son nouveau mode Git Spec-First permet à la spécification OpenAPI de résider dans votre dépôt et de transiter via des requêtes de tirage (pull requests), de la même manière que Bruno, tandis que la synchronisation cloud optionnelle ajoute la collaboration en temps réel, le contrôle d'accès basé sur les rôles, des identifiants centralisés et un serveur de maquettes (mock server) intégré. Vous n'avez plus à choisir Git *ou* un espace de travail d'équipe.
Introduction
La conception locale de Bruno est une caractéristique, pas une omission. Les mainteneurs ont fait un choix délibéré : vos données restent sur votre machine. Pas de cloud signifie pas de compte, pas d'abonnement, pas de fournisseur retenant vos collections en otage.
Mais le "local-only" crée un problème de coordination dès qu'une deuxième personne a besoin de la même collection. Comment une équipe de cinq développeurs partage-t-elle des collections d'API ? Comment un ingénieur QA obtient-il les dernières requêtes ? Comment un nouvel employé configure-t-il son environnement sans copier des fichiers via Slack ?
Ce guide explore toutes les solutions de contournement utilisées par les équipes, leur coût réel et leurs limites. Il aborde également une nouveauté : le mode Git Spec-First d'Apidog, qui vous permet de conserver la philosophie de Bruno (fichier dans un dépôt) tout en bénéficiant de la collaboration en temps réel que Git seul ne peut pas offrir. Si vous souhaitez d'abord une vue d'ensemble, notre tour d'horizon des outils API compatibles avec Git contextualise le sujet.
L'approche Git (le chemin prévu)
Bruno a été conçu autour de Git. Les collections sont des fichiers `.bru`, les environnements sont des fichiers JSON, tout est en texte brut. Le mécanisme de partage prévu est un dépôt Git.
Comment ça marche :
- Créez un dépôt Git pour votre collection d'API (ou utilisez un dossier à l'intérieur de votre dépôt existant)
- Poussez la collection vers GitHub, GitLab ou Bitbucket
- Les membres de l'équipe clonent le dépôt et ouvrent le dossier dans Bruno
- Les changements sont commités et poussés ; les autres tirent (pull)
Ce qui fonctionne bien :
- Historique de version complet sur chaque requête
- Les modifications d'API passent par la revue de code
- L'intégration CI/CD est naturelle (`bru run` dans votre pipeline)
- Aucun service tiers requis au-delà de votre hôte Git
- Fonctionne en théorie avec n'importe quelle taille d'équipe
Ce qui ne fonctionne pas :
- Les membres de l'équipe sans maîtrise de Git ont du mal avec le flux de travail
- Les changements ne sont pas en direct. Vous poussez, les autres tirent manuellement
- Les valeurs secrètes (jetons, mots de passe) ne sont pas commitées, vous avez donc besoin d'un mécanisme séparé
- Des conflits de fusion se produisent lorsque deux personnes éditent la même requête
- Aucun moyen de donner un accès en lecture seule aux non-développeurs sans comptes Git
Pour qui cela fonctionne : les équipes composées uniquement de développeurs avec une discipline Git cohérente. Cela tient pour 2 à 8 développeurs qui travaillent déjà avec Git pour tout le reste. Ce modèle correspond à l'approche plus large de la gestion de version OpenAPI avec Git.
L'approche du lecteur réseau partagé
Certaines équipes placent le dossier de collection Bruno sur un lecteur réseau partagé : un NAS, un serveur de fichiers réseau, un Dropbox partagé ou un dossier Google Drive.
Comment ça marche : Bruno ouvre les collections depuis n'importe quel chemin de dossier. Il suffit de le pointer vers l'emplacement du lecteur partagé.
Ce qui fonctionne :
- Installation facile, pas besoin de Git
- Tous les membres de l'équipe voient les mêmes fichiers
- Fonctionne pour les non-développeurs qui ne peuvent pas utiliser Git
Ce qui ne fonctionne pas :
- Pas d'historique des versions, ou un historique médiocre si vous utilisez Dropbox ou Drive
- Deux personnes ouvrant la même collection en même temps peuvent corrompre ou écraser des fichiers
- Les lecteurs réseau sont plus lents que les fichiers locaux ; les grandes collections sont lentes
- Aucun contrôle d'accès au-delà des permissions du système de fichiers
- Les valeurs secrètes nécessitent toujours une gestion séparée
- Échoue lorsque les membres de l'équipe sont hors ligne ou sur une connexion instable
Pour qui cela fonctionne : les petites équipes de 2-3 personnes qui éditent rarement en même temps et ont besoin d'un partage sans Git. Non recommandé au-delà d'une utilisation occasionnelle.
L'approche Gitpod / conteneur de développement
Certaines équipes placent leurs collections Bruno dans un espace de travail Gitpod ou une définition de conteneur de développement, afin que chacun dispose d'un environnement cohérent avec la collection incluse.

Comment ça marche : la collection vit dans le dépôt. Gitpod ou un conteneur de développement démarre avec Bruno (ou la CLI Bruno) et la collection pré-chargée.
Ce qui fonctionne :
- Environnement cohérent pour chaque développeur
- La collection correspond toujours à la base de code qu'elle teste
- Pas d'installation locale. Clonez et démarrez le conteneur de développement
Ce qui ne fonctionne pas :
- Toujours basé sur Git ; les utilisateurs non-Git n'en bénéficient pas
- L'interface graphique de bureau de Bruno ne fonctionne pas dans un environnement de développement cloud (la plupart des configurations de conteneurs ne vous donnent que la CLI headless)
- La synchronisation en temps réel n'existe toujours pas
Pour qui cela fonctionne : les équipes déjà sur Gitpod ou des conteneurs de développement qui veulent des tests API intégrés à l'environnement de développement.
L'approche de la copie par développeur
C'est l'option la moins structurée : chaque développeur conserve sa propre collection Bruno et la synchronise manuellement avec des documents partagés ou la copie depuis l'exportation d'un coéquipier.
Ce qui fonctionne :
- Autonomie totale, aucune coordination requise
- Rapide pour un développeur individuel
Ce qui ne fonctionne pas :
- Les collections divergent immédiatement
- Pas de source unique de vérité partagée
- "La collection d'API de l'équipe" ne signifie rien quand chacun a une version différente
- La surcharge de maintenance s'accumule rapidement
Pour qui cela fonctionne : personne au-delà d'un développeur solo. Ce modèle accumule rapidement de la dette technique.
Les limites partagées par toutes les solutions de contournement
Toutes les solutions de contournement de synchronisation Bruno présentent les mêmes lacunes, et Git ne peut pas les combler :
Pas de collaboration en temps réel. Dans Apidog, ou dans la version payante de Postman, deux personnes ouvrent la même collection et voient les modifications de l'autre instantanément. Avec Bruno et Git, Alice et Bob travaillent toujours à partir de leur dernier `pull`. Si Alice ajoute une requête et `push`, Bob ne voit rien tant qu'il n'a pas `pull`. Lors d'une session API active, c'est une friction constante.
Pas de contrôle d'accès basé sur les rôles. Les permissions Git (lecture ou écriture au niveau du dépôt) ne correspondent pas aux rôles de collection API. Vous ne pouvez pas faire d'une partie prenante un visualiseur qui exécute des requêtes mais ne peut pas les modifier. Vous ne pouvez pas restreindre un contractuel à des dossiers spécifiques. L'accès dans Bruno est tout ou rien par dépôt.
Pas d'identifiants d'environnement partagés. Les variables secrètes de Bruno ne sont pas commitées, ce qui est un comportement de sécurité correct. Mais cela signifie que chaque membre de l'équipe configure les identifiants à la main, et lorsqu'un jeton tourne, vous avez besoin d'un processus hors bande pour dire à tout le monde de mettre à jour localement. Les outils avec des environnements cloud sécurisés gèrent cela de manière centralisée.
Pas de commentaires au niveau de la collection. Vous ne pouvez pas laisser une note sur une requête spécifique pour que les coéquipiers la voient. Les commentaires de PR Git sont proches, mais ils s'attachent à un `diff`, pas à la collection en direct.
Ces quatre lacunes sont la véritable raison pour laquelle les équipes dépassent les solutions de contournement. La section suivante explique comment Apidog les comble sans vous obliger à abandonner Git.
Le mode Git Spec-First d'Apidog : le flux de travail Git sans les solutions de contournement
Le cadre habituel oppose "Bruno + Git" à "un outil cloud". Le mode Git Spec-First d'Apidog supprime ce choix. Il permet à la spécification OpenAPI de résider dans votre propre dépôt GitHub, GitLab ou auto-hébergé comme source unique de vérité, puis superpose des fonctionnalités d'équipe sur ce même dépôt.

Voici ce qui change par rapport à une configuration Bruno-plus-Git.
La spécification est la source de vérité, et elle vit dans votre dépôt. Vous connectez un projet Apidog à un dépôt Git et la définition d'API est synchronisée sous forme de fichiers. Créez une branche par fonctionnalité, ouvrez une requête de tirage (pull request), examinez le `diff` du contrat ligne par ligne et fusionnez. C'est le flux de revue exact que Bruno permet, appliqué à un document OpenAPI complet au lieu de fichiers de requête `.bru` lâches. Pour le raisonnement de conception derrière cela, voir Qu'est-ce que le développement API "spec-first" ?.
La conception, les tests, les maquettes et la documentation dérivent d'une seule définition. Lorsque la spécification change sur une branche, le serveur de maquettes, les exemples de réponses, les cas de test et la documentation de référence publiée changent tous avec elle, et l'ensemble est validé sous forme de `diff` révisable. Avec Bruno, vous obtenez des fichiers de requête ; la documentation et les maquettes sont le problème de quelqu'un d'autre. C'est le cœur de l'approche spec-as-code, et c'est là qu'un seul fichier OpenAPI fait le travail que quatre outils distincts faisaient auparavant.
Vous conservez Git et ajoutez la collaboration en direct. C'est la partie qu'aucune solution de contournement Bruno ne peut égaler. Le dépôt reste le système d'enregistrement, mais les coéquipiers travaillant dans l'application Apidog voient les modifications de l'autre en temps réel au lieu d'attendre le prochain `pull`. Git vous donne l'historique et la revue ; l'espace de travail partagé vous donne la session en direct. Vous n'avez plus à choisir entre les deux.
Le contrôle d'accès basé sur les rôles se superpose au dépôt. Les rôles de visualiseur, d'éditeur et d'administrateur permettent à une partie prenante d'exécuter des requêtes sans les modifier, ou de restreindre un contractuel à des projets spécifiques, ce qu'aucune permission Git au niveau du dépôt ne peut exprimer.
Les identifiants sont gérés de manière centralisée. Les environnements cloud conservent des variables partagées (et stockées de manière sécurisée), de sorte qu'une rotation de jeton se met à jour une seule fois au lieu d'envoyer un ping à chaque développeur pour modifier un `.secret.json` local.
Un serveur de maquettes est inclus. Bruno n'a pas de serveur de maquettes, c'est pourquoi les équipes se tournent vers une alternative de serveur de maquettes Bruno. Dans Apidog, la maquette provient directement de la spécification, de sorte que le travail frontal commence dès le premier jour avec une réponse réaliste.
Il s'exécute en CI. Apidog propose un exécuteur CLI, de sorte que les cas de test liés à votre spécification synchronisée s'exécutent dans le même pipeline que `bru run`, à chaque `push`.
Une comparaison courte et honnête :
| Capacité | Bruno + Git | Mode Git Spec-First d'Apidog |
|---|---|---|
| Fichiers dans votre propre dépôt | Oui (.bru) |
Oui (spécification OpenAPI) |
| Branche + revue de requête de tirage | Oui | Oui |
| Exécuteur CI | Oui (bru run) |
Oui (CLI Apidog) |
| Support auto-hébergé / GitLab | Oui | Oui |
| Édition multi-utilisateur en direct | Non | Oui |
| Contrôle d'accès basé sur les rôles (visualiseur/éditeur) | Non | Oui |
| Identifiants partagés centralisés | Non | Oui |
| Serveur de maquettes depuis la spécification | Non | Oui |
| Documentation + tests dérivés d'un seul fichier | Non | Oui |
Le mode Git Spec-First est en bêta, alors confirmez les spécificités par rapport à votre propre configuration GitHub ou GitLab lors d'un essai avant de migrer toute une équipe. Pour une présentation plus approfondie de la connexion elle-même, voir l'intégration et la synchronisation Git d'Apidog et le guide du mode Spec-First. Si vous pesez le pour et le contre par rapport à une pile de conception et de test à deux outils, Stoplight + Postman vs Apidog réalise la même évaluation.
Quand rester avec Bruno et quand changer
Bruno plus Git fonctionne. Pour la bonne équipe, cela fonctionne bien. La question est de savoir quand le coût cumulatif des solutions de contournement dépasse la valeur de la simplicité de Bruno.
Restez avec Bruno lorsque toute votre équipe est composée de développeurs, que tout le monde maîtrise Git, que vous n'avez pas besoin de synchronisation en temps réel et qu'un modèle de permission de dépôt tout ou rien convient.
Passez au mode Git Spec-First d'Apidog lorsque :
- Vous avez des membres d'équipe non-développeurs qui ont besoin d'un accès API sans apprendre Git
- Votre équipe compte 5 personnes ou plus et que la coordination uniquement par Git est devenue une friction quotidienne
- Vous avez besoin d'une synchronisation en temps réel pendant les sessions API actives
- Vous avez besoin d'un contrôle d'accès au niveau du projet ou du dossier, et pas seulement du dépôt
- Vous en avez marre de distribuer les identifiants à la main à chaque rotation de jeton
- Vous avez besoin d'un serveur de maquettes à côté de votre client API
Parce que la spécification vit toujours dans votre dépôt, ce n'est pas une porte à sens unique loin du contrôle de version. Vous conservez le flux de travail Git que Bruno vous a appris et ajoutez la couche d'équipe par-dessus.
Mettre en place un flux de travail Bruno + Git qui fonctionne réellement
Si vous restez avec Bruno, voici une structure qui maintient la friction à un niveau bas :
Structure du dépôt :
api-collections/
.gitignore # exclut *.secret.json, .env
README.md # instructions d'intégration
environments/
local.json
staging.json
production.json # pas de secrets, juste des noms de variables
users-api/
get-user.bru
create-user.bru
orders-api/
create-order.bru
list-orders.bru
bruno.json
Gestion des identifiants : utilisez `environments/production.secret.json` (ignoré par Git) pour les secrets locaux. Documentez les variables requises dans `environments/production.json` avec des valeurs vides comme modèle. Stockez les vraies valeurs dans le gestionnaire de mots de passe ou le coffre-fort de secrets de votre équipe, avec un lien dans le README.
Intégration des nouveaux développeurs :
- Cloner le dépôt
- Ouvrir le dossier de la collection dans Bruno
- Copier `production.json` vers `production.secret.json`
- Remplir les identifiants depuis le coffre-fort (lié dans le README)
- Prêt à l'emploi
CI/CD : injectez les variables d'environnement au moment de l'exécution, afin qu'aucun fichier secret ne se trouve dans le dépôt.
La position sans cloud de Bruno est basée sur des principes et présente de réels avantages, et les solutions de contournement de synchronisation sont acceptables pour la bonne équipe. Connaître leurs limites vous permet de savoir quand vous appuyer sur elles et quand vous tourner vers un outil conçu pour la collaboration d'équipe. Avec Apidog qui garde désormais la spécification dans votre dépôt, cela ne signifie plus laisser Git derrière vous. Téléchargez Apidog et pointez-le vers votre dépôt existant pour constater la différence sur votre propre API.
