ما هو اختبار واجهات API؟
اختبار واجهات API يفحص الخدمة عبر واجهتها لا عبر شاشاتها: أرسل طلباً بأسلوب وترويسات وجسم مختارة، ثم تحقق من رمز الحالة وترويسات الاستجابة وبنية الجسم وقيمه والوقت المستغرق. ولأنه يعمل تحت واجهة المستخدم، فهو أسرع وأكثر استقراراً ويكشف عيوب التكامل مبكراً — ولهذا تُبنى حزم الانحدار على مستوى API أولاً.
اقرأ الدليل: ما هو اختبار API؟ وكيف تختبر REST API
كيفية استخدام مقارنة استجابات API
- الصق الاستجابة A (مثل بيئة التجريب) والاستجابة B (مثل الإنتاج).
- أبقِ خيار «تجاهل الحقول المتقلّبة» مفعّلاً، وأضف أي مسارات إضافية لتجاهلها، واختر طريقة التعامل مع ترتيب المصفوفات.
- قارن. يخبرك الملخّص ما إذا كانت الاستجابتان متكافئتين؛ ويسرد الجدول كل فرق مع مساره.
- استخدم العرض السطري للحصول على فروق بصرية ونزّل الجدول بصيغة CSV.
مزايا مقارنة استجابات API
- مقارنة JSON دلالية — لا يُعدّ ترتيب المفاتيح ولا التنسيق فرقاً أبداً
- تجاهل الحقول المتقلّبة (المعرّفات والطوابع الزمنية وetags والرموز والمؤشرات cursors) بمربع اختيار واحد
- تجاهل مسارات بأنماط: $.meta.requestId أو $.items[*].updatedAt أو **.etag أو أسماء مفاتيح مجرّدة
- خيار تجاهل ترتيب المصفوفات ووضع اعتبار null مساوياً للحقل المفقود
- جدول فروق (في A فقط / في B فقط / تغيّر / تغيّر النوع) وقائمة بالحقول المتجاهَلة وفروق سطرية
مثال على مقارنة استجابات API
بيئة التجريب مقابل الإنتاج
الإدخال:
A: { "status": "paid", "customer": { "id": "cust_9" }, "updatedAt": "2025-08-30T10:00:00Z" }
B: { "status": "PAID", "customer": { "id": "cust_9", "tier": "gold" }, "updatedAt": "2025-08-31T09:12:44Z" }النتيجة:
Different · Added in B 1 · Changed 1 · Ignored: $.updatedAt
$.status changed "paid" → "PAID"
$.customer.tier only in B – → "gold"الأسئلة الشائعة حول مقارنة استجابات API
ماذا يفعل خيار «تجاهل الحقول المتقلّبة»؟
يتخطى المفاتيح التي تختلف عادةً بين البيئات والطلبات — المعرّفات، والطوابع الزمنية (createdAt وupdatedAt…)، وetags، ومعرّفات الطلبات/التتبّع، والرموز، والمؤشرات (cursors) — حتى تُظهر المقارنة الفروق المهمة فقط.
كيف تعمل مسارات التجاهل؟
نمط واحد في كل سطر: مسار JSON دقيق ($.meta.requestId)، أو حرف بدل للمصفوفات ($.items[*].updatedAt)، أو حرف بدل عميق (**.etag)، أو اسم مفتاح مجرّد لتجاهله في كل مكان.
هل يهمّ ترتيب المفاتيح؟
لا — المقارنة دلالية. فعّل خيار «تجاهل ترتيب المصفوفة» إذا كانت واجهة API تعيد القوائم بترتيب غير حتمي.
لماذا يُبرَز تغيّر النوع بشكل منفصل؟
القيمة التي تتغير من عدد إلى سلسلة نصية (أو من كائن إلى null) تعطّل العملاء عادةً، لذا تُحتسب تغيّراً في النوع لا مجرّد تغيّر في القيمة.
ملاحظات تقنية
تُزال الحقول المتجاهَلة من المستندين قبل تشغيل المقارنة البنيوية. ويعتمد اكتشاف المفاتيح المتقلّبة على تعبير نمطي منتقى بعناية (id وuuid وcreatedAt وupdated_at وetag وrequestId وnonce وtoken وcursor…).
المراجع
- RFC 9110: HTTP Semanticsمعاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.
- OpenAPI Specificationالمعيار لوصف واجهات REST: المسارات والعمليات والمعاملات والمخططات والاستجابات وأنظمة الأمان.
- OWASP Cheat Sheet Series: REST Securityالقواعد الأمنية لواجهات REST: HTTPS، والتوثيق في كل طلب، والتحقق من المدخلات، واستجابات الخطأ الآمنة، وتحديد المعدل.