FastAPI / الأساسي: HTTP والحدود ذات الأنواع / الدرس 4
الاستجابات والحالة والتسلسل
حدد الرد العام مستقلا عن السجل الداخلي وأعد دلالات HTTP الموافقة للعمل.
في هذه الصفحة
أهداف الدرس
- اشرح افتراضات وحدود موضوع «الاستجابات والحالة والتسلسل».
- فسر المثالين الكاملين وعلل المخرجات الملاحظة.
- شخص الإخفاقات وطبق الحلول المشروحة مع وضوح ملكية الهوية والحالة ودورة الحياة.
الاستجابة حد ثقة آخر
يضبط الطلب المدخل والرد المخرج، وقد يحوي الداخل اعتمادا أوملاحظة أوعلما لا يكشف. يرشح المثال قاموسا اصطناعيا للاسم العام؛ ويفيد الترشيح مع بناء صريح أسهل تدقيقا. لا تفترض إخفاء الخاصية لعدم طلبها أولاستخدام اسم متعارف.
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pydantic import BaseModel
class PublicUser(BaseModel):
name: str
app = FastAPI()
@app.get("/profile", response_model=PublicUser)
def profile():
return {"name": "Ada", "internal_note": "public-synthetic-example-only"}
with TestClient(app) as client:
response = client.get("/profile")
print(response.json())
print("internal_note" in response.json())
{'name': 'Ada'}
False
يعبر الاسم فقط ويحذف الحقل الاصطناعي من تمثيل العميل.
اختيار الحالة بعقد العملية
تعبر 200 و 201 و 202 و 204 عن نتائج مختلفة، ولا يعني 202 اكتمالا. بلا جسم 204؛ فلا تلحق JSON نجاح. يعيد المثال Response فارغة ويفحص البايتات. لا تثبت الحالة الحفظ والإذن وحدها؛ فعلى العقد إثباتهما، وافصل الفرع وأكمل ردا واحدا.
from fastapi import FastAPI, Response
from fastapi.testclient import TestClient
app = FastAPI()
@app.delete("/draft", status_code=204)
def remove_draft():
return Response(status_code=204)
with TestClient(app) as client:
response = client.delete("/draft")
print(response.status_code, len(response.content))
204 0
تحمل 204 صفرا من البايتات، ولا يحذف المسار بيانات؛ بل يختبر الدلالة فقط.
فصل تحويل JSON وقيم Python العشوائية
أنواع JSON أضيق؛ وتُسلسل المدعومة مع اختيار تمثيل ثابت للمال والمعرف والثنائي والاختياري. قد يسبب كائن قاعدة عشوائي تحميلات خفية أوفقد جلسة أوكشفا. يتحقق الرد وقد يكشف عيبا برمجيا لا خطأ عميل تلقائيا؛ فاختبر المخرج والمدخل الباطلين مستقلين.
استخدام الترويسات والردود الخاصة بوعي
تؤثر الترويسات في الاستخدام، وتختلف JSON والتدفق والملف والتحويل بالحياة والأمن. قد يتجاوز Response المباشر معالجة النموذج فهو مسؤولية لا اختصار. بعد بدء الترويسات أوبايتات التدفق لا يمكن عادة استبداله بخطأ نظيف؛ وسيرتبط ذلك بالتنظيف والحياة.
التحقق من المخرج المستلم فعليا
افحص الحالة والترويسات والمحتوى وغياب الحساس وفراغ الجسم بالعميل لا إرجاع Python وحده. استخدم نصا واضحا غير اعتماد وبيانات اصطناعية بلا تخزين أوخدمة أوخادم. ليست المخططات صحة عمل، ويكتمل العقد برد مقصود وغياب الداخل بالنجاح والخطأ.
الأخطاء الشائعة وإصلاحها
تتسرب حقول داخلية بسجل خام
- لماذا يحدث؟
- لم يفصل المدخل والمخرج.
- كيف تصلحه؟
- ابن ردا عاما وصرح بنموذجه.
- كيف تتجنب تكراره؟
- اختبر غياب الحساس.
يعيد مسار 204 جسم JSON
- لماذا يحدث؟
- أُهمل معنى بلا محتوى.
- كيف تصلحه؟
- أعد فارغا أواختر حالة بجسم.
- كيف تتجنب تكراره؟
- اختبر البايت والحالة.
يُلام العميل لمخرج خادم باطل
- لماذا يحدث؟
- اختلط تحقق الرد والطلب.
- كيف تصلحه؟
- أصلح المخرج وسجل الآمن.
- كيف تتجنب تكراره؟
- اختبر المخرج الباطل بحده.
اختبر فهمك
1. ما فرق 202 ونتيجة حجز مكتملة دائمة؟
اعرض الحل المشروح
تعني قبول المعالجة وتحتاج ملاحظة النتيجة، لا تثبيت الحجز. يثبت العقد والحفظ قبل إعلان المكتمل.
2. كيف يحمي اختبار من ظهور حقل داخلي بعد التنظيم؟
اعرض الحل المشروح
اطلب بالعميل وافحص الشكل أوالمسموح وغياب الحساس صراحة؛ فاختبار الصنف وحده يفوت تجاوز المسار بالنص المباشر.
أهم ما تعلمته
- يضبط الطلب المدخل والرد المخرج، وقد يحوي الداخل اعتمادا أوملاحظة أوعلما لا يكشف.
- أنواع JSON أضيق؛ وتُسلسل المدعومة مع اختيار تمثيل ثابت للمال والمعرف والثنائي والاختياري.
- افحص الحالة والترويسات والمحتوى وغياب الحساس وفراغ الجسم بالعميل لا إرجاع Python وحده.