OpenAPI को विस्तारित करना¶
🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद
यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝
इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖
आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।
कुछ मामलों में आपको generated OpenAPI schema को संशोधित करने की ज़रूरत हो सकती है।
इस section में आप देखेंगे कि कैसे।
सामान्य process¶
सामान्य (default) process इस प्रकार है।
एक FastAPI application (instance) में एक .openapi() method होता है, जिससे OpenAPI schema return करने की अपेक्षा की जाती है।
application object बनाने के हिस्से के रूप में, /openapi.json के लिए (या आपने अपने openapi_url में जो भी set किया है उसके लिए) एक path operation registered होता है।
यह बस application के .openapi() method के result के साथ एक JSON response return करता है।
Default रूप से, method .openapi() जो करता है वह यह है कि property .openapi_schema को check करता है कि उसमें contents हैं या नहीं, और उन्हें return करता है।
अगर नहीं हैं, तो यह उन्हें fastapi.openapi.utils.get_openapi में utility function का उपयोग करके generate करता है।
और वह function get_openapi() parameters के रूप में ये प्राप्त करता है:
title: OpenAPI title, जो docs में दिखाया जाता है।version: आपके API का version, जैसे2.5.0।openapi_version: उपयोग की गई OpenAPI specification का version। Default रूप से, latest:3.1.0।summary: API का एक छोटा summary।description: आपके API का description, इसमें markdown शामिल हो सकता है और यह docs में दिखाया जाएगा।routes: application से routes, जोapp.routesसे लिए जाते हैं। FastAPI इन्हें registered path operations collect करने के लिए उपयोग करता है, जिनमें included routers से आने वाले भी शामिल हैं।
तकनीकी विवरण
app.routes एक lower-level route tree है। इसमें route candidates शामिल हो सकते हैं जिन्हें FastAPI internally included routers के लिए उपयोग करता है, केवल final APIRoute objects ही नहीं।
आप फिर भी app.routes को get_openapi() में pass कर सकते हैं। FastAPI effective path operations collect करने के लिए उस route tree को traverse करेगा।
नोट
parameter summary OpenAPI 3.1.0 और उससे ऊपर में उपलब्ध है, जिसे FastAPI 0.99.0 और उससे ऊपर support करता है।
Defaults को override करना¶
ऊपर दी गई जानकारी का उपयोग करके, आप OpenAPI schema generate करने और अपनी ज़रूरत के अनुसार प्रत्येक हिस्से को override करने के लिए उसी utility function का उपयोग कर सकते हैं।
उदाहरण के लिए, आइए custom logo शामिल करने के लिए ReDoc का OpenAPI extension जोड़ें।
सामान्य FastAPI¶
सबसे पहले, अपनी पूरी FastAPI application सामान्य रूप से लिखें:
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
summary="This is a very custom OpenAPI schema",
description="Here's a longer description of the custom **OpenAPI** schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
OpenAPI schema generate करें¶
फिर, custom_openapi() function के अंदर, OpenAPI schema generate करने के लिए उसी utility function का उपयोग करें:
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
summary="This is a very custom OpenAPI schema",
description="Here's a longer description of the custom **OpenAPI** schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
OpenAPI schema को संशोधित करें¶
अब आप OpenAPI schema में info "object" में custom x-logo जोड़कर ReDoc extension जोड़ सकते हैं:
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
summary="This is a very custom OpenAPI schema",
description="Here's a longer description of the custom **OpenAPI** schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
OpenAPI schema को cache करें¶
आप अपनी generated schema store करने के लिए property .openapi_schema को "cache" के रूप में उपयोग कर सकते हैं।
इस तरह, जब भी कोई user आपके API docs खोलेगा, आपकी application को हर बार schema generate नहीं करना पड़ेगा।
यह केवल एक बार generate होगा, और फिर अगली requests के लिए वही cached schema उपयोग किया जाएगा।
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
summary="This is a very custom OpenAPI schema",
description="Here's a longer description of the custom **OpenAPI** schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
Method को override करें¶
अब आप .openapi() method को अपने नए function से replace कर सकते हैं।
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Foo"}]
def custom_openapi():
if app.openapi_schema:
return app.openapi_schema
openapi_schema = get_openapi(
title="Custom title",
version="2.5.0",
summary="This is a very custom OpenAPI schema",
description="Here's a longer description of the custom **OpenAPI** schema",
routes=app.routes,
)
openapi_schema["info"]["x-logo"] = {
"url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png"
}
app.openapi_schema = openapi_schema
return app.openapi_schema
app.openapi = custom_openapi
इसे check करें¶
जब आप http://127.0.0.1:8000/redoc पर जाएंगे, तो आप देखेंगे कि आप अपना custom logo उपयोग कर रहे हैं (इस उदाहरण में, FastAPI का logo):
