باختصار
لا يمتلك Bruno مزامنة سحابية مدمجة. تتغلب الفرق على ذلك باستخدام مستودعات Git، أو محركات الأقراص الشبكية المشتركة، أو حاويات التطوير. لكل حل بديل قيوده الحقيقية. الآن، يغلق Apidog هذه الفجوة من كلا الجانبين: يتيح وضع Git المعتمد على المواصفات (Spec-First Git mode) الجديد الخاص به لمواصفات OpenAPI العيش في مستودعك والتنقل عبر طلبات السحب (pull requests)، بنفس الطريقة التي يعمل بها Bruno، بينما تضيف المزامنة السحابية الاختيارية تعاونًا مباشرًا، وتحكمًا في الوصول قائمًا على الأدوار، وبيانات اعتماد مركزية، وخادمًا وهميًا مدمجًا بالإضافة إلى ذلك. لم تعد مضطرًا للاختيار بين Git أو مساحة عمل للفريق.
مقدمة
تصميم Bruno الذي يعتمد على العمل المحلي فقط هو ميزة، وليس إغفالًا. لقد اتخذ القائمون على الصيانة قرارًا متعمدًا: تبقى بياناتك على جهازك. لا سحابة تعني لا حساب، لا اشتراك، ولا بائع يحتجز مجموعاتك كرهينة.
لكن "العمل المحلي فقط" يخلق مشكلة تنسيق في اللحظة التي يحتاج فيها شخص ثانٍ إلى نفس المجموعة. كيف يشارك فريق من خمسة مطورين مجموعات API؟ كيف يحصل مهندس ضمان الجودة على أحدث الطلبات؟ كيف يقوم موظف جديد بإعداد بيئته دون نسخ الملفات عبر Slack؟
يرشدك هذا الدليل عبر كل حل بديل تستخدمه الفرق، وما يكلفه كل منها بالفعل، وأين تكمن الحدود. ويغطي أيضًا شيئًا جديدًا: وضع Git المعتمد على المواصفات (Spec-First Git mode) من Apidog، والذي يتيح لك الاحتفاظ بفلسفة Bruno القائمة على "الملف في المستودع" ولا يزال يمنحك التعاون المباشر الذي لا يمكن لـ Git وحده توفيره. إذا كنت تريد الصورة الأوسع أولاً، فإن مجموعتنا من أدوات API التي تعمل مع Git توفر السياق.
نهج Git (المسار المقصود)
صُمم Bruno ليعمل حول Git. المجموعات هي ملفات .bru، والبيئات هي ملفات JSON، وكل شيء نص عادي. آلية المشاركة المقصودة هي مستودع Git.
كيف يعمل:
- أنشئ مستودع Git لمجموعة API الخاصة بك (أو استخدم مجلدًا داخل مستودعك الحالي)
- ادفع المجموعة إلى GitHub أو GitLab أو Bitbucket
- يقوم أعضاء الفريق باستنساخ المستودع وفتح المجلد في Bruno
- يتم الالتزام بالتغييرات ودفعها؛ يسحب الآخرون التغييرات
ما الذي يعمل بشكل جيد:
- سجل إصدار كامل لكل طلب
- تخضع تغييرات API لمراجعة الكود
- التكامل مع CI/CD طبيعي (
bru runفي مسار عملك) - لا توجد خدمة طرف ثالث مطلوبة بخلاف مضيف Git الخاص بك
- يعمل مع أي حجم فريق من الناحية النظرية
ما الذي يتعطل:
- يكافح أعضاء الفريق الذين لا يتقنون Git مع سير العمل
- التغييرات ليست مباشرة. أنت تدفع، والآخرون يسحبون يدويًا
- القيم السرية (الرموز، كلمات المرور) لا يتم الالتزام بها، لذا تحتاج إلى آلية منفصلة
- تحدث تعارضات الدمج عندما يقوم شخصان بتحرير نفس الطلب
- لا توجد طريقة لمنح وصول للقراءة فقط لغير المطورين بدون حسابات Git
لمن يعمل هذا: لفرق المطورين فقط التي تلتزم بانضباط Git بشكل ثابت. يصلح لـ 2-8 مطورين يعملون بالفعل في Git لكل شيء آخر. يتوافق هذا النمط مع نهج التحكم في إصدار OpenAPI باستخدام Git الأوسع نطاقًا.
نهج محرك الأقراص الشبكي المشترك
تضع بعض الفرق مجلد مجموعة Bruno على محرك أقراص شبكي مشترك: مثل NAS، أو خادم ملفات شبكي، أو مجلد Dropbox مشترك، أو مجلد Google Drive.
كيف يعمل: يفتح Bruno المجموعات من أي مسار مجلد. وجهه إلى موقع محرك الأقراص المشترك.
ما الذي يعمل:
- إعداد سهل، لا يتطلب Git
- يرى جميع أعضاء الفريق نفس الملفات
- يعمل لغير المطورين الذين لا يستطيعون استخدام Git
ما الذي يتعطل:
- لا يوجد سجل إصدارات، أو سجل إصدارات ضعيف إذا كنت تستخدم Dropbox أو Drive
- قد يؤدي فتح شخصين لنفس المجموعة في وقت واحد إلى إتلاف الملفات أو الكتابة فوقها
- محركات الأقراص الشبكية أبطأ من الملفات المحلية؛ المجموعات الكبيرة تبدو بطيئة
- لا يوجد تحكم في الوصول يتجاوز أذونات نظام الملفات
- لا تزال القيم السرية بحاجة إلى إدارة منفصلة
- يتعطل عندما يكون أعضاء الفريق غير متصلين بالإنترنت أو لديهم اتصال غير مستقر
لمن يعمل هذا: للفرق الصغيرة المكونة من 2-3 أفراد الذين نادرًا ما يقومون بالتحرير في نفس الوقت ويحتاجون إلى مشاركة غير قائمة على Git. لا يُنصح به بخلاف الاستخدام العرضي.
نهج Gitpod / حاوية التطوير
تضع بعض الفرق مجموعات Bruno الخاصة بهم في مساحة عمل Gitpod أو تعريف حاوية تطوير، بحيث يحصل الجميع على بيئة متسقة مع المجموعة المتضمنة.

