+
+---
+
+**दस्तावेज़**: [https://fastapi.tiangolo.com](https://fastapi.tiangolo.com/hi)
+
+**स्रोत कोड**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)
+
+---
+
+FastAPI एक आधुनिक, तेज़ (उच्च-प्रदर्शन) वेब फ़्रेमवर्क है जो मानक Python type hints के आधार पर Python से APIs बनाने के लिए है।
+
+मुख्य विशेषताएँ:
+
+* **तेज़**: बहुत उच्च प्रदर्शन, **NodeJS** और **Go** के समकक्ष (Starlette और Pydantic की बदौलत)। [उपलब्ध सबसे तेज़ Python फ़्रेमवर्क्स में से एक](#performance)।
+* **कोड लिखने में तेज़**: फ़ीचर्स विकसित करने की गति लगभग 200% से 300% तक बढ़ाएँ। *
+* **कम बग्स**: मानवीय (डेवलपर) त्रुटियों में लगभग 40% की कमी। *
+* **सहज**: बेहतरीन एडिटर सपोर्ट। हर जगह ऑटो-कम्प्लीट। डिबगिंग में कम समय।
+* **आसान**: इस्तेमाल और सीखने में आसान। दस्तावेज़ पढ़ने में कम समय।
+* **संक्षिप्त**: कोड डुप्लीकेशन को न्यूनतम करें। प्रत्येक parameter declaration से कई फ़ीचर्स। कम बग्स।
+* **मजबूत**: प्रोडक्शन-रेडी कोड प्राप्त करें। स्वतः इंटरैक्टिव दस्तावेज़ीकरण के साथ।
+* **मानकों पर आधारित**: APIs के खुले मानकों पर आधारित (और पूर्णतः अनुकूल): [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (जिसे पहले Swagger कहा जाता था) और [JSON Schema](https://json-schema.org/)।
+
+* आंतरिक डेवलपमेंट टीम द्वारा प्रोडक्शन ऐप्स बनाते समय किए गए परीक्षणों के आधार पर अनुमान।
+
+## प्रायोजक { #sponsors }
+
+
+
+### कीस्टोन प्रायोजक { #keystone-sponsor }
+
+
+{% for sponsor in sponsors.keystone -%}
+
+{% endfor -%}
+
+
+### गोल्ड प्रायोजक { #gold-sponsors }
+
+
+{% for sponsor in sponsors.gold -%}
+
+{% endfor -%}
+
+
+### सिल्वर प्रायोजक { #silver-sponsors }
+
+
+{% for sponsor in sponsors.silver -%}
+
+{% endfor %}
+
"मैं इन दिनों FastAPI का बहुत उपयोग कर रहा/रही हूँ। वास्तव में मैं अपनी टीम की Microsoft में ML सेवाओं के लिए इसे उपयोग करने की योजना बना रहा/रही हूँ। इनमें से कुछ को मुख्य Windows प्रोडक्ट और कुछ Office प्रोडक्ट्स में इंटीग्रेट किया जा रहा है।"
"यदि कोई प्रोडक्शन Python API बनाना चाहता है, तो मैं FastAPI की अत्यधिक अनुशंसा करूंगा/करूंगी। यह सुंदरता से डिज़ाइन किया गया है, उपयोग में सरल है और बेहद स्केलेबल है — यह हमारी API-फर्स्ट डेवलपमेंट रणनीति का मुख्य घटक बन गया है।"
+
+"_[...] मैं इन दिनों **FastAPI** का बहुत उपयोग कर रहा/रही हूँ। [...] वास्तव में मैं अपनी टीम की **Microsoft में ML सेवाओं** के लिए इसे उपयोग करने की योजना बना रहा/रही हूँ। इनमें से कुछ को मुख्य **Windows** प्रोडक्ट और कुछ **Office** प्रोडक्ट्स में इंटीग्रेट किया जा रहा है._"
+
+
+
+---
+
+"_हमने **FastAPI** लाइब्रेरी अपनाई ताकि एक **REST** सर्वर स्पॉन किया जा सके जिसे **अनुमानों** को प्राप्त करने के लिए क्वेरी किया जा सके। [Ludwig के लिए]_"
+
+
पिएरो मोलिनो, यारोस्लाव डुडिन, और साई सुमंत मिर्याला - Uber(संदर्भ)
+
+---
+
+"_**Netflix** हमारे **संकट प्रबंधन** ऑर्केस्ट्रेशन फ़्रेमवर्क: **Dispatch** के ओपन-सोर्स रिलीज़ की घोषणा करते हुए प्रसन्न है! [**FastAPI** के साथ बनाया गया]_"
+
+
+
+---
+
+"_यदि कोई प्रोडक्शन Python API बनाना चाहता है, तो मैं **FastAPI** की अत्यधिक अनुशंसा करूंगा/करूंगी। यह **सुंदरता से डिज़ाइन** किया गया है, **उपयोग में सरल** है और **बेहद स्केलेबल** है, यह हमारी API-फ़र्स्ट डेवलपमेंट रणनीति का **मुख्य घटक** बन गया है और हमारे Virtual TAC Engineer जैसे कई ऑटोमेशन्स और सेवाओं को चला रहा है._"
+
+
+
+## FastAPI कॉन्फ़ { #fastapi-conf }
+
+[**FastAPI Conf '26**](https://fastapiconf.com) **28 अक्टूबर, 2026** को **एम्स्टर्डम, नीदरलैंड्स** में हो रही है। सब कुछ FastAPI के बारे में, सीधे स्रोत से। 🎤
+
+
+
+## FastAPI मिनी डॉक्यूमेंट्री { #fastapi-mini-documentary }
+
+साल 2025 के अंत में एक [FastAPI मिनी डॉक्यूमेंट्री](https://www.youtube.com/watch?v=mpR8ngthqiE) रिलीज़ हुई, आप इसे ऑनलाइन देख सकते हैं:
+
+
+
+## **Typer**, CLIs का FastAPI { #typer-the-fastapi-of-clis }
+
+
+
+यदि आप वेब API के बजाय टर्मिनल में उपयोग होने वाला CLI ऐप बना रहे हैं, तो [**Typer**](https://typer.tiangolo.com/) देखें।
+
+**Typer**, FastAPI का छोटा भाई/बहन है। और इसका उद्देश्य **CLIs का FastAPI** होना है। ⌨️ 🚀
+
+## आवश्यकताएँ { #requirements }
+
+FastAPI दिग्गजों के कंधों पर खड़ा है:
+
+* वेब हिस्सों के लिए [Starlette](https://www.starlette.dev/)।
+* डेटा हिस्सों के लिए [Pydantic](https://docs.pydantic.dev/)।
+
+## स्थापना { #installation }
+
+एक [वर्चुअल एन्वायरनमेंट](https://fastapi.tiangolo.com/hi/virtual-environments/) बनाएँ और सक्रिय करें, और फिर FastAPI स्थापित करें:
+
+
+
+**नोट**: सुनिश्चित करें कि आप सभी टर्मिनलों में काम करने के लिए `"fastapi[standard]"` को उद्धरण-चिह्नों में रखें।
+
+## उदाहरण { #example }
+
+### इसे बनाएँ { #create-it }
+
+`main.py` फ़ाइल बनाएँ और इसमें लिखें:
+
+```Python
+from fastapi import FastAPI
+
+app = FastAPI()
+
+
+@app.get("/")
+def read_root():
+ return {"Hello": "World"}
+
+
+@app.get("/items/{item_id}")
+def read_item(item_id: int, q: str | None = None):
+ return {"item_id": item_id, "q": q}
+```
+
+
+या async def का उपयोग करें...
+
+यदि आपका कोड `async` / `await` का उपयोग करता है, तो `async def` का उपयोग करें:
+
+```Python hl_lines="7 12"
+from fastapi import FastAPI
+
+app = FastAPI()
+
+
+@app.get("/")
+async def read_root():
+ return {"Hello": "World"}
+
+
+@app.get("/items/{item_id}")
+async def read_item(item_id: int, q: str | None = None):
+ return {"item_id": item_id, "q": q}
+```
+
+**नोट**:
+
+यदि आप नहीं जानते, तो _"जल्दी में?"_ सेक्शन देखें: दस्तावेज़ में [`async` और `await`](https://fastapi.tiangolo.com/hi/async/#in-a-hurry) के बारे में।
+
+
+
+### इसे चलाएँ { #run-it }
+
+सर्वर को इस कमांड से चलाएँ:
+
+
+
+```console
+$ fastapi dev
+
+ ╭────────── FastAPI CLI - Development mode ───────────╮
+ │ │
+ │ Serving at: http://127.0.0.1:8000 │
+ │ │
+ │ API docs: http://127.0.0.1:8000/docs │
+ │ │
+ │ Running in development mode, for production use: │
+ │ │
+ │ fastapi run │
+ │ │
+ ╰─────────────────────────────────────────────────────╯
+
+INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+INFO: Started reloader process [2248755] using WatchFiles
+INFO: Started server process [2248757]
+INFO: Waiting for application startup.
+INFO: Application startup complete.
+```
+
+
+
+
+fastapi dev कमांड के बारे में...
+
+`fastapi dev` कमांड आपका `main.py` फ़ाइल स्वतः पढ़ता है, उसमें **FastAPI** ऐप का पता लगाता है, और [Uvicorn](https://www.uvicorn.dev) का उपयोग करके सर्वर शुरू करता है।
+
+डिफ़ॉल्ट रूप से, `fastapi dev` लोकल डेवलपमेंट के लिए auto-reload सक्षम करके शुरू होगा।
+
+आप इसके बारे में और पढ़ सकते हैं: [FastAPI CLI दस्तावेज़](https://fastapi.tiangolo.com/hi/fastapi-cli/) में।
+
+
+
+### इसे जाँचें { #check-it }
+
+अपने ब्राउज़र में [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery) खोलें।
+
+आपको JSON प्रतिक्रिया इस प्रकार दिखेगी:
+
+```JSON
+{"item_id": 5, "q": "somequery"}
+```
+
+आपने पहले ही एक API बना ली है जो:
+
+* _paths_ `/` और `/items/{item_id}` पर HTTP अनुरोध स्वीकार करती है।
+* दोनों _paths_ `GET` operations लेती हैं (जिन्हें HTTP _methods_ भी कहा जाता है)।
+* _path_ `/items/{item_id}` में एक _path parameter_ `item_id` है जो `int` होना चाहिए।
+* _path_ `/items/{item_id}` में एक वैकल्पिक `str` _query parameter_ `q` है।
+
+### इंटरैक्टिव API दस्तावेज़ { #interactive-api-docs }
+
+अब [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) पर जाएँ।
+
+आपको स्वचालित इंटरैक्टिव API दस्तावेज़ीकरण दिखेगा (जो [Swagger UI](https://github.com/swagger-api/swagger-ui) द्वारा प्रदान किया जाता है):
+
+
+
+### वैकल्पिक API दस्तावेज़ { #alternative-api-docs }
+
+और अब, [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) पर जाएँ।
+
+आपको वैकल्पिक स्वचालित दस्तावेज़ीकरण दिखेगा (जो [ReDoc](https://github.com/Rebilly/ReDoc) द्वारा प्रदान किया जाता है):
+
+
+
+## उदाहरण उन्नयन { #example-upgrade }
+
+अब `PUT` अनुरोध से body प्राप्त करने के लिए `main.py` फ़ाइल संशोधित करें।
+
+Pydantic की बदौलत, body को मानक Python प्रकारों से घोषित करें।
+
+```Python hl_lines="2 7-10 23-25"
+from fastapi import FastAPI
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class Item(BaseModel):
+ name: str
+ price: float
+ is_offer: bool | None = None
+
+
+@app.get("/")
+def read_root():
+ return {"Hello": "World"}
+
+
+@app.get("/items/{item_id}")
+def read_item(item_id: int, q: str | None = None):
+ return {"item_id": item_id, "q": q}
+
+
+@app.put("/items/{item_id}")
+def update_item(item_id: int, item: Item):
+ return {"item_name": item.name, "item_id": item_id}
+```
+
+`fastapi dev` सर्वर स्वतः रीलोड होना चाहिए।
+
+### इंटरैक्टिव API दस्तावेज़ उन्नयन { #interactive-api-docs-upgrade }
+
+अब [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) पर जाएँ।
+
+* इंटरैक्टिव API दस्तावेज़ स्वतः अपडेट हो जाएगा, नए body सहित:
+
+
+
+* "Try it out" बटन पर क्लिक करें, यह आपको parameters भरने और सीधे API के साथ इंटरेक्ट करने की अनुमति देता है:
+
+
+
+* फिर "Execute" बटन पर क्लिक करें, यूज़र इंटरफ़ेस आपकी API से संवाद करेगा, parameters भेजेगा, परिणाम प्राप्त करेगा और उन्हें स्क्रीन पर दिखाएगा:
+
+
+
+### वैकल्पिक API दस्तावेज़ उन्नयन { #alternative-api-docs-upgrade }
+
+और अब, [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) पर जाएँ।
+
+* वैकल्पिक दस्तावेज़ भी नए query parameter और body को दर्शाएगा:
+
+
+
+### पुनरावलोकन { #recap }
+
+संक्षेप में, आप parameters, body, आदि के प्रकार फ़ंक्शन parameters के रूप में **एक बार** घोषित करते हैं।
+
+आप यह मानक आधुनिक Python प्रकारों से करते हैं।
+
+आपको किसी नई सिंटैक्स, किसी विशेष लाइब्रेरी के methods या classes, आदि सीखने की आवश्यकता नहीं है।
+
+बस मानक **Python**।
+
+उदाहरण के लिए, एक `int` के लिए:
+
+```Python
+item_id: int
+```
+
+या एक अधिक जटिल `Item` मॉडल के लिए:
+
+```Python
+item: Item
+```
+
+...और केवल उसी एक घोषणा के साथ आपको मिलता है:
+
+* एडिटर सपोर्ट, जिसमें शामिल है:
+ * कम्प्लीशन।
+ * प्रकार जाँच।
+* डेटा का वैधीकरण:
+ * जब डेटा अमान्य हो तो स्वतः और स्पष्ट त्रुटियाँ।
+ * गहराई से nested JSON objects के लिए भी वैधीकरण।
+* इनपुट डेटा का रूपांतरण: नेटवर्क से Python डेटा और प्रकारों में। इनमें से पढ़ना:
+ * JSON।
+ * Path parameters।
+ * Query parameters।
+ * Cookies।
+ * Headers।
+ * Forms।
+ * Files।
+* आउटपुट डेटा का रूपांतरण: Python डेटा और प्रकारों से नेटवर्क डेटा (JSON के रूप में) में:
+ * Python प्रकारों का रूपांतरण (`str`, `int`, `float`, `bool`, `list`, आदि)।
+ * `datetime` ऑब्जेक्ट्स।
+ * `UUID` ऑब्जेक्ट्स।
+ * डेटाबेस मॉडल्स।
+ * ...और बहुत कुछ।
+* स्वचालित इंटरैक्टिव API दस्तावेज़ीकरण, जिनमें 2 वैकल्पिक यूज़र इंटरफ़ेस शामिल हैं:
+ * Swagger UI।
+ * ReDoc।
+
+---
+
+पिछले कोड उदाहरण पर लौटते हुए, **FastAPI** यह करेगा:
+
+* `GET` और `PUT` अनुरोधों के लिए path में `item_id` है, यह सत्यापित करेगा।
+* `GET` और `PUT` अनुरोधों के लिए `item_id` का प्रकार `int` है, यह सत्यापित करेगा।
+ * यदि नहीं है, तो क्लाइंट को एक उपयोगी, स्पष्ट त्रुटि दिखाई देगी।
+* `GET` अनुरोधों के लिए यह जाँच करेगा कि `q` नाम का एक वैकल्पिक query parameter है (जैसे `http://127.0.0.1:8000/items/foo?q=somequery`)।
+ * क्योंकि `q` parameter `= None` के साथ घोषित है, यह वैकल्पिक है।
+ * `None` के बिना यह आवश्यक होता (जैसे `PUT` के मामले में body आवश्यक है)।
+* `/items/{item_id}` पर `PUT` अनुरोधों के लिए, body को JSON के रूप में पढ़ेगा:
+ * यह जाँचेगा कि एक आवश्यक attribute `name` है जो `str` होना चाहिए।
+ * यह जाँचेगा कि एक आवश्यक attribute `price` है जो `float` होना चाहिए।
+ * यह जाँचेगा कि एक वैकल्पिक attribute `is_offer` है, जो यदि मौजूद है तो `bool` होना चाहिए।
+ * यह सब गहराई से nested JSON objects के लिए भी काम करेगा।
+* JSON से और JSON में स्वतः रूपांतरण।
+* हर चीज़ को OpenAPI के साथ दस्तावेज़ित करेगा, जिसे निम्न द्वारा उपयोग किया जा सकता है:
+ * इंटरैक्टिव दस्तावेज़ीकरण प्रणालियाँ।
+ * कई भाषाओं के लिए स्वचालित क्लाइंट कोड जनरेशन प्रणालियाँ।
+* सीधे 2 इंटरैक्टिव दस्तावेज़ीकरण वेब इंटरफेसेज़ प्रदान करेगा।
+
+---
+
+हमने केवल सतह को छुआ है, लेकिन आपको पहले ही समझ आ गया होगा कि यह सब कैसे काम करता है।
+
+इस पंक्ति को बदलकर देखें:
+
+```Python
+ return {"item_name": item.name, "item_id": item_id}
+```
+
+...यहाँ से:
+
+```Python
+ ... "item_name": item.name ...
+```
+
+...यहाँ तक:
+
+```Python
+ ... "item_price": item.price ...
+```
+
+...और देखें कि आपका एडिटर attributes को कैसे auto-complete करेगा और उनके प्रकार जानेगा:
+
+
+
+अधिक फ़ीचर्स सहित एक अधिक सम्पूर्ण उदाहरण के लिए, ट्यूटोरियल - यूज़र गाइड देखें।
+
+**स्पॉइलर अलर्ट**: ट्यूटोरियल - यूज़र गाइड में शामिल है:
+
+* विभिन्न स्थानों से **parameters** की घोषणा: **headers**, **cookies**, **form fields** और **files**।
+* `maximum_length` या `regex` जैसी **validation constraints** कैसे सेट करें।
+* एक बहुत शक्तिशाली और उपयोग में आसान **डिपेंडेंसी इंजेक्शन** सिस्टम।
+* सुरक्षा और प्रमाणीकरण, जिसमें **OAuth2** के साथ **JWT tokens** और **HTTP Basic** auth का समर्थन शामिल है।
+* **गहराई से nested JSON मॉडल्स** घोषित करने की अधिक उन्नत (पर समान रूप से आसान) तकनीकें (Pydantic की बदौलत)।
+* [Strawberry](https://strawberry.rocks) और अन्य लाइब्रेरीज़ के साथ **GraphQL** एकीकरण।
+* कई अतिरिक्त फ़ीचर्स (Starlette की बदौलत) जैसे:
+ * **WebSockets**
+ * HTTPX और `pytest` पर आधारित अत्यंत आसान टेस्ट्स
+ * **CORS**
+ * **Cookie Sessions**
+ * ...आदि।
+
+### अपनी ऐप परिनियोजित करें (वैकल्पिक) { #deploy-your-app-optional }
+
+आप वैकल्पिक रूप से अपनी FastAPI ऐप को [FastAPI Cloud](https://fastapicloud.com) पर एक ही कमांड से डिप्लॉय कर सकते हैं। 🚀
+
+
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+✅ Deployment successful!
+
+🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+
+
+CLI आपकी FastAPI एप्लिकेशन को स्वतः पहचान लेगा और उसे क्लाउड पर डिप्लॉय करेगा। यदि आप logged in नहीं हैं, तो प्रमाणीकरण प्रक्रिया पूरी करने के लिए आपका ब्राउज़र खुलेगा।
+
+बस इतना ही! अब आप उस URL पर अपनी ऐप एक्सेस कर सकते हैं। ✨
+
+#### FastAPI Cloud के बारे में { #about-fastapi-cloud }
+
+**[FastAPI Cloud](https://fastapicloud.com)** को **FastAPI** के ही लेखक और टीम ने बनाया है।
+
+यह न्यूनतम प्रयास में किसी API को **बनाने**, **डिप्लॉय** करने और **एक्सेस** करने की प्रक्रिया को सरल बनाता है।
+
+यह FastAPI के साथ ऐप्स बनाने के उसी **डेवलपर अनुभव** को उन्हें क्लाउड में **डिप्लॉय** करने तक लाता है। 🎉
+
+FastAPI Cloud, *FastAPI and friends* ओपन सोर्स प्रोजेक्ट्स के लिए मुख्य प्रायोजक और फंडिंग प्रदाता है। ✨
+
+#### अन्य क्लाउड प्रदाताओं पर डिप्लॉय करें { #deploy-to-other-cloud-providers }
+
+FastAPI ओपन सोर्स है और मानकों पर आधारित है। आप FastAPI ऐप्स को किसी भी क्लाउड प्रदाता पर डिप्लॉय कर सकते हैं।
+
+अपने क्लाउड प्रदाता के गाइड्स का पालन करें और उनके साथ FastAPI ऐप्स डिप्लॉय करें। 🤓
+
+## प्रदर्शन { #performance }
+
+स्वतंत्र TechEmpower बेंचमार्क दिखाते हैं कि Uvicorn के तहत चलने वाले **FastAPI** एप्लीकेशन्स [उपलब्ध सबसे तेज़ Python फ़्रेमवर्क्स में से एक](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7) हैं, केवल Starlette और Uvicorn (जो FastAPI द्वारा आंतरिक रूप से उपयोग किए जाते हैं) से नीचे। (*)
+
+इसके बारे में अधिक समझने के लिए, [बेंचमार्क्स](https://fastapi.tiangolo.com/hi/benchmarks/) सेक्शन देखें।
+
+## निर्भरताएँ { #dependencies }
+
+FastAPI, Pydantic और Starlette पर निर्भर करता है।
+
+### `standard` निर्भरताएँ { #standard-dependencies }
+
+जब आप `pip install "fastapi[standard]"` के साथ FastAPI स्थापित करते हैं, तो यह `standard` समूह की वैकल्पिक निर्भरताओं के साथ आता है:
+
+Pydantic द्वारा उपयोग किया गया:
+
+* [`email-validator`](https://github.com/JoshData/python-email-validator) - ईमेल वैधीकरण के लिए।
+
+Starlette द्वारा उपयोग किया गया:
+
+* [`httpx`](https://www.python-httpx.org) - यदि आप `TestClient` का उपयोग करना चाहते हैं तो आवश्यक।
+* [`jinja2`](https://jinja.palletsprojects.com) - यदि आप डिफ़ॉल्ट टेम्पलेट कॉन्फ़िगरेशन का उपयोग करना चाहते हैं तो आवश्यक।
+* [`python-multipart`](https://github.com/Kludex/python-multipart) - यदि आप फॉर्म "पार्सिंग" का समर्थन करना चाहते हैं, `request.form()` के साथ, तो आवश्यक।
+
+FastAPI द्वारा उपयोग किया गया:
+
+* [`uvicorn`](https://www.uvicorn.dev) - वह सर्वर जो आपकी एप्लिकेशन को लोड और सर्व करता है। इसमें `uvicorn[standard]` शामिल है, जिसमें उच्च-प्रदर्शन सर्विंग के लिए कुछ निर्भरताएँ (जैसे `uvloop`) शामिल हैं।
+* `fastapi-cli[standard]` - `fastapi` कमांड प्रदान करने के लिए।
+ * इसमें `fastapi-cloud-cli` शामिल है, जो आपको अपनी FastAPI एप्लिकेशन को [FastAPI Cloud](https://fastapicloud.com) पर डिप्लॉय करने की अनुमति देता है।
+
+### `standard` निर्भरताओं के बिना { #without-standard-dependencies }
+
+यदि आप `standard` वैकल्पिक निर्भरताओं को शामिल नहीं करना चाहते, तो आप `pip install fastapi` के साथ स्थापित कर सकते हैं, `pip install "fastapi[standard]"` के बजाय।
+
+### `fastapi-cloud-cli` के बिना { #without-fastapi-cloud-cli }
+
+यदि आप standard निर्भरताओं के साथ लेकिन `fastapi-cloud-cli` के बिना FastAPI स्थापित करना चाहते हैं, तो `pip install "fastapi[standard-no-fastapi-cloud-cli]"` के साथ स्थापित कर सकते हैं।
+
+### अतिरिक्त वैकल्पिक निर्भरताएँ { #additional-optional-dependencies }
+
+कुछ अतिरिक्त निर्भरताएँ हैं जिन्हें आप स्थापित करना चाहेंगे।
+
+अतिरिक्त वैकल्पिक Pydantic निर्भरताएँ:
+
+* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - सेटिंग्स प्रबंधन के लिए।
+* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - Pydantic के साथ उपयोग करने के लिए अतिरिक्त प्रकारों हेतु।
+
+अतिरिक्त वैकल्पिक FastAPI निर्भरताएँ:
+
+* [`orjson`](https://github.com/ijl/orjson) - यदि आप `ORJSONResponse` उपयोग करना चाहते हैं तो आवश्यक।
+* [`ujson`](https://github.com/esnme/ultrajson) - यदि आप `UJSONResponse` उपयोग करना चाहते हैं तो आवश्यक।
+
+## लाइसेंस { #license }
+
+यह प्रोजेक्ट MIT लाइसेंस की शर्तों के अंतर्गत लाइसेंस प्राप्त है।
diff --git a/docs/hi/docs/project-generation.md b/docs/hi/docs/project-generation.md
new file mode 100644
index 000000000..747e4da53
--- /dev/null
+++ b/docs/hi/docs/project-generation.md
@@ -0,0 +1,28 @@
+# Full Stack FastAPI Template { #full-stack-fastapi-template }
+
+Templates आम तौर पर एक विशिष्ट setup के साथ आते हैं, लेकिन उन्हें flexible और customizable होने के लिए डिज़ाइन किया जाता है। इससे आप उन्हें अपने project की आवश्यकताओं के अनुसार modify और adapt कर सकते हैं, जिससे वे एक बेहतरीन starting point बन जाते हैं। 🏁
+
+आप शुरू करने के लिए इस template का उपयोग कर सकते हैं, क्योंकि इसमें आपके लिए बहुत सा initial setup, security, database और कुछ API endpoints पहले से तैयार हैं।
+
+GitHub Repository: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template)
+
+## Full Stack FastAPI Template - Technology Stack और Features { #full-stack-fastapi-template-technology-stack-and-features }
+
+- ⚡ Python backend API के लिए [**FastAPI**](https://fastapi.tiangolo.com/hi)।
+ - 🧰 Python SQL database interactions (ORM) के लिए [SQLModel](https://sqlmodel.tiangolo.com)।
+ - 🔍 data validation और settings management के लिए [Pydantic](https://docs.pydantic.dev), जिसका उपयोग FastAPI करता है।
+ - 💾 SQL database के रूप में [PostgreSQL](https://www.postgresql.org)।
+- 🚀 frontend के लिए [React](https://react.dev)।
+ - 💃 TypeScript, hooks, Vite, और modern frontend stack के अन्य parts का उपयोग।
+ - 🎨 frontend components के लिए [Tailwind CSS](https://tailwindcss.com) और [shadcn/ui](https://ui.shadcn.com)।
+ - 🤖 एक automatically generated frontend client।
+ - 🧪 End-to-End testing के लिए [Playwright](https://playwright.dev)।
+ - 🦇 Dark mode support।
+- 🐋 development और production के लिए [Docker Compose](https://www.docker.com)।
+- 🔒 default रूप से secure password hashing।
+- 🔑 JWT (JSON Web Token) authentication।
+- 📫 Email आधारित password recovery।
+- ✅ [Pytest](https://pytest.org) के साथ tests।
+- 📞 reverse proxy / load balancer के रूप में [Traefik](https://traefik.io)।
+- 🚢 Docker Compose का उपयोग करके deployment instructions, जिसमें automatic HTTPS certificates handle करने के लिए frontend Traefik proxy setup करना शामिल है।
+- 🏭 GitHub Actions पर आधारित CI (continuous integration) और CD (continuous deployment)।
diff --git a/docs/hi/docs/python-types.md b/docs/hi/docs/python-types.md
new file mode 100644
index 000000000..86522e18e
--- /dev/null
+++ b/docs/hi/docs/python-types.md
@@ -0,0 +1,348 @@
+# Python Types परिचय { #python-types-intro }
+
+Python में वैकल्पिक "type hints" (जिन्हें "type annotations" भी कहा जाता है) का समर्थन है।
+
+ये **"type hints"** या annotations एक विशेष syntax हैं, जो किसी variable का type घोषित करने की अनुमति देते हैं।
+
+अपने variables के लिए types घोषित करके, editors और tools आपको बेहतर support दे सकते हैं।
+
+यह Python type hints के बारे में बस एक **त्वरित tutorial / refresher** है। इसमें केवल उतना ही शामिल है जितना उन्हें **FastAPI** के साथ उपयोग करने के लिए न्यूनतम रूप से आवश्यक है... जो वास्तव में बहुत कम है।
+
+**FastAPI** पूरी तरह से इन्हीं type hints पर आधारित है, ये इसे कई फायदे और लाभ देते हैं।
+
+लेकिन अगर आप कभी **FastAPI** का उपयोग नहीं भी करते, तब भी इनके बारे में थोड़ा सीखने से आपको लाभ होगा।
+
+/// note | नोट
+
+अगर आप Python expert हैं, और type hints के बारे में पहले से सब कुछ जानते हैं, तो अगले chapter पर जाएँ।
+
+///
+
+## प्रेरणा { #motivation }
+
+आइए एक सरल उदाहरण से शुरू करें:
+
+{* ../../docs_src/python_types/tutorial001_py310.py *}
+
+इस program को call करने पर output आता है:
+
+```
+John Doe
+```
+
+Function निम्नलिखित करता है:
+
+* एक `first_name` और `last_name` लेता है।
+* प्रत्येक के पहले अक्षर को `title()` के साथ upper case में बदलता है।
+* उन्हें बीच में एक space के साथ Concatenate करता है।
+
+{* ../../docs_src/python_types/tutorial001_py310.py hl[2] *}
+
+### इसे edit करें { #edit-it }
+
+यह एक बहुत सरल program है।
+
+लेकिन अब कल्पना करें कि आप इसे scratch से लिख रहे थे।
+
+किसी point पर आप function define करना शुरू करते हैं, और आपके parameters तैयार हैं...
+
+लेकिन फिर आपको "वह method जो पहले अक्षर को upper case में बदलता है" call करना है।
+
+क्या वह `upper` था? क्या वह `uppercase` था? `first_uppercase`? `capitalize`?
+
+फिर, आप programmer के पुराने दोस्त, editor autocompletion के साथ कोशिश करते हैं।
+
+आप function का पहला parameter, `first_name`, फिर एक dot (`.`) type करते हैं और फिर completion trigger करने के लिए `Ctrl+Space` दबाते हैं।
+
+लेकिन, दुख की बात है, आपको कुछ भी उपयोगी नहीं मिलता:
+
+
+
+### Types जोड़ें { #add-types }
+
+आइए पिछले version की एक single line बदलते हैं।
+
+हम ठीक इस fragment को, function के parameters को, इससे बदलेंगे:
+
+```Python
+ first_name, last_name
+```
+
+इसमें:
+
+```Python
+ first_name: str, last_name: str
+```
+
+बस इतना ही।
+
+यही "type hints" हैं:
+
+{* ../../docs_src/python_types/tutorial002_py310.py hl[1] *}
+
+यह default values declare करने जैसा नहीं है, जैसा कि इसमें होता:
+
+```Python
+ first_name="john", last_name="doe"
+```
+
+यह एक अलग चीज़ है।
+
+हम colons (`:`) का उपयोग कर रहे हैं, equals (`=`) का नहीं।
+
+और type hints जोड़ने से सामान्यतः यह नहीं बदलता कि बिना उनके जो होता, वह कैसे होता।
+
+लेकिन अब, कल्पना करें कि आप फिर से उस function को बनाने के बीच में हैं, लेकिन type hints के साथ।
+
+उसी point पर, आप `Ctrl+Space` के साथ autocomplete trigger करने की कोशिश करते हैं और आप देखते हैं:
+
+
+
+इसके साथ, आप options देखते हुए scroll कर सकते हैं, जब तक आपको वह न मिल जाए जो "पहचाना हुआ लगे":
+
+
+
+## और प्रेरणा { #more-motivation }
+
+इस function को देखें, इसमें पहले से type hints हैं:
+
+{* ../../docs_src/python_types/tutorial003_py310.py hl[1] *}
+
+क्योंकि editor variables के types जानता है, आपको केवल completion ही नहीं मिलता, आपको error checks भी मिलते हैं:
+
+
+
+अब आप जानते हैं कि आपको इसे ठीक करना है, `age` को `str(age)` के साथ string में convert करना है:
+
+{* ../../docs_src/python_types/tutorial004_py310.py hl[2] *}
+
+## Types declare करना { #declaring-types }
+
+आपने अभी type hints declare करने की मुख्य जगह देखी। Function parameters के रूप में।
+
+यही वह मुख्य जगह भी है जहाँ आप उन्हें **FastAPI** के साथ उपयोग करेंगे।
+
+### Simple types { #simple-types }
+
+आप सभी standard Python types declare कर सकते हैं, केवल `str` ही नहीं।
+
+आप उदाहरण के लिए उपयोग कर सकते हैं:
+
+* `int`
+* `float`
+* `bool`
+* `bytes`
+
+{* ../../docs_src/python_types/tutorial005_py310.py hl[1] *}
+
+### `typing` module { #typing-module }
+
+कुछ अतिरिक्त use cases के लिए, आपको standard library के `typing` module से कुछ चीज़ें import करने की आवश्यकता हो सकती है, उदाहरण के लिए जब आप declare करना चाहते हैं कि किसी चीज़ का "कोई भी type" है, तो आप `typing` से `Any` का उपयोग कर सकते हैं:
+
+```python
+from typing import Any
+
+
+def some_function(data: Any):
+ print(data)
+```
+
+### Generic types { #generic-types }
+
+कुछ types square brackets में "type parameters" ले सकते हैं, ताकि उनके internal types define किए जा सकें, उदाहरण के लिए "strings की list" को `list[str]` declare किया जाएगा।
+
+जो types type parameters ले सकते हैं उन्हें **Generic types** या **Generics** कहा जाता है।
+
+आप उन्हीं builtin types को generics के रूप में उपयोग कर सकते हैं (square brackets और अंदर types के साथ):
+
+* `list`
+* `tuple`
+* `set`
+* `dict`
+
+#### List { #list }
+
+उदाहरण के लिए, आइए एक variable को `str` की `list` के रूप में define करते हैं।
+
+Variable को उसी colon (`:`) syntax के साथ declare करें।
+
+Type के रूप में, `list` रखें।
+
+क्योंकि list एक ऐसा type है जिसमें कुछ internal types होते हैं, आप उन्हें square brackets में रखते हैं:
+
+{* ../../docs_src/python_types/tutorial006_py310.py hl[1] *}
+
+/// note | नोट
+
+Square brackets में मौजूद उन internal types को "type parameters" कहा जाता है।
+
+इस case में, `str` वह type parameter है जो `list` को pass किया गया है।
+
+///
+
+इसका मतलब है: "variable `items` एक `list` है, और इस list का प्रत्येक item एक `str` है"।
+
+ऐसा करने से, आपका editor list से items process करते समय भी support दे सकता है:
+
+
+
+Types के बिना, इसे हासिल करना लगभग असंभव है।
+
+ध्यान दें कि variable `item`, list `items` के elements में से एक है।
+
+और फिर भी, editor जानता है कि यह एक `str` है, और उसके लिए support देता है।
+
+#### Tuple और Set { #tuple-and-set }
+
+आप `tuple`s और `set`s declare करने के लिए भी ऐसा ही करेंगे:
+
+{* ../../docs_src/python_types/tutorial007_py310.py hl[1] *}
+
+इसका मतलब है:
+
+* Variable `items_t` 3 items वाला एक `tuple` है, एक `int`, दूसरा `int`, और एक `str`।
+* Variable `items_s` एक `set` है, और इसके प्रत्येक item का type `bytes` है।
+
+#### Dict { #dict }
+
+`dict` define करने के लिए, आप 2 type parameters pass करते हैं, commas से separated।
+
+पहला type parameter `dict` की keys के लिए होता है।
+
+दूसरा type parameter `dict` की values के लिए होता है:
+
+{* ../../docs_src/python_types/tutorial008_py310.py hl[1] *}
+
+इसका मतलब है:
+
+* Variable `prices` एक `dict` है:
+ * इस `dict` की keys `str` type की हैं (मान लें, प्रत्येक item का नाम)।
+ * इस `dict` की values `float` type की हैं (मान लें, प्रत्येक item की price)।
+
+#### Union { #union }
+
+आप declare कर सकते हैं कि कोई variable **कई types** में से कोई भी हो सकता है, उदाहरण के लिए, एक `int` या एक `str`।
+
+इसे define करने के लिए आप दोनों types को separate करने के लिए vertical bar (`|`) का उपयोग करते हैं।
+
+इसे "union" कहा जाता है, क्योंकि variable उन दो type sets के union में कुछ भी हो सकता है।
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial008b_py310.py!}
+```
+
+इसका मतलब है कि `item` एक `int` या एक `str` हो सकता है।
+
+#### संभवतः `None` { #possibly-none }
+
+आप declare कर सकते हैं कि किसी value का type, जैसे `str`, हो सकता है, लेकिन वह `None` भी हो सकती है।
+
+//// tab | Python 3.10+
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial009_py310.py!}
+```
+
+////
+
+सिर्फ `str` के बजाय `str | None` का उपयोग करने से editor आपको उन errors को detect करने में मदद करेगा जहाँ आप यह मान रहे हो सकते हैं कि कोई value हमेशा `str` है, जबकि वास्तव में वह `None` भी हो सकती है।
+
+### Classes को types के रूप में { #classes-as-types }
+
+आप किसी class को भी variable के type के रूप में declare कर सकते हैं।
+
+मान लें आपके पास एक class `Person` है, जिसमें एक name है:
+
+{* ../../docs_src/python_types/tutorial010_py310.py hl[1:3] *}
+
+फिर आप किसी variable को `Person` type का declare कर सकते हैं:
+
+{* ../../docs_src/python_types/tutorial010_py310.py hl[6] *}
+
+और फिर, फिर से, आपको पूरा editor support मिलता है:
+
+
+
+ध्यान दें कि इसका मतलब है "`one_person`, class `Person` का एक **instance** है"।
+
+इसका मतलब यह नहीं है कि "`one_person`, `Person` नाम की **class** है"।
+
+## Pydantic models { #pydantic-models }
+
+[Pydantic](https://docs.pydantic.dev/) data validation करने के लिए एक Python library है।
+
+आप data की "shape" को attributes वाली classes के रूप में declare करते हैं।
+
+और प्रत्येक attribute का एक type होता है।
+
+फिर आप कुछ values के साथ उस class का एक instance create करते हैं और यह values को validate करेगा, उन्हें appropriate type में convert करेगा (अगर ऐसा case है) और आपको पूरे data वाला एक object देगा।
+
+और उस resulting object के साथ आपको पूरा editor support मिलता है।
+
+Official Pydantic docs से एक उदाहरण:
+
+{* ../../docs_src/python_types/tutorial011_py310.py *}
+
+/// note | नोट
+
+अधिक जानने के लिए [Pydantic, इसके docs देखें](https://docs.pydantic.dev/)।
+
+///
+
+**FastAPI** पूरी तरह से Pydantic पर आधारित है।
+
+आप यह सब practice में [Tutorial - User Guide](tutorial/index.md) में बहुत अधिक देखेंगे।
+
+## Metadata Annotations के साथ Type Hints { #type-hints-with-metadata-annotations }
+
+Python में एक feature भी है जो `Annotated` का उपयोग करके इन type hints में **अतिरिक्त metadata** डालने की अनुमति देता है।
+
+आप `typing` से `Annotated` import कर सकते हैं।
+
+{* ../../docs_src/python_types/tutorial013_py310.py hl[1,4] *}
+
+Python खुद इस `Annotated` के साथ कुछ नहीं करता। और editors और अन्य tools के लिए, type अभी भी `str` है।
+
+लेकिन आप `Annotated` में इस जगह का उपयोग **FastAPI** को अतिरिक्त metadata देने के लिए कर सकते हैं कि आप अपनी application को कैसे behave कराना चाहते हैं।
+
+याद रखने वाली महत्वपूर्ण बात यह है कि `Annotated` को pass किया गया **पहला *type parameter*** ही **actual type** होता है। बाकी सब, अन्य tools के लिए केवल metadata है।
+
+अभी के लिए, आपको बस यह जानना है कि `Annotated` मौजूद है, और यह standard Python है। 😎
+
+बाद में आप देखेंगे कि यह कितना **powerful** हो सकता है।
+
+/// tip | सुझाव
+
+यह तथ्य कि यह **standard Python** है, इसका मतलब है कि आपको अपने editor में, अपने code को analyze और refactor करने वाले tools के साथ, आदि, अभी भी **सबसे अच्छा possible developer experience** मिलेगा। ✨
+
+और यह भी कि आपका code कई अन्य Python tools और libraries के साथ बहुत compatible होगा। 🚀
+
+///
+
+## **FastAPI** में Type hints { #type-hints-in-fastapi }
+
+**FastAPI** इन type hints का लाभ उठाकर कई चीज़ें करता है।
+
+**FastAPI** के साथ आप type hints के साथ parameters declare करते हैं और आपको मिलता है:
+
+* **Editor support**।
+* **Type checks**।
+
+...और **FastAPI** उन्हीं declarations का उपयोग करता है:
+
+* **Requirements define** करने के लिए: request path parameters, query parameters, headers, bodies, dependencies, आदि से।
+* **Data convert** करने के लिए: request से required type में।
+* **Data validate** करने के लिए: प्रत्येक request से आने वाले data को:
+ * Data invalid होने पर client को लौटाए जाने वाले **automatic errors** generate करना।
+* OpenAPI का उपयोग करके API को **document** करने के लिए:
+ * जिसका उपयोग फिर automatic interactive documentation user interfaces द्वारा किया जाता है।
+
+यह सब abstract लग सकता है। चिंता न करें। आप यह सब action में [Tutorial - User Guide](tutorial/index.md) में देखेंगे।
+
+महत्वपूर्ण बात यह है कि standard Python types का उपयोग करके, एक ही जगह पर (अधिक classes, decorators, आदि जोड़ने के बजाय), **FastAPI** आपके लिए बहुत सारा काम कर देगा।
+
+/// note | नोट
+
+अगर आप पहले ही पूरे tutorial से गुजर चुके हैं और types के बारे में और देखने के लिए वापस आए हैं, तो एक अच्छा resource [`mypy` की "cheat sheet"](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html) है।
+
+///
diff --git a/docs/hi/docs/translation-banner.md b/docs/hi/docs/translation-banner.md
new file mode 100644
index 000000000..af9fedda8
--- /dev/null
+++ b/docs/hi/docs/translation-banner.md
@@ -0,0 +1,11 @@
+/// details | 🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद
+
+यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝
+
+इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖
+
+आप [हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके](https://fastapi.tiangolo.com/hi/contributing/#translations) इस अनुवाद को बेहतर बना सकते हैं।
+
+[अंग्रेज़ी संस्करण](ENGLISH_VERSION_URL)
+
+///
diff --git a/docs/hi/docs/virtual-environments.md b/docs/hi/docs/virtual-environments.md
new file mode 100644
index 000000000..cacadd0df
--- /dev/null
+++ b/docs/hi/docs/virtual-environments.md
@@ -0,0 +1,864 @@
+# Virtual Environments { #virtual-environments }
+
+जब आप Python projects पर काम करते हैं, तो संभवतः आपको हर project के लिए install किए जाने वाले packages को अलग रखने के लिए एक **virtual environment** (या कोई समान तरीका) इस्तेमाल करना चाहिए।
+
+/// note | नोट
+
+अगर आप पहले से virtual environments के बारे में जानते हैं, उन्हें कैसे बनाना और इस्तेमाल करना है जानते हैं, तो आप इस section को छोड़ना चाह सकते हैं। 🤓
+
+///
+
+/// tip | सुझाव
+
+एक **virtual environment**, एक **environment variable** से अलग होता है।
+
+एक **environment variable** system में एक variable होता है जिसे programs इस्तेमाल कर सकते हैं।
+
+एक **virtual environment** एक directory होती है जिसमें कुछ files होती हैं।
+
+///
+
+/// note | नोट
+
+यह पेज आपको **virtual environments** का उपयोग करना और वे कैसे काम करते हैं, सिखाएगा।
+
+अगर आप अपने लिए **सब कुछ manage करने वाला tool** अपनाने के लिए तैयार हैं (जिसमें Python install करना भी शामिल है), तो [uv](https://github.com/astral-sh/uv) आज़माएँ।
+
+///
+
+## Project बनाएँ { #create-a-project }
+
+सबसे पहले, अपने project के लिए एक directory बनाएँ।
+
+मैं सामान्यतः अपनी home/user directory के अंदर `code` नाम की एक directory बनाता हूँ।
+
+और उसके अंदर हर project के लिए एक directory बनाता हूँ।
+
+
+
+```console
+// home directory में जाएँ
+$ cd
+// अपने सभी code projects के लिए एक directory बनाएँ
+$ mkdir code
+// उस code directory में जाएँ
+$ cd code
+// इस project के लिए एक directory बनाएँ
+$ mkdir awesome-project
+// उस project directory में जाएँ
+$ cd awesome-project
+```
+
+
+
+## Virtual Environment बनाएँ { #create-a-virtual-environment }
+
+जब आप किसी Python project पर **पहली बार** काम शुरू करते हैं, तो एक virtual environment **अपने project के अंदर** बनाएँ।
+
+/// tip | सुझाव
+
+आपको यह **हर project के लिए केवल एक बार** करना होता है, हर बार काम करते समय नहीं।
+
+///
+
+//// tab | `venv`
+
+Virtual environment बनाने के लिए, आप Python के साथ आने वाले `venv` module का उपयोग कर सकते हैं।
+
+
+
+```console
+$ python -m venv .venv
+```
+
+
+
+/// details | उस command का क्या अर्थ है
+
+* `python`: `python` नाम के program का उपयोग करें
+* `-m`: किसी module को script की तरह call करें, अगला हम उसे बताएँगे कि कौन-सा module
+* `venv`: `venv` नाम के module का उपयोग करें जो सामान्यतः Python के साथ install आता है
+* `.venv`: नई directory `.venv` में virtual environment बनाएँ
+
+///
+
+////
+
+//// tab | `uv`
+
+अगर आपके पास [`uv`](https://github.com/astral-sh/uv) install है, तो आप इसका उपयोग virtual environment बनाने के लिए कर सकते हैं।
+
+
+
+```console
+$ uv venv
+```
+
+
+
+/// tip | सुझाव
+
+Default रूप से, `uv` `.venv` नाम की directory में virtual environment बनाएगा।
+
+लेकिन आप directory नाम के साथ एक अतिरिक्त argument देकर इसे customize कर सकते हैं।
+
+///
+
+////
+
+वह command `.venv` नाम की directory में एक नया virtual environment बनाता है।
+
+/// details | `.venv` या कोई दूसरा नाम
+
+आप virtual environment को किसी दूसरी directory में बना सकते हैं, लेकिन इसे `.venv` कहने की एक convention है।
+
+///
+
+## Virtual Environment activate करें { #activate-the-virtual-environment }
+
+नए virtual environment को activate करें ताकि आप जो भी Python command चलाएँ या जो package install करें, वह इसका उपयोग करे।
+
+/// tip | सुझाव
+
+Project पर काम करने के लिए **हर बार** जब आप एक **नया terminal session** शुरू करें, तो यह करें।
+
+///
+
+//// tab | Linux, macOS
+
+
+
+////
+
+/// tip | सुझाव
+
+हर बार जब आप उस environment में कोई **नया package** install करें, तो environment को फिर से **activate** करें।
+
+यह सुनिश्चित करता है कि अगर आप उस package द्वारा install किया गया कोई **terminal (CLI) program** इस्तेमाल करते हैं, तो आप अपने virtual environment वाला ही उपयोग करें, कोई और नहीं जो global रूप से install हो सकता है, शायद आपकी ज़रूरत से अलग version के साथ।
+
+///
+
+## जाँचें कि Virtual Environment Active है { #check-the-virtual-environment-is-active }
+
+जाँचें कि virtual environment active है (पिछली command ने काम किया)।
+
+/// tip | सुझाव
+
+यह **वैकल्पिक** है, लेकिन यह **जाँचने** का एक अच्छा तरीका है कि सब कुछ अपेक्षा के अनुसार काम कर रहा है और आप वही virtual environment इस्तेमाल कर रहे हैं जिसका आपने इरादा किया था।
+
+///
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+अगर यह `.venv/bin/python` पर `python` binary दिखाता है, आपके project के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+अगर यह `.venv\Scripts\python` पर `python` binary दिखाता है, आपके project के अंदर (इस मामले में `awesome-project`), तो यह काम कर गया। 🎉
+
+////
+
+## `pip` Upgrade करें { #upgrade-pip }
+
+/// tip | सुझाव
+
+अगर आप [`uv`](https://github.com/astral-sh/uv) का उपयोग करते हैं, तो आप चीजें install करने के लिए `pip` की बजाय उसी का उपयोग करेंगे, इसलिए आपको `pip` upgrade करने की ज़रूरत नहीं है। 😎
+
+///
+
+अगर आप packages install करने के लिए `pip` का उपयोग कर रहे हैं (यह Python के साथ default रूप से आता है), तो आपको इसे latest version में **upgrade** करना चाहिए।
+
+किसी package को install करते समय कई अजीब errors केवल पहले `pip` upgrade करने से हल हो जाते हैं।
+
+/// tip | सुझाव
+
+आप सामान्यतः यह **एक बार** करेंगे, virtual environment बनाने के ठीक बाद।
+
+///
+
+सुनिश्चित करें कि virtual environment active है (ऊपर वाली command से) और फिर चलाएँ:
+
+
+
+/// tip | सुझाव
+
+कभी-कभी, pip upgrade करने की कोशिश करते समय आपको **`No module named pip`** error मिल सकता है।
+
+अगर ऐसा होता है, तो नीचे दी गई command का उपयोग करके pip install और upgrade करें:
+
+
+
+यह command pip को install करेगी अगर वह पहले से install नहीं है और यह भी सुनिश्चित करेगी कि install किया गया pip का version कम से कम `ensurepip` में उपलब्ध version जितना नया हो।
+
+///
+
+## `.gitignore` जोड़ें { #add-gitignore }
+
+अगर आप **Git** का उपयोग कर रहे हैं (आपको करना चाहिए), तो अपनी `.venv` की हर चीज़ को Git से exclude करने के लिए एक `.gitignore` file जोड़ें।
+
+/// tip | सुझाव
+
+अगर आपने virtual environment बनाने के लिए [`uv`](https://github.com/astral-sh/uv) का उपयोग किया है, तो यह आपके लिए पहले ही कर चुका है, आप यह step छोड़ सकते हैं। 😎
+
+///
+
+/// tip | सुझाव
+
+यह **एक बार** करें, virtual environment बनाने के ठीक बाद।
+
+///
+
+
+
+/// details | उस command का क्या अर्थ है
+
+* `echo "*"`: terminal में text `*` को "print" करेगा (अगला हिस्सा इसे थोड़ा बदल देता है)
+* `>`: `>` के बाईं ओर वाली command द्वारा terminal में print की गई कोई भी चीज़ print नहीं होनी चाहिए, बल्कि `>` के दाईं ओर वाली file में लिखी जानी चाहिए
+* `.gitignore`: उस file का नाम जहाँ text लिखा जाना चाहिए
+
+और Git के लिए `*` का मतलब "सब कुछ" होता है। इसलिए, यह `.venv` directory में सब कुछ ignore करेगा।
+
+वह command `.gitignore` file बनाएगी, इस content के साथ:
+
+```gitignore
+*
+```
+
+///
+
+## Packages install करें { #install-packages }
+
+Environment activate करने के बाद, आप उसमें packages install कर सकते हैं।
+
+/// tip | सुझाव
+
+जब आप अपने project के लिए required packages install या upgrade कर रहे हों, तो यह **एक बार** करें।
+
+अगर आपको किसी version को upgrade करना हो या कोई नया package जोड़ना हो, तो आप **यह फिर से करेंगे**।
+
+///
+
+### सीधे Packages install करें { #install-packages-directly }
+
+अगर आप जल्दी में हैं और अपने project की package requirements declare करने के लिए कोई file इस्तेमाल नहीं करना चाहते, तो आप उन्हें सीधे install कर सकते हैं।
+
+/// tip | सुझाव
+
+आपके program को जिन packages और versions की ज़रूरत है, उन्हें एक file में रखना (बहुत) अच्छा विचार है (उदाहरण के लिए `requirements.txt` या `pyproject.toml`)।
+
+///
+
+//// tab | `pip`
+
+
+
+////
+
+### `requirements.txt` से install करें { #install-from-requirements-txt }
+
+अगर आपके पास `requirements.txt` है, तो अब आप इसके packages install करने के लिए इसका उपयोग कर सकते हैं।
+
+//// tab | `pip`
+
+
+
+////
+
+/// details | `requirements.txt`
+
+कुछ packages वाला `requirements.txt` ऐसा दिख सकता है:
+
+```requirements.txt
+fastapi[standard]==0.113.0
+pydantic==2.8.0
+```
+
+///
+
+## अपना Program चलाएँ { #run-your-program }
+
+Virtual environment activate करने के बाद, आप अपना program चला सकते हैं, और यह आपके virtual environment के अंदर मौजूद Python का उपयोग करेगा, उन packages के साथ जिन्हें आपने वहाँ install किया है।
+
+
+
+## अपना Editor Configure करें { #configure-your-editor }
+
+आप शायद एक editor का उपयोग करेंगे, सुनिश्चित करें कि आप इसे उसी virtual environment का उपयोग करने के लिए configure करें जिसे आपने बनाया है (यह शायद इसे autodetect कर लेगा), ताकि आपको autocompletion और inline errors मिल सकें।
+
+उदाहरण के लिए:
+
+* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
+* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
+
+/// tip | सुझाव
+
+आपको सामान्यतः यह केवल **एक बार** करना होता है, जब आप virtual environment बनाते हैं।
+
+///
+
+## Virtual Environment deactivate करें { #deactivate-the-virtual-environment }
+
+जब आप अपने project पर काम कर लें, तो आप virtual environment को **deactivate** कर सकते हैं।
+
+
+
+```console
+$ deactivate
+```
+
+
+
+इस तरह, जब आप `python` चलाएँगे, तो यह वहाँ install packages वाले उस virtual environment से इसे चलाने की कोशिश नहीं करेगा।
+
+## काम करने के लिए तैयार { #ready-to-work }
+
+अब आप अपने project पर काम शुरू करने के लिए तैयार हैं।
+
+
+
+/// tip | सुझाव
+
+क्या आप समझना चाहते हैं कि ऊपर की सारी चीज़ें क्या हैं?
+
+आगे पढ़ते रहें। 👇🤓
+
+///
+
+## Virtual Environments क्यों { #why-virtual-environments }
+
+FastAPI के साथ काम करने के लिए आपको [Python](https://www.python.org/) install करना होगा।
+
+उसके बाद, आपको FastAPI और कोई भी अन्य **packages** जिन्हें आप इस्तेमाल करना चाहते हैं, **install** करने होंगे।
+
+Packages install करने के लिए आप सामान्यतः Python के साथ आने वाली `pip` command (या समान alternatives) का उपयोग करेंगे।
+
+फिर भी, अगर आप सीधे `pip` का उपयोग करते हैं, तो packages आपके **global Python environment** (Python की global installation) में install हो जाएँगे।
+
+### समस्या { #the-problem }
+
+तो, global Python environment में packages install करने में समस्या क्या है?
+
+किसी समय, आप शायद कई अलग-अलग programs लिखेंगे जो **अलग-अलग packages** पर निर्भर करते हैं। और जिन projects पर आप काम करेंगे उनमें से कुछ उसी package के **अलग-अलग versions** पर निर्भर होंगे। 😱
+
+उदाहरण के लिए, आप `philosophers-stone` नाम का एक project बना सकते हैं, यह program **`harry`, version `1`** नाम के किसी दूसरे package पर निर्भर करता है। इसलिए, आपको `harry` install करना होगा।
+
+```mermaid
+flowchart LR
+ stone(philosophers-stone) -->|requires| harry-1[harry v1]
+```
+
+फिर, कुछ समय बाद, आप `prisoner-of-azkaban` नाम का दूसरा project बनाते हैं, और यह project भी `harry` पर निर्भर करता है, लेकिन इस project को **`harry` version `3`** चाहिए।
+
+```mermaid
+flowchart LR
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
+```
+
+लेकिन अब समस्या यह है कि अगर आप packages को local **virtual environment** में install करने के बजाय globally (global environment में) install करते हैं, तो आपको चुनना होगा कि `harry` का कौन-सा version install करना है।
+
+अगर आप `philosophers-stone` चलाना चाहते हैं, तो आपको पहले `harry` version `1` install करना होगा, उदाहरण के लिए:
+
+
+
+```console
+$ pip install "harry==1"
+```
+
+
+
+और फिर आपके global Python environment में `harry` version `1` install हो जाएगा।
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -->|requires| harry-1
+ end
+```
+
+लेकिन फिर अगर आप `prisoner-of-azkaban` चलाना चाहते हैं, तो आपको `harry` version `1` uninstall करके `harry` version `3` install करना होगा (या सिर्फ version `3` install करने से version `1` automatically uninstall हो जाएगा)।
+
+
+
+```console
+$ pip install "harry==3"
+```
+
+
+
+और फिर आपके global Python environment में `harry` version `3` install हो जाएगा।
+
+और अगर आप `philosophers-stone` फिर से चलाने की कोशिश करते हैं, तो संभावना है कि यह **काम न करे** क्योंकि इसे `harry` version `1` चाहिए।
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1]
+ style harry-1 fill:#ccc,stroke-dasharray: 5 5
+ harry-3[harry v3]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -.-x|⛔️| harry-1
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3
+ end
+```
+
+/// tip | सुझाव
+
+Python packages में **नए versions** में **breaking changes से बचने** की पूरी कोशिश करना बहुत आम है, लेकिन सुरक्षित रहना बेहतर है, और नए versions को जानबूझकर तथा तब install करना बेहतर है जब आप tests चलाकर जाँच सकें कि सब कुछ सही तरीके से काम कर रहा है।
+
+///
+
+अब, यही चीज़ उन **कई** अन्य **packages** के साथ कल्पना करें जिन पर आपके सभी **projects निर्भर करते हैं**। इसे manage करना बहुत कठिन है। और संभवतः आप कुछ projects को packages के कुछ **incompatible versions** के साथ चला देंगे, और यह नहीं जान पाएँगे कि कुछ काम क्यों नहीं कर रहा।
+
+साथ ही, आपके operating system (जैसे Linux, Windows, macOS) के आधार पर, उसमें Python पहले से install आया हो सकता है। और उस मामले में संभवतः कुछ packages कुछ specific versions के साथ pre-installed होंगे जो **आपके system के लिए required** हैं। अगर आप global Python environment में packages install करते हैं, तो आप अपने operating system के साथ आए कुछ programs को **break** कर सकते हैं।
+
+## Packages कहाँ install होते हैं { #where-are-packages-installed }
+
+जब आप Python install करते हैं, तो यह आपके computer पर कुछ files वाली कुछ directories बनाता है।
+
+इनमें से कुछ directories वे होती हैं जो आपके द्वारा install किए गए सभी packages को रखने की जिम्मेदार होती हैं।
+
+जब आप चलाते हैं:
+
+
+
+```console
+// इसे अभी न चलाएँ, यह केवल एक उदाहरण है 🤓
+$ pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+तो यह FastAPI code वाली एक compressed file download करेगा, सामान्यतः [PyPI](https://pypi.org/project/fastapi/) से।
+
+यह उन अन्य packages की files भी **download** करेगा जिन पर FastAPI निर्भर करता है।
+
+फिर यह उन सभी files को **extract** करेगा और उन्हें आपके computer की एक directory में रखेगा।
+
+Default रूप से, यह उन downloaded और extracted files को उस directory में रखेगा जो आपकी Python installation के साथ आती है, वही **global environment** है।
+
+## Virtual Environments क्या हैं { #what-are-virtual-environments }
+
+सभी packages को global environment में रखने की समस्याओं का समाधान है कि आप जिस भी project पर काम करते हैं उसके लिए **एक virtual environment** उपयोग करें।
+
+एक virtual environment एक **directory** है, global वाली के बहुत समान, जहाँ आप किसी project के लिए packages install कर सकते हैं।
+
+इस तरह, हर project का अपना virtual environment (`.venv` directory) होगा, अपने packages के साथ।
+
+```mermaid
+flowchart TB
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) --->|requires| harry-1
+ subgraph venv1[.venv]
+ harry-1[harry v1]
+ end
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --->|requires| harry-3
+ subgraph venv2[.venv]
+ harry-3[harry v3]
+ end
+ end
+ stone-project ~~~ azkaban-project
+```
+
+## Virtual Environment activate करने का क्या मतलब है { #what-does-activating-a-virtual-environment-mean }
+
+जब आप किसी virtual environment को activate करते हैं, उदाहरण के लिए:
+
+//// tab | Linux, macOS
+
+
+
+////
+
+वह command कुछ [environment variables](environment-variables.md) बनाएगी या modify करेगी, जो अगली commands के लिए उपलब्ध होंगे।
+
+उन variables में से एक `PATH` variable है।
+
+/// tip | सुझाव
+
+आप [Environment Variables](environment-variables.md#path-environment-variable) section में `PATH` environment variable के बारे में और जान सकते हैं।
+
+///
+
+Virtual environment activate करने से उसका path `.venv/bin` (Linux और macOS पर) या `.venv\Scripts` (Windows पर) `PATH` environment variable में जुड़ जाता है।
+
+मान लीजिए कि environment activate करने से पहले, `PATH` variable ऐसा दिखता था:
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+इसका मतलब है कि system programs को इनमें खोजता:
+
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Windows\System32
+```
+
+इसका मतलब है कि system programs को इसमें खोजता:
+
+* `C:\Windows\System32`
+
+////
+
+Virtual environment activate करने के बाद, `PATH` variable कुछ ऐसा दिखेगा:
+
+//// tab | Linux, macOS
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+इसका मतलब है कि system अब सबसे पहले programs को यहाँ खोजना शुरू करेगा:
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin
+```
+
+बाकी directories में देखने से पहले।
+
+तो, जब आप terminal में `python` type करते हैं, तो system Python program को यहाँ पाएगा
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+और उसी का उपयोग करेगा।
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
+```
+
+इसका मतलब है कि system अब सबसे पहले programs को यहाँ खोजना शुरू करेगा:
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts
+```
+
+बाकी directories में देखने से पहले।
+
+तो, जब आप terminal में `python` type करते हैं, तो system Python program को यहाँ पाएगा
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+और उसी का उपयोग करेगा।
+
+////
+
+एक महत्वपूर्ण detail यह है कि यह virtual environment path को `PATH` variable की **शुरुआत** में रखेगा। System इसे किसी भी अन्य उपलब्ध Python से **पहले** पाएगा। इस तरह, जब आप `python` चलाते हैं, तो यह किसी अन्य `python` (उदाहरण के लिए, global environment वाला `python`) के बजाय **virtual environment से** Python का उपयोग करेगा।
+
+Virtual environment activate करने से कुछ और चीजें भी बदलती हैं, लेकिन यह उसके द्वारा की जाने वाली सबसे महत्वपूर्ण चीज़ों में से एक है।
+
+## Virtual Environment की जाँच करना { #checking-a-virtual-environment }
+
+जब आप जाँचते हैं कि virtual environment active है या नहीं, उदाहरण के लिए:
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+////
+
+इसका मतलब है कि जो `python` program उपयोग किया जाएगा, वह **virtual environment में** मौजूद है।
+
+आप Linux और macOS में `which` और Windows PowerShell में `Get-Command` का उपयोग करते हैं।
+
+वह command जिस तरह काम करती है, वह यह है कि यह `PATH` environment variable में जाकर **हर path को क्रम से** check करेगी, `python` नाम के program को खोजते हुए। एक बार जब यह उसे ढूँढ लेती है, तो यह आपको उस program का **path दिखाएगी**।
+
+सबसे महत्वपूर्ण हिस्सा यह है कि जब आप `python` call करते हैं, तो वही exact "`python`" execute होगा।
+
+तो, आप confirm कर सकते हैं कि आप सही virtual environment में हैं या नहीं।
+
+/// tip | सुझाव
+
+एक virtual environment activate करना, एक Python पाना, और फिर **दूसरे project में चले जाना** आसान है।
+
+और दूसरा project **काम नहीं करेगा** क्योंकि आप **गलत Python** का उपयोग कर रहे हैं, जो किसी दूसरे project के virtual environment से है।
+
+यह check कर पाना उपयोगी है कि कौन-सा `python` उपयोग हो रहा है। 🤓
+
+///
+
+## Virtual Environment deactivate क्यों करें { #why-deactivate-a-virtual-environment }
+
+उदाहरण के लिए, आप `philosophers-stone` project पर काम कर रहे हो सकते हैं, **उस virtual environment को activate** करके, packages install करके और उस environment के साथ काम करके।
+
+और फिर आप **किसी दूसरे project** `prisoner-of-azkaban` पर काम करना चाहते हैं।
+
+आप उस project में जाते हैं:
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+```
+
+
+
+अगर आप `philosophers-stone` के लिए virtual environment को deactivate नहीं करते, तो जब आप terminal में `python` चलाएँगे, यह `philosophers-stone` से Python का उपयोग करने की कोशिश करेगा।
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+$ python main.py
+
+// sirius import करने में error, यह install नहीं है 😱
+Traceback (most recent call last):
+ File "main.py", line 1, in
+ import sirius
+```
+
+
+
+लेकिन अगर आप virtual environment deactivate करके `prisoner-of-azkaban` के लिए नया वाला activate करते हैं, तो जब आप `python` चलाएँगे, यह `prisoner-of-azkaban` में मौजूद virtual environment से Python का उपयोग करेगा।
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+// deactivate करने के लिए आपको पुरानी directory में होने की ज़रूरत नहीं है, आप जहाँ भी हों वहाँ से कर सकते हैं, दूसरे project में जाने के बाद भी 😎
+$ deactivate
+
+// prisoner-of-azkaban/.venv में virtual environment activate करें 🚀
+$ source .venv/bin/activate
+
+// अब जब आप python चलाएँगे, तो यह इस virtual environment में install package sirius को पाएगा ✨
+$ python main.py
+
+I solemnly swear 🐺
+```
+
+
+
+## Alternatives { #alternatives }
+
+यह आपको शुरू करने और यह सिखाने के लिए एक सरल guide है कि सब कुछ **अंदर से** कैसे काम करता है।
+
+Virtual environments, package dependencies (requirements), projects को manage करने के कई **alternatives** हैं।
+
+जब आप तैयार हों और **पूरे project को manage** करने के लिए कोई tool उपयोग करना चाहें, package dependencies, virtual environments आदि सहित, तो मैं सुझाव दूँगा कि आप [uv](https://github.com/astral-sh/uv) आज़माएँ।
+
+`uv` बहुत सारी चीज़ें कर सकता है, यह कर सकता है:
+
+* आपके लिए **Python install** करना, अलग-अलग versions सहित
+* आपके projects के लिए **virtual environment** manage करना
+* **Packages** install करना
+* आपके project के लिए package **dependencies और versions** manage करना
+* सुनिश्चित करना कि आपके पास install करने के लिए packages और versions का **exact** set हो, उनकी dependencies सहित, ताकि आप सुनिश्चित हो सकें कि आप अपने project को production में ठीक उसी तरह चला सकते हैं जैसे development के दौरान अपने computer पर चलाते हैं, इसे **locking** कहा जाता है
+* और कई अन्य चीज़ें
+
+## निष्कर्ष { #conclusion }
+
+अगर आपने यह सब पढ़ा और समझा है, तो अब **आप virtual environments के बारे में** वहाँ मौजूद कई developers से कहीं ज़्यादा जानते हैं। 🤓
+
+इन details को जानना भविष्य में उस समय बहुत संभवतः उपयोगी होगा जब आप किसी ऐसी चीज़ को debug कर रहे होंगे जो complex लगती है, लेकिन आपको पता होगा कि **यह सब अंदर से कैसे काम करता है**। 😎
diff --git a/docs/hi/llm-prompt.md b/docs/hi/llm-prompt.md
new file mode 100644
index 000000000..b626ea586
--- /dev/null
+++ b/docs/hi/llm-prompt.md
@@ -0,0 +1,58 @@
+### Target language
+
+Translate to Hindi (हिन्दी).
+
+Language code: hi.
+
+For the following terms, use these specific choices:
+
+* path (URL path): path (do not transliterate as "पाथ")
+* path parameter / path operation: keep in English
+* query / query parameter: keep in English (do not transliterate as "क्वेरी")
+* parameter: parameter (do not transliterate as "पैरामीटर")
+* header / headers (HTTP): keep in English (do not translate as "हेडर" / "शीर्षक")
+* cookie / cookies: keep in English (do not transliterate as "कुकी")
+* form / form data: keep in English (do not transliterate as "फ़ॉर्म" / "फ़ॉर्म डेटा")
+* field / fields: keep in English (do not transliterate as "फ़ील्ड्स")
+* body / request body / response body: keep in English (do not transliterate as "बॉडी" / "रिक्वेस्ट बॉडी")
+* request / response: keep in English (do not translate as "अनुरोध" / "प्रतिक्रिया")
+* required: required (do not translate as "आवश्यक")
+* route / router / endpoint: keep in English
+* framework: framework
+* middleware: middleware (do not transliterate as "मिडलवेयर")
+* lifespan: lifespan (do not translate as "जीवनकाल")
+* context manager: keep in English
+* CORS: keep in English
+* function: function (do not transliterate as "फ़ंक्शन")
+* variable: variable (do not transliterate as "वेरिएबल")
+* model / Pydantic model: keep in English (do not transliterate as "मॉडल")
+* value: value (do not translate as "मान")
+* spec / specification: keep in English (do not translate as "स्पेक" / "विनिर्देश")
+* Enum / enumeration: keep in English
+* data: data (do not transliterate as "डेटा")
+* parsing: parsing (do not transliterate as "पार्सिंग")
+* conversion: conversion (do not translate as "रूपांतरण")
+* virtual environment: virtual environment (do not transliterate as "वर्चुअल एनवायरनमेंट")
+* environment variable: environment variable (do not transliterate as "एनवायरनमेंट वेरिएबल")
+* directory: directory (do not transliterate as "डायरेक्टरी")
+* package: package (do not transliterate as "पैकेज")
+* file / files: keep in English (do not transliterate as "फ़ाइल")
+* install / installation: keep in English (do not transliterate as "इंस्टॉल")
+* setup: setup (do not transliterate as "सेटअप")
+* section: section (do not transliterate as "सेक्शन")
+* editor / editor support: keep in English (do not transliterate as "एडिटर सपोर्ट")
+* application discovery: keep in English
+* event / events: event (do not transliterate as "इवेंट्स")
+* startup / shutdown: keep in English (do not transliterate as "स्टार्टअप")
+* worker / worker process: keep in English (do not translate as "वर्कर" / "श्रमिक")
+* activate / deactivate: keep in English (do not translate as "सक्रिय करें" / "निष्क्रिय करें")
+* development: development (do not transliterate as "डेवलपमेंट")
+* production: production (do not transliterate as "प्रोडक्शन")
+* feature: feature (do not transliterate as "फीचर")
+* tool: tool (do not transliterate as "टूल")
+* project: project (do not transliterate as "प्रोजेक्ट")
+* developer / team: keep in English
+* default: default (do not transliterate as "डिफ़ॉल्ट")
+* standard: standard (do not translate as "मानक")
+* asynchronous: asynchronous (do not transliterate as "असिंक्रोनस")
+* Recap (section heading): keep in English (do not translate as "पुनरावलोकन")
diff --git a/docs/de/mkdocs.yml b/docs/hi/mkdocs.yml
similarity index 100%
rename from docs/de/mkdocs.yml
rename to docs/hi/mkdocs.yml
diff --git a/docs/ja/docs/_llm-test.md b/docs/ja/docs/_llm-test.md
index 4c84a7c04..91eeffd0c 100644
--- a/docs/ja/docs/_llm-test.md
+++ b/docs/ja/docs/_llm-test.md
@@ -1,5 +1,6 @@
# LLM テストファイル { #llm-test-file }
+
このドキュメントは、ドキュメントを翻訳する LLM が、`scripts/translate.py` の `general_prompt` と、`docs/{language code}/llm-prompt.md` の言語固有プロンプトを理解しているかをテストします。言語固有プロンプトは `general_prompt` の末尾に追加されます。
ここに追加したテストは、すべての言語固有プロンプトの設計者が参照します。
@@ -124,10 +125,6 @@ works(foo="bar") # これは動作します 🎉
//// tab | テスト
-/// info | 情報
-いくつかのテキスト
-///
-
/// note | 備考
いくつかのテキスト
///
@@ -136,10 +133,6 @@ works(foo="bar") # これは動作します 🎉
いくつかのテキスト
///
-/// check | 確認
-いくつかのテキスト
-///
-
/// tip | 豆知識
いくつかのテキスト
///
diff --git a/docs/ja/docs/advanced/additional-responses.md b/docs/ja/docs/advanced/additional-responses.md
index 1d7c2f80e..ad0b1d4c9 100644
--- a/docs/ja/docs/advanced/additional-responses.md
+++ b/docs/ja/docs/advanced/additional-responses.md
@@ -34,7 +34,7 @@ FastAPI はそのモデルから JSON Schema を生成し、OpenAPI の適切な
///
-/// info | 情報
+/// note | 備考
`model` キーは OpenAPI の一部ではありません。
@@ -183,7 +183,7 @@ FastAPI はそこから Pydantic モデルを取得して JSON Schema を生成
///
-/// info | 情報
+/// note | 備考
`responses` パラメータで明示的に別のメディアタイプを指定しない限り、FastAPI はレスポンスがメインのレスポンスクラスと同じメディアタイプ(デフォルトは `application/json`)であるとみなします。
diff --git a/docs/ja/docs/advanced/additional-status-codes.md b/docs/ja/docs/advanced/additional-status-codes.md
index ad9bd57dc..0c19abd49 100644
--- a/docs/ja/docs/advanced/additional-status-codes.md
+++ b/docs/ja/docs/advanced/additional-status-codes.md
@@ -16,7 +16,7 @@
{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
-/// warning
+/// warning | 注意
上の例のように `Response` を直接返すと、それはそのまま返されます。
diff --git a/docs/ja/docs/advanced/advanced-dependencies.md b/docs/ja/docs/advanced/advanced-dependencies.md
index 5181e39d8..e06ca4721 100644
--- a/docs/ja/docs/advanced/advanced-dependencies.md
+++ b/docs/ja/docs/advanced/advanced-dependencies.md
@@ -10,9 +10,9 @@
ただし、その固定の内容はパラメータ化できるようにしたいです。
-## "callable" なインスタンス { #a-callable-instance }
+## 「callable」なインスタンス { #a-callable-instance }
-Python には、クラスのインスタンスを "callable" にする方法があります。
+Python には、クラスのインスタンスを「callable」にする方法があります。
クラス自体(これはすでに callable です)ではなく、そのクラスのインスタンスです。
@@ -98,7 +98,7 @@ FastAPI 0.118.0 より前では、`yield` を使う依存関係を使用する
この挙動は 0.118.0 で元に戻され、`yield` の後の終了コードはレスポンス送信後に実行されるようになりました。
-/// info | 情報
+/// note | 備考
以下で見るように、これはバージョン 0.106.0 より前の挙動ととても似ていますが、いくつかのコーナーケースに対する改良とバグ修正が含まれています。
@@ -146,7 +146,7 @@ FastAPI 0.110.0 より前では、`yield` を持つ依存関係を使い、そ
FastAPI 0.106.0 より前では、`yield` の後で例外を送出することはできませんでした。`yield` を持つ依存関係の終了コードはレスポンス送信「後」に実行されるため、[例外ハンドラ](../tutorial/handling-errors.md#install-custom-exception-handlers)はすでに実行済みでした。
-これは主に、依存関係が "yield" した同じオブジェクトをバックグラウンドタスク内で利用できるようにするための設計でした。終了コードはバックグラウンドタスク完了後に実行されるからです。
+これは主に、依存関係が「yield」した同じオブジェクトをバックグラウンドタスク内で利用できるようにするための設計でした。終了コードはバックグラウンドタスク完了後に実行されるからです。
これは、レスポンスがネットワーク上を移動するのを待っている間にリソースを保持しないようにする意図で、FastAPI 0.106.0 で変更されました。
diff --git a/docs/ja/docs/advanced/custom-response.md b/docs/ja/docs/advanced/custom-response.md
index e66b1f494..34178a50e 100644
--- a/docs/ja/docs/advanced/custom-response.md
+++ b/docs/ja/docs/advanced/custom-response.md
@@ -41,7 +41,7 @@ FastAPI はデフォルトでJSONレスポンスを返します。
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
-/// info | 情報
+/// note | 備考
パラメータ `response_class` は、レスポンスの「メディアタイプ」を定義するためにも使用されます。
@@ -65,7 +65,7 @@ FastAPI はデフォルトでJSONレスポンスを返します。
///
-/// info | 情報
+/// note | 備考
もちろん、実際の `Content-Type` ヘッダーやステータスコードなどは、返した `Response` オブジェクトに由来します。
diff --git a/docs/ja/docs/advanced/dataclasses.md b/docs/ja/docs/advanced/dataclasses.md
index e3ad7afb6..2cfe8e905 100644
--- a/docs/ja/docs/advanced/dataclasses.md
+++ b/docs/ja/docs/advanced/dataclasses.md
@@ -18,7 +18,7 @@ FastAPI は **Pydantic** の上に構築されており、これまでにリク
これは Pydantic モデルの場合と同じように動作します。内部的にも同様に Pydantic を使って実現されています。
-/// info | 情報
+/// note | 備考
dataclasses は、Pydantic モデルができることをすべては行えない点に留意してください。
@@ -74,7 +74,7 @@ dataclass は自動的に Pydantic の dataclass に変換されます。
いつもどおり、FastAPI では必要に応じて `def` と `async def` を組み合わせられます。
- どちらをいつ使うかの復習が必要な場合は、[`async` と `await`](../async.md#in-a-hurry) に関するドキュメントの _"In a hurry?"_ セクションを参照してください。
+ どちらをいつ使うかの復習が必要な場合は、[`async` と `await`](../async.md#in-a-hurry) に関するドキュメントの _「急いでいますか?」_ セクションを参照してください。
9. この *path operation 関数* は(可能ではありますが)dataclass 自体は返さず、内部データを持つ辞書のリストを返しています。
@@ -82,7 +82,7 @@ dataclass は自動的に Pydantic の dataclass に変換されます。
`dataclasses` は他の型注釈と多様な組み合わせが可能で、複雑なデータ構造を構成できます。
-上記のコード内コメントのヒントを参照して、より具体的な詳細を確認してください。
+上記のコード内の注釈のヒントを参照して、より具体的な詳細を確認してください。
## さらに学ぶ { #learn-more }
diff --git a/docs/ja/docs/advanced/events.md b/docs/ja/docs/advanced/events.md
index e2cbe2eb0..12064f948 100644
--- a/docs/ja/docs/advanced/events.md
+++ b/docs/ja/docs/advanced/events.md
@@ -120,7 +120,7 @@ async with lifespan(app):
ここでは、`shutdown` のイベントハンドラ関数が、テキスト行 `"Application shutdown"` をファイル `log.txt` に書き込みます。
-/// info | 情報
+/// note | 備考
`open()` 関数の `mode="a"` は「追加」(append)を意味します。つまり、そのファイルに既にある内容を上書きせず、行が後ろに追記されます。
@@ -140,7 +140,7 @@ async with lifespan(app):
### `startup` と `shutdown` をまとめて { #startup-and-shutdown-together }
-起動時とシャットダウン時のロジックは関連していることが多いです。何かを開始してから終了したい、リソースを獲得してから解放したい、などです.
+起動時とシャットダウン時のロジックは関連していることが多いです。何かを開始してから終了したい、リソースを獲得してから解放したい、などです。
共有するロジックや変数のない別々の関数でそれを行うのは難しく、グローバル変数などに値を保存する必要が出てきます。
@@ -152,7 +152,7 @@ async with lifespan(app):
内部的には、ASGI の技術仕様において、これは [Lifespan プロトコル](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) の一部であり、`startup` と `shutdown` というイベントが定義されています。
-/// info | 情報
+/// note | 備考
Starlette の `lifespan` ハンドラについては、[Starlette の Lifespan ドキュメント](https://www.starlette.dev/lifespan/)で詳しく読むことができます。
diff --git a/docs/ja/docs/advanced/generate-clients.md b/docs/ja/docs/advanced/generate-clients.md
index b3472880e..196ec5280 100644
--- a/docs/ja/docs/advanced/generate-clients.md
+++ b/docs/ja/docs/advanced/generate-clients.md
@@ -20,22 +20,6 @@ FastAPI は自動的に **OpenAPI 3.1** の仕様を生成します。したが
///
-## FastAPI スポンサーによる SDK ジェネレータ { #sdk-generators-from-fastapi-sponsors }
-
-このセクションでは、FastAPI をスポンサーしている企業による、**ベンチャー支援**および**企業支援**のソリューションを紹介します。これらの製品は、高品質な生成 SDK に加えて、**追加機能**や**統合**を提供します。
-
-✨ [**FastAPI をスポンサーする**](../help-fastapi.md#sponsor-the-author) ✨ ことで、これらの企業はフレームワークとその**エコシステム**の健全性と**持続可能性**を支援しています。
-
-この支援は、FastAPI の**コミュニティ**(皆さん)への強いコミットメントの表明でもあり、**優れたサービス**の提供だけでなく、堅牢で発展するフレームワーク FastAPI を支える姿勢を示しています。🙇
-
-例えば、次のようなものがあります:
-
-* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
-* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
-* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
-
-これらのソリューションの中にはオープンソースや無料枠を提供するものもあり、金銭的コミットメントなしで試すことができます。他の商用 SDK ジェネレータも存在し、オンラインで見つけられます。🤓
-
## TypeScript SDK を作成する { #create-a-typescript-sdk }
まずは簡単な FastAPI アプリから始めます:
diff --git a/docs/ja/docs/advanced/json-base64-bytes.md b/docs/ja/docs/advanced/json-base64-bytes.md
index c3c361a96..214ce14c6 100644
--- a/docs/ja/docs/advanced/json-base64-bytes.md
+++ b/docs/ja/docs/advanced/json-base64-bytes.md
@@ -4,7 +4,7 @@
## Base64 とファイル { #base64-vs-files }
-バイナリデータのアップロードにはまず、JSON にエンコードする代わりに [Request Files](../tutorial/request-files.md) を、バイナリデータの送信には [カスタムレスポンス - FileResponse](./custom-response.md#fileresponse--fileresponse-) を使えるか検討してください。
+バイナリデータのアップロードにはまず、JSON にエンコードする代わりに [リクエストファイル](../tutorial/request-files.md) を、バイナリデータの送信には [カスタムレスポンス - FileResponse](./custom-response.md#fileresponse) を使えるか検討してください。
JSON は UTF-8 でエンコードされた文字列のみを含められるため、生のバイト列は含められません。
diff --git a/docs/ja/docs/advanced/openapi-callbacks.md b/docs/ja/docs/advanced/openapi-callbacks.md
index 31d17e270..e3ddeab98 100644
--- a/docs/ja/docs/advanced/openapi-callbacks.md
+++ b/docs/ja/docs/advanced/openapi-callbacks.md
@@ -23,7 +23,7 @@
* API 利用者(外部開発者)に通知を送り返します。
* これは(あなたの API から)外部開発者が提供する *外部 API* に POST リクエストを送ることで行われます(これが「コールバック」です)。
-## 通常の FastAPI アプリ { #the-normal-fastapi-app }
+## 通常の **FastAPI** アプリ { #the-normal-fastapi-app }
まず、コールバックを追加する前の通常の API アプリがどうなるか見てみましょう。
@@ -76,7 +76,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
しかし、あなたはすでに **FastAPI** で API の自動ドキュメントを簡単に作る方法を知っています。
-その知識を使って、*外部 API* がどうあるべきかをドキュメント化します……つまり、外部 API が実装すべき *path operation(s)*(あなたの API が呼び出すもの)を作成します。
+その知識を使って、*外部 API* がどうあるべきかをドキュメント化します... つまり、外部 API が実装すべき *path operation(s)*(あなたの API が呼び出すもの)を作成します。
/// tip | 豆知識
@@ -86,13 +86,13 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
///
-### コールバック用 APIRouter を作成 { #create-a-callback-apirouter }
+### コールバック用 `APIRouter` を作成 { #create-a-callback-apirouter }
まず、1 つ以上のコールバックを含む新しい `APIRouter` を作成します。
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[1,23] *}
-### コールバックの path operation を作成 { #create-the-callback-path-operation }
+### コールバックの *path operation* を作成 { #create-the-callback-path-operation }
上で作成したのと同じ `APIRouter` を使って、コールバックの *path operation* を作成します。
@@ -167,13 +167,13 @@ JSON ボディは次のような内容です:
これで、上で作成したコールバック用ルーター内に、必要なコールバックの *path operation(s)*(*外部開発者* が *外部 API* に実装すべきもの)が用意できました。
-次に、*あなたの API の path operation デコレータ*の `callbacks` パラメータに、そのコールバック用ルーターの属性 `.routes`(実体はルート/*path operations* の `list`)を渡します:
+次に、*あなたの API の path operation デコレータ*の `callbacks` パラメータに、そのコールバック用ルーターの属性 `.routes` を渡します:
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip | 豆知識
-`callback=` に渡すのはルーター本体(`invoices_callback_router`)ではなく、属性 `.routes`(`invoices_callback_router.routes`)である点に注意してください。
+`callbacks=` に渡すのはルーター本体(`invoices_callback_router`)ではなく、属性 `.routes`(`invoices_callback_router.routes`)である点に注意してください。FastAPI はそれらのルートを使ってコールバックの OpenAPI ドキュメントを生成します。
///
diff --git a/docs/ja/docs/advanced/openapi-webhooks.md b/docs/ja/docs/advanced/openapi-webhooks.md
index 7f7a72680..f559de13b 100644
--- a/docs/ja/docs/advanced/openapi-webhooks.md
+++ b/docs/ja/docs/advanced/openapi-webhooks.md
@@ -22,7 +22,7 @@ Webhook の URL を登録する方法や実際にリクエストを送るコー
これにより、ユーザーがあなたの **Webhook** リクエストを受け取るための**API を実装**するのが大幅に簡単になります。場合によっては、ユーザーが自分たちの API コードを自動生成できるかもしれません。
-/// info | 情報
+/// note | 備考
Webhook は OpenAPI 3.1.0 以上で利用可能で、FastAPI `0.99.0` 以上が対応しています。
@@ -36,7 +36,7 @@ Webhook は OpenAPI 3.1.0 以上で利用可能で、FastAPI `0.99.0` 以上が
定義した webhook は **OpenAPI** スキーマおよび自動生成される **ドキュメント UI** に反映されます。
-/// info | 情報
+/// note | 備考
`app.webhooks` オブジェクトは実際には単なる `APIRouter` で、複数ファイルでアプリを構成する際に使うものと同じ型です。
diff --git a/docs/ja/docs/advanced/path-operation-advanced-configuration.md b/docs/ja/docs/advanced/path-operation-advanced-configuration.md
index 65b56dba4..bc08092f8 100644
--- a/docs/ja/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ja/docs/advanced/path-operation-advanced-configuration.md
@@ -16,17 +16,11 @@ OpenAPIの「エキスパート」でなければ、これはおそらく必要
### *path operation関数* の名前をoperationIdとして使用する { #using-the-path-operation-function-name-as-the-operationid }
-APIの関数名を `operationId` として利用したい場合、すべてのAPI関数をイテレーションし、各 *path operation* の `operation_id` を `APIRoute.name` で上書きすれば可能です。
+API の関数名を `operationId` として使いたい場合は、`FastAPI` にカスタムの `generate_unique_id_function` を渡せます。
-すべての *path operation* を追加した後に行うべきです。
+この関数は各 `APIRoute` を受け取り、その *path operation* で使う `operationId` を返します。
-{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
-
-/// tip | 豆知識
-
-`app.openapi()` を手動で呼び出す場合、その前に `operationId` を更新するべきです。
-
-///
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
/// warning | 注意
diff --git a/docs/ja/docs/advanced/response-change-status-code.md b/docs/ja/docs/advanced/response-change-status-code.md
index 22f5f3701..35fcc5bbd 100644
--- a/docs/ja/docs/advanced/response-change-status-code.md
+++ b/docs/ja/docs/advanced/response-change-status-code.md
@@ -1,5 +1,6 @@
# レスポンス - ステータスコードの変更 { #response-change-status-code }
+
すでに、デフォルトの[レスポンスのステータスコード](../tutorial/response-status-code.md)を設定できることをご存知かもしれません。
しかし場合によっては、デフォルトとは異なるステータスコードを返す必要があります。
diff --git a/docs/ja/docs/advanced/response-cookies.md b/docs/ja/docs/advanced/response-cookies.md
index c395b09c6..912181554 100644
--- a/docs/ja/docs/advanced/response-cookies.md
+++ b/docs/ja/docs/advanced/response-cookies.md
@@ -1,5 +1,6 @@
# レスポンスの Cookie { #response-cookies }
+
## `Response` パラメータを使う { #use-a-response-parameter }
*path operation 関数*で `Response` 型のパラメータを宣言できます。
diff --git a/docs/ja/docs/advanced/response-directly.md b/docs/ja/docs/advanced/response-directly.md
index b5c9fc5cb..366eed2b9 100644
--- a/docs/ja/docs/advanced/response-directly.md
+++ b/docs/ja/docs/advanced/response-directly.md
@@ -18,7 +18,7 @@
実際は、`Response` やそのサブクラスを返すことができます。
-/// info
+/// note
`JSONResponse` それ自体は、`Response` のサブクラスです。
diff --git a/docs/ja/docs/advanced/response-headers.md b/docs/ja/docs/advanced/response-headers.md
index 3a61f5742..d5f6f31a3 100644
--- a/docs/ja/docs/advanced/response-headers.md
+++ b/docs/ja/docs/advanced/response-headers.md
@@ -1,5 +1,6 @@
# レスポンスヘッダー { #response-headers }
+
## `Response` パラメータを使う { #use-a-response-parameter }
(Cookie と同様に)*path operation 関数*で `Response` 型のパラメータを宣言できます。
diff --git a/docs/ja/docs/advanced/security/oauth2-scopes.md b/docs/ja/docs/advanced/security/oauth2-scopes.md
index 3afc26e3a..b01bd01ca 100644
--- a/docs/ja/docs/advanced/security/oauth2-scopes.md
+++ b/docs/ja/docs/advanced/security/oauth2-scopes.md
@@ -1,5 +1,6 @@
# OAuth2 のスコープ { #oauth2-scopes }
+
OAuth2 のスコープは **FastAPI** で直接利用でき、シームレスに統合されています。
これにより、OAuth2 標準に従った、よりきめ細かな権限システムを、OpenAPI 対応アプリケーション(および API ドキュメント)に統合できます。
@@ -46,7 +47,7 @@ OpenAPI(例: API ドキュメント)では、「セキュリティスキー
- `instagram_basic` は Facebook / Instagram で使われています。
- `https://www.googleapis.com/auth/drive` は Google で使われています。
-/// info | 情報
+/// note | 備考
OAuth2 において「スコープ」は、必要な特定の権限を宣言する単なる文字列です。
@@ -126,7 +127,7 @@ OAuth2 にとっては、単に文字列に過ぎません。
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
-/// info | 技術詳細
+/// note | 技術詳細
`Security` は実際には `Depends` のサブクラスで、後述する追加パラメータが 1 つあるだけです。
diff --git a/docs/ja/docs/advanced/settings.md b/docs/ja/docs/advanced/settings.md
index e42ec845c..b3fd89a46 100644
--- a/docs/ja/docs/advanced/settings.md
+++ b/docs/ja/docs/advanced/settings.md
@@ -52,7 +52,7 @@ Pydantic から `BaseSettings` をインポートして、そのサブクラス
Pydantic モデルと同様に、型アノテーションと(必要なら)デフォルト値を持つクラス属性を宣言します。
-`Field()` による追加バリデーションなど、Pydantic モデルで使えるのと同じバリデーション機能をすべて利用できます。
+異なるデータ型や `Field()` による追加バリデーションなど、Pydantic モデルで使えるのと同じバリデーション機能とツールをすべて利用できます。
{* ../../docs_src/settings/tutorial001_py310.py hl[2,5:8,11] *}
diff --git a/docs/ja/docs/advanced/stream-data.md b/docs/ja/docs/advanced/stream-data.md
index 52bbfd3fd..6360cdab5 100644
--- a/docs/ja/docs/advanced/stream-data.md
+++ b/docs/ja/docs/advanced/stream-data.md
@@ -2,9 +2,9 @@
JSON として構造化できるデータをストリームしたい場合は、[JSON Lines をストリームする](../tutorial/stream-json-lines.md) を参照してください。
-しかし、純粋なバイナリデータや文字列をストリームしたい場合は、次のようにできます。
+しかし、**純粋なバイナリデータ**や文字列をストリームしたい場合は、次のようにできます。
-/// info | 情報
+/// note | 備考
FastAPI 0.134.0 で追加されました。
@@ -12,21 +12,21 @@ FastAPI 0.134.0 で追加されました。
## ユースケース { #use-cases }
-例えば、AI LLM サービスの出力をそのまま、純粋な文字列としてストリームしたい場合に使えます。
+例えば、**AI LLM** サービスの出力をそのまま、純粋な文字列としてストリームしたい場合に使えます。
-メモリに一度に全て読み込むことなく、読み込みながらチャンクごとに送ることで、巨大なバイナリファイルをストリームすることにも使えます。
+メモリに一度に全て読み込むことなく、読み込みながらチャンクごとに送ることで、**巨大なバイナリファイル**をストリームすることにも使えます。
-同様に、動画や音声をストリームすることもできます。処理しながら生成し、そのまま送信することも可能です。
+同様に、**動画**や**音声**をストリームすることもできます。処理しながら生成し、そのまま送信することも可能です。
## `yield` を使った `StreamingResponse` { #a-streamingresponse-with-yield }
-path operation 関数で `response_class=StreamingResponse` を宣言すると、`yield` を使ってデータをチャンクごとに順次送信できます。
+*path operation 関数*で `response_class=StreamingResponse` を宣言すると、`yield` を使ってデータをチャンクごとに順次送信できます。
{* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
FastAPI は各データチャンクをそのまま `StreamingResponse` に渡し、JSON などに変換しようとはしません。
-### 非 async な path operation 関数 { #non-async-path-operation-functions }
+### 非 async な *path operation 関数* { #non-async-path-operation-functions }
`async` なしの通常の `def` 関数でも同様に `yield` を使えます。
@@ -40,7 +40,7 @@ FastAPI は各データチャンクをそのまま `StreamingResponse` に渡し
{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
-つまり、`StreamingResponse` では型アノテーションに依存せず、送信したい形式に合わせてバイト列を生成・エンコードする「自由」と「責任」があなたにあります。 🤓
+つまり、`StreamingResponse` では型アノテーションに依存せず、送信したい形式に合わせてバイト列を生成・エンコードする**自由**と**責任**があなたにあります。 🤓
### バイト列をストリームする { #stream-bytes }
@@ -58,7 +58,7 @@ FastAPI は各データチャンクをそのまま `StreamingResponse` に渡し
{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
-その後、path operation 関数で `response_class=PNGStreamingResponse` としてこの新しいクラスを使用できます:
+その後、*path operation 関数*で `response_class=PNGStreamingResponse` としてこの新しいクラスを使用できます:
{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
@@ -90,7 +90,7 @@ FastAPI は各データチャンクをそのまま `StreamingResponse` に渡し
また、多くの場合、ディスクやネットワークから読み出すため、読み取りはブロッキング(イベントループをブロックし得る)処理になります。
-/// info | 情報
+/// note | 備考
上記の例は例外で、`io.BytesIO` は既にメモリ上にあるため、読み取りが何かをブロックすることはありません。
@@ -98,7 +98,7 @@ FastAPI は各データチャンクをそのまま `StreamingResponse` に渡し
///
-イベントループのブロッキングを避けるには、path operation 関数を `async def` ではなく通常の `def` で宣言してください。そうすると FastAPI はその関数をスレッドプールワーカー上で実行し、メインループのブロッキングを避けます。
+イベントループのブロッキングを避けるには、*path operation 関数*を `async def` ではなく通常の `def` で宣言してください。そうすると FastAPI はその関数をスレッドプールワーカー上で実行し、メインループのブロッキングを避けます。
{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
diff --git a/docs/ja/docs/advanced/strict-content-type.md b/docs/ja/docs/advanced/strict-content-type.md
index 994cb8672..a21832fec 100644
--- a/docs/ja/docs/advanced/strict-content-type.md
+++ b/docs/ja/docs/advanced/strict-content-type.md
@@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac
この設定では、`Content-Type` ヘッダーがないリクエストでもボディが JSON として解析されます。これは古いバージョンの FastAPI と同じ挙動です。
-/// info | 情報
+/// note | 備考
この挙動と設定は FastAPI 0.132.0 で追加されました。
diff --git a/docs/ja/docs/advanced/websockets.md b/docs/ja/docs/advanced/websockets.md
index 802110b58..b310adfe9 100644
--- a/docs/ja/docs/advanced/websockets.md
+++ b/docs/ja/docs/advanced/websockets.md
@@ -111,7 +111,7 @@ WebSocketエンドポイントでは、`fastapi` から以下をインポート
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
-/// info | 情報
+/// note | 備考
これはWebSocketであるため、`HTTPException` を発生させることはあまり意味がありません。代わりに `WebSocketException` を発生させます。
diff --git a/docs/ja/docs/advanced/wsgi.md b/docs/ja/docs/advanced/wsgi.md
index 6895eb658..40511398d 100644
--- a/docs/ja/docs/advanced/wsgi.md
+++ b/docs/ja/docs/advanced/wsgi.md
@@ -1,12 +1,13 @@
# WSGI の組み込み - Flask、Django など { #including-wsgi-flask-django-others }
+
[サブアプリケーション - マウント](sub-applications.md)、[プロキシの背後](behind-a-proxy.md) で見たように、WSGI アプリケーションをマウントできます。
そのために `WSGIMiddleware` を使用して、Flask や Django などの WSGI アプリをラップできます。
## `WSGIMiddleware` の使用 { #using-wsgimiddleware }
-/// info | 情報
+/// note | 備考
これには `a2wsgi` のインストールが必要です。例: `pip install a2wsgi`。
diff --git a/docs/ja/docs/alternatives.md b/docs/ja/docs/alternatives.md
index 34017b00e..3b3140ed8 100644
--- a/docs/ja/docs/alternatives.md
+++ b/docs/ja/docs/alternatives.md
@@ -36,7 +36,7 @@ Django REST Framework は Tom Christie によって作成されました。Starl
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
自動でAPIドキュメントを生成するWebユーザーインターフェースを持っている点。
@@ -56,7 +56,7 @@ Flask は「マイクロフレームワーク」であり、データベース
Flaskのシンプルさを考えると、APIを構築するのに適しているように思えました。次に見つけるべきは、Flask 用の「Django REST Framework」でした。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
マイクロフレームワークであること。ツールやパーツを目的に合うように簡単に組み合わせられる点。
@@ -88,7 +88,7 @@ Requestsは非常にシンプルかつ直感的なデザインで使いやすく
response = requests.get("http://example.com/some/url")
```
-対応するFastAPIのAPIのpath operationはこのようになります:
+対応するFastAPI側のAPI *path operation* はこのようになります:
```Python hl_lines="1"
@app.get("/some/url")
@@ -96,12 +96,12 @@ def read_url():
return {"message": "Hello World"}
```
- `requests.get(...)` と`@app.get(...)` には類似点が見受けられます。
+`requests.get(...)` と`@app.get(...)` には類似点が見受けられます。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
* シンプルで直感的なAPIを持っている点。
-* HTTPメソッド名を直接利用し、単純で直感的である。
+* HTTPメソッド名 (operation) を直接利用し、単純で直感的である。
* 適切なデフォルト値を持ちつつ、強力なカスタマイズ性を持っている。
///
@@ -118,7 +118,7 @@ def read_url():
そのため、バージョン2.0では「Swagger」、バージョン3以上では「OpenAPI」と表記するのが一般的です。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
独自のスキーマの代わりに、API仕様のオープンな標準を採用しました。
@@ -147,7 +147,7 @@ APIが必要とするもう一つの大きな機能はデータのバリデー
しかし、それはPythonの型ヒントが存在する前に作られたものです。そのため、すべてのスキーマを定義するためには、Marshmallowが提供する特定のユーティリティやクラスを使用する必要があります。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
コードで「スキーマ」を定義し、データの型やバリデーションを自動で提供する点。
@@ -163,13 +163,13 @@ WebargsはFlaskをはじめとするいくつかのフレームワークの上
素晴らしいツールで、私も**FastAPI**を持つ前はよく使っていました。
-/// info | 情報
+/// note | 備考
Webargsは、Marshmallowと同じ開発者により作られました。
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
受信したデータに対する自動的なバリデーションを持っている点。
@@ -193,13 +193,13 @@ Flask, Starlette, Responderなどにおいてはそのように動作します
エディタでは、この問題を解決することはできません。また、パラメータやMarshmallowスキーマを変更したときに、YAMLのdocstringを変更するのを忘れてしまうと、生成されたスキーマが古くなってしまいます。
-/// info | 情報
+/// note | 備考
APISpecは、Marshmallowと同じ開発者により作成されました。
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
OpenAPIという、APIについてのオープンな標準をサポートしている点。
@@ -223,15 +223,15 @@ Flask、Flask-apispec、Marshmallow、Webargsの組み合わせは、**FastAPI**
* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
-そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md)の元となっていました。
+そして、これらのフルスタックジェネレーターは、[**FastAPI** プロジェクトジェネレーター](project-generation.md)の元となっていました。
-/// info | 情報
+/// note | 備考
Flask-apispecはMarshmallowと同じ開発者により作成されました。
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
シリアライゼーションとバリデーションを定義したコードから、OpenAPIスキーマを自動的に生成する点。
@@ -247,11 +247,11 @@ Angular 2にインスピレーションを受けた、統合された依存性
パラメータはTypeScriptの型で記述されるので (Pythonの型ヒントに似ています) 、エディタのサポートはとても良いです。
-しかし、TypeScriptのデータはJavaScriptへのコンパイル後には残されないため、バリデーション、シリアライゼーション、ドキュメント化を同時に定義するのに型に頼ることはできません。そのため、バリデーション、シリアライゼーション、スキーマの自動生成を行うためには、多くの場所でデコレータを追加する必要があり、非常に冗長になります。
+しかし、TypeScriptのデータはJavaScriptへのコンパイル後には残されないため、バリデーション、シリアライゼーション、ドキュメント化を同時に定義するのに型に頼ることはできません。このことといくつかの設計上の判断により、バリデーション、シリアライゼーション、スキーマの自動生成を行うためには、多くの場所でデコレータを追加する必要があり、非常に冗長になります。
入れ子になったモデルをうまく扱えません。そのため、リクエストのJSONボディが内部フィールドを持つJSONオブジェクトで、それが順番にネストされたJSONオブジェクトになっている場合、適切にドキュメント化やバリデーションをすることができません。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
素晴らしいエディターの補助を得るために、Pythonの型ヒントを利用している点。
@@ -271,7 +271,7 @@ Pythonの`asyncio`ループの代わりに、[`uvloop`](https://github.com/Magic
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
物凄い性能を出す方法を見つけた点。
@@ -287,7 +287,7 @@ Falconはもう一つの高性能Pythonフレームワークで、ミニマム
そのため、データのバリデーション、シリアライゼーション、ドキュメント化は、自動的にできずコードの中で行わなければなりません。あるいは、HugのようにFalconの上にフレームワークとして実装されなければなりません。このような分断は、パラメータとして1つのリクエストオブジェクトと1つのレスポンスオブジェクトを持つというFalconのデザインにインスピレーションを受けた他のフレームワークでも起こります。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
素晴らしい性能を得るための方法を見つけた点。
@@ -313,11 +313,11 @@ Pydanticのようなデータのバリデーション、シリアライゼーシ
ルーティングは一つの場所で宣言され、他の場所で宣言された関数を使用します (エンドポイントを扱う関数のすぐ上に配置できるデコレータを使用するのではなく) 。これはFlask (やStarlette) よりも、Djangoに近いです。これは、比較的緊密に結合されているものをコードの中で分離しています。
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
モデルの属性の「デフォルト」値を使用したデータ型の追加バリデーションを定義します。これはエディタの補助を改善するもので、以前はPydanticでは利用できませんでした。
-同様の方法でのバリデーションの宣言をサポートするよう、Pydanticを部分的にアップデートするインスピーレションを与えました。(現在はこれらの機能は全てPydanticで可能となっています。)
+同様の方法でのバリデーションの宣言をサポートするよう、Pydanticを部分的にアップデートするインスピレーションを与えました。(現在はこれらの機能は全てPydanticで可能となっています。)
///
@@ -333,15 +333,15 @@ OpenAPIやJSON Schemaのような標準に基づいたものではありませ
同じフレームワークを使ってAPIとCLIを作成できる、面白く珍しい機能を持っています。
-以前のPythonの同期型Webフレームワーク標準 (WSGI) をベースにしているため、Websocketなどは扱えませんが、それでも高性能です。
+以前のPythonの同期型Webフレームワーク標準 (WSGI) をベースにしているため、WebSocketなどは扱えませんが、それでも高性能です。
-/// info | 情報
+/// note | 備考
-HugはTimothy Crosleyにより作成されました。彼は[`isort`](https://github.com/timothycrosley/isort)など、Pythonのファイル内のインポートの並び替えを自動的におこうなう素晴らしいツールの開発者です。
+HugはTimothy Crosleyにより作成されました。彼は[`isort`](https://github.com/timothycrosley/isort)など、Pythonのファイル内のインポートの並び替えを自動的に行う素晴らしいツールの開発者です。
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**にインスピレーションを与えたアイデア
HugはAPIStarに部分的なインスピレーションを与えており、私が発見した中ではAPIStarと同様に最も期待の持てるツールの一つでした。
@@ -375,7 +375,7 @@ Hugは、**FastAPI**がヘッダーやクッキーを設定するために関数
今ではAPIStarはOpenAPI仕様を検証するためのツールセットであり、ウェブフレームワークではありません。
-/// info | 情報
+/// note | 備考
APIStarはTom Christieにより開発されました。以下の開発者でもあります:
@@ -385,7 +385,7 @@ APIStarはTom Christieにより開発されました。以下の開発者でも
///
-/// check | **FastAPI**へ与えたインスピレーション
+/// tip | **FastAPI**へ与えたインスピレーション
存在そのもの。
@@ -409,7 +409,7 @@ Pydanticは、Pythonの型ヒントを元にデータのバリデーション、
Marshmallowに匹敵しますが、ベンチマークではMarshmallowよりも高速です。また、Pythonの型ヒントを元にしているので、エディタの補助が素晴らしいです。
-/// check | **FastAPI**での使用用途
+/// tip | **FastAPI**での使用用途
データのバリデーション、データのシリアライゼーション、自動的なモデルの (JSON Schemaに基づいた) ドキュメント化の全てを扱えます。
@@ -430,7 +430,7 @@ Starletteは、軽量な
-/// info | 情報
+/// note | 備考
美しいイラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎨
@@ -205,7 +205,7 @@ def results():
ほとんどの時間をカウンター前で待つ 🕙 のに費やしたため、あまり話したり、いちゃついたりできませんでした。😞
-/// info | 情報
+/// note | 備考
美しいイラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎨
@@ -215,7 +215,7 @@ def results():
この「並列ハンバーガー」のシナリオでは、あなたは 2 つのプロセッサ (あなたと好きな人) を持つコンピュータ/プログラム 🤖 で、どちらも長い間 🕙「カウンターでの待機」に注意 ⏯ を専念しています。
-ファストフード店には 8 個のプロセッサ (レジ係/料理人) があります。一方、並行ハンバーガーの店には (レジ係 1、人、料理人 1 人の) 2 個しかなかったかもしれません。
+ファストフード店には 8 個のプロセッサ (レジ係/料理人) があります。一方、並行ハンバーガーの店には (レジ係 1 人、料理人 1 人の) 2 個しかなかったかもしれません。
それでも、最終的な体験は最良とは言えません。😞
diff --git a/docs/ja/docs/deployment/cloud.md b/docs/ja/docs/deployment/cloud.md
index 8357464fb..5d02cacf2 100644
--- a/docs/ja/docs/deployment/cloud.md
+++ b/docs/ja/docs/deployment/cloud.md
@@ -6,7 +6,7 @@ FastAPI アプリケーションは、実質的にどのようなクラウドプ
## FastAPI Cloud { #fastapi-cloud }
-**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の作者と同じチームによって作られています。
+**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の作者および同じチームによって作られています。
API の**構築**、**デプロイ**、**アクセス**までのプロセスを、最小限の手間で効率化します。
@@ -16,7 +16,7 @@ FastAPI Cloud は、*FastAPI and friends* オープンソースプロジェク
## クラウドプロバイダ - スポンサー { #cloud-providers-sponsors }
-他にもいくつかのクラウドプロバイダが ✨ [**FastAPI をスポンサーしています**](../help-fastapi.md#sponsor-the-author) ✨。🙇
+他にもいくつかのクラウドプロバイダが ✨ [**FastAPI をスポンサーしています**](https://github.com/sponsors/tiangolo) ✨。🙇
それらのガイドを参考にし、サービスを試してみるのもよいでしょう:
diff --git a/docs/ja/docs/deployment/concepts.md b/docs/ja/docs/deployment/concepts.md
index 9a23e8e91..58f0f75ba 100644
--- a/docs/ja/docs/deployment/concepts.md
+++ b/docs/ja/docs/deployment/concepts.md
@@ -1,8 +1,6 @@
# デプロイメントのコンセプト { #deployments-concepts }
-**FastAPI**を用いたアプリケーションをデプロイするとき、もしくはどのようなタイプのWeb APIであっても、おそらく気になるコンセプトがいくつかあります。
-
-それらを活用することでアプリケーションを**デプロイするための最適な方法**を見つけることができます。
+**FastAPI**を用いたアプリケーションをデプロイするとき、もしくはどのようなタイプのWeb APIであっても、おそらく気になるコンセプトがいくつかあり、それらを活用することでアプリケーションを**デプロイするための最適な方法**を見つけることができます。
重要なコンセプトのいくつかを紹介します:
@@ -17,9 +15,7 @@
最終的な目的は、**安全な方法で**APIクライアントに**サービスを提供**し、**中断を回避**するだけでなく、**計算リソース**(例えばリモートサーバー/仮想マシン)を可能な限り効率的に使用することです。 🚀
-この章では前述した**コンセプト**についてそれぞれ説明します。
-
-この説明を通して、普段とは非常に異なる環境や存在しないであろう**将来の**環境に対し、デプロイの方法を決める上で必要な**直感**を与えてくれることを願っています。
+ここではこれらの**コンセプト**についてもう少し説明します。それによって、普段とは非常に異なる環境や存在しないであろう**将来の**環境に対し、APIのデプロイ方法を決める上で必要な**直感**を与えてくれることを願っています。
これらのコンセプトを意識することにより、**あなた自身のAPI**をデプロイするための最適な方法を**評価**し、**設計**することができるようになるでしょう。
@@ -31,11 +27,12 @@
[前チャプターのHTTPSについて](https.md)では、HTTPSがどのようにAPIを暗号化するのかについて学びました。
-通常、アプリケーションサーバにとって**外部の**コンポーネントである**TLS Termination Proxy**によって提供されることが一般的です。このプロキシは通信の暗号化を担当します。
+また、HTTPSは通常、アプリケーションサーバにとって**外部の**コンポーネントである**TLS Termination Proxy**によって提供されることも確認しました。
-さらに、HTTPS証明書の更新を担当するものが必要で、同じコンポーネントが担当することもあれば、別のコンポーネントが担当することもあります。
+さらに、**HTTPS証明書の更新**を担当するものが必要で、同じコンポーネントが担当することもあれば、別のコンポーネントが担当することもあります。
### HTTPS 用ツールの例 { #example-tools-for-https }
+
TLS Termination Proxyとして使用できるツールには以下のようなものがあります:
* Traefik
@@ -148,17 +145,17 @@ FastAPIでWeb APIを構築する際に、コードにエラーがある場合、
しかしながら、**アプリケーション全体をクラッシュさせるようなコードを書いて**UvicornとPythonをクラッシュさせるようなケースもあるかもしれません。💥
-それでも、ある箇所でエラーが発生したからといって、アプリケーションを停止させたままにしたくないでしょう。 少なくとも壊れていない*path operation*については、**実行し続けたい**はずです。
+それでも、ある箇所でエラーが発生したからといって、アプリケーションを停止させたままにしたくないでしょう。 少なくとも壊れていない*path operations*については、**実行し続けたい**はずです。
### クラッシュ後の再起動 { #restart-after-crash }
-しかし、実行中の**プロセス**をクラッシュさせるような本当にひどいエラーの場合、少なくとも2〜3回ほどプロセスを**再起動**させる外部コンポーネントが必要でしょう。
+しかし、実行中の**プロセス**をクラッシュさせるような本当にひどいエラーの場合、少なくとも2〜3回ほどプロセスを**再起動**させる外部コンポーネントが必要でしょう...
/// tip | 豆知識
...とはいえ、アプリケーション全体が**すぐにクラッシュする**のであれば、いつまでも再起動し続けるのは意味がないでしょう。しかし、その場合はおそらく開発中か少なくともデプロイ直後に気づくと思われます。
-そこで、**将来**クラッシュする可能性があり、それでも再スタートさせることに意味があるような、主なケースに焦点を当ててみます。
+そこで、**将来**特定のケースで完全にクラッシュする可能性があり、それでも再スタートさせることに意味があるような、主なケースに焦点を当ててみます。
///
@@ -207,9 +204,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
### サーバーメモリ { #server-memory }
-例えば、あなたのコードが **1GBのサイズの機械学習モデル**をロードする場合、APIで1つのプロセスを実行すると、少なくとも1GBのRAMを消費します。
-
-また、**4つのプロセス**(4つのワーカー)を起動すると、それぞれが1GBのRAMを消費します。つまり、合計でAPIは**4GBのRAM**を消費することになります。
+例えば、あなたのコードが **1GBのサイズの機械学習モデル**をロードする場合、APIで1つのプロセスを実行すると、少なくとも1GBのRAMを消費します。また、**4つのプロセス**(4つのワーカー)を起動すると、それぞれが1GBのRAMを消費します。つまり、合計でAPIは**4GBのRAM**を消費することになります。
リモートサーバーや仮想マシンのRAMが3GBしかない場合、4GB以上のRAMをロードしようとすると問題が発生します。🚨
@@ -233,9 +228,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
これを実現するにはいくつかのアプローチがありますが、具体的な戦略については次の章(Dockerやコンテナの章など)で詳しく説明します。
-考慮すべき主な制約は、**パブリックIP**の**ポート**を処理する**単一の**コンポーネントが存在しなければならないということです。
-
-そして、レプリケートされた**プロセス/ワーカー**に通信を**送信**する方法を持つ必要があります。
+考慮すべき主な制約は、**パブリックIP**の**ポート**を処理する**単一の**コンポーネントが存在しなければならないということです。そして、レプリケートされた**プロセス/ワーカー**に通信を**送信**する方法を持つ必要があります。
考えられる組み合わせと戦略をいくつか紹介します:
@@ -243,7 +236,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
* 1つのUvicornの**プロセスマネージャー**が**IP**と**ポート**をリッスンし、**複数のUvicornワーカー・プロセス**を起動する。
* **Kubernetes**やその他の分散**コンテナ・システム**
* **Kubernetes**レイヤーの何かが**IP**と**ポート**をリッスンする。レプリケーションは、**複数のコンテナ**にそれぞれ**1つのUvicornプロセス**を実行させることで行われる。
-* **クラウド・サービス**によるレプリケーション
+* これを代わりに処理する**クラウド・サービス**
* クラウド・サービスはおそらく**あなたのためにレプリケーションを処理**します。**実行するプロセス**や使用する**コンテナイメージ**を定義できるかもしれませんが、いずれにせよ、それはおそらく**単一のUvicornプロセス**であり、クラウドサービスはそのレプリケーションを担当するでしょう。
/// tip | 豆知識
@@ -264,9 +257,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
そのため、アプリケーションを開始する前の**事前のステップ**を実行する**単一のプロセス**を用意したいと思われます。
-そして、それらの事前のステップを実行しているのが単一のプロセスであることを確認する必要があります。このことはその後アプリケーション自体のために**複数のプロセス**(複数のワーカー)を起動した場合も同様です。
-
-これらのステップが**複数のプロセス**によって実行された場合、**並列**に実行されることによって作業が**重複**することになります。そして、もしそのステップがデータベースのマイグレーションのような繊細なものであった場合、互いに競合を引き起こす可能性があります。
+そして、それらの事前のステップを実行しているのが単一のプロセスであることを確認する必要があります。これはその後アプリケーション自体のために**複数のプロセス**(複数のワーカー)を起動した場合も同様です。これらのステップが**複数のプロセス**によって実行された場合、**並列**に実行されることによって作業が**重複**することになります。そして、もしそのステップがデータベースのマイグレーションのような繊細なものであった場合、互いに競合を引き起こす可能性があります。
もちろん、事前のステップを何度も実行しても問題がない場合もあり、その際は対処がかなり楽になります。
@@ -284,7 +275,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
考えられるアイデアをいくつか挙げてみます:
-* アプリコンテナの前に実行されるKubernetesのInitコンテナ
+* アプリコンテナの前に実行されるKubernetesの「Init Container」
* 事前のステップを実行し、アプリケーションを起動するbashスクリプト
* 利用するbashスクリプトを起動/再起動したり、エラーを検出したりする方法は以前として必要になるでしょう。
@@ -296,7 +287,7 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
## リソースの利用 { #resource-utilization }
-あなたのサーバーは**リソース**であり、プログラムを実行しCPUの計算時間や利用可能なRAMメモリを消費または**利用**することができます。
+あなたのサーバーは(複数の場合も)**リソース**であり、プログラムを実行しCPUの計算時間や利用可能なRAMメモリを消費または**利用**することができます。
システムリソースをどれくらい消費/利用したいですか? 「少ない方が良い」と考えるのは簡単かもしれないですが、実際には、**クラッシュせずに可能な限り**最大限に活用したいでしょう。
@@ -309,11 +300,9 @@ FastAPI アプリケーションでは、Uvicorn を実行する `fastapi` コ
この場合、**1つ余分なサーバー**を用意し、その上でいくつかのプロセスを実行し、すべてのサーバーが**十分なRAMとCPU時間を持つようにする**のがよいでしょう。
-また、何らかの理由でAPIの利用が急増する可能性もあります。もしかしたらそれが流行ったのかもしれないし、他のサービスやボットが使い始めたのかもしれないです。そのような場合に備えて、余分なリソースを用意しておくと安心でしょう。
-
-例えば、リソース使用率の**50%から90%の範囲**で**任意の数字**をターゲットとすることができます。
+また、何らかの理由でAPIの利用が**急増**する可能性もあります。もしかしたらそれが流行ったのかもしれないし、他のサービスやボットが使い始めたのかもしれないです。そのような場合に備えて、余分なリソースを用意しておくと安心でしょう。
-重要なのは、デプロイメントを微調整するためにターゲットを設定し測定することが、おそらく使用したい主要な要素であることです。
+例えば、リソース使用率の**50%から90%の範囲**で**任意の数字**をターゲットとすることができます。重要なのは、デプロイメントを微調整するために測定して使用したい主要な要素は、おそらくそれらであるということです。
`htop`のような単純なツールを使って、サーバーで使用されているCPUやRAM、あるいは各プロセスで使用されている量を見ることができます。あるいは、より複雑な監視ツールを使って、サーバに分散して使用することもできます。
diff --git a/docs/ja/docs/deployment/docker.md b/docs/ja/docs/deployment/docker.md
index 6248e69b7..26e9d5647 100644
--- a/docs/ja/docs/deployment/docker.md
+++ b/docs/ja/docs/deployment/docker.md
@@ -11,7 +11,7 @@ Linuxコンテナの使用には、**セキュリティ**、**反復可能性(
///
-Dockerfile Preview 👀
+Dockerfile プレビュー 👀
```Dockerfile
FROM python:3.14
@@ -26,7 +26,7 @@ COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
-# If running behind a proxy like Nginx or Traefik add --proxy-headers
+# Nginx や Traefik のようなプロキシの背後で実行する場合は --proxy-headers を追加します
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]
```
@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
-/// info | 情報
+/// note | 備考
パッケージの依存関係を定義しインストールするためのフォーマットやツールは他にもあります。
@@ -243,14 +243,14 @@ Docker命令 [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) は2つ
✅ **Exec** 形式:
```Dockerfile
-# ✅ Do this
+# ✅ こうしてください
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
```
⛔️ **Shell** 形式:
```Dockerfile
-# ⛔️ Don't do this
+# ⛔️ こうしないでください
CMD fastapi run app/main.py --port 80
```
@@ -340,7 +340,7 @@ $ docker build -t myimage .
///
-### Dockerコンテナの起動する { #start-the-docker-container }
+### Dockerコンテナを起動する { #start-the-docker-container }
* イメージに基づいてコンテナを実行します:
@@ -417,7 +417,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
コンテナという観点から、[デプロイのコンセプト](concepts.md)に共通するいくつかについて、もう一度説明しましょう。
-コンテナは主に、アプリケーションの**ビルドとデプロイ**のプロセスを簡素化するためのツールですが、これらの**デプロイのコンセプト**を扱うための特定のアプローチを強制するものではなく、いくつかの戦略があります。
+コンテナは主に、アプリケーションの**ビルドとデプロイ**のプロセスを簡素化するための工具ですが、これらの**デプロイのコンセプト**を扱うための特定のアプローチを強制するものではなく、いくつかの戦略があります。
**良いニュース**は、それぞれの異なる戦略には、すべてのデプロイメントのコンセプトをカバーする方法があるということです。🎉
@@ -562,7 +562,7 @@ Docker Composeで**単一サーバ**(クラスタではない)にデプロ
複数の**コンテナ**があり、おそらくそれぞれが**単一のプロセス**を実行している場合(例えば、**Kubernetes**クラスタなど)、レプリケートされたワーカーコンテナを実行する**前に**、単一のコンテナで**事前のステップ**の作業を行う**別のコンテナ**を持ちたいと思うでしょう。
-/// info | 情報
+/// note | 備考
もしKubernetesを使用している場合, これはおそらく[Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)でしょう。
diff --git a/docs/ja/docs/deployment/fastapicloud.md b/docs/ja/docs/deployment/fastapicloud.md
index 3dd5685a2..d8c1cb2ec 100644
--- a/docs/ja/docs/deployment/fastapicloud.md
+++ b/docs/ja/docs/deployment/fastapicloud.md
@@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
-[FastAPI Cloud](https://fastapicloud.com) に **コマンド1つ** でデプロイできます。まだならウェイティングリストにご登録ください。🚀
-
-## ログイン { #login }
-
-すでに **FastAPI Cloud** アカウントをお持ちであることを確認してください(ウェイティングリストからご招待しています 😉)。
-
-次にログインします:
-
-
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud 🚀
-```
-
-
```console
-// Go to the home directory
+// ホームディレクトリに移動
$ cd
-// Create a directory for all your code projects
+// すべてのコードプロジェクト用のディレクトリを作成
$ mkdir code
-// Enter into that code directory
+// その code ディレクトリに入る
$ cd code
-// Create a directory for this project
+// このプロジェクト用のディレクトリを作成
$ mkdir awesome-project
-// Enter into that project directory
+// そのプロジェクトディレクトリに入る
$ cd awesome-project
```
@@ -554,7 +555,7 @@ Pythonをインストールしたとき、ファイルを含んだいくつか
```console
-// Don't run this now, it's just an example 🤓
+// 今は実行しないでください。これは単なる例です 🤓
$ pip install "fastapi[standard]"
---> 100%
```
@@ -800,7 +801,7 @@ $ cd ~/code/prisoner-of-azkaban
$ python main.py
-// Error importing sirius, it's not installed 😱
+// sirius のインポートエラー。インストールされていません 😱
Traceback (most recent call last):
File "main.py", line 1, in
import sirius
@@ -808,20 +809,20 @@ Traceback (most recent call last):
```console
$ cd ~/code/prisoner-of-azkaban
-// You don't need to be in the old directory to deactivate, you can do it wherever you are, even after going to the other project 😎
+// 無効化のために古いディレクトリにいる必要はありません。どこにいても、他のプロジェクトに移動した後でも実行できます 😎
$ deactivate
-// Activate the virtual environment in prisoner-of-azkaban/.venv 🚀
+// prisoner-of-azkaban/.venv の仮想環境を有効化する 🚀
$ source .venv/bin/activate
-// Now when you run python, it will find the package sirius installed in this virtual environment ✨
+// これで python を実行すると、この仮想環境にインストールされた sirius パッケージが見つかります ✨
$ python main.py
I solemnly swear 🐺
diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml
deleted file mode 100644
index de18856f4..000000000
--- a/docs/ja/mkdocs.yml
+++ /dev/null
@@ -1 +0,0 @@
-INHERIT: ../en/mkdocs.yml
diff --git a/docs/ko/docs/_llm-test.md b/docs/ko/docs/_llm-test.md
index 8b7b275c0..9e9d0ee73 100644
--- a/docs/ko/docs/_llm-test.md
+++ b/docs/ko/docs/_llm-test.md
@@ -7,11 +7,11 @@
사용 방법은 다음과 같습니다:
* 언어별 프롬프트 `docs/{language code}/llm-prompt.md`를 준비합니다.
-* 이 문서를 원하는 대상 언어로 새로 번역합니다(예: `translate.py`의 `translate-page` 명령). 그러면 `docs/{language code}/docs/_llm-test.md` 아래에 번역이 생성됩니다.
+* 이 문서를 원하는 대상 언어로 새로 번역합니다(예: `translate.py`의 `translate-page` 명령어). 그러면 `docs/{language code}/docs/_llm-test.md` 아래에 번역이 생성됩니다.
* 번역에서 문제가 없는지 확인합니다.
* 필요하다면 언어별 프롬프트, 일반 프롬프트, 또는 영어 문서를 개선합니다.
* 그런 다음 번역에서 남아 있는 문제를 수동으로 수정해 좋은 번역이 되게 합니다.
-* 좋은 번역을 둔 상태에서 다시 번역합니다. 이상적인 결과는 LLM이 더 이상 번역에 변경을 만들지 않는 것입니다. 이는 일반 프롬프트와 언어별 프롬프트가 가능한 한 최선이라는 뜻입니다(때때로 몇 가지 seemingly random 변경을 할 수 있는데, 그 이유는 [LLM은 결정론적 알고리즘이 아니기 때문](https://doublespeak.chat/#/handbook#deterministic-output)입니다).
+* 좋은 번역을 둔 상태에서 다시 번역합니다. 이상적인 결과는 LLM이 더 이상 번역에 변경을 만들지 않는 것입니다. 이는 일반 프롬프트와 언어별 프롬프트가 가능한 한 최선이라는 뜻입니다(때때로 몇 가지 겉보기에 무작위인 변경을 할 수 있는데, 그 이유는 [LLM은 결정론적 알고리즘이 아니기 때문](https://doublespeak.chat/#/handbook#deterministic-output)입니다).
테스트:
@@ -124,10 +124,6 @@ works(foo="bar") # 이건 동작합니다 🎉
//// tab | 테스트
-/// info | 정보
-일부 텍스트
-///
-
/// note | 참고
일부 텍스트
///
@@ -136,10 +132,6 @@ works(foo="bar") # 이건 동작합니다 🎉
일부 텍스트
///
-/// check | 확인
-일부 텍스트
-///
-
/// tip | 팁
일부 텍스트
///
@@ -297,7 +289,7 @@ works(foo="bar") # 이건 동작합니다 🎉
* 애플리케이션을 서빙하다
* 페이지를 서빙하다
-* 앱
+* 애플리케이션
* 애플리케이션
* 요청
diff --git a/docs/ko/docs/advanced/additional-responses.md b/docs/ko/docs/advanced/additional-responses.md
index e43d7c727..87866946b 100644
--- a/docs/ko/docs/advanced/additional-responses.md
+++ b/docs/ko/docs/advanced/additional-responses.md
@@ -34,7 +34,7 @@
///
-/// info | 정보
+/// note | 참고
`model` 키는 OpenAPI의 일부가 아닙니다.
@@ -183,7 +183,7 @@
///
-/// info | 정보
+/// note | 참고
`responses` 파라미터에서 다른 미디어 타입을 명시적으로 지정하지 않는 한, FastAPI는 응답이 주요 응답 클래스와 동일한 미디어 타입(기본값 `application/json`)을 가진다고 가정합니다.
diff --git a/docs/ko/docs/advanced/additional-status-codes.md b/docs/ko/docs/advanced/additional-status-codes.md
index 6251b68b2..4762c8eed 100644
--- a/docs/ko/docs/advanced/additional-status-codes.md
+++ b/docs/ko/docs/advanced/additional-status-codes.md
@@ -8,7 +8,7 @@
기본 상태 코드와 별도로 추가 상태 코드를 반환하려면 `JSONResponse`와 같이 `Response`를 직접 반환하고 추가 상태 코드를 직접 설정할 수 있습니다.
-예를 들어 항목을 업데이트할 수 있는 *경로 처리*가 있고 성공 시 200 “OK”의 HTTP 상태 코드를 반환한다고 가정해 보겠습니다.
+예를 들어 항목을 업데이트할 수 있는 *경로 처리*가 있고 성공 시 200 "OK"의 HTTP 상태 코드를 반환한다고 가정해 보겠습니다.
하지만 새로운 항목을 허용하기를 원할 것입니다. 그리고 항목이 이전에 존재하지 않았다면 이를 생성하고 HTTP 상태 코드 201 "Created"를 반환합니다.
diff --git a/docs/ko/docs/advanced/advanced-dependencies.md b/docs/ko/docs/advanced/advanced-dependencies.md
index 2755986a2..49b96bdad 100644
--- a/docs/ko/docs/advanced/advanced-dependencies.md
+++ b/docs/ko/docs/advanced/advanced-dependencies.md
@@ -79,7 +79,7 @@ checker(q="somequery")
### `yield`와 `scope`가 있는 의존성 { #dependencies-with-yield-and-scope }
-0.121.0 버전에서 FastAPI는 `Depends(scope="function")` 지원을 추가했습니다.
+0.121.0 버전에서 FastAPI는 `yield`가 있는 의존성을 위한 `Depends(scope="function")` 지원을 추가했습니다.
`Depends(scope="function")`를 사용하면, `yield` 이후의 종료 코드는 *경로 처리 함수*가 끝난 직후(클라이언트에 응답이 반환되기 전)에 실행됩니다.
@@ -99,7 +99,7 @@ FastAPI 0.118.0 이전에는 `yield`가 있는 의존성을 사용하면, *경
이 동작은 0.118.0에서 되돌려져, `yield` 이후의 종료 코드가 응답이 전송된 뒤 실행되도록 변경되었습니다.
-/// info | 정보
+/// note | 참고
아래에서 보시겠지만, 이는 0.106.0 버전 이전의 동작과 매우 비슷하지만, 여러 개선 사항과 코너 케이스에 대한 버그 수정이 포함되어 있습니다.
diff --git a/docs/ko/docs/advanced/custom-response.md b/docs/ko/docs/advanced/custom-response.md
index e85ec3c74..d81a9dafb 100644
--- a/docs/ko/docs/advanced/custom-response.md
+++ b/docs/ko/docs/advanced/custom-response.md
@@ -41,7 +41,7 @@
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
-/// info | 정보
+/// note | 참고
`response_class` 매개변수는 응답의 "미디어 타입"을 정의하는 데에도 사용됩니다.
@@ -65,7 +65,7 @@
///
-/// info | 정보
+/// note | 참고
물론 실제 `Content-Type` 헤더, 상태 코드 등은 반환된 `Response` 객체에서 가져옵니다.
diff --git a/docs/ko/docs/advanced/dataclasses.md b/docs/ko/docs/advanced/dataclasses.md
index 77e8d0464..609cb6cd9 100644
--- a/docs/ko/docs/advanced/dataclasses.md
+++ b/docs/ko/docs/advanced/dataclasses.md
@@ -18,7 +18,7 @@ FastAPI는 **Pydantic** 위에 구축되어 있으며, 지금까지는 Pydantic
이는 Pydantic 모델을 사용할 때와 같은 방식으로 동작합니다. 그리고 실제로도 내부적으로는 Pydantic을 사용해 같은 방식으로 구현됩니다.
-/// info
+/// note | 참고
dataclasses는 Pydantic 모델이 할 수 있는 모든 것을 할 수는 없다는 점을 기억하세요.
diff --git a/docs/ko/docs/advanced/events.md b/docs/ko/docs/advanced/events.md
index 708ad443f..13db29ef2 100644
--- a/docs/ko/docs/advanced/events.md
+++ b/docs/ko/docs/advanced/events.md
@@ -6,15 +6,15 @@
이 코드는 애플리케이션이 요청을 받기 **시작**하기 전에 실행되고, 요청 처리를 **끝낸 직후**에 실행되기 때문에 전체 애플리케이션의 **수명(lifespan)**을 다룹니다(잠시 후 "lifespan"이라는 단어가 중요해집니다 😉).
-이는 전체 앱에서 사용해야 하는 **자원**을 설정하고, 요청 간에 **공유되는** 자원을 설정하고, 그리고/또는 이후에 **정리**하는 데 매우 유용할 수 있습니다. 예를 들어, 데이터베이스 연결 풀 또는 공유 머신러닝 모델을 로드하는 경우입니다.
+이는 전체 애플리케이션에서 사용해야 하는 **자원**을 설정하고, 요청 간에 **공유되는** 자원을 설정하고, 그리고/또는 이후에 **정리**하는 데 매우 유용할 수 있습니다. 예를 들어, 데이터베이스 연결 풀 또는 공유 머신러닝 모델을 로드하는 경우입니다.
## 사용 사례 { #use-case }
먼저 **사용 사례** 예시로 시작한 다음, 이를 어떻게 해결할지 살펴보겠습니다.
-요청을 처리하는 데 사용하고 싶은 **머신러닝 모델**이 있다고 상상해 봅시다. 🤖
+요청을 처리하는 데 사용하고 싶은 몇 가지 **머신러닝 모델**이 있다고 상상해 봅시다. 🤖
-동일한 모델이 요청 간에 공유되므로, 요청마다 모델이 하나씩 있거나 사용자마다 하나씩 있는 등의 방식이 아닙니다.
+동일한 모델들이 요청 간에 공유되므로, 요청마다 모델이 하나씩 있거나 사용자마다 하나씩 있는 등의 방식이 아닙니다.
모델을 로드하는 데 **상당한 시간이 걸린다고 상상해 봅시다**, 왜냐하면 모델이 **디스크에서 많은 데이터를 읽어야** 하기 때문입니다. 그래서 모든 요청마다 이를 수행하고 싶지는 않습니다.
@@ -24,7 +24,7 @@
## Lifespan { #lifespan }
-`FastAPI` 앱의 `lifespan` 매개변수와 "컨텍스트 매니저"를 사용하여 *시작*과 *종료* 로직을 정의할 수 있습니다(컨텍스트 매니저가 무엇인지 잠시 후에 보여드리겠습니다).
+`FastAPI` 애플리케이션의 `lifespan` 매개변수와 "컨텍스트 매니저"를 사용하여 *시작*과 *종료* 로직을 정의할 수 있습니다(컨텍스트 매니저가 무엇인지 잠시 후에 보여드리겠습니다).
예제로 시작한 다음 자세히 살펴보겠습니다.
@@ -32,7 +32,7 @@
{* ../../docs_src/events/tutorial003_py310.py hl[16,19] *}
-여기서는 `yield` 이전에 (가짜) 모델 함수를 머신러닝 모델이 들어 있는 딕셔너리에 넣어 모델을 로드하는 비용이 큰 *시작* 작업을 시뮬레이션합니다. 이 코드는 애플리케이션이 **요청을 받기 시작하기 전**, *시작* 동안에 실행됩니다.
+여기서는 `yield` 이전에 (가짜) 모델 함수를 머신러닝 모델들이 들어 있는 딕셔너리에 넣어 모델을 로드하는 비용이 큰 *시작* 작업을 시뮬레이션합니다. 이 코드는 애플리케이션이 **요청을 받기 시작하기 전**, *시작* 동안에 실행됩니다.
그리고 `yield` 직후에는 모델을 언로드합니다. 이 코드는 애플리케이션이 **요청 처리를 마친 후**, *종료* 직전에 실행됩니다. 예를 들어 메모리나 GPU 같은 자원을 해제할 수 있습니다.
@@ -80,7 +80,7 @@ async with lifespan(app):
위의 코드 예제에서는 직접 사용하지 않고, FastAPI에 전달하여 FastAPI가 이를 사용하도록 합니다.
-`FastAPI` 앱의 `lifespan` 매개변수는 **비동기 컨텍스트 매니저**를 받으므로, 새 `lifespan` 비동기 컨텍스트 매니저를 전달할 수 있습니다.
+`FastAPI` 애플리케이션의 `lifespan` 매개변수는 **비동기 컨텍스트 매니저**를 받으므로, 새 `lifespan` 비동기 컨텍스트 매니저를 전달할 수 있습니다.
{* ../../docs_src/events/tutorial003_py310.py hl[22] *}
@@ -88,7 +88,7 @@ async with lifespan(app):
/// warning | 경고
-*시작*과 *종료*를 처리하는 권장 방법은 위에서 설명한 대로 `FastAPI` 앱의 `lifespan` 매개변수를 사용하는 것입니다. `lifespan` 매개변수를 제공하면 `startup`과 `shutdown` 이벤트 핸들러는 더 이상 호출되지 않습니다. `lifespan`만 쓰거나 이벤트만 쓰거나 둘 중 하나이지, 둘 다는 아닙니다.
+*시작*과 *종료*를 처리하는 권장 방법은 위에서 설명한 대로 `FastAPI` 애플리케이션의 `lifespan` 매개변수를 사용하는 것입니다. `lifespan` 매개변수를 제공하면 `startup`과 `shutdown` 이벤트 핸들러는 더 이상 호출되지 않습니다. `lifespan`만 쓰거나 이벤트만 쓰거나 둘 중 하나이지, 둘 다는 아닙니다.
이 부분은 아마 건너뛰셔도 됩니다.
@@ -120,7 +120,7 @@ async with lifespan(app):
여기서 `shutdown` 이벤트 핸들러 함수는 텍스트 한 줄 `"Application shutdown"`을 `log.txt` 파일에 기록합니다.
-/// info | 정보
+/// note | 참고
`open()` 함수에서 `mode="a"`는 "append"(추가)를 의미하므로, 기존 내용을 덮어쓰지 않고 파일에 있던 내용 뒤에 줄이 추가됩니다.
@@ -150,9 +150,9 @@ async with lifespan(app):
호기심 많은 분들을 위한 기술적인 세부사항입니다. 🤓
-내부적으로 ASGI 기술 사양에서는 이것이 [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)의 일부이며, `startup`과 `shutdown`이라는 이벤트를 정의합니다.
+내부적으로 ASGI 기술 사양에서는 이것이 [Lifespan 프로토콜](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)의 일부이며, `startup`과 `shutdown`이라는 이벤트를 정의합니다.
-/// info | 정보
+/// note | 참고
Starlette `lifespan` 핸들러에 대해서는 [Starlette의 Lifespan 문서](https://www.starlette.dev/lifespan/)에서 더 읽어볼 수 있습니다.
diff --git a/docs/ko/docs/advanced/generate-clients.md b/docs/ko/docs/advanced/generate-clients.md
index bf29e52e9..9cbe46ff8 100644
--- a/docs/ko/docs/advanced/generate-clients.md
+++ b/docs/ko/docs/advanced/generate-clients.md
@@ -2,7 +2,7 @@
**FastAPI**는 **OpenAPI** 사양을 기반으로 하므로, FastAPI의 API는 많은 도구가 이해할 수 있는 표준 형식으로 설명할 수 있습니다.
-덕분에 여러 언어용 클라이언트 라이브러리(**SDKs**), 최신 **문서**, 그리고 코드와 동기화된 **테스트** 또는 **자동화 워크플로**를 쉽게 생성할 수 있습니다.
+덕분에 최신 **문서**, 여러 언어용 클라이언트 라이브러리(**SDKs**), 그리고 코드와 동기화된 **테스트** 또는 **자동화 워크플로**를 쉽게 생성할 수 있습니다.
이 가이드에서는 FastAPI 백엔드용 **TypeScript SDK**를 생성하는 방법을 배웁니다.
@@ -20,22 +20,6 @@ FastAPI는 **OpenAPI 3.1** 사양을 자동으로 생성하므로, 사용하는
///
-## FastAPI 스폰서의 SDK 생성기 { #sdk-generators-from-fastapi-sponsors }
-
-이 섹션에서는 FastAPI를 후원하는 회사들이 제공하는 **벤처 투자 기반** 및 **기업 지원** 솔루션을 소개합니다. 이 제품들은 고품질로 생성된 SDK에 더해 **추가 기능**과 **통합**을 제공합니다.
-
-✨ [**FastAPI 후원하기**](../help-fastapi.md#sponsor-the-author) ✨를 통해, 이 회사들은 프레임워크와 그 **생태계**가 건강하고 **지속 가능**하게 유지되도록 돕습니다.
-
-또한 이들의 후원은 FastAPI **커뮤니티**(여러분)에 대한 강한 헌신을 보여주며, **좋은 서비스**를 제공하는 것뿐 아니라, 견고하고 활발한 프레임워크인 FastAPI를 지원하는 데에도 관심이 있음을 나타냅니다. 🙇
-
-예를 들어 다음을 사용해 볼 수 있습니다:
-
-* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
-* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
-* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
-
-이 중 일부는 오픈 소스이거나 무료 티어를 제공하므로, 비용 부담 없이 사용해 볼 수 있습니다. 다른 상용 SDK 생성기도 있으며 온라인에서 찾을 수 있습니다. 🤓
-
## TypeScript SDK 만들기 { #create-a-typescript-sdk }
간단한 FastAPI 애플리케이션으로 시작해 보겠습니다:
diff --git a/docs/ko/docs/advanced/json-base64-bytes.md b/docs/ko/docs/advanced/json-base64-bytes.md
index b5e55a41a..b24acda86 100644
--- a/docs/ko/docs/advanced/json-base64-bytes.md
+++ b/docs/ko/docs/advanced/json-base64-bytes.md
@@ -4,7 +4,7 @@
## Base64와 파일 { #base64-vs-files }
-바이너리 데이터 업로드에는 [요청 파일](../tutorial/request-files.md)을, 바이너리 데이터 전송에는 [커스텀 응답 - FileResponse](./custom-response.md#fileresponse--fileresponse-)를 사용할 수 있는지 먼저 고려하세요. JSON으로 인코딩하는 대신 말입니다.
+바이너리 데이터 업로드에는 [요청 파일](../tutorial/request-files.md)을, 바이너리 데이터 전송에는 [커스텀 응답 - FileResponse](./custom-response.md#fileresponse)를 사용할 수 있는지 먼저 고려하세요. JSON으로 인코딩하는 대신 말입니다.
JSON은 UTF-8로 인코딩된 문자열만 포함할 수 있으므로, 원시 바이트를 그대로 담을 수 없습니다.
diff --git a/docs/ko/docs/advanced/openapi-callbacks.md b/docs/ko/docs/advanced/openapi-callbacks.md
index fa71acdcf..a44997ba2 100644
--- a/docs/ko/docs/advanced/openapi-callbacks.md
+++ b/docs/ko/docs/advanced/openapi-callbacks.md
@@ -165,15 +165,15 @@ https://www.external.org/events/invoices/2expen51ve
### 콜백 라우터 추가하기 { #add-the-callback-router }
-이 시점에서, 위에서 만든 콜백 라우터 안에 *콜백 경로 처리(들)*(즉 *external developer*가 *external API*에 구현해야 하는 것들)을 준비했습니다.
+이 시점에서, 위에서 만든 콜백 라우터 안에 *콜백 경로 처리(들)*(즉 *외부 개발자*가 *external API*에 구현해야 하는 것들)을 준비했습니다.
-이제 *여러분의 API 경로 처리 데코레이터*에서 `callbacks` 파라미터를 사용해, 그 콜백 라우터의 `.routes` 속성(실제로는 routes/*경로 처리*의 `list`)을 전달합니다:
+이제 *여러분의 API 경로 처리 데코레이터*에서 `callbacks` 파라미터를 사용해, 그 콜백 라우터의 `.routes` 속성을 전달합니다:
{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip | 팁
-`callback=`에 라우터 자체(`invoices_callback_router`)를 넘기는 것이 아니라, `invoices_callback_router.routes`처럼 `.routes` 속성을 넘긴다는 점에 주목하세요.
+`callbacks=`에 라우터 자체(`invoices_callback_router`)를 넘기는 것이 아니라, `invoices_callback_router.routes`처럼 `.routes` 속성을 넘긴다는 점에 주목하세요. FastAPI는 이 라우트들을 사용하여 콜백 OpenAPI 문서를 생성합니다.
///
diff --git a/docs/ko/docs/advanced/openapi-webhooks.md b/docs/ko/docs/advanced/openapi-webhooks.md
index e40a7bb18..bb3f7895c 100644
--- a/docs/ko/docs/advanced/openapi-webhooks.md
+++ b/docs/ko/docs/advanced/openapi-webhooks.md
@@ -22,7 +22,7 @@ webhook의 URL을 등록하는 방법과 실제로 그 요청을 보내는 코
이렇게 하면 사용자가 여러분의 **webhook** 요청을 받기 위해 **자신들의 API를 구현**하기가 훨씬 쉬워지고, 경우에 따라서는 자신의 API 코드 일부를 자동 생성할 수도 있습니다.
-/// info | 정보
+/// note | 참고
Webhooks는 OpenAPI 3.1.0 이상에서 사용할 수 있으며, FastAPI `0.99.0` 이상에서 지원됩니다.
@@ -36,7 +36,7 @@ Webhooks는 OpenAPI 3.1.0 이상에서 사용할 수 있으며, FastAPI `0.99.0`
여러분이 정의한 webhook은 **OpenAPI** 스키마와 자동 **docs UI**에 포함됩니다.
-/// info | 정보
+/// note | 참고
`app.webhooks` 객체는 실제로 `APIRouter`일 뿐이며, 여러 파일로 앱을 구조화할 때 사용하는 것과 동일한 타입입니다.
diff --git a/docs/ko/docs/advanced/path-operation-advanced-configuration.md b/docs/ko/docs/advanced/path-operation-advanced-configuration.md
index 253a6f302..398816005 100644
--- a/docs/ko/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ko/docs/advanced/path-operation-advanced-configuration.md
@@ -2,7 +2,7 @@
## OpenAPI operationId { #openapi-operationid }
-/// warning | 경고
+/// warning
OpenAPI “전문가”가 아니라면, 아마 이 내용은 필요하지 않을 것입니다.
@@ -16,19 +16,13 @@ OpenAPI “전문가”가 아니라면, 아마 이 내용은 필요하지 않
### *경로 처리 함수* 이름을 operationId로 사용하기 { #using-the-path-operation-function-name-as-the-operationid }
-API의 함수 이름을 `operationId`로 사용하고 싶다면, 모든 API를 순회하면서 `APIRoute.name`을 사용해 각 *경로 처리*의 `operation_id`를 덮어쓸 수 있습니다.
+API의 함수 이름을 `operationId`로 사용하고 싶다면, `FastAPI`에 사용자 정의 `generate_unique_id_function`을 전달할 수 있습니다.
-모든 *경로 처리*를 추가한 뒤에 수행해야 합니다.
+이 함수는 각 `APIRoute`를 받아 그 *경로 처리*에 사용할 `operationId`를 반환합니다.
-{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
-/// tip | 팁
-
-`app.openapi()`를 수동으로 호출한다면, 그 전에 `operationId`들을 업데이트해야 합니다.
-
-///
-
-/// warning | 경고
+/// warning
이렇게 할 경우, 각 *경로 처리 함수*의 이름이 고유하도록 보장해야 합니다.
@@ -78,7 +72,7 @@ OpenAPI 명세에서는 이를 [Operation Object](https://github.com/OAI/OpenAPI
이 *경로 처리* 전용 OpenAPI 스키마는 보통 **FastAPI**가 자동으로 생성하지만, 확장할 수도 있습니다.
-/// tip | 팁
+/// tip
이는 저수준 확장 지점입니다.
@@ -163,7 +157,7 @@ OpenAPI 명세에서는 이를 [Operation Object](https://github.com/OAI/OpenAPI
{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[24:31] *}
-/// tip | 팁
+/// tip
여기서는 같은 Pydantic 모델을 재사용합니다.
diff --git a/docs/ko/docs/advanced/response-change-status-code.md b/docs/ko/docs/advanced/response-change-status-code.md
index f30474917..5e54dc75e 100644
--- a/docs/ko/docs/advanced/response-change-status-code.md
+++ b/docs/ko/docs/advanced/response-change-status-code.md
@@ -1,5 +1,6 @@
# 응답 - 상태 코드 변경 { #response-change-status-code }
+
기본 [응답 상태 코드 설정](../tutorial/response-status-code.md)이 가능하다는 걸 이미 알고 계실 겁니다.
하지만 경우에 따라 기본 설정과 다른 상태 코드를 반환해야 할 때가 있습니다.
diff --git a/docs/ko/docs/advanced/response-cookies.md b/docs/ko/docs/advanced/response-cookies.md
index b73d71969..f17046e7b 100644
--- a/docs/ko/docs/advanced/response-cookies.md
+++ b/docs/ko/docs/advanced/response-cookies.md
@@ -26,7 +26,7 @@
{* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
-/// tip
+/// tip | 팁
`Response` 매개변수를 사용하지 않고 응답을 직접 반환하는 경우, FastAPI는 이를 직접 반환한다는 점에 유의하세요.
diff --git a/docs/ko/docs/advanced/response-directly.md b/docs/ko/docs/advanced/response-directly.md
index 301a259b2..fc2efc728 100644
--- a/docs/ko/docs/advanced/response-directly.md
+++ b/docs/ko/docs/advanced/response-directly.md
@@ -18,7 +18,7 @@
`Response` 또는 그 하위 클래스를 반환할 수 있습니다.
-/// info | 정보
+/// note | 참고
`JSONResponse` 자체도 `Response`의 하위 클래스입니다.
diff --git a/docs/ko/docs/advanced/response-headers.md b/docs/ko/docs/advanced/response-headers.md
index e7157d8f4..769972967 100644
--- a/docs/ko/docs/advanced/response-headers.md
+++ b/docs/ko/docs/advanced/response-headers.md
@@ -1,5 +1,6 @@
# 응답 헤더 { #response-headers }
+
## `Response` 매개변수 사용하기 { #use-a-response-parameter }
여러분은 *경로 처리 함수*에서 `Response` 타입의 매개변수를 선언할 수 있습니다 (쿠키와 같이 사용할 수 있습니다).
diff --git a/docs/ko/docs/advanced/security/oauth2-scopes.md b/docs/ko/docs/advanced/security/oauth2-scopes.md
index 5a785ff9f..265f82aa7 100644
--- a/docs/ko/docs/advanced/security/oauth2-scopes.md
+++ b/docs/ko/docs/advanced/security/oauth2-scopes.md
@@ -4,9 +4,9 @@
이를 통해 OAuth2 표준을 따르는 더 세밀한 권한 시스템을 OpenAPI 애플리케이션(및 API 문서)에 통합할 수 있습니다.
-스코프를 사용하는 OAuth2는 Facebook, Google, GitHub, Microsoft, X(Twitter) 등 많은 대형 인증 제공자가 사용하는 메커니즘입니다. 이들은 이를 통해 사용자와 애플리케이션에 특정 권한을 제공합니다.
+스코프를 사용하는 OAuth2는 Facebook, Google, GitHub, Microsoft, X (Twitter) 등 많은 대형 인증 제공자가 사용하는 메커니즘입니다. 이들은 이를 통해 사용자와 애플리케이션에 특정 권한을 제공합니다.
-Facebook, Google, GitHub, Microsoft, X(Twitter)로 “로그인”할 때마다, 해당 애플리케이션은 스코프가 있는 OAuth2를 사용하고 있습니다.
+Facebook, Google, GitHub, Microsoft, X (Twitter)로 “로그인”할 때마다, 해당 애플리케이션은 스코프가 있는 OAuth2를 사용하고 있습니다.
이 섹션에서는 **FastAPI** 애플리케이션에서 동일한 “스코프가 있는 OAuth2”로 인증(Authentication)과 인가(Authorization)를 관리하는 방법을 확인합니다.
@@ -46,7 +46,7 @@ OpenAPI(예: API 문서)에서는 “security schemes”를 정의할 수 있습
* `instagram_basic` 는 Facebook/Instagram에서 사용합니다.
* `https://www.googleapis.com/auth/drive` 는 Google에서 사용합니다.
-/// info | 정보
+/// note | 참고
OAuth2에서 “스코프”는 필요한 특정 권한을 선언하는 문자열일 뿐입니다.
@@ -126,7 +126,7 @@ OAuth2 입장에서는 그저 문자열입니다.
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
-/// info | 기술 세부사항
+/// note | 기술 세부사항
`Security`는 실제로 `Depends`의 서브클래스이며, 나중에 보게 될 추가 매개변수 하나만 더 있습니다.
diff --git a/docs/ko/docs/advanced/settings.md b/docs/ko/docs/advanced/settings.md
index 49a2b640e..f7e8c20e7 100644
--- a/docs/ko/docs/advanced/settings.md
+++ b/docs/ko/docs/advanced/settings.md
@@ -1,5 +1,6 @@
# 설정과 환경 변수 { #settings-and-environment-variables }
+
많은 경우 애플리케이션에는 외부 설정이나 구성(예: secret key, 데이터베이스 자격 증명, 이메일 서비스 자격 증명 등)이 필요할 수 있습니다.
이러한 설정 대부분은 데이터베이스 URL처럼 변동 가능(변경될 수 있음)합니다. 그리고 많은 설정은 secret처럼 민감할 수 있습니다.
diff --git a/docs/ko/docs/advanced/stream-data.md b/docs/ko/docs/advanced/stream-data.md
index 5eda170cb..94276876f 100644
--- a/docs/ko/docs/advanced/stream-data.md
+++ b/docs/ko/docs/advanced/stream-data.md
@@ -2,9 +2,9 @@
JSON으로 구조화할 수 있는 데이터를 스트리밍하려면 [JSON Lines 스트리밍](../tutorial/stream-json-lines.md)을 사용하세요.
-하지만 순수 바이너리 데이터나 문자열을 스트리밍하려면 다음과 같이 하면 됩니다.
+하지만 **순수 바이너리 데이터**나 문자열을 스트리밍하려면 다음과 같이 하면 됩니다.
-/// info | 정보
+/// note | 참고
FastAPI 0.134.0에 추가되었습니다.
@@ -12,21 +12,21 @@ FastAPI 0.134.0에 추가되었습니다.
## 사용 예시 { #use-cases }
-예를 들어 AI LLM 서비스의 출력에서 바로 순수 문자열을 스트리밍하고 싶다면 이를 사용할 수 있습니다.
+예를 들어 **AI LLM** 서비스의 출력에서 바로 순수 문자열을 스트리밍하고 싶다면 이를 사용할 수 있습니다.
-또한 큰 바이너리 파일을 스트리밍하는 데 사용할 수 있습니다. 한 번에 모두 메모리로 읽지 않고, 읽는 즉시 데이터 청크를 순차적으로 스트리밍합니다.
+또한 **큰 바이너리 파일**을 스트리밍하는 데 사용할 수 있습니다. 한 번에 모두 메모리로 읽지 않고, 읽는 즉시 데이터 청크를 순차적으로 스트리밍합니다.
-이 방식으로 비디오나 오디오를 스트리밍할 수도 있으며, 처리하면서 생성된 데이터를 곧바로 전송할 수도 있습니다.
+이 방식으로 **비디오**나 **오디오**를 스트리밍할 수도 있으며, 처리하면서 생성된 데이터를 곧바로 전송할 수도 있습니다.
## `yield`와 함께 `StreamingResponse` 사용하기 { #a-streamingresponse-with-yield }
-경로 처리 함수에서 `response_class=StreamingResponse`를 선언하면 `yield`를 사용해 데이터 청크를 순차적으로 보낼 수 있습니다.
+*경로 처리 함수*에서 `response_class=StreamingResponse`를 선언하면 `yield`를 사용해 데이터 청크를 순차적으로 보낼 수 있습니다.
{* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
FastAPI는 각 데이터 청크를 있는 그대로 `StreamingResponse`에 전달하며, JSON 등으로 변환하려고 하지 않습니다.
-### async가 아닌 경로 처리 함수 { #non-async-path-operation-functions }
+### async가 아닌 *경로 처리 함수* { #non-async-path-operation-functions }
`async`가 없는 일반 `def` 함수에서도 동일하게 `yield`를 사용할 수 있습니다.
@@ -40,7 +40,7 @@ FastAPI는 데이터를 Pydantic으로 JSON으로 변환하거나 어떤 방식
{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
-이는 곧 `StreamingResponse`를 사용할 때 타입 애너테이션과 무관하게, 전송 기준에 맞춰 바이트 데이터를 생성하고 인코딩할 자유와 책임이 여러분에게 있음을 의미합니다. 🤓
+이는 곧 `StreamingResponse`를 사용할 때 타입 애너테이션과 무관하게, 전송 기준에 맞춰 바이트 데이터를 생성하고 인코딩할 **자유**와 **책임**이 여러분에게 있음을 의미합니다. 🤓
### 바이트 스트리밍 { #stream-bytes }
@@ -58,7 +58,7 @@ FastAPI는 데이터를 Pydantic으로 JSON으로 변환하거나 어떤 방식
{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
-그런 다음 경로 처리 함수에서 `response_class=PNGStreamingResponse`로 이 새 클래스를 사용할 수 있습니다:
+그런 다음 *경로 처리 함수*에서 `response_class=PNGStreamingResponse`로 이 새 클래스를 사용할 수 있습니다:
{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
@@ -90,7 +90,7 @@ FastAPI는 데이터를 Pydantic으로 JSON으로 변환하거나 어떤 방식
또한 디스크나 네트워크에서 읽기 때문에, 많은 경우 읽기 작업은 이벤트 루프를 막을 수 있는 블로킹 연산입니다.
-/// info | 정보
+/// note | 참고
위의 예시는 예외적인 경우입니다. `io.BytesIO` 객체는 이미 메모리에 있으므로 읽기가 아무 것도 차단하지 않습니다.
@@ -98,7 +98,7 @@ FastAPI는 데이터를 Pydantic으로 JSON으로 변환하거나 어떤 방식
///
-이벤트 루프가 블로킹되는 것을 피하려면 경로 처리 함수를 `async def` 대신 일반 `def`로 선언하세요. 그러면 FastAPI가 스레드풀 워커에서 실행하여 메인 루프가 막히지 않도록 합니다.
+이벤트 루프가 블로킹되는 것을 피하려면 *경로 처리 함수*를 `async def` 대신 일반 `def`로 선언하세요. 그러면 FastAPI가 스레드풀 워커에서 실행하여 메인 루프가 막히지 않도록 합니다.
{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
diff --git a/docs/ko/docs/advanced/strict-content-type.md b/docs/ko/docs/advanced/strict-content-type.md
index 82683e15c..39ecde4b6 100644
--- a/docs/ko/docs/advanced/strict-content-type.md
+++ b/docs/ko/docs/advanced/strict-content-type.md
@@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac
이 설정을 사용하면 `Content-Type` 헤더가 없는 요청도 본문이 JSON으로 파싱됩니다. 이는 이전 버전의 FastAPI와 동일한 동작입니다.
-/// info | 정보
+/// note | 참고
이 동작과 설정은 FastAPI 0.132.0에 추가되었습니다.
diff --git a/docs/ko/docs/advanced/websockets.md b/docs/ko/docs/advanced/websockets.md
index 0b920c3b3..b37d93804 100644
--- a/docs/ko/docs/advanced/websockets.md
+++ b/docs/ko/docs/advanced/websockets.md
@@ -111,7 +111,7 @@ WebSocket 엔드포인트에서 `fastapi`에서 다음을 가져와 사용할
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
-/// info | 정보
+/// note | 참고
WebSocket이기 때문에 `HTTPException`을 발생시키는 것은 적절하지 않습니다. 대신 `WebSocketException`을 발생시킵니다.
diff --git a/docs/ko/docs/advanced/wsgi.md b/docs/ko/docs/advanced/wsgi.md
index 921e426ef..2b3012a46 100644
--- a/docs/ko/docs/advanced/wsgi.md
+++ b/docs/ko/docs/advanced/wsgi.md
@@ -6,7 +6,7 @@
## `WSGIMiddleware` 사용하기 { #using-wsgimiddleware }
-/// info | 정보
+/// note | 참고
이를 사용하려면 `a2wsgi`를 설치해야 합니다. 예: `pip install a2wsgi`
@@ -42,7 +42,7 @@
Hello, World from Flask!
```
-그리고 [http://localhost:8000/v2](http://localhost:8000/v2)로 이동하면 **FastAPI**의 응답을 볼 수 있습니다:
+그리고 [http://localhost:8000/v2](http://localhost:8000/v2)로 이동하면 FastAPI의 응답을 볼 수 있습니다:
```JSON
{
diff --git a/docs/ko/docs/alternatives.md b/docs/ko/docs/alternatives.md
index 4f92f69d2..1bd0ba56a 100644
--- a/docs/ko/docs/alternatives.md
+++ b/docs/ko/docs/alternatives.md
@@ -24,7 +24,7 @@
### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
-Django REST framework는 Django를 기반으로 Web API를 구축하기 위한 유연한 toolkit으로 만들어졌고, Django의 API 기능을 개선하기 위한 목적이었습니다.
+Django REST Framework는 Django를 기반으로 Web API를 구축하기 위한 유연한 toolkit으로 만들어졌고, Django의 API 기능을 개선하기 위한 목적이었습니다.
Mozilla, Red Hat, Eventbrite를 포함해 많은 회사에서 사용합니다.
@@ -36,7 +36,7 @@ Django REST Framework는 Tom Christie가 만들었습니다. **FastAPI**의 기
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
자동 API 문서화 웹 사용자 인터페이스를 제공하기.
@@ -56,7 +56,7 @@ Flask는 "microframework"로, Django에 기본으로 포함된 데이터베이
Flask의 단순함을 고려하면 API를 구축하는 데 잘 맞는 것처럼 보였습니다. 다음으로 찾고자 했던 것은 Flask용 "Django REST Framework"였습니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
micro-framework가 되기. 필요한 도구와 구성요소를 쉽게 조합할 수 있도록 하기.
@@ -80,7 +80,7 @@ Requests는 매우 단순하고 직관적인 설계를 가졌고, 합리적인
그래서 공식 웹사이트에서 말하듯이:
-> Requests is one of the most downloaded Python packages of all time
+> Requests는 역대 가장 많이 다운로드된 Python 패키지 중 하나입니다
사용 방법은 매우 간단합니다. 예를 들어 `GET` 요청을 하려면 다음처럼 작성합니다:
@@ -98,7 +98,7 @@ def read_url():
`requests.get(...)`와 `@app.get(...)`의 유사성을 확인해 보세요.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
* 단순하고 직관적인 API를 갖기.
* HTTP method 이름(operations)을 직접, 직관적이고 명확한 방식으로 사용하기.
@@ -118,7 +118,7 @@ def read_url():
그래서 2.0 버전을 이야기할 때는 "Swagger"라고 말하는 것이 일반적이고, 3+ 버전은 "OpenAPI"라고 말하는 것이 일반적입니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
커스텀 schema 대신, API 사양을 위한 열린 표준을 채택하고 사용하기.
@@ -147,7 +147,7 @@ API에 또 하나 크게 필요한 기능은 데이터 검증입니다. 특정
하지만 Python type hints가 존재하기 전에 만들어졌습니다. 그래서 각 스키마를 정의하려면 Marshmallow가 제공하는 특정 유틸리티와 클래스를 사용해야 합니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
데이터 타입과 검증을 제공하는 "schema"를 코드로 정의하고, 이를 자동으로 활용하기.
@@ -163,13 +163,13 @@ Webargs는 Flask를 포함한 여러 framework 위에서 이를 제공하기 위
아주 훌륭한 도구이며, 저도 **FastAPI**를 만들기 전에 많이 사용했습니다.
-/// info | 정보
+/// note | 참고
Webargs는 Marshmallow와 같은 개발자들이 만들었습니다.
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
들어오는 요청 데이터의 자동 검증을 갖기.
@@ -193,13 +193,13 @@ Flask, Starlette, Responder 등에서 이런 방식으로 동작합니다.
에디터가 이를 크게 도와주지 못합니다. 또한 파라미터나 Marshmallow schema를 수정해놓고 YAML docstring도 같이 수정하는 것을 잊어버리면, 생성된 schema는 오래된 상태가 됩니다.
-/// info | 정보
+/// note | 참고
APISpec은 Marshmallow와 같은 개발자들이 만들었습니다.
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
API를 위한 열린 표준인 OpenAPI를 지원하기.
@@ -223,15 +223,15 @@ Flask + Flask-apispec + Marshmallow + Webargs 조합은 **FastAPI**를 만들기
* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
-그리고 이 동일한 full-stack generator들이 [**FastAPI** Project Generators](project-generation.md)의 기반이 되었습니다.
+그리고 이 동일한 full-stack generator들이 [**FastAPI** 프로젝트 생성기](project-generation.md)의 기반이 되었습니다.
-/// info | 정보
+/// note | 참고
Flask-apispec은 Marshmallow와 같은 개발자들이 만들었습니다.
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
serialization과 validation을 정의하는 동일한 코드로부터 OpenAPI schema를 자동 생성하기.
@@ -251,7 +251,7 @@ Angular 2에서 영감을 받은 의존성 주입 시스템이 통합되어 있
중첩 모델을 잘 처리하지 못합니다. 즉, 요청의 JSON body가 내부 필드를 가진 JSON 객체이고 그 내부 필드들이 다시 중첩된 JSON 객체인 경우, 제대로 문서화하고 검증할 수 없습니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
Python 타입을 사용해 뛰어난 에디터 지원을 제공하기.
@@ -271,7 +271,7 @@ Python 타입을 사용해 뛰어난 에디터 지원을 제공하기.
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
미친 성능을 낼 수 있는 방법을 찾기.
@@ -283,11 +283,11 @@ Python 타입을 사용해 뛰어난 에디터 지원을 제공하기.
Falcon은 또 다른 고성능 Python framework로, 최소한으로 설계되었고 Hug 같은 다른 framework의 기반으로 동작하도록 만들어졌습니다.
-함수가 두 개의 파라미터(하나는 "request", 하나는 "response")를 받도록 설계되어 있습니다. 그런 다음 request에서 일부를 "읽고", response에 일부를 "작성"합니다. 이 설계 때문에, 표준 Python type hints를 함수 파라미터로 사용해 요청 파라미터와 body를 선언하는 것이 불가능합니다.
+함수가 두 개의 파라미터(하나는 "요청", 하나는 "응답")를 받도록 설계되어 있습니다. 그런 다음 요청에서 일부를 "읽고", 응답에 일부를 "작성"합니다. 이 설계 때문에, 표준 Python type hints를 함수 파라미터로 사용해 요청 파라미터와 body를 선언하는 것이 불가능합니다.
-따라서 데이터 검증, serialization, 문서화는 자동으로 되지 않고 코드로 해야 합니다. 또는 Hug처럼 Falcon 위에 framework를 얹어 구현해야 합니다. request 객체 하나와 response 객체 하나를 파라미터로 받는 Falcon의 설계에서 영감을 받은 다른 framework에서도 같은 구분이 나타납니다.
+따라서 데이터 검증, serialization, 문서화는 자동으로 되지 않고 코드로 해야 합니다. 또는 Hug처럼 Falcon 위에 framework를 얹어 구현해야 합니다. 요청 객체 하나와 응답 객체 하나를 파라미터로 받는 Falcon의 설계에서 영감을 받은 다른 framework에서도 같은 구분이 나타납니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
훌륭한 성능을 얻는 방법을 찾기.
@@ -313,7 +313,7 @@ Pydantic 같은 서드파티 라이브러리를 사용해 데이터 검증/seria
Route는 한 곳에서 선언하고, 다른 곳에 선언된 함수를 사용합니다(엔드포인트를 처리하는 함수 바로 위에 둘 수 있는 decorator를 사용하는 대신). 이는 Flask(및 Starlette)보다는 Django 방식에 가깝습니다. 코드에서 상대적으로 강하게 결합된 것들을 분리해 놓습니다.
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
모델 속성의 "default" 값으로 데이터 타입에 대한 추가 검증을 정의하기. 이는 에디터 지원을 개선하며, 이전에는 Pydantic에 없었습니다.
@@ -335,13 +335,13 @@ OpenAPI나 JSON Schema 같은 표준을 기반으로 하지 않았기 때문에
동기식 Python 웹 framework의 이전 표준(WSGI) 기반이어서 Websockets와 다른 것들을 처리할 수는 없지만, 성능은 여전히 높습니다.
-/// info | 정보
+/// note | 참고
Hug는 Timothy Crosley가 만들었습니다. Python 파일에서 import를 자동으로 정렬하는 훌륭한 도구인 [`isort`](https://github.com/timothycrosley/isort)의 제작자이기도 합니다.
///
-/// check | **FastAPI**에 영감을 준 아이디어들
+/// tip | **FastAPI**에 영감을 준 아이디어
Hug는 APIStar의 일부에 영감을 주었고, 저는 APIStar와 함께 Hug를 가장 유망한 도구 중 하나로 보았습니다.
@@ -375,7 +375,7 @@ Body schema 정의는 Pydantic처럼 동일한 Python type hints를 사용하지
이제 APIStar는 web framework가 아니라 OpenAPI 사양을 검증하기 위한 도구 모음입니다.
-/// info | 정보
+/// note | 참고
APIStar는 Tom Christie가 만들었습니다. 다음을 만든 사람과 동일합니다:
@@ -385,7 +385,7 @@ APIStar는 Tom Christie가 만들었습니다. 다음을 만든 사람과 동일
///
-/// check | **FastAPI**에 영감을 준 것
+/// tip | **FastAPI**에 영감을 준 점
존재하게 만들기.
@@ -409,7 +409,7 @@ Pydantic은 Python type hints를 기반으로 데이터 검증, serialization,
Marshmallow와 비교할 수 있습니다. 다만 benchmark에서 Marshmallow보다 빠릅니다. 그리고 동일한 Python type hints를 기반으로 하므로 에디터 지원도 훌륭합니다.
-/// check | **FastAPI**가 이를 사용하는 목적
+/// tip | **FastAPI**는 이를 사용해
모든 데이터 검증, 데이터 serialization, 자동 모델 문서화(JSON Schema 기반)를 처리하기.
@@ -430,7 +430,7 @@ Starlette는 경량
-/// info | 정보
+/// note | 참고
아름다운 일러스트: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
@@ -205,7 +206,7 @@ def results():
대부분의 시간을 카운터 앞에서 기다리는 데 🕙 썼기 때문에, 대화하거나 작업을 걸 시간은 많지 않았습니다. 😞
-/// info | 정보
+/// note | 참고
아름다운 일러스트: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
diff --git a/docs/ko/docs/deployment/cloud.md b/docs/ko/docs/deployment/cloud.md
index 9d9dc93a3..106a9ec3a 100644
--- a/docs/ko/docs/deployment/cloud.md
+++ b/docs/ko/docs/deployment/cloud.md
@@ -10,13 +10,13 @@
최소한의 노력으로 API를 **구축**, **배포**, **접근**하는 과정을 간소화합니다.
-FastAPI로 앱을 빌드할 때의 동일한 **개발자 경험**을 클라우드에 **배포**하는 데에도 제공합니다. 🎉
+FastAPI로 애플리케이션을 빌드할 때의 동일한 **개발자 경험**을 클라우드에 **배포**하는 데에도 제공합니다. 🎉
FastAPI Cloud는 *FastAPI and friends* 오픈 소스 프로젝트의 주요 후원자이자 자금 제공자입니다. ✨
## 클라우드 제공업체 - 후원자들 { #cloud-providers-sponsors }
-다른 몇몇 클라우드 제공업체들도 ✨ [**FastAPI를 후원합니다**](../help-fastapi.md#sponsor-the-author) ✨. 🙇
+다른 몇몇 클라우드 제공업체들도 ✨ [**FastAPI를 후원합니다**](https://github.com/sponsors/tiangolo) ✨. 🙇
가이드를 따라 하고 서비스를 사용해보기 위해 이들도 고려해볼 수 있습니다:
diff --git a/docs/ko/docs/deployment/concepts.md b/docs/ko/docs/deployment/concepts.md
index a5c5e53e0..0bfd9dbad 100644
--- a/docs/ko/docs/deployment/concepts.md
+++ b/docs/ko/docs/deployment/concepts.md
@@ -104,7 +104,7 @@ TLS Termination Proxy로 사용할 수 있는 도구는 예를 들어 다음과
### 시작 시 자동 실행 { #run-automatically-on-startup }
-일반적으로 서버 프로그램(예: Uvicorn)은 서버가 시작될 때 자동으로 시작되고, **사람의 개입** 없이도 FastAPI 앱을 실행하는 프로세스가 항상 실행 중이도록(예: FastAPI 앱을 실행하는 Uvicorn) 구성하고 싶을 것입니다.
+일반적으로 서버 프로그램(예: Uvicorn)은 서버가 시작될 때 자동으로 시작되고, **사람의 개입** 없이도 FastAPI 애플리케이션을 실행하는 프로세스가 항상 실행 중이도록(예: FastAPI 애플리케이션을 실행하는 Uvicorn) 구성하고 싶을 것입니다.
### 별도의 프로그램 { #separate-program }
@@ -159,7 +159,7 @@ FastAPI로 웹 API를 만들 때 코드에 오류가 있으면, FastAPI는 보
///
-애플리케이션을 재시작하는 역할은 **외부 컴포넌트**가 맡는 편이 보통 좋습니다. 그 시점에는 Uvicorn과 Python을 포함한 애플리케이션이 이미 크래시했기 때문에, 같은 앱의 같은 코드 안에서 이를 해결할 방법이 없기 때문입니다.
+애플리케이션을 재시작하는 역할은 **외부 컴포넌트**가 맡는 편이 보통 좋습니다. 그 시점에는 Uvicorn과 Python을 포함한 애플리케이션이 이미 크래시했기 때문에, 같은 애플리케이션의 같은 코드 안에서 이를 해결할 방법이 없기 때문입니다.
### 자동 재시작을 위한 도구 예시 { #example-tools-to-restart-automatically }
@@ -243,7 +243,7 @@ FastAPI 애플리케이션은 Uvicorn을 실행하는 `fastapi` 명령 같은
**컨테이너**, Docker, Kubernetes에 대한 일부 내용이 아직은 잘 이해되지 않아도 괜찮습니다.
-다음 장에서 컨테이너 이미지, Docker, Kubernetes 등을 더 설명하겠습니다: [컨테이너에서 FastAPI - Docker](docker.md).
+향후 장에서 컨테이너 이미지, Docker, Kubernetes 등을 더 설명하겠습니다: [컨테이너에서 FastAPI - Docker](docker.md).
///
@@ -275,13 +275,13 @@ FastAPI 애플리케이션은 Uvicorn을 실행하는 `fastapi` 명령 같은
가능한 아이디어는 다음과 같습니다:
-* 앱 컨테이너보다 먼저 실행되는 Kubernetes의 “Init Container”
+* 애플리케이션 컨테이너보다 먼저 실행되는 Kubernetes의 “Init Container”
* 사전 단계를 실행한 다음 애플리케이션을 시작하는 bash 스크립트
* 이 bash 스크립트를 시작/재시작하고, 오류를 감지하는 등의 방법도 여전히 필요합니다.
/// tip | 팁
-컨테이너로 이를 처리하는 더 구체적인 예시는 다음 장에서 제공하겠습니다: [컨테이너에서 FastAPI - Docker](docker.md).
+컨테이너로 이를 처리하는 더 구체적인 예시는 향후 장에서 제공하겠습니다: [컨테이너에서 FastAPI - Docker](docker.md).
///
diff --git a/docs/ko/docs/deployment/docker.md b/docs/ko/docs/deployment/docker.md
index d965af1d1..db166bf24 100644
--- a/docs/ko/docs/deployment/docker.md
+++ b/docs/ko/docs/deployment/docker.md
@@ -11,7 +11,7 @@ FastAPI 애플리케이션을 배포할 때 일반적인 접근 방법은 **리
///
-Dockerfile Preview 👀
+Dockerfile 미리보기 👀
```Dockerfile
FROM python:3.14
@@ -26,7 +26,7 @@ COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
-# If running behind a proxy like Nginx or Traefik add --proxy-headers
+# Nginx나 Traefik 같은 프록시 뒤에서 실행한다면 --proxy-headers를 추가하세요
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]
```
@@ -46,7 +46,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
**컨테이너**는 **컨테이너 이미지**에서 실행됩니다.
-컨테이너 이미지는 컨테이너에 있어야 하는 모든 파일, 환경 변수, 기본 명령/프로그램의 **정적** 버전입니다. 여기서 **정적**이라는 것은 컨테이너 **이미지**가 실행 중이거나 수행되는 것이 아니라, 패키징된 파일과 메타데이터일 뿐이라는 뜻입니다.
+컨테이너 이미지는 컨테이너에 있어야 하는 모든 파일, 환경 변수, 기본 명령어/프로그램의 **정적** 버전입니다. 여기서 **정적**이라는 것은 컨테이너 **이미지**가 실행 중이거나 수행되는 것이 아니라, 패키징된 파일과 메타데이터일 뿐이라는 뜻입니다.
저장된 정적 콘텐츠인 "**컨테이너 이미지**"와 달리, "**컨테이너**"는 보통 실행 중인 인스턴스, 즉 **실행되는** 대상을 의미합니다.
@@ -62,7 +62,7 @@ Docker는 **컨테이너 이미지**와 **컨테이너**를 생성하고 관리
또한 [Docker Hub](https://hub.docker.com/)에는 다양한 도구, 환경, 데이터베이스, 애플리케이션을 위한 미리 만들어진 **공식 컨테이너 이미지**가 공개되어 있습니다.
-예를 들어, 공식 [Python Image](https://hub.docker.com/_/python)가 있습니다.
+예를 들어, 공식 [Python 이미지](https://hub.docker.com/_/python)가 있습니다.
그리고 데이터베이스 등 다양한 용도의 다른 이미지도 많이 있습니다. 예를 들면:
@@ -81,11 +81,11 @@ Docker나 Kubernetes 같은 모든 컨테이너 관리 시스템에는 이러한
## 컨테이너와 프로세스 { #containers-and-processes }
-**컨테이너 이미지**는 보통 **컨테이너**가 시작될 때 실행되어야 하는 기본 프로그램/명령과 해당 프로그램에 전달할 매개변수를 메타데이터에 포함합니다. 커맨드 라인에서 실행할 때와 매우 유사합니다.
+**컨테이너 이미지**는 보통 **컨테이너**가 시작될 때 실행되어야 하는 기본 프로그램/명령어와 해당 프로그램에 전달할 매개변수를 메타데이터에 포함합니다. 커맨드 라인에서 실행할 때와 매우 유사합니다.
-**컨테이너**가 시작되면 해당 명령/프로그램을 실행합니다(다만 오버라이드하여 다른 명령/프로그램을 실행하게 할 수도 있습니다).
+**컨테이너**가 시작되면 해당 명령어/프로그램을 실행합니다(다만 오버라이드하여 다른 명령어/프로그램을 실행하게 할 수도 있습니다).
-컨테이너는 **메인 프로세스**(명령 또는 프로그램)가 실행되는 동안 실행됩니다.
+컨테이너는 **메인 프로세스**(명령어 또는 프로그램)가 실행되는 동안 실행됩니다.
컨테이너는 보통 **단일 프로세스**를 가지지만, 메인 프로세스에서 서브프로세스를 시작할 수도 있으며, 그러면 같은 컨테이너에 **여러 프로세스**가 존재하게 됩니다.
@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
-/// info | 정보
+/// note | 참고
패키지 의존성을 정의하고 설치하는 다른 형식과 도구도 있습니다.
@@ -218,11 +218,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
따라서 컨테이너 이미지 빌드 시간을 최적화하려면 `Dockerfile`의 **끝부분 근처**에 두는 것이 중요합니다.
-6. 내부적으로 Uvicorn을 사용하는 `fastapi run`을 사용하도록 **명령**을 설정합니다.
+6. 내부적으로 Uvicorn을 사용하는 `fastapi run`을 사용하도록 **명령어**를 설정합니다.
`CMD`는 문자열 리스트를 받으며, 각 문자열은 커맨드 라인에서 공백으로 구분해 입력하는 항목들입니다.
- 이 명령은 **현재 작업 디렉터리**에서 실행되며, 이는 위에서 `WORKDIR /code`로 설정한 `/code` 디렉터리와 같습니다.
+ 이 명령어는 **현재 작업 디렉터리**에서 실행되며, 이는 위에서 `WORKDIR /code`로 설정한 `/code` 디렉터리와 같습니다.
/// tip | 팁
@@ -258,7 +258,7 @@ FastAPI가 정상적으로 종료(graceful shutdown)되고 [lifespan 이벤트](
자세한 내용은 [shell and exec form에 대한 Docker 문서](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)를 참고하세요.
-이는 `docker compose`를 사용할 때 꽤 눈에 띌 수 있습니다. 좀 더 기술적인 상세 내용은 Docker Compose FAQ 섹션을 참고하세요: [Why do my services take 10 seconds to recreate or stop?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
+이는 `docker compose`를 사용할 때 꽤 눈에 띌 수 있습니다. 좀 더 기술적인 상세 내용은 Docker Compose FAQ 섹션을 참고하세요: [왜 내 서비스는 다시 생성되거나 중지되는 데 10초가 걸리나요?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
#### 디렉터리 구조 { #directory-structure }
@@ -409,7 +409,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
2. 단일 파일 `main.py`에 있는 애플리케이션을 제공(serve)하기 위해 `fastapi run`을 사용합니다.
-`fastapi run`에 파일을 전달하면, 이것이 패키지의 일부가 아닌 단일 파일이라는 것을 자동으로 감지하고, 어떻게 임포트해서 FastAPI 앱을 제공할지 알아냅니다. 😎
+`fastapi run`에 파일을 전달하면, 이것이 패키지의 일부가 아닌 단일 파일이라는 것을 자동으로 감지하고, 어떻게 임포트해서 FastAPI 애플리케이션을 제공할지 알아냅니다. 😎
## 배포 개념 { #deployment-concepts }
@@ -472,17 +472,17 @@ HTTPS에 사용되는 동일한 **TLS 종료 프록시** 컴포넌트가 **로
///
-또한 컨테이너로 작업할 때, 이를 시작하고 관리하는 시스템은 이미 해당 **로드 밸런서**(또는 **TLS 종료 프록시**)에서 여러분의 앱이 있는 컨테이너로 **네트워크 통신**(예: HTTP 요청)을 전달하는 내부 도구를 가지고 있습니다.
+또한 컨테이너로 작업할 때, 이를 시작하고 관리하는 시스템은 이미 해당 **로드 밸런서**(또는 **TLS 종료 프록시**)에서 여러분의 애플리케이션이 있는 컨테이너로 **네트워크 통신**(예: HTTP 요청)을 전달하는 내부 도구를 가지고 있습니다.
### 하나의 로드 밸런서 - 여러 워커 컨테이너 { #one-load-balancer-multiple-worker-containers }
-**Kubernetes** 같은 분산 컨테이너 관리 시스템에서는 내부 네트워킹 메커니즘을 통해, 메인 **포트**에서 대기하는 단일 **로드 밸런서**가 여러분의 앱을 실행하는 **여러 컨테이너**로 통신(요청)을 전달할 수 있습니다.
+**Kubernetes** 같은 분산 컨테이너 관리 시스템에서는 내부 네트워킹 메커니즘을 통해, 메인 **포트**에서 대기하는 단일 **로드 밸런서**가 여러분의 애플리케이션을 실행하는 **여러 컨테이너**로 통신(요청)을 전달할 수 있습니다.
-앱을 실행하는 각 컨테이너는 보통 **프로세스 하나만** 가집니다(예: FastAPI 애플리케이션을 실행하는 Uvicorn 프로세스). 모두 같은 것을 실행하는 **동일한 컨테이너**이지만, 각자 고유한 프로세스, 메모리 등을 가집니다. 이렇게 하면 CPU의 **서로 다른 코어** 또는 **서로 다른 머신**에서 **병렬화**의 이점을 얻을 수 있습니다.
+애플리케이션을 실행하는 각 컨테이너는 보통 **프로세스 하나만** 가집니다(예: FastAPI 애플리케이션을 실행하는 Uvicorn 프로세스). 모두 같은 것을 실행하는 **동일한 컨테이너**이지만, 각자 고유한 프로세스, 메모리 등을 가집니다. 이렇게 하면 CPU의 **서로 다른 코어** 또는 **서로 다른 머신**에서 **병렬화**의 이점을 얻을 수 있습니다.
-그리고 **로드 밸런서**가 있는 분산 컨테이너 시스템은 여러분의 앱을 실행하는 각 컨테이너에 **번갈아가며** 요청을 **분산**합니다. 따라서 각 요청은 여러분의 앱을 실행하는 여러 **복제된 컨테이너** 중 하나에서 처리될 수 있습니다.
+그리고 **로드 밸런서**가 있는 분산 컨테이너 시스템은 여러분의 애플리케이션을 실행하는 각 컨테이너에 **번갈아가며** 요청을 **분산**합니다. 따라서 각 요청은 여러분의 애플리케이션을 실행하는 여러 **복제된 컨테이너** 중 하나에서 처리될 수 있습니다.
-또한 보통 이 **로드 밸런서**는 클러스터 내 *다른* 앱으로 가는 요청(예: 다른 도메인, 또는 다른 URL 경로 접두사 아래로 가는 요청)도 처리할 수 있으며, 그 통신을 클러스터에서 실행 중인 *그 다른* 애플리케이션의 올바른 컨테이너로 전달할 수 있습니다.
+또한 보통 이 **로드 밸런서**는 클러스터 내 *다른* 애플리케이션으로 가는 요청(예: 다른 도메인, 또는 다른 URL 경로 접두사 아래로 가는 요청)도 처리할 수 있으며, 그 통신을 클러스터에서 실행 중인 *그 다른* 애플리케이션의 올바른 컨테이너로 전달할 수 있습니다.
### 컨테이너당 하나의 프로세스 { #one-process-per-container }
@@ -556,7 +556,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
**여러 컨테이너**가 있고 각 컨테이너가 보통 **단일 프로세스**를 실행한다면(예: **Kubernetes** 클러스터), 복제된 워커 컨테이너를 실행하기 **전에**, 단일 컨테이너에서 단일 프로세스로 **시작 전 사전 단계**를 수행하는 **별도의 컨테이너**를 두고 싶을 가능성이 큽니다.
-/// info | 정보
+/// note | 참고
Kubernetes를 사용한다면, 이는 아마도 [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)일 것입니다.
@@ -566,7 +566,7 @@ Kubernetes를 사용한다면, 이는 아마도 [Init Container](https://kuberne
### 단일 컨테이너 { #single-container }
-**단일 컨테이너**에서 여러 **워커 프로세스**(또는 단일 프로세스)를 시작하는 단순한 셋업이라면, 앱이 있는 프로세스를 시작하기 직전에 같은 컨테이너에서 시작 전 사전 단계를 실행할 수 있습니다.
+**단일 컨테이너**에서 여러 **워커 프로세스**(또는 단일 프로세스)를 시작하는 단순한 셋업이라면, 애플리케이션이 있는 프로세스를 시작하기 직전에 같은 컨테이너에서 시작 전 사전 단계를 실행할 수 있습니다.
### 베이스 도커 이미지 { #base-docker-image }
@@ -582,7 +582,7 @@ Kubernetes를 사용한다면, 이는 아마도 [Init Container](https://kuberne
이 Docker 이미지는 Uvicorn이 죽은 워커를 관리하고 재시작하는 기능을 지원하지 않던 시기에 만들어졌습니다. 그래서 Gunicorn과 Uvicorn을 함께 사용해야 했고, Gunicorn이 Uvicorn 워커 프로세스를 관리하고 재시작하도록 하기 위해 상당한 복잡성이 추가되었습니다.
-하지만 이제 Uvicorn(그리고 `fastapi` 명령)은 `--workers`를 지원하므로, 베이스 도커 이미지를 사용하는 대신 직접 이미지를 빌드하지 않을 이유가 없습니다(코드 양도 사실상 거의 같습니다 😅).
+하지만 이제 Uvicorn(그리고 `fastapi` 명령어)은 `--workers`를 지원하므로, 베이스 도커 이미지를 사용하는 대신 직접 이미지를 빌드하지 않을 이유가 없습니다(코드 양도 사실상 거의 같습니다 😅).
///
@@ -600,7 +600,7 @@ Kubernetes를 사용한다면, 이는 아마도 [Init Container](https://kuberne
## `uv`를 사용하는 도커 이미지 { #docker-image-with-uv }
-프로젝트를 설치하고 관리하기 위해 [uv](https://github.com/astral-sh/uv)를 사용한다면, [uv Docker guide](https://docs.astral.sh/uv/guides/integration/docker/)를 따를 수 있습니다.
+프로젝트를 설치하고 관리하기 위해 [uv](https://github.com/astral-sh/uv)를 사용한다면, [uv Docker 가이드](https://docs.astral.sh/uv/guides/integration/docker/)를 따를 수 있습니다.
## 요약 { #recap }
diff --git a/docs/ko/docs/deployment/fastapicloud.md b/docs/ko/docs/deployment/fastapicloud.md
index a601f5416..5fe057f47 100644
--- a/docs/ko/docs/deployment/fastapicloud.md
+++ b/docs/ko/docs/deployment/fastapicloud.md
@@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
-**한 번의 명령**으로 FastAPI 앱을 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니다. 아직이라면 대기자 명단에 등록해 보세요. 🚀
-
-## 로그인하기 { #login }
-
-먼저 **FastAPI Cloud** 계정이 이미 있는지 확인하세요(대기자 명단에서 초대해 드렸을 거예요 😉).
-
-그다음 로그인합니다:
-
-
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud 🚀
-```
-
-
-
-## 배포하기 { #deploy }
-
-이제 **한 번의 명령**으로 앱을 배포합니다:
+**한 번의 명령**으로 FastAPI 앱을 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니다. 🚀
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
+CLI가 FastAPI 애플리케이션을 자동으로 감지하여 클라우드에 배포합니다. 로그인되어 있지 않다면, 인증을 완료할 수 있도록 브라우저가 자동으로 열립니다.
+
이게 전부입니다! 이제 해당 URL에서 앱에 접근할 수 있습니다. ✨
## FastAPI Cloud 소개 { #about-fastapi-cloud }
diff --git a/docs/ko/docs/deployment/https.md b/docs/ko/docs/deployment/https.md
index 06ac147cd..1db7dd25c 100644
--- a/docs/ko/docs/deployment/https.md
+++ b/docs/ko/docs/deployment/https.md
@@ -14,7 +14,7 @@ HTTPS는 그냥 “켜져 있거나” 아니면 “꺼져 있는” 것이라
이제 **개발자 관점**에서 HTTPS를 생각할 때 염두에 두어야 할 여러 가지가 있습니다:
-* HTTPS를 사용하려면, **서버**가 **제3자**가 발급한 **"인증서(certificates)"**를 **보유**해야 합니다.
+* HTTPS를 사용하려면, **서버**가 **제3자**가 생성한 **"인증서(certificates)"**를 **보유**해야 합니다.
* 이 인증서는 실제로 '생성'되는 것이 아니라 제3자로부터 **발급/획득**하는 것입니다.
* 인증서에는 **유효 기간**이 있습니다.
* 즉, **만료**됩니다.
diff --git a/docs/ko/docs/deployment/manually.md b/docs/ko/docs/deployment/manually.md
index 719968682..fbac8169f 100644
--- a/docs/ko/docs/deployment/manually.md
+++ b/docs/ko/docs/deployment/manually.md
@@ -1,6 +1,6 @@
# 서버를 수동으로 실행하기 { #run-a-server-manually }
-## `fastapi run` 명령 사용하기 { #use-the-fastapi-run-command }
+## `fastapi run` 명령어 사용하기 { #use-the-fastapi-run-command }
요약하면, `fastapi run`을 사용해 FastAPI 애플리케이션을 서비스하세요:
@@ -40,7 +40,7 @@ $ fastapi run fastapi run ASGI라고 불리는, Python 웹 프레임워크와 서버를 만들기 위한 표준을 사용합니다. FastAPI는 ASGI 웹 프레임워크입니다.
-원격 서버 머신에서 **FastAPI** 애플리케이션(또는 다른 ASGI 애플리케이션)을 실행하기 위해 필요한 핵심 요소는 **Uvicorn** 같은 ASGI 서버 프로그램입니다. `fastapi` 명령에는 기본으로 이것이 포함되어 있습니다.
+원격 서버 머신에서 **FastAPI** 애플리케이션(또는 다른 ASGI 애플리케이션)을 실행하기 위해 필요한 핵심 요소는 **Uvicorn** 같은 ASGI 서버 프로그램입니다. `fastapi` 명령어에는 기본으로 이것이 포함되어 있습니다.
다음을 포함해 여러 대안이 있습니다:
@@ -56,7 +56,6 @@ FastAPI는
-
+
**Pydantic v2**의 이 기능 덕분에 API 문서는 더 **정밀**해지고, 자동 생성된 클라이언트와 SDK가 있다면 그것들도 더 정밀해져서 더 나은 **developer experience**와 일관성을 제공할 수 있습니다. 🎉
@@ -85,7 +85,7 @@
그런 경우에는, **FastAPI**에서 `separate_input_output_schemas=False` 파라미터로 이 기능을 비활성화할 수 있습니다.
-/// info | 정보
+/// note | 참고
`separate_input_output_schemas` 지원은 FastAPI `0.102.0`에 추가되었습니다. 🤓
diff --git a/docs/ko/docs/index.md b/docs/ko/docs/index.md
index 91d27fcee..f839c82ef 100644
--- a/docs/ko/docs/index.md
+++ b/docs/ko/docs/index.md
@@ -1,3 +1,8 @@
+---
+include_yaml:
+ sponsors: data/sponsors.yml
+---
+
# FastAPI { #fastapi }