طلباتنا كانت نصوصًا منسية: كيف أنقذنا Postman من جحيم اختبارات الـ API اليدوية؟

أذكرها وكأنها البارحة، ليلة شتائية باردة في مكتبي الصغير برام الله. كنا أنا وفريق العمل غارقين حتى آذاننا في مشروع ضخم يعتمد بشكل كلي على عشرات الواجهات البرمجية (APIs) من طرف ثالث. الساعة تجاوزت منتصف الليل، ورائحة القهوة المرة تملأ المكان، وعلى شاشاتنا تتراقص الأسطر السوداء لسطر الأوامGمر (Terminal).

كان “جمال”، أصغر المبرمجين في الفريق، يضرب بقبضته على الطاولة وهو يتمتم: “يا زلمة مش راضي يزبط! كل مرة بغير إشي صغير في الـ Header وبرجع بنسخ كل الأمر من أول وجديد!”. مشكلته كانت مشكلتنا جميعًا. كنا نستخدم أداة `curl` لاختبار كل طلب API. طلباتنا كانت عبارة عن نصوص طويلة جداً، محفوظة في ملف `requests.txt` الفوضوي الذي أصبح أشبه بمخطوطة أثرية لا يجرؤ أحد على لمسها أو تحديثها. كل تعديل صغير كان يعني رحلة عذاب من النسخ واللصق والتعديل، والدعاء بأن لا ننسى فاصلة أو علامة تنصيص.

في تلك الليلة، وبعد أن كاد اليأس يتملكنا، قلت لهم: “خلص يا شباب، بكفي. لازم يكون في طريقة أحسن من هيك”. بدأت البحث، وهنا ظهر أمامي اسم “Postman”. لم أكن أعرف وقتها أن هذه الأداة ستكون المنقذ الذي سينتشلنا من جحيم الاختبارات اليدوية، ويغير طريقة عملنا إلى الأبد.

قبل “بوستمان”: أيام الـ `curl` والضياع في سطر الأوامر

لكي تفهموا حجم المعاناة، دعوني أصف لكم كيف كانت حياتنا قبل Postman. كانت أداة `curl` هي صديقنا الوحيد، وهي أداة قوية لا شك، لكنها لم تُصمم لراحة المطورين في المشاريع الكبيرة.

مشكلة 1: الطلبات الطويلة والمعقدة

تخيل أنك تريد إرسال طلب `POST` لإنشاء مستخدم جديد، مع `Authorization Header` و `Content-Type` وجسم الطلب بصيغة JSON. باستخدام `curl`، سيبدو الأمر كالتالي:


curl -X POST 
  https://api.example.com/v1/users 
  -H 'Content-Type: application/json' 
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' 
  -d '{
    "name": "Abu Omar",
    "email": "abu.omar@example.com",
    "role": "admin"
  }'

الآن تخيل أن لديك 50 طلبًا بهذا التعقيد. أي خطأ في النسخ، أو نسيان علامة “ في نهاية السطر، كان يعني ضياع دقائق ثمينة في تصحيح الأخطاء.

مشكلة 2: لا ذاكرة، لا تنظيم

سطر الأوامر ليس له ذاكرة. بمجرد إغلاق النافذة، يضيع كل شيء. الحل البدائي كان، كما ذكرت، حفظ كل هذه الأوامر في ملف نصي. لكن سرعان ما تحول هذا الملف إلى وحش فوضوي:

  • أي نسخة هي الأحدث؟
  • هل هذا الطلب لا يزال يعمل؟
  • من الذي عدّل على طلب جلب المنتجات؟

كنا نقضي وقتاً في إدارة هذا الملف أكثر من الوقت الذي نقضيه في كتابة الكود الفعلي!

مشكلة 3: المشاركة مع الفريق كابوس

عندما ينضم مطور جديد للفريق، كانت أول مهمة له هي محاولة فهم ملف `requests.txt` الغامض. “أبو عمر، أي واحد من هدول هو طلب تعديل كلمة السر؟”. كنت أضطر لإرسال الأوامر له عبر Slack أو البريد الإلكتروني، مما يزيد من الفوضى وتعدد النسخ غير المتزامنة. كان الأمر أشبه بتبادل الوصفات السرية، ولكن بطريقة تضمن ضياعها أو تحريفها.

“بوستمان” يدخل المشهد: من هو هذا المنقذ؟

Postman هو منصة متكاملة لتطوير واختبار الواجهات البرمجية (APIs). لكن هذا التعريف الرسمي لا يوفيه حقه. بالنسبة لنا، كان Postman هو “المكتب المنظم” الذي حل محل “الغرفة المكركبة”.

واجهة رسومية “بتفتح النفس”

أول ما لفت انتباهنا هو الواجهة الرسومية النظيفة. بدلاً من شاشة سوداء وأوامر نصية، أصبح لدينا حقول واضحة لكل جزء من الطلب:

  • حقل للـ URL.
  • قسم خاص للـ Headers.
  • محرر جميل لكتابة الـ Body بصيغة JSON أو غيرها.
  • قائمة منسدلة لاختيار نوع الطلب (GET, POST, PUT, DELETE).