كيف يعمل: تعيش المجموعة في المستودع. يتم تشغيل Gitpod أو حاوية تطوير مع Bruno (أو Bruno CLI) والمجموعة محملة مسبقًا.
ما الذي يعمل:
- بيئة متسقة لكل مطور
- تتطابق المجموعة دائمًا مع قاعدة الكود التي تختبرها
- لا إعداد محلي. استنسخ وابدأ حاوية التطوير
ما الذي يتعطل:
- لا يزال يعتمد على Git؛ لا يستفيد المستخدمون الذين لا يستخدمون Git
- لا تعمل واجهة المستخدم الرسومية لسطح المكتب Bruno في بيئة تطوير سحابية (معظم إعدادات الحاويات تمنحك واجهة سطر الأوامر (CLI) بدون واجهة رسومية فقط)
- المزامنة في الوقت الفعلي لا تزال غير موجودة
لمن يعمل هذا: للفرق التي تستخدم Gitpod أو حاويات التطوير بالفعل والتي ترغب في دمج اختبارات API في بيئة التطوير.
نهج النسخ لكل مطور
هذا هو الخيار الأقل تنظيمًا: يحتفظ كل مطور بمجموعة Bruno الخاصة به ويقوم بمزامنتها يدويًا مع المستندات المشتركة أو ينسخها من تصدير زميل في الفريق.
ما الذي يعمل:
- استقلالية كاملة، لا تتطلب تنسيقًا
- سريع للمطور الفردي
ما الذي يتعطل:
- تتباعد المجموعات على الفور
- لا يوجد مصدر مشترك للحقيقة
- "مجموعة API الخاصة بالفريق" لا تعني شيئًا عندما يكون لدى الجميع إصدار مختلف
- تتراكم تكاليف الصيانة بسرعة
لمن يعمل هذا: لا يعمل لأحد بعد المطور الفردي. يتراكم هذا النمط ديونًا فنية بسرعة.
القيود التي تشترك فيها جميع الحلول البديلة
تحمل جميع حلول مزامنة Bruno البديلة نفس الثغرات، ولا يمكن لـ Git سدها:
لا يوجد تعاون في الوقت الفعلي. في Apidog، أو في الطبقة المدفوعة من Postman، يفتح شخصان نفس المجموعة ويرون تغييرات بعضهما البعض على الفور. مع Bruno و Git، تعمل أليس وبوب دائمًا من آخر سحب قاما به. إذا أضافت أليس طلبًا ودفعته، فلن يرى بوب شيئًا حتى يقوم بالسحب. أثناء جلسة API نشطة، هذا يسبب احتكاكًا مستمرًا.
لا يوجد تحكم في الوصول قائم على الأدوار. أذونات Git (للقراءة أو الكتابة على مستوى المستودع) لا تتوافق مع أدوار مجموعة API. لا يمكنك جعل صاحب المصلحة مشاهدًا يقوم بتشغيل الطلبات ولكنه لا يستطيع تعديلها. لا يمكنك تقييد مقاول بمجلدات محددة. الوصول في Bruno هو إما الكل أو لا شيء لكل مستودع.
لا توجد بيانات اعتماد بيئة مشتركة. متغيرات Bruno السرية لا يتم الالتزام بها، وهو سلوك أمني صحيح. لكن هذا يعني أن كل زميل في الفريق يقوم بإعداد بيانات الاعتماد يدويًا، وعندما يتم تدوير رمز مميز، تحتاج إلى عملية خارج النطاق لإخبار الجميع بالتحديث محليًا. الأدوات التي تحتوي على بيئات سحابية آمنة تتعامل مع هذا بشكل مركزي.
لا توجد تعليقات على مستوى المجموعة. لا يمكنك ترك ملاحظة على طلب محدد ليراها زملاء الفريق. تعليقات طلب السحب (PR) في Git قريبة، لكنها ترتبط بفرق (diff)، وليس بالمجموعة المباشرة.
هذه الفجوات الأربع هي السبب الحقيقي لتجاوز الفرق للحلول البديلة. القسم التالي يوضح كيف يسد Apidog هذه الفجوات دون أن يجعلك تتخلى عن Git.
وضع Git المعتمد على المواصفات في Apidog: سير عمل Git بدون حلول بديلة
الإطار المعتاد يضع "Bruno بالإضافة إلى Git" في مواجهة "أداة سحابية". يلغي وضع Git المعتمد على المواصفات في Apidog هذا الخيار. فهو يتيح لمواصفات OpenAPI البقاء في مستودع GitHub أو GitLab أو المستودع المستضاف ذاتيًا الخاص بك كمصدر وحيد للحقيقة، ثم يضيف ميزات الفريق فوق نفس المستودع.

