FastAPI / الأساسي: HTTP والحدود ذات الأنواع / الدرس 2
عقود المسار والاستعلام والأنواع
صرح بمصدر القيم وتحويلها والحدود التي تعرف طلبا صالحا.
في هذه الصفحة
أهداف الدرس
- اشرح افتراضات وحدود موضوع «عقود المسار والاستعلام والأنواع».
- فسر المثالين الكاملين وعلل المخرجات الملاحظة.
- شخص الإخفاقات وطبق الحلول المشروحة مع وضوح ملكية الهوية والحالة ودورة الحياة.
إظهار مصدر كل مدخل
يشارك المسار في الهوية ويضيف الاستعلام خيارات. تستنتج FastAPI المدعوم ويوضح Path وQuery القيد، وتجمع Annotated النوع والبيانات. يختلف المطلوب والافتراضي ولا يعني السماح بـNone إباحة الغياب دون افتراضي. وثق الاسم والبديل والتكرار ولا تمرر قاموسا عشوائيا لعمق العمل.
فصل التحليل والحدود
يفسر نص URL قبل العدد والمنطق والتحويل عقد لا رفض صارم لكل نص عددي. ترفض الحدود بعد التحليل المدعوم. يقبل المثال 3 وافتراضا ويرفض صفرا. تحقق قبل المكلف، ولا يحد عدد عناصر حجم الطلب أوالزمن أوالتزامن؛ فلها ضوابط منفصلة.
from typing import Annotated
from fastapi import FastAPI, Query
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/items")
def items(limit: Annotated[int, Query(ge=1, le=5)] = 2):
return {"limit": limit}
with TestClient(app) as client:
print(client.get("/items").json())
print(client.get("/items?limit=3").json())
print(client.get("/items?limit=0").status_code)
{'limit': 2}
{'limit': 3}
422
الافتراضي 2 والصالح 3 ويفشل صفر 422 دون عملية خارجية.
نمذجة الاستعلام المكرر بوعي
يحتاج قائمة الاستعلام تصريحا صريحا. قد يصبح تكرار tag قائمة ولا يساوي نصا بفاصلة. يحفظ المثال قيمتين وترتيبهما؛ وقرر قبول المكرر أوتطبيعه أورفضه. لا تعتمد على تعامل وكيل عرضي خصوصا للأمن؛ وافرض الحدوث مرة إن لزم.
from typing import Annotated
from fastapi import FastAPI, Query
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/search")
def search(tags: Annotated[list[str], Query()]):
return {"tags": tags}
with TestClient(app) as client:
response = client.get("/search", params=[("tags", "blue"), ("tags", "green")])
print(response.json())
print(client.get("/search").status_code)
{'tags': ['blue', 'green']}
422
تصبح المفاتيح قائمة مرتبة، وتكون مطلوبة دون افتراضي فينتج الغياب 422.
استخدام البدائل دون إخفاء المعنى
قد يختلف الاسم الخارجي ببديل وتظل الأخطاء والمخطط واضحة. اختبر التهجئة بالإصدار المثبت لتغير السلوك. لا يصبح معامل المسار اختياريا بافتراضي؛ يلزم مسار آخر. فضل الوضوح، ولا يثبت التحقق ملكية المورد أوالصلاحية أوصدق دعوى العميل.
اختبار الافتراض والحدود والصيغ الخاطئة
اختبر الغياب والحدين والخارج والنوع والمكرر والبديل، وافحص الحالة وموقع الخطأ لا رسالة تتغير بالإصدار. تستخدم الأمثلة تطبيقات معزولة دون خدمة أوقاعدة. امنع الأثر لغير الصالح وسجل تشخيصا آمنا لا الاعتماد والطلب كله. يفيد العقد بتوقع القبول والفشل المفيد.
الأخطاء الشائعة وإصلاحها
تفسر قائمة كمصدر آخر
- لماذا يحدث؟
- غاب Query الصريح.
- كيف تصلحه؟
- صرح بالمصدر والنوع.
- كيف تتجنب تكراره؟
- اختبر مفاتيح مكررة حقيقية داخل العميل.
يُعد النوع الاختياري قابلا للغياب
- لماذا يحدث؟
- اختلط null والافتراضي.
- كيف تصلحه؟
- حدد القيم وسلوك الغياب.
- كيف تتجنب تكراره؟
- اختبر الغائب والصريح.
يُعد حد العدد حد حجم الطلب
- لماذا يحدث؟
- اختلط الحقل بميزانية النقل.
- كيف تصلحه؟
- طبق حدودا مستقلة.
- كيف تتجنب تكراره؟
- وثق وحدة كل حد.
اختبر فهمك
1. معامل يقبل null بلا افتراضي. ما الفرق المطلوب اختباره؟
اعرض الحل المشروح
قبول الغياب غير قبول None؛ فحدد افتراضا إن قصدت واختبر الطلب ولا تستنتج المطلوب من كلمة optional وحدها.
2. تقبل tags=a&tags=b. هل تساوي tags=a,b تلقائيا؟
اعرض الحل المشروح
لا؛ الثانية نص واحد بفاصلة إلا بتحليل معلن مختلف. وثق واختبر بروتوكولا واحدا لا تجمع أعرافا متعارضة صامتا.
أهم ما تعلمته
- يشارك المسار في الهوية ويضيف الاستعلام خيارات.
- يحتاج قائمة الاستعلام تصريحا صريحا.
- اختبر الغياب والحدين والخارج والنوع والمكرر والبديل، وافحص الحالة وموقع الخطأ لا رسالة تتغير بالإصدار.