FastAPI / المتقدم: الحياة وتصميم خدمة موثوقة / الدرس 18
تصميم API موثوقة وأدلة الإنتاج
اربط منع التكرار والصحة والتوافق والملاحظة والاستعادة بعقد خدمة كامل.
في هذه الصفحة
أهداف الدرس
- اشرح افتراضات وحدود موضوع «تصميم API موثوقة وأدلة الإنتاج».
- فسر المثالين الكاملين وعلل المخرجات الملاحظة.
- شخص الإخفاقات وطبق الحلول المشروحة مع وضوح ملكية الهوية والحالة ودورة الحياة.
تعريف النجاح وراء رد الإطار
توفر FastAPI آليات ولا تحدد النتيجة والصحة والزمن والبيانات والاستعادة. لا تثبت الحالة وحدها الديمومة والإذن والخارج. يحاكي المثال منع تكرار متسلسلا بتطبيق بالذاكرة، وتحتاج الحقيقة حفظا ذريّا ونطاقا واحتفاظا وتعارضا وتسوية. عبّر بالعقد لا ضمان الزخرفة والمخطط تلقائيا.
توضيح المحاولة والمجهول
قد يعيد العميل بعد تثبيت وفقد الرد؛ فاربط المفتاح بالفاعل والعملية والمدخل والنتيجة، وحدد تعارض المختلف. يعيد المثال المعرف نفسه ثم 409، ولا ينسق القاموس العمال أويبقى بعد الإعادة. يحتاج الأثر المجهول اكتشافا وتسوية.
from typing import Annotated
from fastapi import FastAPI, Header, HTTPException
from fastapi.testclient import TestClient
from pydantic import BaseModel
class Command(BaseModel):
name: str
receipts = {}
app = FastAPI()
@app.post("/lab-items", status_code=201)
def create(command: Command, key: Annotated[str, Header(alias="Idempotency-Key", min_length=1, max_length=40)]):
if key in receipts:
saved = receipts[key]
if saved["name"] != command.name: raise HTTPException(status_code=409, detail="Key conflict")
return {"id": saved["id"]}
receipts[key] = {"id": len(receipts) + 1, "name": command.name}
return {"id": receipts[key]["id"]}
with TestClient(app) as client:
headers = {"Idempotency-Key": "lab-a"}
print(client.post("/lab-items", headers=headers, json={"name": "pen"}).json())
print(client.post("/lab-items", headers=headers, json={"name": "pen"}).json())
print(client.post("/lab-items", headers=headers, json={"name": "book"}).status_code)
{'id': 1}
{'id': 1}
409
يعيد المتطابق 1 ويتعارض المختلف؛ والخريطة نموذج متسلسل لا ديمومة أوتزامن إنتاج.
فصل الحياة والجاهزية وفحص المستخدم
قد تحيا العملية وتبدأ أوتصرف أوتعجز، وتعكس الجاهزية القبول والحياة فائدة الإعادة لا كل عطل مشترك. يحاكي المثال حالات الجاهزية لا منصة فعلية. أوقف القبول وأنه أوألغ المقبول وأغلق بميزانية؛ فقد تعيش الطلبات والخلفية أطول من فحص.
from fastapi import FastAPI, Response
from fastapi.testclient import TestClient
state = {"mode": "starting"}
app = FastAPI()
@app.get("/ready")
def ready():
return Response(status_code=200 if state["mode"] == "ready" else 503)
with TestClient(app) as client:
print(client.get("/ready").status_code)
state["mode"] = "ready"
print(client.get("/ready").status_code)
state["mode"] = "draining"
print(client.get("/ready").status_code)
503
200
503
تعيد البداية والتصريف 503 والجاهزة 200 دون إيقاف عملية أواستعلام منصة أواعتماد.
ترقية الدليل والتوافق معا
حدد المصدر والحزمة والإصدارات والمخطط والإعداد والسر. تكشف الاختبارات بعض التغيير وتحتاج القاعدة والأحداث والعمال تعايشا مستقلا. قد لا يأمن الرجوع بعد بيانات أوسر، فاحفظ الأمامي والتسوية. راقب الخطأ والزمن والفئات والغياب بحدود آمنة؛ ولا تستنتج الإنتاج من المحلي أوالقبول أولوحة صامتة.
إبقاء التشغيل مسؤولا ومحدودا
حدد الأثر والشك واحفظ الدليل وسم المالك واختر الأصغر المصرح، وافحص المستخدم والمتبقي قبل الإغلاق. جرّب الفشل بعزلة وحدث الدليل. لا يبدأ المثال خادما أوخدمة أوطابورا أونشرا أوفحصا حقيقيا. الدليل المحلي دقيق محدود، وتأتي الموثوقية من عقود محفوظة لا إطار يلغيها.
الأخطاء الشائعة وإصلاحها
يُدعى القاموس منع تكرار دائم
- لماذا يحدث؟
- عمم المحلي للفشل والعمال.
- كيف تصلحه؟
- استخدم تصميما ذريّا دائما بالنطاق.
- كيف تتجنب تكراره؟
- اختبر التكرار والإعادة والتزامن والمجهول.
يسبب اعتماد مشترك عاصفة إعادة
- لماذا يحدث؟
- دمجت الجاهزية والحياة.
- كيف تصلحه؟
- افصل فائدة الإعادة والقبول.
- كيف تتجنب تكراره؟
- جرّب الغياب والإغلاق بأمان.
يُعد نجاح العميل إثبات إنتاج
- لماذا يحدث؟
- لم تختبر حدود البنية والتوزيع.
- كيف تصلحه؟
- أبلغ المحلي وافصل التكامل المصرح.
- كيف تتجنب تكراره؟
- اربط الدليل بكل حد فعلي.
اختبر فهمك
1. يتكرر المفتاح بمدخل مختلف. لماذا لا يعاد السابق صامتا؟
اعرض الحل المشروح
يربط أمرا جديدا بغير نتيجته ويخفي خطأ. طبق التعارض واحفظ الأصل واربط بالفاعل والعملية فعليا.
2. ماذا تفحص قبل رجوع إصدار كتب صيغة جديدة؟
اعرض الحل المشروح
افحص القديم والبيانات والأحداث والإعداد والسر، واستخدم الأمامي أوالتسوية عند الجهل؛ فلا يعكس التوجيه الكتابات.
أهم ما تعلمته
- توفر FastAPI آليات ولا تحدد النتيجة والصحة والزمن والبيانات والاستعادة.
- قد تحيا العملية وتبدأ أوتصرف أوتعجز، وتعكس الجاهزية القبول والحياة فائدة الإعادة لا كل عطل مشترك.
- حدد الأثر والشك واحفظ الدليل وسم المالك واختر الأصغر المصرح، وافحص المستخدم والمتبقي قبل الإغلاق.