محتويات الدورة

FastAPI / الأساسي: HTTP والحدود ذات الأنواع / الدرس 5

الأخطاء وحدود التحقق

ميز الطلب الباطل وفشل المجال المتوقع وعيب البرمجة مع خطأ عام ثابت وآمن.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح افتراضات وحدود موضوع «الأخطاء وحدود التحقق».
  • فسر المثالين الكاملين وعلل المخرجات الملاحظة.
  • شخص الإخفاقات وطبق الحلول المشروحة مع وضوح ملكية الهوية والحالة ودورة الحياة.

التصنيف قبل اختيار الرد

تختلف البنية والغياب والمنع والتعارض والعيب. يبلغ التحقق 422 عادة وقد ينتج معرف صحيح غائب 404. توقف HTTPException الطلب بخطأ مقصود لا بديل لكل استثناء. يفصل المثال الغياب والنوع؛ ولا تلتقط الجميع وتعيد نجاحا فارغا يخفي العيب.

python فحص غياب ونوع كامل
from fastapi import FastAPI, HTTPException
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/items/{item_id}")
def item(item_id: int):
    if item_id != 1:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"id": 1}
with TestClient(app) as client:
    missing = client.get("/items/2")
    invalid = client.get("/items/not-an-integer")
    print(missing.status_code, missing.json())
    print(invalid.status_code, invalid.json()["detail"][0]["loc"])
الناتج المتوقع
404 {'detail': 'Item not found'}
422 ['path', 'item_id']

ينتج الغياب 404 والنوع 422 بموقع المسار قبل البحث.

رفع الفشل المتوقع حيث يعرف

قد يرفع مساعد أوتبعية خطأ يمنع النجاح. ضع قرار النقل بحد مناسب ليختبر المجال مستقلا. استخدم رمزا ثابتا وتصحيحا دون مسار أوسر أوداخل قاعدة. يختلف ما بعد التثبيت عما قبل التحقق؛ ولا يثبت الخطأ عكس الأثر أوأمان الإعادة.

تخصيص التحقق دون كشف المدخل

يحمل الخطأ تفاصيل وقد تتضمن قيما وسياقا لا يعادان أويُسجلان بلا تمييز. يعيد المثال رمزا ومواقع فقط كتغيير عقد ينعكس بالمخطط والعميل والاختبار. لا تحول الجميع 400 أو 200 للراحة. افصل عيب المخرج وراجع ترميز الإصدار للموقع والنوع.

python رد تحقق محجوب كامل
from typing import Annotated
from fastapi import FastAPI, Query
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from fastapi.testclient import TestClient
app = FastAPI()
@app.exception_handler(RequestValidationError)
async def invalid_request(request, error):
    fields = [list(item["loc"]) for item in error.errors()]
    return JSONResponse(status_code=422, content={"error": "invalid_request", "fields": fields})
@app.get("/count")
def count(quantity: Annotated[int, Query(gt=0)]): return {"quantity": quantity}
with TestClient(app) as client:
    response = client.get("/count?quantity=0")
    print(response.status_code, response.json())
الناتج المتوقع
422 {'error': 'invalid_request', 'fields': [['query', 'quantity']]}

يعرض الرمز والموقع فقط دون القيمة أوالسياق الداخلي.

حفظ الدليل الداخلي بحد مضبوط

احفظ سياقا معتمدا ومعرفا للعيب وأعد عاما للعميل، وصن السبب عند التغليف ولا تكرر السجل. يرفع TestClient عيوب الخادم عادة ويمكن تعطيله لاختبار 500. بعد بدء التدفق لا يستبدل بخطأ نظيف عادة؛ فتشمل الملكية المعاملة والرد والتنظيف لا الرقم.

اختبار الفشل كعقد

غط المدخل والغياب والمنع والتعارض والعيب والتنظيف وافحص الشكل والتصنيف ومنع الأثر عبر بديل. استخدم اصطناعيا وحقنا لا خدمات واعتمادات. لا يبدأ المثال خادما أوقاعدة. يفيد الخطأ العميل والتشغيل دون كشف ويوضح أمان المحاولة أوالتسوية لا اعتبار 500 أوالمهلة غياب عمل.

الأخطاء الشائعة وإصلاحها

يبتلع الخطأ برد نجاح

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

تكشف سجلات التحقق أسرارا مدخلة

لماذا يحدث؟
سلسل المدخل أوالجسم كاملا.
كيف تصلحه؟
استخدم الموقع والرمز والحقول المعتمدة.
كيف تتجنب تكراره؟
اختبر الحجب بقيم اصطناعية.

يعد 500 دليلا على غياب الكتابة

لماذا يحدث؟
اختلط الرد والمعاملة.
كيف تصلحه؟
سو المجهول وحدد المحاولة.
كيف تتجنب تكراره؟
تتبع الحدين صراحة.

اختبر فهمك

1. يقبل معرف عددي ويغيب المورد. هل هذا خطأ تحقق نوع؟

اعرض الحل المشروح

لا؛ نجح التحليل ويختار المجال 404 مثلا، وافصله عن 422 ليصحح العميل المشكلة الصحيحة وتفيد المراقبة.

2. ماذا يتجنب معالج التحقق نسخه للعامة؟

اعرض الحل المشروح

تجنب الجسم والاعتماد والمكدس والسياق غير المراجع. أعد تصنيفا وحقولا مفيدة واحم الداخلي واختبرهما مستقلة.

أهم ما تعلمته

  • تختلف البنية والغياب والمنع والتعارض والعيب.
  • يحمل الخطأ تفاصيل وقد تتضمن قيما وسياقا لا يعادان أويُسجلان بلا تمييز.
  • غط المدخل والغياب والمنع والتعارض والعيب والتنظيف وافحص الشكل والتصنيف ومنع الأثر عبر بديل.

المراجع الرسمية