विषय पर बढ़ें

Query Parameters

🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद

यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝

इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖

आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।

अंग्रेज़ी संस्करण

जब आप ऐसे दूसरे function parameters declare करते हैं जो path parameters का हिस्सा नहीं हैं, तो उन्हें अपने-आप "query" parameters के रूप में समझा जाता है।

from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]


@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

query उन key-value pairs का सेट है जो URL में ? के बाद आते हैं, और & characters से अलग किए जाते हैं।

उदाहरण के लिए, इस URL में:

http://127.0.0.1:8000/items/?skip=0&limit=10

...query parameters हैं:

  • skip: 0 value के साथ
  • limit: 10 value के साथ

क्योंकि वे URL का हिस्सा हैं, वे "स्वाभाविक रूप से" strings होते हैं।

लेकिन जब आप उन्हें Python types के साथ declare करते हैं (ऊपर दिए गए उदाहरण में, int के रूप में), तो उन्हें उस type में convert किया जाता है और उसके अनुसार validate किया जाता है।

path parameters पर लागू होने वाली सभी वही प्रक्रियाएँ query parameters पर भी लागू होती हैं:

  • Editor support (स्पष्ट रूप से)
  • Data "parsing"
  • Data validation
  • Automatic documentation

Defaults

क्योंकि query parameters किसी path का fixed हिस्सा नहीं होते, वे optional हो सकते हैं और उनके default values हो सकते हैं।

ऊपर दिए गए उदाहरण में उनके default values skip=0 और limit=10 हैं।

तो, इस URL पर जाना:

http://127.0.0.1:8000/items/

इस पर जाने जैसा ही होगा:

http://127.0.0.1:8000/items/?skip=0&limit=10

लेकिन अगर आप, उदाहरण के लिए, इस पर जाते हैं:

http://127.0.0.1:8000/items/?skip=20

तो आपके function में parameter values होंगी:

  • skip=20: क्योंकि आपने इसे URL में सेट किया है
  • limit=10: क्योंकि वह default value था

Optional parameters

उसी तरह, आप optional query parameters declare कर सकते हैं, उनका default None सेट करके:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

इस मामले में, function parameter q optional होगा, और default रूप से None होगा।

सुझाव

यह भी ध्यान दें कि FastAPI इतना smart है कि यह पहचान लेता है कि path parameter item_id एक path parameter है और q नहीं है, इसलिए, यह एक query parameter है।

Query parameter type conversion

आप bool types भी declare कर सकते हैं, और वे convert हो जाएँगे:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

इस मामले में, अगर आप इस पर जाते हैं:

http://127.0.0.1:8000/items/foo?short=1

या

http://127.0.0.1:8000/items/foo?short=True

या

http://127.0.0.1:8000/items/foo?short=true

या

http://127.0.0.1:8000/items/foo?short=on

या

http://127.0.0.1:8000/items/foo?short=yes

या कोई भी दूसरी case variation (uppercase, पहले अक्षर को uppercase, आदि), आपका function parameter short को True के bool value के साथ देखेगा। अन्यथा False के रूप में।

कई path और query parameters

आप एक ही समय में कई path parameters और query parameters declare कर सकते हैं, FastAPI जानता है कि कौन सा कौन है।

और आपको उन्हें किसी विशेष order में declare करने की ज़रूरत नहीं है।

उन्हें नाम से detect किया जाएगा:

from fastapi import FastAPI

app = FastAPI()


@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(
    user_id: int, item_id: str, q: str | None = None, short: bool = False
):
    item = {"item_id": item_id, "owner_id": user_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update(
            {"description": "This is an amazing item that has a long description"}
        )
    return item

Required query parameters

जब आप non-path parameters के लिए default value declare करते हैं (अभी तक, हमने केवल query parameters देखे हैं), तो वह required नहीं होता।

अगर आप कोई specific value नहीं जोड़ना चाहते लेकिन बस उसे optional बनाना चाहते हैं, तो default को None के रूप में सेट करें।

लेकिन जब आप किसी query parameter को required बनाना चाहते हैं, तो आप बस कोई default value declare न करें:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_user_item(item_id: str, needy: str):
    item = {"item_id": item_id, "needy": needy}
    return item

यहाँ query parameter needy type str का एक required query parameter है।

अगर आप अपने browser में इस तरह का URL खोलते हैं:

http://127.0.0.1:8000/items/foo-item

...required parameter needy जोड़े बिना, तो आपको इस तरह की error दिखाई देगी:

{
  "detail": [
    {
      "type": "missing",
      "loc": [
        "query",
        "needy"
      ],
      "msg": "Field required",
      "input": null
    }
  ]
}

क्योंकि needy एक required parameter है, आपको इसे URL में सेट करना होगा:

http://127.0.0.1:8000/items/foo-item?needy=sooooneedy

...यह काम करेगा:

{
    "item_id": "foo-item",
    "needy": "sooooneedy"
}

और निश्चित रूप से, आप कुछ parameters को required, कुछ को default value वाला, और कुछ को पूरी तरह optional define कर सकते हैं:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_user_item(
    item_id: str, needy: str, skip: int = 0, limit: int | None = None
):
    item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
    return item

इस मामले में, 3 query parameters हैं:

  • needy, एक required str.
  • skip, default value 0 के साथ एक int.
  • limit, एक optional int.

सुझाव

आप Enums को भी उसी तरह use कर सकते हैं जैसे Path Parameters के साथ।