إليك ما يتغير مقارنةً بإعداد Bruno-plus-Git.
المواصفة هي مصدر الحقيقة، وهي تعيش في مستودعك. تقوم بربط مشروع Apidog بمستودع Git وتتم مزامنة تعريف API كملفات. فرّع لكل ميزة، افتح طلب سحب، راجع فرق العقد سطرًا بسطر، وادمج. هذا هو سير عمل المراجعة الدقيق الذي يتيحه Bruno، مطبقًا على مستند OpenAPI كامل بدلاً من ملفات طلب .bru المتفرقة. للاطلاع على المنطق الكامن وراء التصميم أولاً، راجع ما هو تطوير API القائم على المواصفات أولاً؟.
التصميم، والاختبارات، والمحاكيات، والوثائق مستمدة من تعريف واحد. عندما تتغير المواصفة في فرع، يتغير خادم المحاكاة، واستجابات الأمثلة، وحالات الاختبار، والوثائق المرجعية المنشورة كلها معها، ويتم الالتزام بالشيء كله كفرق واحد قابل للمراجعة. مع Bruno تحصل على ملفات الطلبات؛ أما الوثائق والمحاكيات فهي مشكلة شخص آخر. هذا هو جوهر نهج المواصفات ككود، وهو المكان الذي يؤدي فيه ملف OpenAPI واحد العمل الذي كانت تؤديه أربع أدوات منفصلة.
أنت تحتفظ بـ Git، وتضيف التعاون المباشر. هذا هو الجزء الذي لا يمكن لأي حل بديل لـ Bruno أن يضاهيه. يبقى المستودع هو نظام السجلات، لكن زملاء الفريق الذين يعملون في تطبيق Apidog يرون تعديلات بعضهم البعض في الوقت الفعلي بدلاً من انتظار السحب التالي. يمنحك Git السجل والمراجعة؛ وتمنحك مساحة العمل المشتركة الجلسة المباشرة. تتوقف عن الاختيار بينهما.
التحكم في الوصول القائم على الأدوار يقع فوق المستودع. تسمح أدوار المشاهد والمحرر والمسؤول لصاحب المصلحة بتشغيل الطلبات دون تعديلها، أو تحديد نطاق مقاول لمشاريع محددة، وهي أمور لا يمكن التعبير عنها بأذونات Git على مستوى المستودع.
تتم إدارة بيانات الاعتماد مركزيًا. تحتفظ البيئات السحابية بمتغيرات مشتركة (ومخزنة بشكل آمن)، لذا يتم تحديث تدوير الرمز المميز مرة واحدة بدلاً من تنبيه كل مطور لتعديل ملف .secret.json المحلي.
يتوفر خادم وهمي جاهز للاستخدام. لا يمتلك Bruno خادمًا وهميًا، وهذا هو السبب في أن الفرق تبحث عن بديل لخادم Bruno الوهمي. في Apidog، يأتي المحاكاة مباشرة من المواصفة، لذا يبدأ عمل الواجهة الأمامية في اليوم الأول مقابل استجابة واقعية.
يعمل في CI. يأتي Apidog مزودًا ببرنامج تشغيل CLI، لذا يتم تنفيذ حالات الاختبار المرتبطة بمواصفتك المتزامنة في نفس مسار العمل الذي يقوم به bru run، عند كل عملية دفع.
مقارنة قصيرة وصادقة:
| القدرة | Bruno + Git | وضع Git المعتمد على المواصفات في Apidog |
|---|---|---|
| الملفات في مستودعك الخاص | نعم (.bru) |
نعم (مواصفات OpenAPI) |
| مراجعة الفرع + طلب السحب | نعم | نعم |
| مشغل CI | نعم (bru run) |
نعم (Apidog CLI) |
| دعم المستضاف ذاتيًا / GitLab | نعم | نعم |
| تحرير مباشر متعدد المستخدمين | لا | نعم |
| وصول قائم على الأدوار (عارض/محرر) | لا | نعم |
| بيانات اعتماد مركزية مشتركة | لا | نعم |
| خادم وهمي من المواصفة | لا | نعم |
| الوثائق + الاختبارات المستمدة من ملف واحد | لا | نعم |
وضع Git المعتمد على المواصفات لا يزال في مرحلته التجريبية، لذا تأكد من التفاصيل الدقيقة مقابل إعداد GitHub أو GitLab الخاص بك في نسخة تجريبية قبل ترحيل فريق كامل. للاطلاع على شرح أكثر تفصيلاً للاتصال نفسه، راجع تكامل ومزامنة Git في Apidog و دليل وضع Spec-First. إذا كنت تقارن هذا بحزمة تصميم واختبار مكونة من أداتين، فإن Stoplight + Postman مقابل Apidog يجري نفس التقييم.
متى تبقى مع Bruno، ومتى تنتقل
Bruno بالإضافة إلى Git يعمل. بالنسبة للفريق المناسب، يعمل بشكل جيد. السؤال هو متى يتجاوز التكلفة المتراكمة للحلول البديلة قيمة بساطة Bruno.
ابقَ مع Bruno عندما يكون فريقك بأكمله من المطورين، والجميع يتقنون Git، ولا تحتاج إلى مزامنة مباشرة، ونموذج إذن المستودع "الكل أو لا شيء" مقبول.
انتقل إلى وضع Git المعتمد على المواصفات في Apidog عندما:
- لديك أعضاء فريق غير مطورين يحتاجون إلى الوصول إلى API دون تعلم Git
- يتكون فريقك من 5 أفراد أو أكثر وأصبح التنسيق المعتمد على Git فقط احتكاكًا يوميًا
- تحتاج إلى مزامنة مباشرة أثناء جلسات API النشطة
- تحتاج إلى تحكم في الوصول على مستوى المشروع أو المجلد، وليس فقط المستودع
- سئمت من توزيع بيانات الاعتماد يدويًا في كل مرة يتم فيها تدوير الرمز المميز
- تحتاج إلى خادم وهمي بجانب عميل API الخاص بك
لأن المواصفة لا تزال تعيش في مستودعك، هذا ليس بابًا باتجاه واحد بعيدًا عن التحكم في الإصدار. أنت تحتفظ بسير عمل Git الذي علمك إياه Bruno وتضيف طبقة الفريق فوقه.
إعداد سير عمل Bruno + Git فعال بالفعل
إذا كنت ستبقى مع Bruno، فإليك تخطيطًا يحافظ على احتكاك منخفض:
هيكل المستودع:
api-collections/
.gitignore # استثناء *.secret.json, .env
README.md # تعليمات الإعداد
environments/
local.json
staging.json
production.json # لا أسرار، فقط أسماء المتغيرات
users-api/
get-user.bru
create-user.bru
orders-api/
create-order.bru
list-orders.bru
bruno.json
إدارة بيانات الاعتماد: استخدم environments/production.secret.json (متجاهلة بواسطة Git) للأسرار المحلية. وثّق المتغيرات المطلوبة في environments/production.json بقيم فارغة كقالب. خزّن القيم الحقيقية في مدير كلمات مرور فريقك أو خزينة الأسرار، مع رابط في ملف README.
إعداد المطورين الجدد:
- استنسخ المستودع
- افتح مجلد المجموعة في Bruno
- انسخ
production.jsonإلىproduction.secret.json - املأ بيانات الاعتماد من الخزينة (المشار إليها في README)
- جاهز للاستخدام
CI/CD: حقن متغيرات البيئة في وقت التشغيل، بحيث لا توجد ملفات سرية في المستودع.
موقف Bruno الرافض للسحابة مبدئي وله فوائد حقيقية، والحلول البديلة للمزامنة قابلة للعيش للفريق المناسب. معرفة حدودها يخبرك متى تعتمد عليها ومتى تلجأ إلى أداة مصممة للتعاون الجماعي. مع احتفاظ Apidog الآن بالمواصفة في مستودعك، لم يعد هذا يعني التخلي عن Git. قم بتنزيل Apidog ووجهه إلى مستودعك الحالي لترى الفرق على واجهة برمجة التطبيقات الخاصة بك.
