PowerShell / المتوسط: الربط والأخطاء والوحدات والبيانات والاختبارات / الدرس 11
بناء حدود بيانات وAPI نوعية
افصل التحليل وبناء الطلب والنقل والمصادقة والحالة والمخطط والإعادة بمثبتات غير متصلة.
في هذه الصفحة
أهداف الدرس
- التحقق من بنية JSON وأنواعه قبل الحقول.
- تمييز التسلسل من HTTP الفعلي.
- تحديد الصفحات والفشل والإعادة دون خدمات.
لا يثبت تحليل البيانات عقد الخدمة
تحلل ConvertFrom-Json، وتضيف أوامر الويب النقل بعقود مختلفة وقد تكشف أو تستخدم اعتماداً أو تغير خادماً. لا نجري طلباً بل JSON مصطنعاً. افصل النحو والمخطط والحالة والمصادقة والإكمال؛ لا يثبت التحليل ما يلي. وقد تؤدي عملية HTTP الحقيقية إلى إعادة توجيه أو أثر على الخادم حتى عندما تبدو الشيفرة مجرد قراءة رد، لذلك يجب أن يبقى النقل خارج المثبتات المحلية.
يشمل مخطط الرد الفارغ والنوع والعدد
تحقق من المطلوب وميز الغائب وnull والمفرد والقائمة والصفحة. قد يبقى المعرف نصاً ويحتاج التاريخ منطقة، وتختلف الحالة والمكرر بين المستهلكين. لا تعتمد تحويل مفاتيح عرضياً واحفظ المجهول بسياسة. لا يضمن الجدول التسلسل والعمق والقيم المدعومة. ويجب تحديد سياسة للحقول الجديدة أو المكررة والتواريخ والمفاتيح، لأن نجاح المحلل لا يعني أن أنواع البيانات التي يتوقعها التطبيق قد بقيت محفوظة.
تحليل استجابة مصطنعة معلنة فقط
يحل المثال ذاكرة ويسقط الأسماء دون URI أو سر أو ملف أو أمر ويب ويبقى غير مختبر. ليفحص الحقيقي الحالة ونوع المحتوى ثم المخطط ويرفض المشوه، ولا تجعل catch الفارغة غياب الخدمة كفراغ صحيح. كما ينبغي أن يميز التطبيق الرد الفارغ الصحيح من تعذر الخدمة، بدلاً من تحويل كل استثناء إلى قائمة لا عناصر فيها لإخفاء الخطأ.
$text = '{"items":[{"id":"001","name":"review"}],"next":null}'
$response = $text | ConvertFrom-Json
$response.items | Select-Object -ExpandProperty name
المقصود review ومعرف نصي دون محلل PowerShell أو HTTP أو طرف.
تحتاج الصفحات والإعادة ملكية محدودة
قد تكرر الصفحات أو تحذف أو ترتب وفق العقد. حد العدد والحجم والتالي ولا تتبع جهة غريبة دون تحقق. ميز العابر والدائم والمجهول ولا تثبت الاستجابة المفقودة غياب الأثر. استخدم الهوية المدعومة لا إعادة بلا حد، واحم السر واختبر المصطنع أولاً. وقد يكون رابط الصفحة التالية مدخلاً غير موثوق في الرد، لذلك ينبغي التحقق من نطاق وجهته لا اتباعه آلياً إلى أي جهة أو بلا حد.
فحص المثبت دون ادعاء اختبار HTTP
يثبت الفحص شكل المثبت لا TLS أو المصادقة أو أوامر الويب أو التوفر. صرح ذلك واختبر لاحقاً الحالات والمشوه والغائب والفارغ والتكرار والإلغاء. افصل بناء الطلب والنقل ليبقى المحلي ثابتاً؛ ننفذ Python فقط دون عميل خدمات. وتحتاج اختبارات التنفيذ اللاحقة إلى رفض المحتوى المشوه وحلقات الاستمرار المتكررة، مع بقاء كل تلك الحالات منفصلة من اختبار JSON الحتمي هنا.
import json
response = json.loads('{"items":[{"id":"001","name":"review"}],"next":null}')
assert isinstance(response['items'], list)
assert all(isinstance(item['id'], str) for item in response['items'])
print(','.join(item['name'] for item in response['items']))
print('terminal=' + str(response['next'] is None))
review
terminal=True
يفحص JSON في Python دون مقبس أو سلوك ويب PowerShell أو طرف فعلي.
الأخطاء الشائعة وإصلاحها
تحويل فشل HTTP لقائمة فارغة ناجحة
- لماذا يحدث؟
- اختلط النقل والفراغ الصحيح.
- كيف تصلحه؟
- احفظ الحالة وبلغ الفشل.
- كيف تتجنب تكراره؟
- اختبر الغائب والفارغ منفصلين.
فقد المعرف أصفاره
- لماذا يحدث؟
- حولت الهوية لكمية.
- كيف تصلحه؟
- احفظ نوع المخطط.
- كيف تتجنب تكراره؟
- اختبر رجوع المعرف.
اتباع التالي دون حد
- لماذا يحدث؟
- اختارت البيانات وجهة اعتباطية.
- كيف تصلحه؟
- تحقق من النطاق وحد التتبع.
- كيف تتجنب تكراره؟
- افصل البناء والنقل.
اختبر فهمك
1. لماذا يميز التالي null من غيابه؟
اعرض الحل المشروح
قد تعني null نهاية صحيحة والغائب تشوهاً؛ طبق العقد لا كل قيمة تشبه false نهاية.
2. تنتهي مهلة طلب مغير. هل تعاد عميانياً؟
اعرض الحل المشروح
لا؛ ربما اكتمل، فصالح بهويته وعقده واحفظ المجهول والحد لا مهلة كرجوع.
أهم ما تعلمته
- افصل المحلل والمخطط والنقل والهوية والإكمال.
- حد الصفحات والمحاولات واحفظ الأنواع.