You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.2 KiB

Input اور Output کے لیے الگ OpenAPI Schemas یا نہیں

Pydantic v2 کی ریلیز کے بعد سے، تیار کردہ OpenAPI پہلے سے کچھ زیادہ درست اور صحیح ہے۔ 😎

درحقیقت، بعض صورتوں میں، ایک ہی Pydantic model کے لیے OpenAPI میں دو JSON Schemas ہوں گے، input اور output کے لیے، اس بات پر منحصر ہے کہ آیا ان میں default values ہیں۔

آئیے دیکھتے ہیں کہ یہ کیسے کام کرتا ہے اور اگر آپ کو ضرورت ہو تو اسے کیسے تبدیل کیا جائے۔

Input اور Output کے لیے Pydantic Models

فرض کریں کہ آپ کے پاس default values کے ساتھ ایک Pydantic model ہے، جیسے یہ:

{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:7] hl[7] *}

Input کے لیے Model

اگر آپ اس model کو اس طرح input کے طور پر استعمال کرتے ہیں:

{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py ln[1:15] hl[14] *}

...تو description field ضروری نہیں ہوگا۔ کیونکہ اس کی default value None ہے۔

Docs میں Input Model

آپ docs میں تصدیق کر سکتے ہیں، description field پر سرخ ستارہ نہیں ہے، اسے ضروری نشان زد نہیں کیا گیا:

Output کے لیے Model

لیکن اگر آپ وہی model output کے طور پر استعمال کرتے ہیں، جیسے یہاں:

{* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py hl[19] *}

...تو چونکہ description کی default value ہے، اگر آپ اس field کے لیے کچھ واپس نہیں کرتے، تو اس میں پھر بھی وہ default value ہوگی۔

Output Response ڈیٹا کے لیے Model

اگر آپ docs کے ساتھ تعامل کریں اور response چیک کریں، حالانکہ کوڈ نے description fields میں سے کسی ایک میں کچھ نہیں ڈالا، JSON response میں default value (null) موجود ہے:

اس کا مطلب ہے کہ اس میں ہمیشہ ایک قدر ہوگی، بس بعض اوقات قدر None (یا JSON میں null) ہو سکتی ہے۔

اس کا مطلب ہے کہ، آپ کی API استعمال کرنے والے clients کو یہ جانچنے کی ضرورت نہیں کہ قدر موجود ہے یا نہیں، وہ فرض کر سکتے ہیں کہ field ہمیشہ موجود رہے گا، بس بعض صورتوں میں اس کی default value None ہوگی۔

OpenAPI میں اس کی وضاحت کا طریقہ یہ ہے کہ اس field کو ضروری نشان زد کیا جائے، کیونکہ یہ ہمیشہ موجود رہے گا۔

اس وجہ سے، کسی model کا JSON Schema اس بات پر منحصر ہو کر مختلف ہو سکتا ہے کہ یہ input یا output کے لیے استعمال ہو رہا ہے:

  • input کے لیے description ضروری نہیں ہوگا
  • output کے لیے یہ ضروری ہوگا (اور ممکنہ طور پر None ہو، یا JSON کی اصطلاح میں null)

Docs میں Output کے لیے Model

آپ docs میں output model بھی چیک کر سکتے ہیں، name اور description دونوں سرخ ستارے کے ساتھ ضروری نشان زد ہیں:

Docs میں Input اور Output کے لیے Model

اور اگر آپ OpenAPI میں تمام دستیاب Schemas (JSON Schemas) چیک کریں، تو آپ دیکھیں گے کہ دو ہیں، ایک Item-Input اور ایک Item-Output۔

Item-Input کے لیے، description ضروری نہیں ہے، اس پر سرخ ستارہ نہیں ہے۔

لیکن Item-Output کے لیے، description ضروری ہے، اس پر سرخ ستارہ ہے۔

Pydantic v2 کی اس خصوصیت کے ساتھ، آپ کی API documentation زیادہ درست ہے، اور اگر آپ کے پاس خود کار طریقے سے تیار کردہ clients اور SDKs ہیں، تو وہ بھی زیادہ درست ہوں گے، بہتر developer experience اور consistency کے ساتھ۔ 🎉

Schemas کو الگ نہ کریں

اب، کچھ ایسے معاملات ہیں جہاں آپ input اور output کے لیے ایک ہی schema رکھنا چاہ سکتے ہیں۔

شاید اس کا سب سے اہم استعمال یہ ہے کہ اگر آپ کے پاس پہلے سے کچھ خود کار طریقے سے تیار کردہ client کوڈ/SDKs ہیں اور آپ ابھی تمام خود کار تیار کردہ client کوڈ/SDKs کو اپ ڈیٹ نہیں کرنا چاہتے، آپ شاید کسی وقت یہ کرنا چاہیں گے، لیکن شاید ابھی نہیں۔

اس صورت میں، آپ FastAPI میں یہ خصوصیت separate_input_output_schemas=False parameter کے ساتھ غیر فعال کر سکتے ہیں۔

/// info | معلومات

separate_input_output_schemas کی سپورٹ FastAPI 0.102.0 میں شامل کی گئی تھی۔ 🤓

///

{* ../../docs_src/separate_openapi_schemas/tutorial002_py310.py hl[10] *}

Docs میں Input اور Output Models کے لیے ایک ہی Schema

اور اب input اور output کے لیے model کا ایک ہی schema ہوگا، صرف Item، اور اس میں description ضروری نہیں ہوگا: