ما الذي تمنحه لك JSONPlaceholder

  • موارد يمكن التنبؤ بها. منشورات وتعليقات ومستخدمون ومهام وألبومات، بمعرّفات ثابتة وبُنى متسقة.

  • كل الأفعال. تستجيب GET وPOST وPUT وPATCH وDELETE جميعها على نحو منطقي.

  • علاقات متداخلة. التعليقات تتبع المنشورات، والمنشورات تتبع المستخدمين. بنية كافية للتدرّب عليها.

الدرس غير المقصود

عمليات الكتابة في JSONPlaceholder محاكاة فقط. ترسل POST فتحصل على 201 ومعه معرّف، ولم يُحفظ شيء. اطلبه مرة أخرى فلن تجده.

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

إذا نجت تأكيداتك من عمليات الكتابة الوهمية في JSONPlaceholder فهي تأكيدات ضعيفة. أعد كتابتها لتتحقق من أن الشيء موجود فعلاً بعد العملية، واحمل هذه العادة معك إلى واجهة API الحقيقية حيث يكون الضعف نفسه غير مرئي.

ما الذي تتدرّب عليه هنا، بالترتيب

البُنى والحقول

  • تحقّق من بنية جسم الاستجابة لا من رمز الحالة.

  • افحص الأنواع، لا مجرد وجود الحقول.

العلاقات

  • اجلب منشوراً ثم تعليقاته، وتحقّق من أنها تشير إليه فعلاً.

  • معظم الأخطاء الحقيقية تقع بين استدعاءين.

مسارات الفشل

  • اطلب معرّفاً غير موجود وتحقّق من أن شكل الاستجابة صحيح.

  • الاختبار الذي يتخطاه الناس، وهو نفسه الذي يلتقط الأعطال.

ما الذي تعجز عن تعليمه

كل ما يتعلق بالحالة، وهو كل ما يجعل اختبار API الحقيقي صعباً: الجلسات وانتهاء صلاحيتها، والقيم المُلتقطة من استجابة لتُستخدم في التي تليها، والاستدعاءات التي يجب أن تجري بترتيب معيّن، والتنظيف بعد كل تشغيل. لا شيء من ذلك موجود في JSONPlaceholder لأن لا شيء يبقى فيها.

لذا فهي ساعة أولى ممتازة، وأسبوع ثانٍ مضلِّل. انتقل إلى واجهة API ذات حالة حقيقية بمجرد أن تستقر الأساسيات لديك، وتوقّع قفزة في الصعوبة.

ساعة أولى تنتقل معك

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

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

هذه الخطوة الأخيرة هي جوهر التمرين كله. أبلغت عملية الكتابة عن نجاحها، وعاد المعرّف، ولم يبقَ شيء. كل عادة تستحق أن تحملها إلى واجهة API حقيقية تكمن في ملاحظة سبب نجاح اختبارك رغم ذلك، وفي إعادة كتابته حتى لا ينجح.

الانتقال إلى خدمة حقيقية

هذه الأمور الأربعة هي ما تتولاه طبقة مصممة لهذا الغرض تحت أسماء Auto-Authentication وDynamic Variables وDependency Chains وAuto-Cleanup. وتفاصيل آلية العمل موجودة في توثيق اختبار API.

الطرفية

npm install -g @testsprite/testsprite-cli
testsprite setup

وتغطي لوحة التحكم الأرض نفسها لمن لا يرغب في تثبيت محلي، بينما تجد مجموعة الأوامر الكاملة في مستودع CLI.

ما الذي يتغير حين توجّهه إلى واجهة API حقيقية

كل ما تعجز JSONPlaceholder عن تعليمه هو ما تتولاه TestSprite. Auto-Authentication للجلسات التي تنتهي صلاحيتها في منتصف التشغيل. Dynamic Variables للمعرّف الذي يعيده استدعاء الإنشاء. Dependency Chains للاستدعاءات التي لا يمكن أن تحدث قبل حدوث غيرها. Auto-Cleanup للسجلات التي يخلّفها كل تشغيل.

وخطوة البداية هي نفسها في التمرين أعلاه: وجّه مشروعاً إلى عنوان URL الأساسي لديك، ودع API Discovery يحصي ما هو موجود، واقرأ الخطة المولّدة قبل تشغيل أي شيء. الفرق أن الخطة تغطي الآن حالات التفويض والحدود على خدمة تبقى فيها عمليات الكتابة فعلاً.

وما تكسبه هو ما كان التدريب كله يبني نحوه: تأكيدات تصمد أمام الحالة، وتعمل مع كل تغيير لا حين تتذكرها.

لماذا لا تُحفَظ طلبات POST التي أرسلها؟

هذا مقصود بالتصميم. فـ JSONPlaceholder تحاكي عمليات الكتابة. اتخذ ذلك درساً في التحقق من النتائج لا من الاستجابات.

هل هي مناسبة لـ CI؟

لمجموعة اختبارات تعليمية، أحياناً. أما لأي شيء يعمل مع كل commit فاستخدم محاكياً محلياً بدلاً منها. إنها خدمة مشتركة مجانية.

إلى أين أنتقل بعدها؟

إلى شيء فيه مصادقة وحفظ حقيقي للبيانات. القفزة في الصعوبة هي المقصودة، وعندها تبدأ المهارة القابلة للنقل.

هل يمكنني توجيه مولّد اختبارات إليها؟

نعم، وهي مكان آمن لترى كيف تبدو التغطية المولّدة، إذ لا يوجد ما يمكن تلويثه.

هل هناك بدائل؟

HTTPBin لحالات الفشل المتعمدة ورموز الحالة، وPokeAPI لترقيم الصفحات على نطاق واسع، وواجهة GitHub API عامة للسلوك المُصادَق عليه.

الخلاصة باختصار

عمليات الكتابة الوهمية هي أفضل درس هنا.

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