فجأة، أصبح بناء الطلب المعقد أعلاه مجرد ملء استمارة بسيطة.

المجموعات (Collections): مكتبتك المنظمة للـ APIs

هذه كانت الميزة التي غيرت كل شيء. الـ Collections هي ببساطة مجلدات يمكنك من خلالها تنظيم طلباتك. أنشأنا فوراً مجموعات منطقية:

  • مجموعة “إدارة المستخدمين” (User Management)
  • مجموعة “إدارة المنتجات” (Product Management)
  • مجموعة “الطلبات والدفع” (Orders & Payments)

داخل كل مجموعة، وضعنا الطلبات الخاصة بها (إنشاء مستخدم، جلب مستخدم، حذف مستخدم…). انتهى عصر الضياع في ملف نصي واحد. أصبح كل شيء في مكانه الصحيح.

المتغيرات (Variables): وداعاً للتكرار الممل

هل تتذكرون كيف كنا ننسخ ونلصق الـ `URL` الأساسي أو الـ `Authorization Token` في كل طلب؟ Postman حل هذه المشكلة بعبقرية من خلال المتغيرات.

يمكنك تعريف متغيرات على مستوى المجموعة أو على مستوى “البيئة” (Environment). على سبيل المثال، أنشأنا بيئتين:

  1. بيئة التطوير (Development): تحتوي على متغير `{{baseUrl}}` بقيمة `http://localhost:3000/api`
  2. بيئة الإنتاج (Production): تحتوي على نفس المتغير `{{baseUrl}}` ولكن بقيمة `https://api.myawesomeapp.com/v1`

الآن، بدلاً من كتابة الـ URL كاملاً، نكتب فقط `{{baseUrl}}/users`. وبنقرة زر واحدة، يمكننا التبديل بين بيئة التطوير والإنتاج، وستعمل كل طلباتنا تلقائياً مع السيرفر الصحيح. هذا الأمر ينطبق أيضاً على التوكينز ومفاتيح الـ API وأي قيمة متكررة.

نصيحة من أبو عمر: استثمر وقتاً في إعداد بيئات (Environments) مختلفة (Development, Staging, Production). سيوفر عليك هذا ساعات من العمل ويمنع الأخطاء الكارثية مثل إرسال طلبات اختبار إلى قاعدة بيانات الإنتاج الحقيقية!

الاختبارات (Tests): الأتمتة التي كنا نحلم بها

هنا تكمن قوة Postman الحقيقية. قبل ذلك، كنا نرسل الطلب بـ `curl` ثم “نبحلق” في الرد الذي يظهر على الشاشة لنتأكد أن كل شيء صحيح. هل الـ Status Code هو 200؟ هل يحتوي الرد على `userId`؟ كانت عملية يدوية مملة وعرضة للخطأ البشري.

في Postman، يوجد قسم “Tests” يمكنك فيه كتابة نصوص برمجية بسيطة (باستخدام JavaScript) ليتم تنفيذها تلقائياً بعد وصول الرد. هذه النصوص تتحقق من صحة الرد بدلاً عنك.

مثلاً, لاختبار طلب إنشاء مستخدم جديد، يمكننا كتابة الاختبارات التالية:


// Test 1: Check if the status code is 201 (Created)
pm.test("Status code should be 201 Created", function () {
    pm.response.to.have.status(201);
});

// Test 2: Check if the response body is a valid JSON
pm.test("Response should be a valid JSON", function () {
    pm.response.to.be.json;
});

// Test 3: Check if the response contains the user's name and email
pm.test("Response body should contain user's name and email", function () {
    const responseData = pm.response.json();
    pm.expect(responseData.name).to.eql("Abu Omar");
    pm.expect(responseData.email).to.eql("abu.omar@example.com");
});

الآن، في كل مرة نرسل فيها الطلب، سيقوم Postman بتشغيل هذه الاختبارات تلقائياً ويخبرنا بالنتائج (ناجح/فاشل) باللونين الأخضر والأحمر. لقد تحولنا من الفحص اليدوي إلى “الاختبار الرجعي” (Regression Testing) الآلي بضغطة زر.

نصائح من “الختيار”: كيف تستفيد من “بوستمان” لأقصى درجة؟

بعد سنوات من استخدام Postman يومياً، تعلمت بعض الحيل التي أنصح كل مطور بها:

استخدم الـ Pre-request Scripts

كما يوجد قسم للاختبارات (بعد الطلب)، يوجد قسم “Pre-request Scripts” (قبل الطلب). هذا المكان مثالي للمهام التي تحتاج لتنفيذها قبل إرسال الطلب، مثل توليد توقيع رقمي (HMAC Signature) أو الحصول على توكين جديد إذا انتهت صلاحية القديم.

تعرّف على الـ Collection Runner

