सशर्त OpenAPI¶
🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद
यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝
इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖
आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।
अगर आपको ज़रूरत हो, तो आप environment के आधार पर OpenAPI को सशर्त रूप से configure करने के लिए settings और environment variables का उपयोग कर सकते हैं, और इसे पूरी तरह disable भी कर सकते हैं।
security, APIs, और docs के बारे में¶
production में अपनी documentation user interfaces को छिपाना आपकी API को सुरक्षित करने का तरीका नहीं होना चाहिए।
इससे आपकी API में कोई अतिरिक्त security नहीं जुड़ती, path operations अभी भी वहीं उपलब्ध रहेंगी जहाँ वे हैं।
अगर आपके code में कोई security flaw है, तो वह अभी भी मौजूद रहेगा।
documentation को छिपाना बस यह समझना अधिक कठिन बना देता है कि आपकी API के साथ कैसे interact किया जाए, और production में इसे debug करना आपके लिए अधिक कठिन बना सकता है। इसे बस Security through obscurity का एक रूप माना जा सकता है।
अगर आप अपनी API को secure करना चाहते हैं, तो कई बेहतर चीज़ें हैं जो आप कर सकते हैं, उदाहरण के लिए:
- सुनिश्चित करें कि आपके request bodies और responses के लिए अच्छी तरह defined Pydantic models हैं।
- dependencies का उपयोग करके कोई भी required permissions और roles configure करें।
- plaintext passwords कभी store न करें, केवल password hashes store करें।
- pwdlib और JWT tokens आदि जैसे जाने-माने cryptographic tools implement और use करें।
- जहाँ ज़रूरत हो, OAuth2 scopes के साथ अधिक granular permission controls जोड़ें।
- ...आदि।
फिर भी, आपके पास कोई बहुत विशिष्ट use case हो सकता है जहाँ आपको सच में किसी environment (जैसे production) के लिए या environment variables से मिली configurations के आधार पर API docs को disable करने की ज़रूरत हो।
settings और env vars से सशर्त OpenAPI¶
आप अपनी generated OpenAPI और docs UIs को configure करने के लिए आसानी से वही Pydantic settings use कर सकते हैं।
उदाहरण के लिए:
from fastapi import FastAPI
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
openapi_url: str = "/openapi.json"
settings = Settings()
app = FastAPI(openapi_url=settings.openapi_url)
@app.get("/")
def root():
return {"message": "Hello World"}
यहाँ हम setting openapi_url को उसी default "/openapi.json" के साथ declare करते हैं।
और फिर FastAPI app बनाते समय हम इसका उपयोग करते हैं।
फिर आप environment variable OPENAPI_URL को empty string पर set करके OpenAPI (UI docs सहित) को disable कर सकते हैं, जैसे:
$ OPENAPI_URL= uvicorn main:app
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
फिर अगर आप /openapi.json, /docs, या /redoc URLs पर जाते हैं, तो आपको बस इस तरह का 404 Not Found error मिलेगा:
{
"detail": "Not Found"
}