Header Parameter Models¶
🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद
यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝
इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖
आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।
अगर आपके पास संबंधित header parameters का एक समूह है, तो आप उन्हें declare करने के लिए एक Pydantic model बना सकते हैं।
इससे आप model को फिर से उपयोग कर पाएंगे, कई जगहों पर, और साथ ही सभी parameters के लिए validations और metadata एक साथ declare कर पाएंगे। 😎
नोट
यह FastAPI version 0.115.0 से समर्थित है। 🤓
Pydantic Model के साथ Header Parameters¶
जिन header parameters की आपको ज़रूरत है, उन्हें एक Pydantic model में declare करें, और फिर parameter को Header के रूप में declare करें:
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: Annotated[CommonHeaders, Header()]):
return headers
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header()):
return headers
FastAPI request में headers से हर field का data extract करेगा और आपको वह Pydantic model देगा जिसे आपने define किया है।
Docs देखें¶
आप /docs पर docs UI में required headers देख सकते हैं:
Extra Headers को मना करें¶
कुछ विशेष use cases में (शायद बहुत आम नहीं), आप उन headers को restrict करना चाह सकते हैं जिन्हें आप receive करना चाहते हैं।
आप Pydantic की model configuration का उपयोग करके किसी भी extra fields को forbid कर सकते हैं:
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
model_config = {"extra": "forbid"}
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: Annotated[CommonHeaders, Header()]):
return headers
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
model_config = {"extra": "forbid"}
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header()):
return headers
अगर कोई client कुछ extra headers भेजने की कोशिश करता है, तो उन्हें एक error response मिलेगा।
उदाहरण के लिए, अगर client plumbus के value के साथ एक tool header भेजने की कोशिश करता है, तो उन्हें एक error response मिलेगा जो बताएगा कि header parameter tool की अनुमति नहीं है:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["header", "tool"],
"msg": "Extra inputs are not permitted",
"input": "plumbus",
}
]
}
Convert Underscores को Disable करें¶
नियमित header parameters की तरह ही, जब parameter names में underscore characters होते हैं, तो वे स्वचालित रूप से hyphens में convert हो जाते हैं।
उदाहरण के लिए, अगर आपके code में header parameter save_data है, तो अपेक्षित HTTP header save-data होगा, और docs में भी वह इसी तरह दिखाई देगा।
अगर किसी कारण से आपको इस automatic conversion को disable करना है, तो आप header parameters के लिए Pydantic models में भी ऐसा कर सकते हैं।
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(
headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
):
return headers
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
return headers
चेतावनी
convert_underscores को False पर set करने से पहले, ध्यान रखें कि कुछ HTTP proxies और servers underscores वाले headers के उपयोग की अनुमति नहीं देते।
सारांश¶
आप FastAPI में headers declare करने के लिए Pydantic models का उपयोग कर सकते हैं। 😎