[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"post:bruno-api-client-postman-alternative":3},{"id":4,"documentId":5,"title":6,"desc":7,"content":8,"image":9,"imageCard":10,"imageBackground":11,"slug":12,"publishedAt":13,"baseUrl":14,"tags":15,"writer":21,"editors":26,"organization":27,"vars":31},766,"y0mlw3eyn1wwot8xvoev7ps9","خداحافظ پست‌من؟ آشنایی با برونو؛ ابزاری ساده برای تست API","آشنایی با برونو، یک ابزار متن‌باز برای تست API و مقایسه آن با پست‌من از نظر ذخیره‌سازی، کار با گیت، سرعت و نحوه استفاده","اگر توسعه‌دهنده وب، موبایل یا مهندس تست باشید، احتمالاً بخش زیادی از زمان خود را در پست‌من یا ابزارهای مشابه می‌گذرانید. این ابزارها سال‌ها انتخاب اصلی بسیاری از تیم‌ها برای تست API بودند.\n\nاما در چند سال اخیر، با تغییر سیاست‌های پست‌من، وابستگی بیشتر به حساب کاربری و سرویس ابری، بسیاری از توسعه‌دهندگان به دنبال جایگزین‌های ساده‌تر رفتند. یکی از ابزارهایی که در این مدت توجه زیادی را جلب کرده، **برونو (Bruno)** است.\n\nدر این مقاله با برونو آشنا می‌شویم و بررسی می‌کنیم چرا بسیاری از تیم‌ها آن را به‌عنوان جایگزین پست‌من انتخاب کرده‌اند.\n\n\n## برونو چیست؟\n\nبرونو یک ابزار متن‌باز برای ارسال درخواست‌های API و بررسی پاسخ آن‌هاست. با استفاده از آن می‌توانید درخواست‌های GET، POST، PUT، DELETE و سایر درخواست‌های HTTP را ارسال کنید، پاسخ‌ها را بررسی کنید و برای آن‌ها تست بنویسید.\n\nتفاوت اصلی برونو با پست‌من در نحوه نگهداری اطلاعات است. برونو همه درخواست‌ها و تنظیمات را به‌صورت فایل در کنار پروژه ذخیره می‌کند و نیازی به همگام‌سازی با سرویس ابری ندارد.\n\n\n## چرا بسیاری از توسعه‌دهندگان از برونو استفاده می‌کنند؟\n\n### ذخیره درخواست‌ها داخل پروژه\n\nدر برونو هر درخواست به‌صورت یک فایل متنی ذخیره می‌شود. بنابراین می‌توانید آن را مانند سایر فایل‌های پروژه در گیت نگهداری کنید.\n\nاین روش چند مزیت دارد:\n\n* درخواست‌ها همراه با کد پروژه نسخه‌بندی می‌شوند.\n* تغییرات به‌راحتی در گیت قابل مشاهده است.\n* اعضای تیم بدون نیاز به سرویس‌های جانبی به همان درخواست‌ها دسترسی دارند.\n\n\n### بدون وابستگی به سرویس ابری\n\nبرای استفاده از برونو نیازی به ایجاد حساب کاربری نیست و اطلاعات پروژه روی سیستم خودتان باقی می‌ماند.\n\nاین موضوع در پروژه‌های سازمانی یا محیط‌هایی که دسترسی به اینترنت محدود است، می‌تواند یک مزیت باشد.\n\n\n### سبک و سریع\n\nبرونو امکانات موردنیاز برای تست API را بدون اضافه کردن قابلیت‌های غیرضروری ارائه می‌دهد. به همین دلیل اجرای برنامه سریع است و مصرف حافظه نیز نسبتاً کم است.\n\n\n### مهاجرت از پست‌من\n\nاگر قبلاً از پست‌من یا اینسامنیا استفاده کرده باشید، می‌توانید مجموعه درخواست‌ها و محیط‌های خود را به برونو منتقل کنید و معمولاً نیازی به ساخت دوباره آن‌ها نیست.\n\n\n## مقایسه برونو و پست‌من\n\n| ویژگی                | برونو          | پست‌من                     |\n| -------------------- | -------------- | -------------------------- |\n| محل ذخیره درخواست‌ها | فایل‌های پروژه | سرویس ابری                 |\n| نیاز به حساب کاربری  | خیر            | در بسیاری از قابلیت‌ها بله |\n| سازگاری با گیت       | مناسب          | محدودتر                    |\n| متن‌باز              | بله            | خیر                        |\n| اجرای آفلاین         | کامل           | بخشی از قابلیت‌ها          |\n\n\n## شروع کار با برونو\n\nابتدا برنامه را از سایت رسمی دانلود و نصب کنید.\n\nسپس:\n\n1. یک مجموعه جدید ایجاد کنید.\n2. پوشه پروژه را انتخاب کنید.\n3. اولین درخواست خود را بسازید.\n4. درخواست را ارسال و پاسخ را بررسی کنید.\n\nبرونو فایل‌های مربوط به درخواست‌ها را در همان پوشه پروژه ذخیره می‌کند و از همان ابتدا می‌توانید آن‌ها را در گیت قرار دهید.\n\n\n## نوشتن تست\n\nبرونو امکان اجرای کد جاوااسکریپت قبل یا بعد از ارسال درخواست را فراهم می‌کند. به‌عنوان نمونه، برای بررسی کد وضعیت پاسخ می‌توان از کد زیر استفاده کرد:\n\n```javascript\ntest(\"بررسی وضعیت پاسخ\", function () {\n  expect(res.getStatus()).to.equal(200);\n});\n```\n\n## سازگاری با گیت؛ مهم‌ترین تفاوت برونو\n\nاگر بخواهیم فقط یک دلیل برای انتخاب برونو نام ببریم، احتمالاً همین سازگاری با گیت است.\n\nدر بسیاری از پروژه‌ها، درخواست‌های API هم مانند کد برنامه بخشی از پروژه هستند و بهتر است کنار همان کد نگهداری شوند. برونو دقیقاً با همین نگاه طراحی شده است.\n\nدر پست‌من معمولاً یک مجموعه از درخواست‌ها داخل یک فایل بزرگ ذخیره می‌شود. با بزرگ‌تر شدن پروژه، این فایل نیز بزرگ‌تر می‌شود و هر تغییری در یکی از درخواست‌ها باعث تغییر همان فایل اصلی خواهد شد. در نتیجه هنگام بازبینی تغییرات یا ادغام شاخه‌ها، ممکن است چند نفر هم‌زمان روی یک فایل کار کرده باشند و تداخل ایجاد شود.\n\nبرونو مسیر متفاوتی را انتخاب کرده است. هر درخواست API در یک فایل مستقل ذخیره می‌شود و پوشه‌ها نیز دقیقاً مطابق ساختار پروژه شکل می‌گیرند. برای مثال اگر در پروژه پوشه‌ای به نام `users` داشته باشید، درخواست‌های مربوط به کاربران نیز در همان پوشه قرار می‌گیرند و هر درخواست فایل مخصوص خود را خواهد داشت.\n\nبه همین دلیل:\n\n* هر تغییر فقط همان فایل را تغییر می‌دهد.\n* بازبینی تغییرات در گیت ساده‌تر است.\n* احتمال تداخل هنگام ادغام شاخه‌ها کمتر می‌شود.\n* جابه‌جایی یا تغییر ساختار پوشه‌ها مانند سایر فایل‌های پروژه انجام می‌شود.\n* درخواست‌های API می‌توانند همراه با کد مربوط به همان بخش نسخه‌بندی شوند.\n\nدر عمل، بسیاری از تیم‌ها پوشه درخواست‌های برونو را در کنار کد پروژه قرار می‌دهند و همانند سایر فایل‌های پروژه آن را در گیت مدیریت می‌کنند.\n\n\n## ساختار فایل‌های برونو\n\nبرونو اطلاعات هر درخواست را به‌صورت فایل متنی ذخیره می‌کند. این فایل‌ها هم برای انسان قابل خواندن هستند و هم به‌راحتی در گیت قابل مقایسه‌اند.\n\nبرونو از چند قالب برای کار با APIها پشتیبانی می‌کند که مهم‌ترین آن‌ها قالب اختصاصی خود برونو و قالب OpenAPI است.\n\n### قالب اختصاصی برونو\n\nقالب اصلی برونو از یک نگارش ساده و خوانا استفاده می‌کند که برای ویرایش دستی طراحی شده است. هر درخواست در یک فایل مستقل با پسوند `.bru` ذخیره می‌شود.\n\nنمونه:\n\n```text\nmeta {\n  name: Get Users\n  type: http\n}\n\nget {\n  url: {{baseUrl}}\u002Fusers\n}\n\nheaders {\n  Authorization: Bearer {{token}}\n}\n```\n\nساختار این فایل‌ها به‌گونه‌ای است که حتی بدون اجرای برونو نیز می‌توان آن‌ها را در یک ویرایشگر متن مشاهده، ویرایش و در گیت بازبینی کرد.\n\n### قالب OpenAPI\n\nاگر پروژه شما از OpenAPI استفاده می‌کند، برونو می‌تواند مشخصات API را نیز از فایل‌های OpenAPI وارد کند. این فایل‌ها معمولاً با قالب YAML نوشته می‌شوند و برای مستندسازی و تبادل مشخصات API بین ابزارهای مختلف کاربرد دارند.\n\nنمونه‌ای از یک مسیر در OpenAPI:\n\n```yaml\nopenapi: 3.1.0\n\npaths:\n  \u002Fusers:\n    get:\n      summary: دریافت فهرست کاربران\n      responses:\n        \"200\":\n          description: موفق\n```\n\nدر عمل، بسیاری از تیم‌ها مستندات API را به‌صورت OpenAPI نگهداری می‌کنند و برای توسعه و تست روزانه از فایل‌های `.bru` استفاده می‌کنند. این ترکیب باعث می‌شود هم مستندات استاندارد API حفظ شوند و هم درخواست‌های قابل اجرا به‌صورت فایل‌های مستقل و سازگار با گیت در کنار کد پروژه قرار بگیرند.\n\n\n## جمع‌بندی\n\nاگر تنها به یک ابزار برای ارسال درخواست‌های API، نوشتن تست و مدیریت درخواست‌ها نیاز دارید، برونو گزینه‌ای است که ارزش امتحان کردن دارد.\n\nسادگی، ذخیره‌سازی فایل‌ها در کنار پروژه و سازگاری با گیت باعث شده بسیاری از توسعه‌دهندگان آن را به‌جای پست‌من انتخاب کنند؛ به‌ویژه در پروژه‌هایی که نگهداری درخواست‌ها در مخزن کد اهمیت دارد.\n\nالبته اگر از قابلیت‌های تیمی، فضای ابری یا امکانات پیشرفته پست‌من استفاده می‌کنید، ممکن است همچنان پست‌من انتخاب مناسب‌تری باشد. اما برای بسیاری از پروژه‌های روزمره، برونو تمام امکانات موردنیاز را در اختیار شما قرار می‌دهد.\n","https:\u002F\u002Fraw.githubusercontent.com\u002Fgazmeh-site\u002Fposts\u002Frefs\u002Fheads\u002Fmain\u002Ffa\u002Fautomation\u002Fbruno-api-client-postman-alternative\u002Fresources\u002FimageCover.png?raw=true","https:\u002F\u002Fraw.githubusercontent.com\u002Fgazmeh-site\u002Fposts\u002Frefs\u002Fheads\u002Fmain\u002Ffa\u002Fautomation\u002Fbruno-api-client-postman-alternative\u002Fresources\u002FimageThumbnail.png?raw=true",null,"bruno-api-client-postman-alternative","2026-08-13T20:45:47.183Z","https:\u002F\u002Fraw.githubusercontent.com\u002Fgazmeh-site\u002Fposts\u002Frefs\u002Fheads\u002Fmain\u002Ffa\u002Fautomation\u002Fbruno-api-client-postman-alternative\u002F",[16],{"id":17,"documentId":18,"name":19,"localeName":20},4,"szefdrf8dqsu6ul557hbcizz","automation","خودکارسازی",{"id":22,"documentId":23,"username":24,"displayName":25,"avatar":11},31,"n2azqjmkrdunx0igspqd5vu7","aliQ","علی کیو",[],{"id":28,"documentId":29,"name":30},1,"k3ceevg7bk76h96m95s94lx2","gazmeh",{"SITE_URL":32,"PAGES_URL":33,"POSTS_URL":34},"https:\u002F\u002Fgazmeh.ir\u002Ffa","https:\u002F\u002Fgazmeh.ir\u002Ffa\u002Fpages","https:\u002F\u002Fgazmeh.ir\u002Ffa\u002Fposts"]