هذه هي الأداة السحرية التي تجمع كل شيء معاً. الـ Collection Runner يسمح لك بتشغيل جميع الطلبات الموجودة في مجموعة (Collection) دفعة واحدة، بالترتيب. سيقوم بتنفيذ كل طلب، ثم تشغيل اختباراته، ثم الانتقال للطلب التالي. في نهاية العملية، سيعطيك تقريراً مفصلاً عن كل الاختبارات التي نجحت والتي فشلت. هذا هو قلب عملية الـ CI/CD (التكامل والنشر المستمر) لاختبارات الـ API.

لا تهمل التوثيق (Documentation)

Postman يمكنه إنشاء صفحة توثيق (Documentation) جميلة و تفاعلية من مجموعاتك (Collections) تلقائياً. يمكنك إضافة وصف لكل طلب وكل متغير. بمجرد مشاركة رابط التوثيق مع فريق الواجهة الأمامية (Frontend) أو مع أي طرف ثالث، سيكون لديهم دليل كامل ومحدث دائماً لكيفية استخدام الـ API الخاص بك، مع أمثلة حية.

الخلاصة: لا تكن مجرد “كبّيس” أوامر 🧘

الانتقال من `curl` إلى Postman لم يكن مجرد تغيير في الأداة، بل كان تغييراً في العقلية. تحولنا من فريق “يطفئ الحرائق” ويتعامل مع كل طلب API على أنه مشكلة منفصلة، إلى فريق “مهندسين” يبني نظاماً متكاملاً ومنظماً وقابلاً للاختبار والمشاركة.

صحيح أنك قد تبدأ باستخدام `curl` لطلب سريع وبسيط، وهذا لا عيب فيه. لكن إذا وجدت نفسك تعمل على مشروع يحتوي على أكثر من خمسة أو عشرة Endpoints، فاستثمار بضع ساعات لتعلم Postman وتنظيم عملك فيه سيوفر عليك وعلى فريقك أياماً، بل أسابيع، من العذاب والإحباط على المدى الطويل.

تذكر دائماً، أفضل المبرمجين ليسوا من يكتبون الكود الأسرع، بل من يبنون الأنظمة التي تجعل الجميع أسرع وأكثر إنتاجية. وأداة مثل Postman هي حجر أساس في بناء هذه الأنظمة. يلا، شدّوا حيلكم يا شباب! 💪

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

الحوسبة السحابية

كانت خوادمنا خاملة لكن فواتيرها لا تنام: كيف أنقذتنا الحوسبة بدون خوادم (Serverless) من جحيم التكاليف الخفية؟

قصة حقيقية من قلب المعركة البرمجية، كيف انتقلنا من دفع فواتير باهظة لخوادم شبه نائمة إلى نموذج فعال يوفّر المال والجهد. هذه ليست مجرد مقالة...

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كان ملفي على GitHub مقبرة للمشاريع: كيف أنقذني ملف README الشخصي من الانطباع الأول السيء؟

كان ملفي على GitHub أشبه بمقبرة للمشاريع المنسية، مما كان يعطي انطباعًا أوليًا سيئًا عني كمطور. في هذه المقالة، أشارككم كيف حوّلت هذا العبء إلى...

4 يونيو، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

كان الخادم الوحيد على وشك الانهيار: كيف أنقذنا ‘موازن الأحمال’ (Load Balancer) من كارثة توقف الخدمة؟

أشارككم قصة حقيقية من قلب المعركة التقنية، عندما كان خادمنا الوحيد يلفظ أنفاسه الأخيرة تحت ضغط المستخدمين. سأكشف لكم كيف كان "موازن الأحمال" (Load Balancer)...

3 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كان كل عميل جديد ينتظر أسابيع: كيف أنقذتنا أتمتة ‘اعرف عميلك’ (eKYC) من جحيم قوائم الانتظار؟

أشارككم قصتي كـ"أبو عمر"، مطور فلسطيني، حول كيف انتقلنا من عملية تسجيل عملاء يدوية تستغرق أسابيع إلى نظام "اعرف عميلك" الإلكتروني (eKYC) مؤتمت بالكامل يحول...

3 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كانت مفاتيحنا السرية تسافر في الدرجة السياحية (ملفات .env): كيف أنقذنا ‘مخزن الأسرار’ من كارثة التسريب؟

قصة من قلب المعركة التقنية، كيف انتقلنا من الاعتماد الخطر على ملفات .env إلى تبني "مخزن الأسرار" (Secrets Vault) كحل جذري وآمن. مقالة عملية للمطورين...

3 يونيو، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كان أفضل مبرمج لدينا أسوأ مدير: كيف تنقذ مسارات ‘المساهم الفردي’ أفضل مواهبك التقنية؟

قصة حقيقية عن أفضل مبرمج في فريقي تحول إلى أسوأ مدير، وكيف أنقذنا الموقف والفريق بمسار وظيفي مختلف تمامًا. هذه المقالة تشرح مفهوم "المسار الفردي"...

3 يونيو، 2026 قراءة المزيد
البودكاست