طلباتنا كانت نصوصًا منسية: كيف أنقذنا 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 هي حجر أساس في بناء هذه الأنظمة. يلا، شدّوا حيلكم يا شباب! 💪

أبو عمر

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

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

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

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

آخر المدونات

الشبكات والـ APIs

كانت خوادمنا تستجدي التحديثات: كيف أنقذتنا ‘خطاطيف الويب’ (Webhooks) من جحيم الاستقصاء المستمر (Polling)؟

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

17 مايو، 2026 قراءة المزيد
الحوسبة السحابية

كانت بنيتنا التحتية قصراً من رمال: كيف أنقذتنا “البنية التحتية ككود” (IaC) من جحيم البيئات المتضاربة؟

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

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

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

هل تشعر أن ملفك الشخصي على GitHub لا يعكس قدراتك الحقيقية؟ في هذه المقالة، أشاركك يا صديقي تجربتي الشخصية، أنا أبو عمر، وكيف انتقلت من...

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

كانت قاعدة بياناتنا تتوسل الرحمة: كيف أنقذنا التخزين المؤقت (Caching) من جحيم الاستعلامات البطيئة

قصة حقيقية من واقع العمل عن كيفية انهيار نظامنا تحت ضغط الاستعلامات المتكررة، وكيف كان التخزين المؤقت (Caching) هو طوق النجاة. مقالة عملية للمطورين تشرح...

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

كان التحقق من هوية عملائنا يستغرق أياماً: كيف أنقذنا الذكاء الاصطناعي (eKYC) من جحيم الإجراءات اليدوية؟

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

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

كانت أعطالنا تكتشف بعد فوات الأوان: كيف أنقذنا Prometheus من جحيم المراقبة التفاعلية؟

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

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

كانت فرقنا صامتة أمام الأخطاء: كيف أنقذتنا ‘السلامة النفسية’ من جحيم ثقافة اللوم؟

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

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