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

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

التبعيات وتركيب التطبيق

استخدم الحقن لسياق طلب وموارد مملوكة دون إخفاء أمن أوحالة عامة متغيرة.

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

أهداف الدرس

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

التبعية عقد دالة صريح

تصرح التبعية بقيمة أوفحص قبل العملية وقد تعتمد على أخرى. يظهر الرسم الاستخراج والهوية والإعداد والملكية، ولا تصير تلقائيا singleton أومهمة أوإذنا. صغرها وسم مسؤوليتها. يستخرج المثال لغة مدعومة ويرفض غيرها قبل المعالج، كسياق عرض لا هوية أوصلاحية موثوقة.

python فحص تبعية متحققة كامل
from typing import Annotated
from fastapi import Depends, FastAPI, Header, HTTPException
from fastapi.testclient import TestClient
def locale(x_lab_locale: Annotated[str, Header()] = "en"):
    if x_lab_locale not in {"en", "ar"}:
        raise HTTPException(status_code=400, detail="Unsupported locale")
    return x_lab_locale
app = FastAPI()
@app.get("/greeting")
def greeting(value: Annotated[str, Depends(locale)]): return {"locale": value}
with TestClient(app) as client:
    print(client.get("/greeting", headers={"X-Lab-Locale": "ar"}).json())
    print(client.get("/greeting", headers={"X-Lab-Locale": "xx"}).status_code)
الناتج المتوقع
{'locale': 'ar'}
400

تسلم التبعية اللغة أوتوقف 400، وليست الترويسة اعتماد هوية.

التركيب دون عمل خفي مكرر

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

python فحص تخزين تبعية لكل طلب كامل
from typing import Annotated
from fastapi import Depends, FastAPI
from fastapi.testclient import TestClient
calls = {"count": 0}
def value():
    calls["count"] += 1
    return calls["count"]
app = FastAPI()
@app.get("/pair")
def pair(a: Annotated[int, Depends(value)], b: Annotated[int, Depends(value)]):
    return [a, b]
with TestClient(app) as client:
    print(client.get("/pair").json())
    print(client.get("/pair").json())
الناتج المتوقع
[1, 1]
[2, 2]

يقيم كل طلب مرة لمستهلكين، والعداد للعرض لا حالة طلب إنتاج.

فصل الحقن والصلاحية

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

إسناد العمر والتنظيف بوعي

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

اختبار الاستبدال وحدود الطلب

تفيد البدائل لمستودع وساعة وهوية وعميل آمنين؛ وأزلها بعد الاختبار ولا تختبر البديل وحده. أبق حد HTTP والتحقق حقيقيين. تستخدم الأمثلة تطبيقا معزولا وترويسات وعدّادا بلا خارج، وافحص السماح والرفض وعدم تسرب السياق بين الطلبات. يفيد الحقن بعقد مفهوم لا يلغي العمر والأثر.

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

تعد ترويسة محللة مستخدما موثقا

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

تتسرب حالة الطلب بمورد عام

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

يبقى البديل باختبارات لاحقة

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

اختبر فهمك

1. يعتمد معاملان على الدالة نفسها. هل تعمل مرتين دائما؟

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

لا؛ يعاد الناتج عادة بالطلب وفق الخيار والهوية، لا كذاكرة عامة أوضمان أثر آمن؛ فوضح العمل المؤثر.

2. من أين يأتي معرف المستخدم لفحص الملكية؟

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

من فاعل وثقه الخادم لا حقل يدعي الملكية. اقرأ الهدف وطبق سياسة العملية؛ فشكل المعرف لا يمنح سلطة.

أهم ما تعلمته

  • تصرح التبعية بقيمة أوفحص قبل العملية وقد تعتمد على أخرى.
  • تفرض التبعية الأمن بتنفيذ وربط صحيحين لا بمجرد استخراج رمز أومعرف ترويسة.
  • تفيد البدائل لمستودع وساعة وهوية وعميل آمنين؛ وأزلها بعد الاختبار ولا تختبر البديل وحده.

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