diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 294f73edd2..6278bcc959 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -20,6 +20,12 @@ hide: ### Translations +* 🌐 Update translations for zh (update-outdated). PR [#15177](https://github.com/fastapi/fastapi/pull/15177) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Update translations for zh-hant (update-outdated). PR [#15178](https://github.com/fastapi/fastapi/pull/15178) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Update translations for zh-hant (add-missing). PR [#15176](https://github.com/fastapi/fastapi/pull/15176) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Update translations for zh (add-missing). PR [#15175](https://github.com/fastapi/fastapi/pull/15175) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Update translations for ja (update-outdated). PR [#15171](https://github.com/fastapi/fastapi/pull/15171) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Update translations for ko (update-outdated). PR [#15170](https://github.com/fastapi/fastapi/pull/15170) by [@tiangolo](https://github.com/tiangolo). * 🌐 Update translations for tr (update-outdated). PR [#15172](https://github.com/fastapi/fastapi/pull/15172) by [@tiangolo](https://github.com/tiangolo). * 🌐 Update translations for ko (add-missing). PR [#15168](https://github.com/fastapi/fastapi/pull/15168) by [@tiangolo](https://github.com/tiangolo). * 🌐 Update translations for ja (add-missing). PR [#15167](https://github.com/fastapi/fastapi/pull/15167) by [@tiangolo](https://github.com/tiangolo). @@ -38,6 +44,9 @@ hide: ### Internal +* ⬆ Bump authlib from 1.6.7 to 1.6.9. PR [#15128](https://github.com/fastapi/fastapi/pull/15128) by [@dependabot[bot]](https://github.com/apps/dependabot). +* ⬆ Bump pyasn1 from 0.6.2 to 0.6.3. PR [#15143](https://github.com/fastapi/fastapi/pull/15143) by [@dependabot[bot]](https://github.com/apps/dependabot). +* ⬆ Bump ujson from 5.11.0 to 5.12.0. PR [#15150](https://github.com/fastapi/fastapi/pull/15150) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🔚 Tweak translation workflow and translation fixer tool. PR [#15166](https://github.com/fastapi/fastapi/pull/15166) by [@YuriiMotov](https://github.com/YuriiMotov). * 🔚 Fix `commit_in_place` passed via env variable in `translate.yml` workflow. PR [#15151](https://github.com/fastapi/fastapi/pull/15151) by [@YuriiMotov](https://github.com/YuriiMotov). * 🔚 Update translation general prompt to enforce link style in translation matches the original link style. PR [#15148](https://github.com/fastapi/fastapi/pull/15148) by [@YuriiMotov](https://github.com/YuriiMotov). diff --git a/docs/ja/docs/_llm-test.md b/docs/ja/docs/_llm-test.md index b3d9fc28cd..4c84a7c04c 100644 --- a/docs/ja/docs/_llm-test.md +++ b/docs/ja/docs/_llm-test.md @@ -11,7 +11,7 @@ * 翻蚳が問題ないか確認したす。 * 必芁であれば、蚀語固有プロンプト、general プロンプト、たたは英語ドキュメントを改善したす。 * その埌、翻蚳に残っおいる問題を手動で修正し、良い翻蚳にしたす。 -* 良い翻蚳を甚意した状態でもう䞀床翻蚳したす。理想的な結果は、LLM が翻蚳に䞀切倉曎を加えないこずです。぀たり general プロンプトず蚀語固有プロンプトが最良であるこずを意味したす時々いく぀かランダムに芋える倉曎を行うこずがありたす。理由は LLM は決定論的アルゎリズムではない ためです。 +* 良い翻蚳を甚意した状態でもう䞀床翻蚳したす。理想的な結果は、LLM が翻蚳に䞀切倉曎を加えないこずです。぀たり general プロンプトず蚀語固有プロンプトが最良であるこずを意味したす時々いく぀かランダムに芋える倉曎を行うこずがありたす。理由は [LLM は決定論的アルゎリズムではない](https://doublespeak.chat/#/handbook#deterministic-output) ためです。 テスト内容: @@ -95,7 +95,7 @@ $ fastapi run 倖郚リンク -* スタむルぞのリンク -* スクリプトぞのリンク -* 画像ぞのリンク +* [内郚リンク](index.md#installation) +* [倖郚リンク](https://sqlmodel.tiangolo.com/) +* [スタむルぞのリンク](https://fastapi.tiangolo.com/css/styles.css) +* [スクリプトぞのリンク](https://fastapi.tiangolo.com/js/logic.js) +* [画像ぞのリンク](https://fastapi.tiangolo.com/img/foo.jpg) リンクのテキストは翻蚳し、リンク先のアドレスは翻蚳版を指すようにしおください: -* FastAPI リンク +* [FastAPI リンク](https://fastapi.tiangolo.com/ja/) //// diff --git a/docs/ja/docs/advanced/additional-responses.md b/docs/ja/docs/advanced/additional-responses.md index 4c44257885..1d7c2f80e1 100644 --- a/docs/ja/docs/advanced/additional-responses.md +++ b/docs/ja/docs/advanced/additional-responses.md @@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"} レスポンスに正確に䜕を含められるかは、OpenAPI 仕様の次のセクションを参照しおください: -- OpenAPI の Responses Object。ここには `Response Object` が含たれたす。 -- OpenAPI の Response Object。`responses` パラメヌタ内の各レスポンスに、ここで定矩されおいる芁玠を盎接含められたす。`description`、`headers`、`content`ここで異なるメディアタむプや JSON Schema を宣蚀したす、`links` など。 +- [OpenAPI の Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)、ここには `Response Object` が含たれたす。 +- [OpenAPI の Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)、`responses` パラメヌタ内の各レスポンスに、ここで定矩されおいる芁玠を盎接含められたす。`description`、`headers`、`content`ここで異なるメディアタむプや JSON Schema を宣蚀したす、`links` など。 diff --git a/docs/ja/docs/advanced/additional-status-codes.md b/docs/ja/docs/advanced/additional-status-codes.md index fdac52e837..ad9bd57dcd 100644 --- a/docs/ja/docs/advanced/additional-status-codes.md +++ b/docs/ja/docs/advanced/additional-status-codes.md @@ -38,4 +38,4 @@ 远加のステヌタスコヌドずレスポンスを盎接返す堎合、それらは OpenAPI スキヌマAPI ドキュメントには含たれたせん。FastAPI には、事前に䜕が返されるかを知る方法がないからです。 -しかし、[远加のレスポンス](additional-responses.md){.internal-link target=_blank} を䜿っおコヌド内にドキュメント化できたす。 +しかし、[远加のレスポンス](additional-responses.md) を䜿っおコヌド内にドキュメント化できたす。 diff --git a/docs/ja/docs/advanced/advanced-dependencies.md b/docs/ja/docs/advanced/advanced-dependencies.md index d38ce548d1..5181e39d82 100644 --- a/docs/ja/docs/advanced/advanced-dependencies.md +++ b/docs/ja/docs/advanced/advanced-dependencies.md @@ -132,7 +132,7 @@ SQLModelたたは SQLAlchemyでこの特定のナヌスケヌスがある このようにするず、セッションはデヌタベヌス接続を解攟するため、他のリク゚ストがそれを䜿えるようになりたす。 -`yield` を持぀䟝存関係で早期終了が必芁な別のナヌスケヌスがある堎合は、あなたの具䜓的なナヌスケヌスず、なぜ `yield` を持぀䟝存関係の早期クロヌズが有益かを説明しお、GitHub Discussion の質問を䜜成しおください。 +`yield` を持぀䟝存関係で早期終了が必芁な別のナヌスケヌスがある堎合は、あなたの具䜓的なナヌスケヌスず、なぜ `yield` を持぀䟝存関係の早期クロヌズが有益かを説明しお、[GitHub Discussion の質問](https://github.com/fastapi/fastapi/discussions/new?category=questions)を䜜成しおください。 `yield` を持぀䟝存関係の早期クロヌズに玍埗できるナヌスケヌスがある堎合は、早期クロヌズにオプトむンする新しい方法を远加するこずを怜蚎したす。 @@ -144,7 +144,7 @@ FastAPI 0.110.0 より前では、`yield` を持぀䟝存関係を䜿い、そ ### バックグラりンドタスクず `yield` を䌎う䟝存関係、技術詳现 { #background-tasks-and-dependencies-with-yield-technical-details } -FastAPI 0.106.0 より前では、`yield` の埌で䟋倖を送出するこずはできたせんでした。`yield` を持぀䟝存関係の終了コヌドはレスポンス送信「埌」に実行されるため、[䟋倖ハンドラ](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} はすでに実行枈みでした。 +FastAPI 0.106.0 より前では、`yield` の埌で䟋倖を送出するこずはできたせんでした。`yield` を持぀䟝存関係の終了コヌドはレスポンス送信「埌」に実行されるため、[䟋倖ハンドラ](../tutorial/handling-errors.md#install-custom-exception-handlers)はすでに実行枈みでした。 これは䞻に、䟝存関係が "yield" した同じオブゞェクトをバックグラりンドタスク内で利甚できるようにするための蚭蚈でした。終了コヌドはバックグラりンドタスク完了埌に実行されるからです。 diff --git a/docs/ja/docs/advanced/async-tests.md b/docs/ja/docs/advanced/async-tests.md index 067e9cc9a2..da2968dbf7 100644 --- a/docs/ja/docs/advanced/async-tests.md +++ b/docs/ja/docs/advanced/async-tests.md @@ -16,11 +16,11 @@ `TestClient` は、暙準の pytest を䜿っお通垞の `def` のテスト関数から非同期の FastAPI アプリを呌び出すための「おたじない」を内郚で行いたす。しかし、その「おたじない」はテスト関数自䜓が非同期の堎合には機胜したせん。テストを非同期で実行するず、テスト関数内で `TestClient` は䜿えなくなりたす。 -`TestClient` は HTTPX を基に䜜られおおり、幞いなこずに API のテストには HTTPX を盎接利甚できたす。 +`TestClient` は [HTTPX](https://www.python-httpx.org) を基に䜜られおおり、幞いなこずに API のテストには HTTPX を盎接利甚できたす。 ## 䟋 { #example } -簡単な䟋ずしお、[倧きなアプリケヌション](../tutorial/bigger-applications.md){.internal-link target=_blank} ず [テスト](../tutorial/testing.md){.internal-link target=_blank} で説明したものに䌌たファむル構成を考えたす: +簡単な䟋ずしお、[倧きなアプリケヌション](../tutorial/bigger-applications.md) ず [テスト](../tutorial/testing.md) で説明したものに䌌たファむル構成を考えたす: ``` . @@ -60,7 +60,7 @@ $ pytest /// tip | 豆知識 -`TestClient` を䜿っおいたずきず異なり、テスト関数は `def` ではなく `async def` になっおいる点に泚意しおください。 +`TestClient` を䜿っおいたずきず異なり、テスト関数は `async def` ではなく `def` になっおいる点に泚意しおください。 /// @@ -84,7 +84,7 @@ response = client.get('/') /// warning | 泚意 -アプリケヌションが lifespan むベントに䟝存しおいる堎合、`AsyncClient` はそれらのむベントをトリガヌしたせん。確実にトリガヌするには、florimondmanca/asgi-lifespan の `LifespanManager` を䜿甚しおください。 +アプリケヌションが lifespan むベントに䟝存しおいる堎合、`AsyncClient` はそれらのむベントをトリガヌしたせん。確実にトリガヌするには、[florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) の `LifespanManager` を䜿甚しおください。 /// @@ -94,6 +94,6 @@ response = client.get('/') /// tip | 豆知識 -テストに非同期関数呌び出しを統合した際に䟋: MongoDB の MotorClient 䜿甚時、`RuntimeError: Task attached to a different loop` に遭遇した堎合は、むベントルヌプを必芁ずするオブゞェクトは非同期関数内でのみむンスタンス化するようにしおください。䟋えば `@app.on_event("startup")` コヌルバック内で行いたす。 +テストに非同期関数呌び出しを統合した際に䟋: [MongoDB の MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) 䜿甚時、`RuntimeError: Task attached to a different loop` に遭遇した堎合は、むベントルヌプを必芁ずするオブゞェクトは非同期関数内でのみむンスタンス化するようにしおください。䟋えば `@app.on_event("startup")` コヌルバック内で行いたす。 /// diff --git a/docs/ja/docs/advanced/behind-a-proxy.md b/docs/ja/docs/advanced/behind-a-proxy.md index 67eaa99092..108c437709 100644 --- a/docs/ja/docs/advanced/behind-a-proxy.md +++ b/docs/ja/docs/advanced/behind-a-proxy.md @@ -16,9 +16,9 @@ プロキシのヘッダヌは次のずおりです: -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -60,7 +60,7 @@ https://mysuperapp.com/items/ /// tip | 豆知識 -HTTPS に぀いお詳しく知りたい堎合は、[HTTPS に぀いお](../deployment/https.md){.internal-link target=_blank} を参照しおください。 +HTTPS に぀いお詳しく知りたい堎合は、[HTTPS に぀いお](../deployment/https.md) を参照しおください。 /// @@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 サヌバヌUvicornは、その `root_path` をアプリに枡す以倖の甚途では䜿甚しない点に泚意しおください。 -しかし、ブラりザで http://127.0.0.1:8000/app にアクセスするず、通垞どおりのレスポンスが衚瀺されたす: +しかし、ブラりザで [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) にアクセスするず、通垞どおりのレスポンスが衚瀺されたす: ```JSON { @@ -251,9 +251,9 @@ Uvicorn は、プロキシが `http://127.0.0.1:8000/app` にアクセスしお ## Traefik を䜿ったロヌカル怜蚌 { #testing-locally-with-traefik } -Traefik を䜿えば、パスプレフィックスを削陀する構成をロヌカルで簡単に詊せたす。 +[Traefik](https://docs.traefik.io/) を䜿えば、パスプレフィックスを削陀する構成をロヌカルで簡単に詊せたす。 -Traefik をダりンロヌド しおください。単䞀バむナリなので、圧瞮ファむルを展開しお端末から盎接実行できたす。 +[Traefik をダりンロヌド](https://github.com/containous/traefik/releases) しおください。単䞀バむナリなので、圧瞮ファむルを展開しお端末から盎接実行できたす。 次の内容で `traefik.toml` ずいうファむルを䜜成したす: @@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ### レスポンスの確認 { #check-the-responses } -ここで、Uvicorn のポヌトの URL http://127.0.0.1:8000/app にアクセスするず、通垞どおりのレスポンスが衚瀺されたす: +ここで、Uvicorn のポヌトの URL [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) にアクセスするず、通垞どおりのレスポンスが衚瀺されたす: ```JSON { @@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -次に、Traefik のポヌトでプレフィックス付きの URL http://127.0.0.1:9999/api/v1/app を開きたす。 +次に、Traefik のポヌトでプレフィックス付きの URL [http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app) を開きたす。 同じレスポンスが埗られたす: @@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 「公匏な」アクセス方法は、定矩したパスプレフィックス付きのプロキシ経由です。したがっお想定どおり、プレフィックスなしの URL で Uvicorn が盎接提䟛するドキュメント UI にアクセスするず動䜜したせん。プロキシ経由でアクセスされるこずを前提ずしおいるためです。 -http://127.0.0.1:8000/docs を確認しおください: +[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を確認しおください: しかし、プロキシポヌト `9999`を䜿った「公匏」URL `/api/v1/docs` でドキュメント UI にアクセスするず、正しく動䜜したす🎉 -http://127.0.0.1:9999/api/v1/docs を確認しおください: +[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) を確認しおください: @@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -ドキュメント UIhttp://127.0.0.1:9999/api/v1/docsでは次のように衚瀺されたす: +ドキュメント UI[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs)では次のように衚瀺されたす: @@ -461,6 +461,6 @@ OpenAPI 仕様の `servers` プロパティは任意です。 ## サブアプリケヌションのマりント { #mounting-a-sub-application } -`root_path` を䌎うプロキシを䜿甚し぀぀サブアプリケヌションをマりントする必芁がある堎合でも[サブアプリケヌション - マりント](sub-applications.md){.internal-link target=_blank} 参照、通垞どおりに行えたす。 +`root_path` を䌎うプロキシを䜿甚し぀぀サブアプリケヌションをマりントする必芁がある堎合でも[サブアプリケヌション - マりント](sub-applications.md) 参照、通垞どおりに行えたす。 FastAPI は内郚で `root_path` を適切に扱うため、そのたた動䜜したす。✚ diff --git a/docs/ja/docs/advanced/custom-response.md b/docs/ja/docs/advanced/custom-response.md index 50a7891658..e66b1f4944 100644 --- a/docs/ja/docs/advanced/custom-response.md +++ b/docs/ja/docs/advanced/custom-response.md @@ -1,150 +1,134 @@ -# カスタムレスポンス - HTML、ストリヌム、ファむル、その他のレスポンス { #custom-response-html-stream-file-others } +# カスタムレスポンス - HTML、ストリヌム、ファむル、その他 { #custom-response-html-stream-file-others } -デフォルトでは、**FastAPI** は `JSONResponse` を䜿っおレスポンスを返したす。 +デフォルトでは、**FastAPI** はJSONレスポンスを返したす。 -[レスポンスを盎接返す](response-directly.md){.internal-link target=_blank}で芋たように、 `Response` を盎接返すこずでこの挙動をオヌバヌラむドできたす。 +[レスポンスを盎接返す](response-directly.md)で芋たように、`Response` を盎接返しおこの挙動を䞊曞きできたす。 -しかし、`Response` を盎接返すずたたは `JSONResponse` のような任意のサブクラスを返すず、デヌタは自動的に倉換されず`response_model` を宣蚀しおいおも、ドキュメントも自動生成されたせん䟋えば、生成されるOpenAPIの䞀郚ずしおHTTPヘッダヌ `Content-Type` に特定の「メディアタむプ」を含めるなど。 +しかし、`Response`たたは `JSONResponse` のような任意のサブクラスを盎接返す堎合、`response_model` を宣蚀しおいおもデヌタは自動的に倉換されず、ドキュメントも自動生成されたせん䟋えば、生成されるOpenAPIの䞀郚ずしおHTTPヘッダヌ `Content-Type` に特定の「メディアタむプ」を含めるなど。 -`response_class` パラメヌタを䜿甚しお、*path operation デコレヌタ* で䜿甚したい `Response`任意の `Response` サブクラスを宣蚀するこずもできたす。 +䞀方で、*path operation デコレヌタ* の `response_class` パラメヌタを䜿っお、䜿甚したい `Response``Response` の任意のサブクラスを宣蚀するこずもできたす。 -*path operation 関数* から返されるコンテンツは、その `Response` に含たれたす。 - -そしおその `Response` が、`JSONResponse` や `UJSONResponse` の堎合のようにJSONメディアタむプ`application/json`なら、関数の返り倀は *path operationデコレヌタ* に宣蚀した任意のPydantic `response_model` により自動的に倉換およびフィルタされたす。 +*path operation 関数* から返したコンテンツは、その `Response` に栌玍されたす。 /// note | 備考 -メディアタむプを指定せずにレスポンスクラスを利甚するず、FastAPIはレスポンスにコンテンツがないこずを期埅したす。そのため、生成されるOpenAPIドキュメントにレスポンスフォヌマットが蚘茉されたせん。 +メディアタむプを持たないレスポンスクラスを䜿甚するず、FastAPIはレスポンスにコンテンツがないものず芋なしたす。そのため、生成されるOpenAPIドキュメントにレスポンスフォヌマットは蚘茉されたせん。 /// -## `ORJSONResponse` を䜿う { #use-orjsonresponse } - -䟋えば、パフォヌマンスを絞り出したい堎合は、`orjson`をむンストヌルし、レスポンスずしお `ORJSONResponse` をセットできたす。 - -䜿いたい `Response` クラスサブクラスをむンポヌトし、*path operationデコレヌタ* に宣蚀したす。 +## JSONレスポンス { #json-responses } -倧きなレスポンスの堎合、`Response` を盎接返すほうが、蟞曞を返すよりもはるかに高速です。 +FastAPI はデフォルトでJSONレスポンスを返したす。 -これは、デフォルトではFastAPIがチュヌトリアルで説明した同じ[JSON Compatible Encoder](../tutorial/encoder.md){.internal-link target=_blank}を䜿っお、内郚の各アむテムを怜査し、JSONずしおシリアラむズ可胜であるこずを確認するためです。これにより、䟋えばデヌタベヌスモデルのような**任意のオブゞェクト**を返せたす。 +[レスポンスモデル](../tutorial/response-model.md) を宣蚀するず、FastAPI は Pydantic を䜿っおデヌタをJSONにシリアラむズしたす。 -しかし、返そうずしおいるコンテンツが **JSONでシリアラむズ可胜**であるこずが確実なら、それを盎接レスポンスクラスに枡しお、FastAPIがレスポンスクラスぞ枡す前に返华コンテンツを `jsonable_encoder` に通すこずで発生する远加のオヌバヌヘッドを回避できたす。 - -{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *} - -/// info | 情報 +レスポンスモデルを宣蚀しない堎合、FastAPI は [JSON Compatible Encoder](../tutorial/encoder.md) で説明した `jsonable_encoder` を䜿い、その結果を `JSONResponse` に入れたす。 -パラメヌタ `response_class` は、レスポンスの「メディアタむプ」を定矩するためにも利甚されたす。 +`JSONResponse` のようにJSONメディアタむプ`application/json`を持぀ `response_class` を宣蚀した堎合、*path operation デコレヌタ* に宣蚀した任意のPydanticの `response_model` に埓っお、返すデヌタは自動的に倉換およびフィルタされたす。ただし、そのデヌタは Pydantic でJSONのバむト列にシリアラむズされるわけではなく、たず `jsonable_encoder` で倉換された埌に `JSONResponse` クラスぞ枡され、Pythonの暙準JSONラむブラリでバむト列にシリアラむズされたす。 -この堎合、HTTPヘッダヌ `Content-Type` には `application/json` がセットされたす。 - -そしお、OpenAPIにはそのようにドキュメントされたす。 - -/// - -/// tip | 豆知識 +### JSONのパフォヌマンス { #json-performance } -`ORJSONResponse` はFastAPIでのみ利甚可胜で、Starletteでは利甚できたせん。 +結論ずしお、最倧のパフォヌマンスを埗たい堎合は、[レスポンスモデル](../tutorial/response-model.md) を䜿い、*path operation デコレヌタ* で `response_class` は宣蚀しないでください。 -/// +{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *} ## HTMLレスポンス { #html-response } -**FastAPI** からHTMLを盎接返す堎合は、`HTMLResponse` を䜿いたす。 +**FastAPI** からHTMLを盎接返すには、`HTMLResponse` を䜿いたす。 -* `HTMLResponse` をむンポヌトする。 -* *path operation デコレヌタ* のパラメヌタ `response_class` に `HTMLResponse` を枡す。 +* `HTMLResponse` をむンポヌトする +* *path operation デコレヌタ* のパラメヌタ `response_class` に `HTMLResponse` を枡す {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} /// info | 情報 -パラメヌタ `response_class` は、レスポンスの「メディアタむプ」を定矩するためにも利甚されたす。 +パラメヌタ `response_class` は、レスポンスの「メディアタむプ」を定矩するためにも䜿甚されたす。 -この堎合、HTTPヘッダヌ `Content-Type` には `text/html` がセットされたす。 +この堎合、HTTPヘッダヌ `Content-Type` には `text/html` が蚭定されたす。 -そしお、OpenAPIにはそのようにドキュメントされたす。 +そしお、OpenAPIにもそのようにドキュメント化されたす。 /// ### `Response` を返す { #return-a-response } -[レスポンスを盎接返す](response-directly.md){.internal-link target=_blank}で芋たように、レスポンスを返すこずで、*path operation* の䞭でレスポンスを盎接オヌバヌラむドするこずもできたす。 +[レスポンスを盎接返す](response-directly.md)で芋たように、*path operation* の䞭でレスポンスを盎接返しお䞊曞きするこずもできたす。 -䞊蚘ず同じ䟋においお、 `HTMLResponse` を返すず、このようになりたす: +䞊蚘ず同じ䟋で、`HTMLResponse` を返すず次のようになりたす: {* ../../docs_src/custom_response/tutorial003_py310.py hl[2,7,19] *} /// warning | 泚意 -*path operation関数* から盎接返される `Response` は、OpenAPIにドキュメントされず䟋えば、`Content-Type` がドキュメントされない、自動的な察話的ドキュメントでも衚瀺されたせん。 +*path operation 関数* から盎接返される `Response` は、OpenAPIにドキュメント化されず䟋えば `Content-Type` がドキュメント化されない、自動生成の察話的ドキュメントにも衚瀺されたせん。 /// /// info | 情報 -もちろん、実際の `Content-Type` ヘッダヌやステヌタスコヌドなどは、返された `Response` オブゞェクトに由来したす。 +もちろん、実際の `Content-Type` ヘッダヌやステヌタスコヌドなどは、返した `Response` オブゞェクトに由来したす。 /// -### OpenAPIドキュメントず `Response` のオヌバヌラむド { #document-in-openapi-and-override-response } +### OpenAPIにドキュメント化し぀぀ `Response` を䞊曞き { #document-in-openapi-and-override-response } -関数の䞭でレスポンスをオヌバヌラむドし぀぀も、OpenAPI に「メディアタむプ」をドキュメント化したいなら、`response_class` パラメヌタを䜿甚し、か぀ `Response` オブゞェクトを返したす。 +関数の䞭からレスポンスを䞊曞きし぀぀、同時にOpenAPIで「メディアタむプ」をドキュメント化したい堎合は、`response_class` パラメヌタを䜿甚し、か぀ `Response` オブゞェクトを返したす。 -`response_class` はOpenAPIの*path operation*のドキュメント化のためにのみ䜿甚され、`Response` はそのたた䜿甚されたす。 +この堎合、`response_class` はOpenAPIの *path operation* をドキュメント化するためだけに䜿われ、実際には返した `Response` がそのたた䜿甚されたす。 #### `HTMLResponse` を盎接返す { #return-an-htmlresponse-directly } -䟋えば、このようになりたす: +䟋えば、次のようになりたす: {* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *} -この䟋では、関数 `generate_html_response()` は、`str` のHTMLを返すのではなく、`Response` を生成しお返しおいたす。 +この䟋では、関数 `generate_html_response()` はHTMLの `str` を返すのではなく、すでに `Response` を生成しお返しおいたす。 -`generate_html_response()` を呌び出した結果を返すこずにより、デフォルトの **FastAPI** の挙動をオヌバヌラむドする `Response` をすでに返しおいたす。 +`generate_html_response()` の呌び出し結果を返すこずで、デフォルトの **FastAPI** の挙動を䞊曞きする `Response` をすでに返しおいたす。 -しかし、`response_class` にも `HTMLResponse` を枡しおいるため、**FastAPI** はOpenAPIず察話的ドキュメントで、`text/html` のHTMLずしおどのようにドキュメント化すればよいかを理解できたす: +しかし、`response_class` にも `HTMLResponse` を枡しおいるため、**FastAPI** はOpenAPIおよび察話的ドキュメントで、それが `text/html` のHTMLであるず正しくドキュメント化できたす: ## 利甚可胜なレスポンス { #available-responses } -以䞋が利甚可胜なレスポンスの䞀郚です。 +以䞋は利甚可胜なレスポンスの䞀郚です。 -`Response` を䜿っお他の䜕かを返せたすし、カスタムのサブクラスも䜜れるこずを芚えおおいおください。 +`Response` を䜿っお他のものを返したり、カスタムサブクラスを䜜成するこずもできたす。 /// note | 技術詳现 -`from starlette.responses import HTMLResponse` も利甚できたす。 +`from starlette.responses import HTMLResponse` を䜿うこずもできたす。 -**FastAPI** は開発者の利䟿性のために、`starlette.responses` ず同じものを `fastapi.responses` ずしお提䟛しおいたす。しかし、利甚可胜なレスポンスのほずんどはStarletteから盎接提䟛されたす。 +**FastAPI** は開発者の利䟿性のために、`starlette.responses` ず同じものを `fastapi.responses` ずしお提䟛しおいたす。ただし、利甚可胜なレスポンスの倚くはStarletteから盎接提䟛されおいたす。 /// ### `Response` { #response } -メむンの `Response` クラスで、他の党おのレスポンスはこれを継承しおいたす。 +メむンの `Response` クラスで、他のすべおのレスポンスはこれを継承しおいたす。 盎接返すこずができたす。 以䞋のパラメヌタを受け付けたす。 -* `content` - `str` か `bytes`。 -* `status_code` - `int` のHTTPステヌタスコヌド。 -* `headers` - 文字列の `dict` 。 -* `media_type` - メディアタむプを瀺す `str` 。䟋えば `"text/html"` 。 +* `content` - `str` たたは `bytes` +* `status_code` - `int` のHTTPステヌタスコヌド +* `headers` - 文字列の `dict` +* `media_type` - メディアタむプを瀺す `str`。䟋: `"text/html"` -FastAPI実際にはStarletteは自動的にContent-Lengthヘッダヌを含みたす。たた、`media_type` に基づいたContent-Typeヘッダヌを含み、テキストタむプのためにcharsetを远加したす。 +FastAPI実際にはStarletteは自動的に Content-Length ヘッダヌを含めたす。たた、`media_type` に基づいた Content-Type ヘッダヌを含め、テキストタむプには charset を远加したす。 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} ### `HTMLResponse` { #htmlresponse } -䞊で読んだように、テキストやバむトを受け取り、HTMLレスポンスを返したす。 +䞊で読んだように、テキストやバむト列を受け取り、HTMLレスポンスを返したす。 ### `PlainTextResponse` { #plaintextresponse } -テキストやバむトを受け取り、プレヌンテキストのレスポンスを返したす。 +テキストやバむト列を受け取り、プレヌンテキストのレスポンスを返したす。 {* ../../docs_src/custom_response/tutorial005_py310.py hl[2,7,9] *} @@ -152,45 +136,19 @@ FastAPI実際にはStarletteは自動的にContent-Lengthヘッダヌを デヌタを受け取り、`application/json` ずしお゚ンコヌドされたレスポンスを返したす。 -䞊で読んだように、**FastAPI** のデフォルトのレスポンスずしお利甚されたす。 - -### `ORJSONResponse` { #orjsonresponse } - -䞊で読んだように、`orjson`を䜿った、高速な代替のJSONレスポンスです。 - -/// info | 情報 - -これは、䟋えば `pip install orjson` で `orjson` をむンストヌルする必芁がありたす。 +これは、䞊で述べたように **FastAPI** のデフォルトのレスポンスです。 -/// - -### `UJSONResponse` { #ujsonresponse } - -`ujson`を䜿った、代替のJSONレスポンスです。 - -/// info | 情報 - -これは、䟋えば `pip install ujson` で `ujson` をむンストヌルする必芁がありたす。 - -/// - -/// warning | 泚意 - -`ujson` は、いく぀かの゚ッゞケヌスの取り扱いに぀いお、Pythonにビルトむンされた実装ほど泚意深くありたせん。 - -/// - -{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *} +/// note | 技術詳现 -/// tip | 豆知識 +ただし、レスポンスモデルや返华型を宣蚀した堎合は、それが盎接デヌタのJSONシリアラむズに䜿われ、適切なJSONのメディアタむプを持぀レスポンスが `JSONResponse` クラスを䜿わずに盎接返されたす。 -`ORJSONResponse` のほうが高速な代替かもしれたせん。 +これが最適なパフォヌマンスを埗る理想的な方法です。 /// ### `RedirectResponse` { #redirectresponse } -HTTPリダむレクトを返したす。デフォルトでは307ステヌタスコヌドTemporary Redirectずなりたす。 +HTTPリダむレクトを返したす。デフォルトでは307ステヌタスコヌドTemporary Redirectを䜿甚したす。 `RedirectResponse` を盎接返せたす: @@ -202,56 +160,50 @@ HTTPリダむレクトを返したす。デフォルトでは307ステヌタス {* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *} -その堎合、*path operation*関数からURLを盎接返せたす。 +その堎合、*path operation* 関数からURLを盎接返せたす。 -この堎合に䜿甚される `status_code` は `RedirectResponse` のデフォルトである `307` になりたす。 +この堎合に䜿甚される `status_code` は、`RedirectResponse` のデフォルトである `307` になりたす。 --- -たた、`status_code` パラメヌタを `response_class` パラメヌタず組み合わせお䜿うこずもできたす: +さらに、`status_code` パラメヌタを `response_class` パラメヌタず組み合わせお䜿うこずもできたす: {* ../../docs_src/custom_response/tutorial006c_py310.py hl[2,7,9] *} ### `StreamingResponse` { #streamingresponse } -非同期ゞェネレヌタ、たたは通垞のゞェネレヌタ/むテレヌタを受け取り、レスポンスボディをストリヌムしたす。 +非同期ゞェネレヌタ、たたは通垞のゞェネレヌタ/むテレヌタ`yield` を持぀関数を受け取り、レスポンスボディをストリヌムしたす。 -{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *} +{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *} -#### ファむルラむクオブゞェクトで `StreamingResponse` を䜿う { #using-streamingresponse-with-file-like-objects } - -file-like オブゞェクト䟋: `open()` で返されるオブゞェクトがある堎合、そのfile-likeオブゞェクトを反埩凊理するゞェネレヌタ関数を䜜れたす。 - -そうすれば、最初にすべおをメモリぞ読み蟌む必芁はなく、そのゞェネレヌタ関数を `StreamingResponse` に枡しお返せたす。 - -これにはクラりドストレヌゞずの連携、映像凊理など、倚くのラむブラリが含たれたす。 +/// note | 技術詳现 -{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *} +`async` タスクは `await` に到達したずきにのみキャンセルできたす。`await` がない堎合、ゞェネレヌタ`yield` を持぀関数は適切にキャンセルできず、キャンセル芁求埌も実行が続く可胜性がありたす。 -1. これはゞェネレヌタ関数です。内郚に `yield` 文を含むため「ゞェネレヌタ関数」です。 -2. `with` ブロックを䜿うこずで、ゞェネレヌタ関数が終わった埌぀たりレスポンスの送信が完了した埌にfile-likeオブゞェクトが確実にクロヌズされるようにしたす。 -3. この `yield from` は、`file_like` ずいう名前のものを反埩凊理するように関数ぞ指瀺したす。そしお反埩された各パヌトに぀いお、そのパヌトをこのゞェネレヌタ関数`iterfile`から来たものずしお `yield` したす。 +この小さな䟋では `await` が䞍芁なため、むベントルヌプにキャンセルを凊理する機䌚を䞎えるために `await anyio.sleep(0)` を远加しおいたす。 - ぀たり、内郚的に「生成」の䜜業を別のものぞ移譲するゞェネレヌタ関数です。 +これは倧きなストリヌムや無限ストリヌムではさらに重芁になりたす。 - このようにするこずで `with` ブロックに入れられ、完了埌にfile-likeオブゞェクトが確実にクロヌズされたす。 +/// /// tip | 豆知識 -ここでは `async` ず `await` をサポヌトしおいない暙準の `open()` を䜿っおいるため、通垞の `def` でpath operationを宣蚀しおいる点に泚意しおください。 +`StreamingResponse` を盎接返す代わりに、[デヌタをストリヌムする](./stream-data.md) スタむルに埓うこずをおすすめしたす。こちらのほうがはるかに䟿利で、裏偎でキャンセル凊理も行っおくれたす。 + +JSON Lines をストリヌムする堎合は、[JSON Lines をストリヌムする](../tutorial/stream-json-lines.md) チュヌトリアルを参照しおください。 /// ### `FileResponse` { #fileresponse } -レスポンスずしおファむルを非同期的にストリヌムしたす。 +ファむルをレスポンスずしお非同期にストリヌムしたす。 -他のレスポンスタむプずは異なる匕数のセットを受け取りむンスタンス化したす。 +他のレスポンスタむプずは異なる匕数セットでむンスタンス化したす: -* `path` - ストリヌムするファむルのファむルパス。 -* `headers` - 含めたい任意のカスタムヘッダヌの蟞曞。 -* `media_type` - メディアタむプを瀺す文字列。未蚭定の堎合、ファむル名やパスからメディアタむプが掚枬されたす。 -* `filename` - 蚭定した堎合、レスポンスの `Content-Disposition` に含たれたす。 +* `path` - ストリヌムするファむルのファむルパス +* `headers` - 含めたい任意のカスタムヘッダヌ蟞曞 +* `media_type` - メディアタむプを瀺す文字列。未蚭定の堎合、ファむル名やパスから掚枬されたす +* `filename` - 蚭定した堎合、レスポンスの `Content-Disposition` に含たれたす ファむルレスポンスには、適切な `Content-Length`、`Last-Modified`、`ETag` ヘッダヌが含たれたす。 @@ -261,17 +213,17 @@ HTTPリダむレクトを返したす。デフォルトでは307ステヌタス {* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *} -この堎合、*path operation*関数からファむルパスを盎接返せたす。 +この堎合、*path operation* 関数からファむルパスを盎接返せたす。 ## カスタムレスポンスクラス { #custom-response-class } -`Response` を継承した独自のカスタムレスポンスクラスを䜜成しお利甚できたす。 +`Response` を継承しお、独自のカスタムレスポンスクラスを䜜成し、䜿甚できたす。 -䟋えば、`orjson`を䜿いたいが、同梱の `ORJSONResponse` クラスで䜿われおいないカスタム蚭定も䜿いたいずしたす。 +䟋えば、[`orjson`](https://github.com/ijl/orjson) を特定の蚭定で䜿いたいずしたす。 -䟋えば、むンデントされ敎圢されたJSONを返したいので、orjsonオプション `orjson.OPT_INDENT_2` を䜿いたいずしたす。 +むンデントされた敎圢枈みJSONを返したいので、orjson のオプション `orjson.OPT_INDENT_2` を䜿いたいずしたす。 -`CustomORJSONResponse` を䜜れたす。䞻に必芁なのは、コンテンツを `bytes` ずしお返す `Response.render(content)` メ゜ッドを䜜るこずです: +`CustomORJSONResponse` を䜜成できたす。䞻に必芁なのは、`bytes` を返す `Response.render(content)` メ゜ッドを䜜るこずです: {* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *} @@ -289,24 +241,32 @@ HTTPリダむレクトを返したす。デフォルトでは307ステヌタス } ``` -もちろん、JSONの敎圢よりも、これを掻甚するもっず良い方法が芋぀かるはずです。 😉 +もちろん、JSONの敎圢以倖にも、これを掻甚するもっず良い方法が芋぀かるはずです。 😉 + +### `orjson` か レスポンスモデルか { #orjson-or-response-model } + +もし求めおいるのがパフォヌマンスであれば、`orjson` レスポンスを䜿うより、[レスポンスモデル](../tutorial/response-model.md) を䜿うほうが良い堎合が倚いです。 + +レスポンスモデルがあるず、FastAPI は䞭間ステップ他の堎合に行われる `jsonable_encoder` による倉換などを介さずに、Pydantic を䜿っおデヌタをJSONにシリアラむズしたす。 + +内郚的には、Pydantic はJSONシリアラむズに `orjson` ず同じRust由来の仕組みを甚いおいるため、レスポンスモデルを䜿うだけで最良のパフォヌマンスが埗られたす。 ## デフォルトレスポンスクラス { #default-response-class } -**FastAPI** クラスのむンスタンス、たたは `APIRouter` を䜜成する際に、デフォルトで䜿甚するレスポンスクラスを指定できたす。 +**FastAPI** クラスのむンスタンスや `APIRouter` を䜜成する際に、デフォルトで䜿甚するレスポンスクラスを指定できたす。 これを定矩するパラメヌタは `default_response_class` です。 -以䞋の䟋では、**FastAPI** はすべおの*path operation*で、`JSONResponse` の代わりに `ORJSONResponse` をデフォルトずしお䜿いたす。 +以䞋の䟋では、**FastAPI** はすべおの *path operation* で、JSONの代わりにデフォルトで `HTMLResponse` を䜿甚したす。 {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *} /// tip | 豆知識 -これたでず同様に、*path operation*で `response_class` をオヌバヌラむドできたす。 +これたでず同様に、*path operation* ごずに `response_class` をオヌバヌラむドできたす。 /// ## その他のドキュメント { #additional-documentation } -OpenAPIでは `responses` を䜿っおメディアタむプやその他の詳现を宣蚀するこずもできたす: [Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}。 +OpenAPIでは `responses` を䜿っおメディアタむプやその他の詳现を宣蚀するこずもできたす: [OpenAPI の远加レスポンス](additional-responses.md)。 diff --git a/docs/ja/docs/advanced/dataclasses.md b/docs/ja/docs/advanced/dataclasses.md index 74f479f072..e3ad7afb63 100644 --- a/docs/ja/docs/advanced/dataclasses.md +++ b/docs/ja/docs/advanced/dataclasses.md @@ -2,11 +2,11 @@ FastAPI は **Pydantic** の䞊に構築されおおり、これたでにリク゚ストやレスポンスを宣蚀するために Pydantic モデルを䜿う方法を玹介しおきたした。 -しかし FastAPI は、同様の方法で `dataclasses` もサポヌトしたす: +しかし FastAPI は、同様の方法で [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) もサポヌトしたす: {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -これは **Pydantic** によっお匕き続きサポヌトされおいたす。Pydantic には `dataclasses` の内郚サポヌト があるためです。 +これは **Pydantic** によっお匕き続きサポヌトされおいたす。Pydantic には [`dataclasses` の内郚サポヌト](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel) があるためです。 そのため、䞊蚘のように明瀺的に Pydantic を䜿っおいないコヌドでも、FastAPI は暙準の dataclass を Pydantic 独自の dataclass に倉換するために Pydantic を䜿甚しおいたす。 @@ -74,7 +74,7 @@ dataclass は自動的に Pydantic の dataclass に倉換されたす。 い぀もどおり、FastAPI では必芁に応じお `def` ず `async def` を組み合わせられたす。 - どちらをい぀䜿うかの埩習が必芁な堎合は、[`async` ず `await`](../async.md#in-a-hurry){.internal-link target=_blank} に関するドキュメントの _"In a hurry?"_ セクションを参照しおください。 + どちらをい぀䜿うかの埩習が必芁な堎合は、[`async` ず `await`](../async.md#in-a-hurry) に関するドキュメントの _"In a hurry?"_ セクションを参照しおください。 9. この *path operation 関数* は可胜ではありたすがdataclass 自䜓は返さず、内郚デヌタを持぀蟞曞のリストを返しおいたす。 @@ -88,7 +88,7 @@ dataclass は自動的に Pydantic の dataclass に倉換されたす。 `dataclasses` を他の Pydantic モデルず組み合わせたり、継承したり、自分のモデルに含めたりもできたす。 -詳しくは、dataclasses に関する Pydantic ドキュメント を参照しおください。 +詳しくは、[dataclasses に関する Pydantic ドキュメント](https://docs.pydantic.dev/latest/concepts/dataclasses/) を参照しおください。 ## バヌゞョン { #version } diff --git a/docs/ja/docs/advanced/events.md b/docs/ja/docs/advanced/events.md index fb79062fa8..e2cbe2eb04 100644 --- a/docs/ja/docs/advanced/events.md +++ b/docs/ja/docs/advanced/events.md @@ -150,11 +150,11 @@ async with lifespan(app): 技術が気になる方ぞの现かな詳现です。🀓 -内郚的には、ASGI の技術仕様においお、これは Lifespan プロトコル の䞀郚であり、`startup` ず `shutdown` ずいうむベントが定矩されおいたす。 +内郚的には、ASGI の技術仕様においお、これは [Lifespan プロトコル](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) の䞀郚であり、`startup` ず `shutdown` ずいうむベントが定矩されおいたす。 /// info | 情報 -Starlette の `lifespan` ハンドラに぀いおは、Starlette の Lifespan ドキュメントで詳しく読むこずができたす。 +Starlette の `lifespan` ハンドラに぀いおは、[Starlette の Lifespan ドキュメント](https://www.starlette.dev/lifespan/)で詳しく読むこずができたす。 コヌドの他の領域で䜿える lifespan の状態をどのように扱うかも含たれおいたす。 @@ -162,4 +162,4 @@ Starlette の `lifespan` ハンドラに぀いおは、OpenAPI Generator がありたす。これは**倚数のプログラミング蚀語**をサポヌトし、OpenAPI 仕様から SDK を生成できたす。 +倚甚途な遞択肢ずしお [OpenAPI Generator](https://openapi-generator.tech/) がありたす。これは**倚数のプログラミング蚀語**をサポヌトし、OpenAPI 仕様から SDK を生成できたす。 -**TypeScript クラむアント**向けには、Hey API が目的特化の゜リュヌションで、TypeScript ゚コシステムに最適化された䜓隓を提䟛したす。 +**TypeScript クラむアント**向けには、[Hey API](https://heyapi.dev/) が目的特化の゜リュヌションで、TypeScript ゚コシステムに最適化された䜓隓を提䟛したす。 -他の SDK ゞェネレヌタは OpenAPI.Tools でも芋぀けられたす。 +他の SDK ゞェネレヌタは [OpenAPI.Tools](https://openapi.tools/#sdk) でも芋぀けられたす。 /// tip | 豆知識 @@ -24,15 +24,15 @@ FastAPI は自動的に **OpenAPI 3.1** の仕様を生成したす。したが このセクションでは、FastAPI をスポンサヌしおいる䌁業による、**ベンチャヌ支揎**および**䌁業支揎**の゜リュヌションを玹介したす。これらの補品は、高品質な生成 SDK に加えお、**远加機胜**や**統合**を提䟛したす。 -✹ [**FastAPI をスポンサヌする**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✹ こずで、これらの䌁業はフレヌムワヌクずその**゚コシステム**の健党性ず**持続可胜性**を支揎しおいたす。 +✹ [**FastAPI をスポンサヌする**](../help-fastapi.md#sponsor-the-author) ✹ こずで、これらの䌁業はフレヌムワヌクずその**゚コシステム**の健党性ず**持続可胜性**を支揎しおいたす。 この支揎は、FastAPI の**コミュニティ**皆さんぞの匷いコミットメントの衚明でもあり、**優れたサヌビス**の提䟛だけでなく、堅牢で発展するフレヌムワヌク FastAPI を支える姿勢を瀺しおいたす。🙇 䟋えば、次のようなものがありたす: -* Speakeasy -* Stainless -* liblab +* [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 ゞェネレヌタも存圚し、オンラむンで芋぀けられたす。🀓 @@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client これで TypeScript SDK が `./src/client` に生成されたす。 -`@hey-api/openapi-ts` のむンストヌル方法や、生成物の詳现は公匏サむトを参照しおください。 +[`@hey-api/openapi-ts` のむンストヌル方法](https://heyapi.dev/openapi-ts/get-started)や、[生成物の詳现](https://heyapi.dev/openapi-ts/output)は公匏サむトを参照しおください。 ### SDK の利甚 { #using-the-sdk } diff --git a/docs/ja/docs/advanced/index.md b/docs/ja/docs/advanced/index.md index 1d0f7566cd..026405318f 100644 --- a/docs/ja/docs/advanced/index.md +++ b/docs/ja/docs/advanced/index.md @@ -2,7 +2,7 @@ ## さらなる機胜 { #additional-features } -メむンの[チュヌトリアル - ナヌザヌガむド](../tutorial/index.md){.internal-link target=_blank}だけで、**FastAPI**の䞻芁な機胜を䞀通り把握するには十分なはずです。 +メむンの[チュヌトリアル - ナヌザヌガむド](../tutorial/index.md)だけで、**FastAPI**の䞻芁な機胜を䞀通り把握するには十分なはずです。 以降のセクションでは、その他のオプション、蚭定、远加機胜を芋おいきたす。 @@ -16,6 +16,6 @@ ## 先にチュヌトリアルを読む { #read-the-tutorial-first } -メむンの[チュヌトリアル - ナヌザヌガむド](../tutorial/index.md){.internal-link target=_blank}で埗た知識があれば、**FastAPI**の機胜の倚くは匕き続き利甚できたす。 +メむンの[チュヌトリアル - ナヌザヌガむド](../tutorial/index.md)で埗た知識があれば、**FastAPI**の機胜の倚くは匕き続き利甚できたす。 たた、以降のセクションでは、すでにそれを読んでいお、䞻芁な考え方を理解しおいるこずを前提ずしおいたす。 diff --git a/docs/ja/docs/advanced/middleware.md b/docs/ja/docs/advanced/middleware.md index 2883d53d82..018e660588 100644 --- a/docs/ja/docs/advanced/middleware.md +++ b/docs/ja/docs/advanced/middleware.md @@ -1,8 +1,8 @@ # 高床なミドルりェア { #advanced-middleware } -メむンのチュヌトリアルでは、アプリケヌションに[カスタムミドルりェア](../tutorial/middleware.md){.internal-link target=_blank}を远加する方法を孊びたした。 +メむンのチュヌトリアルでは、アプリケヌションに[カスタムミドルりェア](../tutorial/middleware.md)を远加する方法を孊びたした。 -そしお、[`CORSMiddleware` を䜿った CORS の扱い方](../tutorial/cors.md){.internal-link target=_blank}も孊びたした。 +そしお、[`CORSMiddleware` を䜿った CORS の扱い方](../tutorial/cors.md)も孊びたした。 このセクションでは、その他のミドルりェアの䜿い方を芋おいきたす。 @@ -91,7 +91,7 @@ HTTP Host Header 攻撃を防ぐため、すべおの受信リク゚ストに正 䟋えば: -- Uvicorn の `ProxyHeadersMiddleware` -- MessagePack +- [Uvicorn の `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py) +- [MessagePack](https://github.com/florimondmanca/msgpack-asgi) -他に利甚可胜なミドルりェアに぀いおは、Starlette のミドルりェアドキュメントや ASGI Awesome List を参照しおください。 +他に利甚可胜なミドルりェアに぀いおは、[Starlette のミドルりェアドキュメント](https://www.starlette.dev/middleware/)や [ASGI Awesome List](https://github.com/florimondmanca/awesome-asgi) を参照しおください。 diff --git a/docs/ja/docs/advanced/openapi-callbacks.md b/docs/ja/docs/advanced/openapi-callbacks.md index 283a80b210..31d17e270b 100644 --- a/docs/ja/docs/advanced/openapi-callbacks.md +++ b/docs/ja/docs/advanced/openapi-callbacks.md @@ -35,7 +35,7 @@ /// tip | 豆知識 -`callback_url` ク゚リパラメヌタは、Pydantic の Url 型を䜿甚したす。 +`callback_url` ク゚リパラメヌタは、Pydantic の [Url](https://docs.pydantic.dev/latest/api/networks/) 型を䜿甚したす。 /// @@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 実際のコヌルバックは単なる HTTP リク゚ストです。 -自分でコヌルバックを実装する堎合は、HTTPX や Requests のようなものを䜿えたす。 +自分でコヌルバックを実装する堎合は、[HTTPX](https://www.python-httpx.org) や [Requests](https://requests.readthedocs.io/) のようなものを䜿えたす。 /// @@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 通垞の *path operation* ず異なる䞻な点が 2 ぀ありたす: * 実際のコヌドは䞍芁です。あなたのアプリはこのコヌドを決しお呌びたせん。これは *倖郚 API* をドキュメント化するためだけに䜿われたす。したがっお、関数本䜓は `pass` で構いたせん。 -* *パス* には、*あなたの API* に送られた元のリク゚ストのパラメヌタや䞀郚を倉数ずしお䜿える OpenAPI 3 の匏埌述を含められたす。 +* *パス* には、*あなたの API* に送られた元のリク゚ストのパラメヌタや䞀郚を倉数ずしお䜿える [OpenAPI 3 の匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)埌述を含められたす。 ### コヌルバックのパス匏 { #the-callback-path-expression } -コヌルバックの *パス* には、*あなたの API* に送られた元のリク゚ストの䞀郚を含められる OpenAPI 3 の匏を䜿甚できたす。 +コヌルバックの *パス* には、*あなたの API* に送られた元のリク゚ストの䞀郚を含められる [OpenAPI 3 の匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)を䜿甚できたす。 この䟋では、`str` は次のずおりです: @@ -179,7 +179,7 @@ JSON ボディは次のような内容です: ### ドキュメントを確認 { #check-the-docs } -アプリを起動しお http://127.0.0.1:8000/docs にアクセスしたす。 +アプリを起動しお [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしたす。 あなたの *path operation* に「Callbacks」セクションが含たれ、*倖郚 API* がどうあるべきかが衚瀺されおいるのが確認できたす: diff --git a/docs/ja/docs/advanced/openapi-webhooks.md b/docs/ja/docs/advanced/openapi-webhooks.md index 368cfddd82..7f7a726807 100644 --- a/docs/ja/docs/advanced/openapi-webhooks.md +++ b/docs/ja/docs/advanced/openapi-webhooks.md @@ -48,7 +48,7 @@ Webhook では`/items/` のような*パス*を宣蚀しおいるわけで ### ドキュメントの確認 { #check-the-docs } -アプリを起動し、http://127.0.0.1:8000/docs にアクセスしたす。 +アプリを起動し、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしたす。 ドキュメントには通垞の *path operations* に加えお、**webhooks** も衚瀺されたす: diff --git a/docs/ja/docs/advanced/path-operation-advanced-configuration.md b/docs/ja/docs/advanced/path-operation-advanced-configuration.md index f7e3406171..65b56dba4c 100644 --- a/docs/ja/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/ja/docs/advanced/path-operation-advanced-configuration.md @@ -60,7 +60,7 @@ APIの関数名を `operationId` ずしお利甚したい堎合、すべおのAP 远加のレスポンスに぀いおも、モデルやステヌタスコヌドなどずずもに宣蚀できたす。 -これに぀いおはドキュメントに章党䜓がありたす。 [OpenAPIの远加レスポンス](additional-responses.md){.internal-link target=_blank} で読めたす。 +これに぀いおはドキュメントに章党䜓がありたす。 [OpenAPIの远加レスポンス](additional-responses.md) で読めたす。 ## OpenAPI Extra { #openapi-extra } @@ -68,7 +68,7 @@ APIの関数名を `operationId` ずしお利甚したい堎合、すべおのAP /// note | 技術詳现 -OpenAPI仕様では Operation Object ず呌ばれおいたす。 +OpenAPI仕様では [Operation Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object) ず呌ばれおいたす。 /// @@ -82,7 +82,7 @@ OpenAPI仕様では Starlette のドキュメントを参照しおください。 +利甚可胜なすべおのパラメヌタやオプションに぀いおは、[Starlette のドキュメント](https://www.starlette.dev/responses/#set-cookie)を参照しおください。 diff --git a/docs/ja/docs/advanced/response-directly.md b/docs/ja/docs/advanced/response-directly.md index 103e84c385..b5c9fc5cbf 100644 --- a/docs/ja/docs/advanced/response-directly.md +++ b/docs/ja/docs/advanced/response-directly.md @@ -1,22 +1,26 @@ # レスポンスを盎接返す { #return-a-response-directly } -**FastAPI** の *path operation* では、通垞は任意のデヌタを返すこずができたす: 䟋えば、 `dict`、`list`、Pydanticモデル、デヌタベヌスモデルなどです。 +**FastAPI** の *path operation* では、通垞は任意のデヌタを返すこずができたす: 䟋えば、`dict`、`list`、Pydanticモデル、デヌタベヌスモデルなどです。 -デフォルトでは、**FastAPI** は [JSON互換゚ンコヌダ](../tutorial/encoder.md){.internal-link target=_blank} で説明されおいる `jsonable_encoder` により、返す倀を自動的にJSONに倉換したす。 +[レスポンスモデル](../tutorial/response-model.md) を宣蚀した堎合、FastAPI は Pydantic を䜿っおデヌタをJSONにシリアラむズしたす。 -このずき背埌では、JSON互換なデヌタ (䟋えば`dict`) を、クラむアントぞ送信されるレスポンスずしお利甚される `JSONResponse` の䞭に含めたす。 +レスポンスモデルを宣蚀しない堎合、FastAPI は [JSON互換゚ンコヌダ](../tutorial/encoder.md) で説明されおいる `jsonable_encoder` を䜿甚し、その結果を `JSONResponse` に入れたす。 -しかし、*path operation* から `JSONResponse` を盎接返すこずもできたす。 +たた、`JSONResponse` を盎接䜜成しお返すこずもできたす。 -これは䟋えば、カスタムヘッダヌやcookieを返すずきに䟿利です。 +/// tip + +通垞は、`JSONResponse` を盎接返すよりも、[レスポンスモデル](../tutorial/response-model.md) を䜿うほうがパフォヌマンスが倧幅に良くなりたす。これは、Pydantic によるシリアラむズが Rust で実行されるためです。 + +/// ## `Response` を返す { #return-a-response } 実際は、`Response` やそのサブクラスを返すこずができたす。 -/// tip | 豆知識 +/// info -`JSONResponse` それ自䜓は、 `Response` のサブクラスです。 +`JSONResponse` それ自䜓は、`Response` のサブクラスです。 /// @@ -26,6 +30,8 @@ これは倚くの柔軟性を提䟛したす。任意のデヌタ型を返したり、任意のデヌタ宣蚀やバリデヌションをオヌバヌラむドできたす。 +同時に倚くの責任も䌎いたす。返すデヌタが正しく、正しいフォヌマットであり、シリアラむズ可胜であるこずなどを、あなたが保蚌しなければなりたせん。 + ## `jsonable_encoder` を `Response` の䞭で䜿う { #using-the-jsonable-encoder-in-a-response } **FastAPI** はあなたが返す `Response` に察しお䜕も倉曎を加えないので、コンテンツが準備できおいるこずを保蚌しなければなりたせん。 @@ -46,20 +52,32 @@ ## カスタム `Response` を返す { #returning-a-custom-response } -䞊蚘の䟋では必芁な郚分を党お瀺しおいたすが、あたり䟿利ではありたせん。`item` を盎接返すこずができるし、**FastAPI** はそれを `dict` に倉換しお `JSONResponse` に含めおくれるなど。すべお、デフォルトの動䜜です。 +䞊蚘の䟋では必芁な郚分を党お瀺しおいたすが、あたり䟿利ではありたせん。`item` を盎接返すこずができるし、**FastAPI** はそれを `dict` に倉換しお `JSONResponse` に含めおくれるなど。すべお、デフォルトの動䜜です。 では、これを䜿っおカスタムレスポンスをどう返すか芋おみたしょう。 -XMLレスポンスを返したいずしたしょう。 +[XML](https://en.wikipedia.org/wiki/XML)レスポンスを返したいずしたしょう。 XMLを文字列にし、`Response` に含め、それを返したす。 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} +## Response Model の仕組み { #how-a-response-model-works } + +path operation で [Response Model - 戻り倀の型](../tutorial/response-model.md) を宣蚀するず、**FastAPI** はそれを䜿っお Pydantic によりデヌタをJSONにシリアラむズしたす。 + +{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} + +これは Rust 偎で行われるため、通垞の Python ず `JSONResponse` クラスで行う堎合より、パフォヌマンスははるかに良くなりたす。 + +`response_model` や戻り倀の型を䜿甚する堎合、FastAPI はデヌタ倉換に䜎速になりうる`jsonable_encoder` も `JSONResponse` クラスも䜿いたせん。 + +代わりに、response modelたたは戻り倀の型を䜿っお Pydantic が生成した JSON のバむト列をそのたた甚い、JSON 甚の正しいメディアタむプ`application/json`を持぀ `Response` を盎接返したす。 + ## 備考 { #notes } `Response` を盎接返す堎合、バリデヌションや、倉換 (シリアラむズ) や、自動ドキュメントは行われたせん。 -しかし、[Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}に蚘茉されたようにドキュメントを曞くこずもできたす。 +しかし、[Additional Responses in OpenAPI](additional-responses.md)に蚘茉されたようにドキュメントを曞くこずもできたす。 埌のセクションで、カスタム `Response` を䜿甚・宣蚀しながら、自動的なデヌタ倉換やドキュメンテヌションを行う方法を説明したす。 diff --git a/docs/ja/docs/advanced/response-headers.md b/docs/ja/docs/advanced/response-headers.md index 10aec78452..3a61f57428 100644 --- a/docs/ja/docs/advanced/response-headers.md +++ b/docs/ja/docs/advanced/response-headers.md @@ -20,7 +20,7 @@ `Response` を盎接返す堎合にもヘッダヌを远加できたす。 -[Response を盎接返す](response-directly.md){.internal-link target=_blank} で説明したようにレスポンスを䜜成し、ヘッダヌを远加のパラメヌタずしお枡したす: +[Response を盎接返す](response-directly.md) で説明したようにレスポンスを䜜成し、ヘッダヌを远加のパラメヌタずしお枡したす: {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *} @@ -36,6 +36,6 @@ ## カスタムヘッダヌ { #custom-headers } -独自のカスタムヘッダヌは、`X-` プレフィックスを䜿っお远加できるこずに泚意しおください。 +独自のカスタムヘッダヌは、[`X-` プレフィックスを䜿っお](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)远加できるこずに泚意しおください。 -ただし、ブラりザのクラむアントに芋えるようにしたいカスタムヘッダヌがある堎合は、CORS 蚭定にそれらを远加する必芁がありたす[CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank} を参照。このずき、Starlette の CORS ドキュメントに蚘茉の `expose_headers` パラメヌタを䜿甚したす。 +ただし、ブラりザのクラむアントに芋えるようにしたいカスタムヘッダヌがある堎合は、CORS 蚭定にそれらを远加する必芁がありたす[CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md) を参照。このずき、[Starlette の CORS ドキュメント](https://www.starlette.dev/middleware/#corsmiddleware)に蚘茉の `expose_headers` パラメヌタを䜿甚したす。 diff --git a/docs/ja/docs/advanced/security/http-basic-auth.md b/docs/ja/docs/advanced/security/http-basic-auth.md index 7ee56a039b..b8e47dcbb7 100644 --- a/docs/ja/docs/advanced/security/http-basic-auth.md +++ b/docs/ja/docs/advanced/security/http-basic-auth.md @@ -32,7 +32,7 @@ URL を最初に開こうずしたずきたたはドキュメントで「Exec 䟝存関係を䜿っおナヌザヌ名ずパスワヌドが正しいかを確認したす。 -これには、Python 暙準モゞュヌル `secrets` を甚いおナヌザヌ名ずパスワヌドを怜蚌したす。 +これには、Python 暙準モゞュヌル [`secrets`](https://docs.python.org/3/library/secrets.html) を甚いおナヌザヌ名ずパスワヌドを怜蚌したす。 `secrets.compare_digest()` は `bytes` か、ASCII 文字英語の文字のみを含む `str` を受け取る必芁がありたす。぀たり、`Sebastián` のように `á` を含む文字ではそのたたでは動䜜したせん。 @@ -46,7 +46,7 @@ URL を最初に開こうずしたずきたたはドキュメントで「Exec ```Python if not (credentials.username == "stanleyjobson") or not (credentials.password == "swordfish"): - # Return some error + # 䜕らかの゚ラヌを返す ... ``` diff --git a/docs/ja/docs/advanced/security/index.md b/docs/ja/docs/advanced/security/index.md index 069e2686cb..5b4c480fe9 100644 --- a/docs/ja/docs/advanced/security/index.md +++ b/docs/ja/docs/advanced/security/index.md @@ -2,11 +2,11 @@ ## 远加機胜 { #additional-features } -[チュヌトリアル - ナヌザヌガむド: セキュリティ](../../tutorial/security/index.md){.internal-link target=_blank}で扱ったもの以倖にも、セキュリティを扱うための远加機胜がいく぀かありたす。 +[チュヌトリアル - ナヌザヌガむド: セキュリティ](../../tutorial/security/index.md)で扱ったもの以倖にも、セキュリティを扱うための远加機胜がいく぀かありたす。 /// tip | 豆知識 -次の節は必ずしも「高床」ではありたせん。 +次の節は**必ずしも「高床」ではありたせん**。 あなたのナヌスケヌスでは、その䞭のいずれかに解決策があるかもしれたせん。 @@ -14,6 +14,6 @@ ## たずチュヌトリアルを読む { #read-the-tutorial-first } -以䞋の節は、すでにメむンの[チュヌトリアル - ナヌザヌガむド: セキュリティ](../../tutorial/security/index.md){.internal-link target=_blank}を読んでいるこずを前提ずしたす。 +以䞋の節は、すでにメむンの[チュヌトリアル - ナヌザヌガむド: セキュリティ](../../tutorial/security/index.md)を読んでいるこずを前提ずしたす。 いずれも同じ抂念に基づいおいたすが、いく぀かの远加機胜を利甚できたす。 diff --git a/docs/ja/docs/advanced/security/oauth2-scopes.md b/docs/ja/docs/advanced/security/oauth2-scopes.md index 7c6cfdbf03..3afc26e3ae 100644 --- a/docs/ja/docs/advanced/security/oauth2-scopes.md +++ b/docs/ja/docs/advanced/security/oauth2-scopes.md @@ -60,7 +60,7 @@ OAuth2 にずっおは、単に文字列に過ぎたせん。 ## 党䜓像 { #global-view } -たず、メむンの**チュヌトリアル - ナヌザヌガむド**にある [OAuth2パスワヌドハッシュ化あり、Bearer ず JWT トヌクン](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} の䟋から倉曎される郚分を、スコヌプ付き OAuth2 を䜿っお手早く芋おみたしょう。 +たず、メむンの**チュヌトリアル - ナヌザヌガむド**にある [OAuth2パスワヌドハッシュ化あり、Bearer ず JWT トヌクン](../../tutorial/security/oauth2-jwt.md) の䟋から倉曎される郚分を、スコヌプ付き OAuth2 を䜿っお手早く芋おみたしょう。 {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *} @@ -271,4 +271,4 @@ API ドキュメントを開くず、認蚌しお、蚱可するスコヌプを ## デコレヌタ `dependencies` での `Security` { #security-in-decorator-dependencies } -デコレヌタの `dependencies` パラメヌタに `Depends` の `list` を定矩できるのず同様[path operation デコレヌタでの䟝存関係](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 参照、ここで `scopes` を指定した `Security` も䜿甚できたす。 +デコレヌタの `dependencies` パラメヌタに `Depends` の `list` を定矩できるのず同様[path operation デコレヌタでの䟝存関係](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md) 参照、ここで `scopes` を指定した `Security` も䜿甚できたす。 diff --git a/docs/ja/docs/advanced/settings.md b/docs/ja/docs/advanced/settings.md index 5508ad6d91..e42ec845c6 100644 --- a/docs/ja/docs/advanced/settings.md +++ b/docs/ja/docs/advanced/settings.md @@ -8,7 +8,7 @@ /// tip | 豆知識 -環境倉数に぀いお理解するには、[環境倉数](../environment-variables.md){.internal-link target=_blank}を参照しおください。 +環境倉数に぀いお理解するには、[環境倉数](../environment-variables.md)を参照しおください。 /// @@ -20,11 +20,11 @@ ## Pydantic の `Settings` { #pydantic-settings } -幞いなこずに、Pydantic には環境倉数から来る蚭定を扱うための優れたナヌティリティがあり、Pydantic: Settings management で提䟛されおいたす。 +幞いなこずに、Pydantic には環境倉数から来る蚭定を扱うための優れたナヌティリティがあり、[Pydantic: Settings management](https://docs.pydantic.dev/latest/concepts/pydantic_settings/) で提䟛されおいたす。 ### `pydantic-settings` のむンストヌル { #install-pydantic-settings } -たず、[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、`pydantic-settings` パッケヌゞをむンストヌルしたす: +たず、[仮想環境](../virtual-environments.md)を䜜成しお有効化し、`pydantic-settings` パッケヌゞをむンストヌルしたす:
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p ## 別モゞュヌルでの蚭定 { #settings-in-another-module } -[倧芏暡アプリケヌション - 耇数ファむル](../tutorial/bigger-applications.md){.internal-link target=_blank} で芋たように、これらの蚭定を別のモゞュヌルファむルに眮くこずもできたす。 +[倧芏暡アプリケヌション - 耇数ファむル](../tutorial/bigger-applications.md) で芋たように、これらの蚭定を別のモゞュヌルファむルに眮くこずもできたす。 たずえば、`config.py` ずいうファむルに次のように曞けたす: @@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// tip | 豆知識 -[倧芏暡アプリケヌション - 耇数ファむル](../tutorial/bigger-applications.md){.internal-link target=_blank} で芋たように、`__init__.py` ファむルも必芁です。 +[倧芏暡アプリケヌション - 耇数ファむル](../tutorial/bigger-applications.md) で芋たように、`__init__.py` ファむルも必芁です。 /// @@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// -Pydantic は倖郚ラむブラリを䜿っおこの皮のファむルからの読み蟌みをサポヌトしおいたす。詳现は Pydantic Settings: Dotenv (.env) support を参照しおください。 +Pydantic は倖郚ラむブラリを䜿っおこの皮のファむルからの読み蟌みをサポヌトしおいたす。詳现は [Pydantic Settings: Dotenv (.env) support](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support) を参照しおください。 /// tip | 豆知識 @@ -197,7 +197,7 @@ APP_NAME="ChimichangApp" /// tip | 豆知識 -`model_config` 属性は Pydantic の蚭定専甚です。詳しくは Pydantic: Concepts: Configuration を参照しおください。 +`model_config` 属性は Pydantic の蚭定専甚です。詳しくは [Pydantic: Concepts: Configuration](https://docs.pydantic.dev/latest/concepts/config/) を参照しおください。 /// @@ -291,7 +291,7 @@ participant execute as Execute function この方法は、ほずんどグロヌバル倉数のように振る舞いたす。しかし、䟝存関数を䜿っおいるので、テストのために簡単にオヌバヌラむドできたす。 -`@lru_cache` は Python 暙準ラむブラリの `functools` の䞀郚です。詳现は Python の `@lru_cache` ドキュメントを参照しおください。 +`@lru_cache` は Python 暙準ラむブラリの `functools` の䞀郚です。詳现は [Python の `@lru_cache` ドキュメント](https://docs.python.org/3/library/functools.html#functools.lru_cache)を参照しおください。 ## たずめ { #recap } diff --git a/docs/ja/docs/advanced/sub-applications.md b/docs/ja/docs/advanced/sub-applications.md index f38da1423e..e9b17031b5 100644 --- a/docs/ja/docs/advanced/sub-applications.md +++ b/docs/ja/docs/advanced/sub-applications.md @@ -30,25 +30,25 @@ ### 自動 API ドキュメントの確認 { #check-the-automatic-api-docs } -では、`fastapi` コマンドでこのファむルを実行したす: +では、`fastapi` コマンドを実行したす:
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-そしお、http://127.0.0.1:8000/docs を開きたす。 +そしお、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開きたす。 メむンアプリ甚の自動 API ドキュメントが衚瀺され、そのアプリ自身の path operation のみが含たれたす: -次に、サブアプリケヌションのドキュメント http://127.0.0.1:8000/subapi/docs を開きたす。 +次に、サブアプリケヌションのドキュメント [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs) を開きたす。 サブアプリケヌション甚の自動 API ドキュメントが衚瀺され、そのアプリ自身の path operation のみが、正しいサブパス接頭蟞 `/subapi` の䞋で衚瀺されたす: @@ -64,4 +64,4 @@ $ fastapi dev main.py さらに、サブアプリケヌション自身が別のサブアプリケヌションをマりントしおいおも問題ありたせん。FastAPI がこれらの `root_path` をすべお自動的に凊理するためです。 -`root_path` の詳现や明瀺的な指定方法に぀いおは、[プロキシの背埌で](behind-a-proxy.md){.internal-link target=_blank} の節で孊べたす。 +`root_path` の詳现や明瀺的な指定方法に぀いおは、[プロキシの背埌で](behind-a-proxy.md) の節で孊べたす。 diff --git a/docs/ja/docs/advanced/templates.md b/docs/ja/docs/advanced/templates.md index 3c4827b88e..5495b73a0b 100644 --- a/docs/ja/docs/advanced/templates.md +++ b/docs/ja/docs/advanced/templates.md @@ -8,7 +8,7 @@ Starlette によっお提䟛され、**FastAPI** アプリで盎接䜿える、 ## 䟝存関係のむンストヌル { #install-dependencies } -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を䜜成しお有効化し、`jinja2` をむンストヌルしたす: +[仮想環境](../virtual-environments.md) を䜜成しお有効化し、`jinja2` をむンストヌルしたす:
@@ -123,4 +123,4 @@ Item ID: 42 ## さらに詳しく { #more-details } -より詳しい内容テンプレヌトのテスト方法などに぀いおは、Starlette のテンプレヌトに関するドキュメントを参照しおください。 +より詳しい内容テンプレヌトのテスト方法などに぀いおは、[Starlette のテンプレヌトに関するドキュメント](https://www.starlette.dev/templates/)を参照しおください。 diff --git a/docs/ja/docs/advanced/testing-websockets.md b/docs/ja/docs/advanced/testing-websockets.md index 7f708ea1a2..745e636087 100644 --- a/docs/ja/docs/advanced/testing-websockets.md +++ b/docs/ja/docs/advanced/testing-websockets.md @@ -8,6 +8,6 @@ WebSocket をテストするのにも同じ `TestClient` を䜿甚できたす /// note | 備考 -詳现に぀いおは、Starlette のドキュメント「WebSocket のテスト」を参照しおください。 +詳现に぀いおは、Starlette のドキュメント「[WebSocket のテスト](https://www.starlette.dev/testclient/#testing-websocket-sessions)」を参照しおください。 /// diff --git a/docs/ja/docs/advanced/using-request-directly.md b/docs/ja/docs/advanced/using-request-directly.md index 1e564f5945..59d7290e67 100644 --- a/docs/ja/docs/advanced/using-request-directly.md +++ b/docs/ja/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ ## `Request` オブゞェクトの詳现 { #details-about-the-request-object } -**FastAPI** は内郚的には **Starlette** の䞊にいく぀かのツヌル局を茉せたものなので、必芁に応じお Starlette の `Request` オブゞェクトを盎接䜿えたす。 +**FastAPI** は内郚的には **Starlette** の䞊にいく぀かのツヌル局を茉せたものなので、必芁に応じお Starlette の [`Request`](https://www.starlette.dev/requests/) オブゞェクトを盎接䜿えたす。 たた、`Request` オブゞェクトから盎接デヌタ䟋: ボディを取埗する堎合、そのデヌタは FastAPI によっお怜蚌・倉換・ドキュメント化OpenAPI による自動 API ナヌザヌむンタヌフェヌス向けされたせん。 @@ -45,7 +45,7 @@ path operation 関数の匕数ずしお `Request` 型のパラメヌタを宣蚀 ## `Request` のドキュメント { #request-documentation } -より詳しくは、公匏 Starlette ドキュメントサむトの `Request` オブゞェクトを参照しおください。 +より詳しくは、[公匏 Starlette ドキュメントサむトの `Request` オブゞェクト](https://www.starlette.dev/requests/)を参照しおください。 /// note | 技術詳现 diff --git a/docs/ja/docs/advanced/websockets.md b/docs/ja/docs/advanced/websockets.md index efc02079bb..802110b587 100644 --- a/docs/ja/docs/advanced/websockets.md +++ b/docs/ja/docs/advanced/websockets.md @@ -1,10 +1,10 @@ # WebSockets { #websockets } -**FastAPI**でWebSocketsが䜿甚できたす。 +**FastAPI**で[WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)が䜿甚できたす。 ## `websockets`のむンストヌル { #install-websockets } -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成し、それを有効化しおから、「WebSocket」プロトコルを簡単に䜿えるようにするPythonラむブラリの`websockets`をむンストヌルしおください。 +[仮想環境](../virtual-environments.md)を䜜成し、それを有効化しおから、「WebSocket」プロトコルを簡単に䜿えるようにするPythonラむブラリの`websockets`をむンストヌルしおください。
@@ -64,19 +64,19 @@ WebSocketルヌトでは、メッセヌゞを埅機しお送信するために ` ## 詊しおみる { #try-it } -ファむル名が `main.py` である堎合、以䞋でアプリケヌションを実行したす。 +コヌドを `main.py` に入れお、アプリケヌションを実行したす。
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-ブラりザで http://127.0.0.1:8000 を開きたす。 +ブラりザで [http://127.0.0.1:8000](http://127.0.0.1:8000) を開きたす。 次のようなシンプルなペヌゞが衚瀺されたす。 @@ -115,25 +115,25 @@ WebSocket゚ンドポむントでは、`fastapi` から以䞋をむンポヌト これはWebSocketであるため、`HTTPException` を発生させるこずはあたり意味がありたせん。代わりに `WebSocketException` を発生させたす。 -クロヌゞングコヌドは、仕様で定矩された有効なコヌドの䞭から䜿甚するこずができたす。 +クロヌゞングコヌドは、[仕様で定矩された有効なコヌド](https://tools.ietf.org/html/rfc6455#section-7.4.1)の䞭から䜿甚するこずができたす。 /// ### 䟝存関係を甚いおWebSocketsを詊しおみる { #try-the-websockets-with-dependencies } -ファむル名が `main.py` である堎合、以䞋でアプリケヌションを実行したす。 +アプリケヌションを実行したす。
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-ブラりザで http://127.0.0.1:8000 を開きたす。 +ブラりザで [http://127.0.0.1:8000](http://127.0.0.1:8000) を開きたす。 そこで、以䞋を蚭定できたす。 @@ -174,7 +174,7 @@ Client #1596980209979 left the chat しかし、すべおがメモリ内の単䞀のリストで凊理されるため、プロセスの実行䞭にのみ機胜し、単䞀のプロセスでのみ機胜するこずに泚意しおください。 -FastAPIず簡単に統合できお、RedisやPostgreSQLなどでサポヌトされおいる、より堅牢なものが必芁なら、encode/broadcaster を確認しおください。 +FastAPIず簡単に統合できお、RedisやPostgreSQLなどでサポヌトされおいる、より堅牢なものが必芁なら、[encode/broadcaster](https://github.com/encode/broadcaster) を確認しおください。 /// @@ -182,5 +182,5 @@ FastAPIず簡単に統合できお、RedisやPostgreSQLなどでサポヌトさ オプションの詳现に぀いおは、Starletteのドキュメントを確認しおください。 -* `WebSocket` クラス. -* クラスベヌスのWebSocket凊理. +* [`WebSocket` クラス](https://www.starlette.dev/websockets/)。 +* [クラスベヌスのWebSocket凊理](https://www.starlette.dev/endpoints/#websocketendpoint)。 diff --git a/docs/ja/docs/advanced/wsgi.md b/docs/ja/docs/advanced/wsgi.md index b06b4a3299..6895eb6584 100644 --- a/docs/ja/docs/advanced/wsgi.md +++ b/docs/ja/docs/advanced/wsgi.md @@ -1,6 +1,6 @@ # WSGI の組み蟌み - Flask、Django など { #including-wsgi-flask-django-others } -[サブアプリケヌション - マりント](sub-applications.md){.internal-link target=_blank}、[プロキシの背埌](behind-a-proxy.md){.internal-link target=_blank} で芋たように、WSGI アプリケヌションをマりントできたす。 +[サブアプリケヌション - マりント](sub-applications.md)、[プロキシの背埌](behind-a-proxy.md) で芋たように、WSGI アプリケヌションをマりントできたす。 そのために `WSGIMiddleware` を䜿甚しお、Flask や Django などの WSGI アプリをラップできたす。 @@ -36,13 +36,13 @@ それ以倖は **FastAPI** が凊理したす。 -実行しお http://localhost:8000/v1/ にアクセスするず、Flask からのレスポンスが衚瀺されたす: +実行しお [http://localhost:8000/v1/](http://localhost:8000/v1/) にアクセスするず、Flask からのレスポンスが衚瀺されたす: ```txt Hello, World from Flask! ``` -さらに http://localhost:8000/v2 にアクセスするず、FastAPI からのレスポンスが衚瀺されたす: +さらに [http://localhost:8000/v2](http://localhost:8000/v2) にアクセスするず、FastAPI からのレスポンスが衚瀺されたす: ```JSON { diff --git a/docs/ja/docs/alternatives.md b/docs/ja/docs/alternatives.md index 8b1ec072d6..34017b00e9 100644 --- a/docs/ja/docs/alternatives.md +++ b/docs/ja/docs/alternatives.md @@ -14,7 +14,7 @@ ## 以前のツヌル { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } Pythonのフレヌムワヌクの䞭で最もポピュラヌで、広く信頌されおいたす。Instagramのようなシステムの構築に䜿われおいたす。 @@ -22,7 +22,7 @@ Pythonのフレヌムワヌクの䞭で最もポピュラヌで、広く信頌 バック゚ンドでHTMLを生成するために䜜られたものであり、珟代的なフロント゚ンド (ReactやVue.js、Angularなど) や、他のシステム (IoTデバむスなど) ず通信するAPIを構築するために䜜られたものではありたせん。 -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST Frameworkは、Djangoを䞋敷きにしおWeb APIを構築する柔軟なツヌルキットずしお、APIの機胜を向䞊させるために䜜られたした。 @@ -42,7 +42,7 @@ Django REST Framework は Tom Christie によっお䜜成されたした。Starl /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask は「マむクロフレヌムワヌク」であり、デヌタベヌスずの統合のようなDjangoがデフォルトで持぀倚くの機胜は含たれおいたせん。 @@ -64,7 +64,7 @@ Flaskのシンプルさを考えるず、APIを構築するのに適しおいる /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI**は実際には**Requests**の代替ではありたせん。それらのスコヌプは倧きく異なりたす。 @@ -106,7 +106,7 @@ def read_url(): /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } 私がDjango REST Frameworkに求めおいた䞻な機胜は、APIの自動的なドキュメント生成でした。 @@ -124,8 +124,8 @@ def read_url(): そしお、暙準に基づくナヌザヌむンタヌフェヌスツヌルを統合しおいたす。 -* Swagger UI -* ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) この二぀は人気で安定したものずしお遞択されたしたが、少し怜玢しおみるず、 (**FastAPI**ず同時に䜿甚できる) OpenAPIのための倚くの代替ずなるツヌルを芋぀けるこずができたす。 @@ -135,7 +135,7 @@ def read_url(): いく぀かのFlask RESTフレヌムワヌクがありたすが、それらを調査しおみたずころ、倚くのものが䞍適切な問題が残ったたた、䞭断されたり攟眮されおいるこずがわかりたした。 -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } APIシステムで必芁ずされる䞻な機胜の䞀぀に、コヌド (Python) からデヌタを取り出しお、ネットワヌクを介しお送れるものに倉換するデヌタの「シリアラむれヌション」がありたす。䟋えば、デヌタベヌスのデヌタを含むオブゞェクトをJSONオブゞェクトに倉換したり、`datetime` オブゞェクトを文字列に倉換するなどです。 @@ -153,7 +153,7 @@ APIが必芁ずするもう䞀぀の倧きな機胜はデヌタのバリデヌ /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } APIに求められる他の倧きな機胜ずしお、受信したリク゚ストデヌタのパヌスがありたす。 @@ -175,7 +175,7 @@ Webargsは、Marshmallowず同じ開発者により䜜られたした。 /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } MarshmallowずWebargsはバリデヌション、パヌス、シリアラむれヌションをプラグむンずしお提䟛しおいたす。 @@ -205,7 +205,7 @@ OpenAPIずいう、APIに぀いおのオヌプンな暙準をサポヌトしお /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } Webargs、Marshmallow、APISpecを連携させたFlaskプラグむンです。 @@ -219,11 +219,11 @@ Flask、Flask-apispec、Marshmallow、Webargsの組み合わせは、**FastAPI** これを䜿うこずで、いく぀かのFlaskフルスタックゞェネレヌタを䜜成するこずになりたした。これらは私 (ずいく぀かの倖郚のチヌム) が今たで䜿っおきたメむンのスタックです。 -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [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){.internal-link target=_blank}の元ずなっおいたした。 +そしお、これらのフルスタックゞェネレヌタヌは、[**FastAPI** Project Generators](project-generation.md)の元ずなっおいたした。 /// info | 情報 @@ -237,7 +237,7 @@ Flask-apispecはMarshmallowず同じ開発者により䜜成されたした。 /// -### NestJS (ずAngular) { #nestjs-and-angular } +### [NestJS](https://nestjs.com/) (ず[Angular](https://angular.io/)) { #nestjs-and-angular } NestJSはAngularにむンスパむアされたJavaScript (TypeScript) NodeJSフレヌムワヌクで、Pythonですらありたせん。 @@ -259,13 +259,13 @@ Angular 2にむンスピレヌションを受けた、統合された䟝存性 /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } `asyncio`に基づいた、Pythonのフレヌムワヌクの䞭でも非垞に高速なものの䞀぀です。Flaskず非垞に䌌た䜜りになっおいたす。 /// note | 技術詳现 -Pythonの`asyncio`ルヌプの代わりに、`uvloop`が利甚されおいたす。それにより、非垞に高速です。 +Pythonの`asyncio`ルヌプの代わりに、[`uvloop`](https://github.com/MagicStack/uvloop)が利甚されおいたす。それにより、非垞に高速です。 `Uvicorn`ず`Starlette`に明らかなむンスピレヌションを䞎えおおり、それらは珟圚オヌプンなベンチマヌクにおいおSanicより高速です。 @@ -279,7 +279,7 @@ Pythonの`asyncio`ルヌプの代わりに、Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falconはもう䞀぀の高性胜Pythonフレヌムワヌクで、ミニマムに蚭蚈されおおり、Hugのような他のフレヌムワヌクの基盀ずしお動䜜したす。 @@ -297,7 +297,7 @@ Hug (HugはFalconをベヌスにしおいたす) ず䞀緒に、**FastAPI**が`r /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } **FastAPI**を構築する最初の段階でMoltenを発芋したした。そしお、それは非垞に䌌たようなアむデアを持っおいたす。 @@ -321,7 +321,7 @@ Pydanticのようなデヌタのバリデヌション、シリアラむれヌシ /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hugは、Pythonの型ヒントを利甚しおAPIパラメヌタの型宣蚀を実装した最初のフレヌムワヌクの1぀です。これは玠晎らしいアむデアで、他のツヌルが同じこずをするきっかけずなりたした。 @@ -337,7 +337,7 @@ OpenAPIやJSON Schemaのような暙準に基づいたものではありたせ /// info | 情報 -HugはTimothy Crosleyにより䜜成されたした。圌は`isort`など、Pythonのファむル内のむンポヌトの䞊び替えを自動的におこうなう玠晎らしいツヌルの開発者です。 +HugはTimothy Crosleyにより䜜成されたした。圌は[`isort`](https://github.com/timothycrosley/isort)など、Pythonのファむル内のむンポヌトの䞊び替えを自動的におこうなう玠晎らしいツヌルの開発者です。 /// @@ -351,7 +351,7 @@ Hugは、**FastAPI**がヘッダヌやクッキヌを蚭定するために関数 /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } **FastAPI**を構築するこずを決める盎前に、**APIStar**サヌバヌを芋぀けたした。それは私が探しおいたものがほがすべお含たれおおり、玠晎らしいデザむンでした。 @@ -401,7 +401,7 @@ APIStarはTom Christieにより開発されたした。以䞋の開発者でも ## **FastAPI**が利甚しおいるもの { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydanticは、Pythonの型ヒントを元にデヌタのバリデヌション、シリアラむれヌション、 (JSON Schemaを䜿甚した) ドキュメントを定矩するラむブラリです。 @@ -413,11 +413,11 @@ Marshmallowに匹敵したすが、ベンチマヌクではMarshmallowよりも デヌタのバリデヌション、デヌタのシリアラむれヌション、自動的なモデルの (JSON Schemaに基づいた) ドキュメント化の党おを扱えたす。 -**FastAPI**はJSON SchemaのデヌタをOpenAPIに利甚したす。 +**FastAPI**はそのJSON SchemaデヌタをOpenAPIに取り蟌みたす (それ以倖にも倚くのこずを行いたす)。 /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starletteは、軜量なASGIフレヌムワヌク/ツヌルキットで、高性胜な非同期サヌビスの構築に最適です。 @@ -462,7 +462,7 @@ webに関するコアな郚分を党お扱いたす。その䞊に機胜を远 /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicornは非垞に高速なASGIサヌバヌで、uvloopずhttptoolsにより構成されおいたす。 @@ -476,10 +476,10 @@ Starletteや**FastAPI**のサヌバヌずしお掚奚されおいたす。 コマンドラむンオプション `--workers` を䜿っお、非同期のマルチプロセスサヌバヌにできたす。 -詳现は[デプロむ](deployment/index.md){.internal-link target=_blank}の項目で確認しおください。 +詳现は[デプロむ](deployment/index.md)の項目で確認しおください。 /// ## ベンチマヌク ず スピヌド { #benchmarks-and-speed } -Uvicorn、Starlette、FastAPIの違いを理解、比范、確認するには、[ベンチマヌク](benchmarks.md){.internal-link target=_blank}を確認しおください。 +Uvicorn、Starlette、FastAPIの違いを理解、比范、確認するには、[ベンチマヌク](benchmarks.md)を確認しおください。 diff --git a/docs/ja/docs/async.md b/docs/ja/docs/async.md index bf4acda3f7..e2886d74e2 100644 --- a/docs/ja/docs/async.md +++ b/docs/ja/docs/async.md @@ -141,7 +141,7 @@ def results(): /// info | 情報 -矎しいむラストは Ketrina Thompson によるものです。🎚 +矎しいむラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎚 /// @@ -207,7 +207,7 @@ def results(): /// info | 情報 -矎しいむラストは Ketrina Thompson によるものです。🎚 +矎しいむラストは [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) によるものです。🎚 /// @@ -251,7 +251,7 @@ def results(): そしお、それが **FastAPI** で埗られるパフォヌマンスの氎準です。 -さらに、䞊列性ず非同期性を同時に掻甚できるため、テストされた倚くの NodeJS フレヌムワヌクより高い性胜を発揮し、C に近いコンパむル蚀語である Go ず同等の性胜になりたす (すべお Starlette のおかげです)。 +さらに、䞊列性ず非同期性を同時に掻甚できるため、テストされた倚くの NodeJS フレヌムワヌクより高い性胜を発揮し、C に近いコンパむル蚀語である Go ず同等の性胜になりたす [(すべお Starlette のおかげです)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)。 ### 䞊行凊理は䞊列凊理より優れおいる { #is-concurrency-better-than-parallelism } @@ -298,7 +298,7 @@ CPU バりンドな操䜜の䞀般的な䟋は、耇雑な数倀凊理が必芁 さらに、Python が **デヌタサむ゚ンス**、機械孊習、特にディヌプラヌニングの䞻芁蚀語であるずいう事実も盞たっお、FastAPI はデヌタサむ゚ンス/機械孊習の Web API やアプリケヌション (ほか倚数) に非垞に適しおいたす。 -本番環境でこの䞊列性を実珟する方法は、[デプロむ](deployment/index.md){.internal-link target=_blank} のセクションを参照しおください。 +本番環境でこの䞊列性を実珟する方法は、[デプロむ](deployment/index.md) のセクションを参照しおください。 ## `async` ず `await` { #async-and-await } @@ -363,13 +363,13 @@ async def read_burgers(): ### 自分で async コヌドを曞く { #write-your-own-async-code } -Starlette (**FastAPI** も) は AnyIO の䞊に構築されおおり、暙準ラむブラリの asyncio ず Trio の䞡方に察応しおいたす。 +Starlette (**FastAPI** も) は [AnyIO](https://anyio.readthedocs.io/en/stable/) の䞊に構築されおおり、暙準ラむブラリの [asyncio](https://docs.python.org/3/library/asyncio-task.html) ず [Trio](https://trio.readthedocs.io/en/stable/) の䞡方に察応しおいたす。 -特に、あなた自身のコヌド内で、より高床なパタヌンを必芁ずする発展的な䞊行凊理のナヌスケヌスに察しお、AnyIO を盎接䜿えたす。 +特に、あなた自身のコヌド内で、より高床なパタヌンを必芁ずする発展的な䞊行凊理のナヌスケヌスに察しお、[AnyIO](https://anyio.readthedocs.io/en/stable/) を盎接䜿えたす。 -仮に FastAPI を䜿っおいなくおも、AnyIO で独自の async アプリケヌションを曞けば、高い互換性ず利点 (䟋: 構造化䞊行性) を埗られたす。 +仮に FastAPI を䜿っおいなくおも、[AnyIO](https://anyio.readthedocs.io/en/stable/) で独自の async アプリケヌションを曞けば、高い互換性ず利点 (䟋: 構造化䞊行性) を埗られたす。 -私は AnyIO の䞊に薄い局ずしお、型泚釈を少し改善し、より良い**補完**や**むンラむン゚ラヌ**などを埗るための別ラむブラリも䜜りたした。たた、**理解**しお**自分で async コヌドを曞く**のに圹立぀フレンドリヌなむントロ/チュヌトリアルもありたす: Asyncer。特に、**async コヌドず通垞の** (ブロッキング/同期) **コヌドを組み合わせる**必芁がある堎合に有甚です。 +私は AnyIO の䞊に薄い局ずしお、型泚釈を少し改善し、より良い**補完**や**むンラむン゚ラヌ**などを埗るための別ラむブラリも䜜りたした。たた、**理解**しお**自分で async コヌドを曞く**のに圹立぀フレンドリヌなむントロ/チュヌトリアルもありたす: [Asyncer](https://asyncer.tiangolo.com/)。特に、**async コヌドず通垞の** (ブロッキング/同期) **コヌドを組み合わせる**必芁がある堎合に有甚です。 ### 非同期コヌドの他の圢匏 { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Starlette (**FastAPI** も) は Gevent を䜿えたしたが、コヌドの理解・デバッグ・思考がはるかに難しくなりたす。 +以前の Python ではスレッドや [Gevent](https://www.gevent.org/) を䜿えたしたが、コヌドの理解・デバッグ・思考がはるかに難しくなりたす。 以前の NodeJS / ブラりザ JavaScript では「コヌルバック」を䜿っおおり、「コヌルバック地獄」を招きたした。 @@ -419,15 +419,15 @@ Starlette (**FastAPI** も) は I/O を行うコヌドを䜿っおいない限り、`async def` を䜿った方が良いです。 -それでも、どちらの状況でも、**FastAPI** はあなたが以前䜿っおいたフレヌムワヌクよりも (少なくずも同等に) [高速である](index.md#performance){.internal-link target=_blank} 可胜性が高いです。 +それでも、どちらの状況でも、**FastAPI** はあなたが以前䜿っおいたフレヌムワヌクよりも (少なくずも同等に) [高速である](index.md#performance) 可胜性が高いです。 ### 䟝存関係 { #dependencies } -[䟝存関係](tutorial/dependencies/index.md){.internal-link target=_blank} に぀いおも同様です。䟝存関係が `async def` ではなく暙準の `def` 関数である堎合、倖郚のスレッドプヌルで実行されたす。 +[䟝存関係](tutorial/dependencies/index.md) に぀いおも同様です。䟝存関係が `async def` ではなく暙準の `def` 関数である堎合、倖郚のスレッドプヌルで実行されたす。 ### サブ䟝存関係 { #sub-dependencies } -耇数の䟝存関係や [サブ䟝存関係](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} を (関数定矩のパラメヌタずしお) 盞互に芁求させられたす。その䞀郚は `async def`、他は通垞の `def` で䜜られおいおも動䜜したす。通垞の `def` で䜜られたものは「await」される代わりに、倖郚スレッドプヌルからスレッド䞊で呌び出されたす。 +耇数の䟝存関係や [サブ䟝存関係](tutorial/dependencies/sub-dependencies.md) を (関数定矩のパラメヌタずしお) 盞互に芁求させられたす。その䞀郚は `async def`、他は通垞の `def` で䜜られおいおも動䜜したす。通垞の `def` で䜜られたものは「await」される代わりに、倖郚スレッドプヌルからスレッド䞊で呌び出されたす。 ### その他のナヌティリティ関数 { #other-utility-functions } diff --git a/docs/ja/docs/benchmarks.md b/docs/ja/docs/benchmarks.md index fbfba2e637..b6ed4d6d29 100644 --- a/docs/ja/docs/benchmarks.md +++ b/docs/ja/docs/benchmarks.md @@ -1,6 +1,6 @@ # ベンチマヌク { #benchmarks } -TechEmpowerの独立したベンチマヌクでは、Uvicornの䞋で動䜜する**FastAPI**アプリケヌションは、利甚可胜な最速のPythonフレヌムワヌクの1぀であり、䞋回っおいるのはStarletteずUvicorn自䜓FastAPIによっお内郚で䜿甚されるのみだず瀺されおいたす。 +TechEmpowerの独立したベンチマヌクでは、Uvicornの䞋で動䜜する**FastAPI**アプリケヌションは、[利甚可胜な最速のPythonフレヌムワヌクの1぀](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)であり、䞋回っおいるのはStarletteずUvicorn自䜓FastAPIによっお内郚で䜿甚されるのみだず瀺されおいたす。 ただし、ベンチマヌクを確認し、比范する際には䞋蚘の内容に気を付けおください。 diff --git a/docs/ja/docs/deployment/cloud.md b/docs/ja/docs/deployment/cloud.md index 17699cdca6..8357464fbf 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** は、**FastAPI** の䜜者ず同じチヌムによっお䜜られおいたす。 +**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の䜜者ず同じチヌムによっお䜜られおいたす。 API の**構築**、**デプロむ**、**アクセス**たでのプロセスを、最小限の手間で効率化したす。 @@ -16,9 +16,9 @@ FastAPI Cloud は、*FastAPI and friends* オヌプン゜ヌスプロゞェク ## クラりドプロバむダ - スポンサヌ { #cloud-providers-sponsors } -他にもいく぀かのクラりドプロバむダが ✹ [**FastAPI をスポンサヌしおいたす**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚。🙇 +他にもいく぀かのクラりドプロバむダが ✹ [**FastAPI をスポンサヌしおいたす**](../help-fastapi.md#sponsor-the-author) ✚。🙇 それらのガむドを参考にし、サヌビスを詊しおみるのもよいでしょう: -* Render -* Railway +* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi) +* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi) diff --git a/docs/ja/docs/deployment/concepts.md b/docs/ja/docs/deployment/concepts.md index 501a90bc93..9a23e8e914 100644 --- a/docs/ja/docs/deployment/concepts.md +++ b/docs/ja/docs/deployment/concepts.md @@ -29,7 +29,7 @@ ## セキュリティ - HTTPS { #security-https } -[前チャプタヌのHTTPSに぀いお](https.md){.internal-link target=_blank}では、HTTPSがどのようにAPIを暗号化するのかに぀いお孊びたした。 +[前チャプタヌのHTTPSに぀いお](https.md)では、HTTPSがどのようにAPIを暗号化するのかに぀いお孊びたした。 通垞、アプリケヌションサヌバにずっお**倖郚の**コンポヌネントである**TLS Termination Proxy**によっお提䟛されるこずが䞀般的です。このプロキシは通信の暗号化を担圓したす。 @@ -43,9 +43,9 @@ TLS Termination Proxyずしお䜿甚できるツヌルには以䞋のような * Caddy * 蚌明曞の曎新を自動的に凊理 ✹ * Nginx - * 蚌明曞曎新のためにCertbotのような倖郚コンポヌネントを䜿甚 + * 蚌明曞曎新のために Certbot のような倖郚コンポヌネントを䜿甚 * HAProxy - * 蚌明曞曎新のためにCertbotのような倖郚コンポヌネントを䜿甚 + * 蚌明曞曎新のために Certbot のような倖郚コンポヌネントを䜿甚 * Nginx のような Ingress Controller を持぀ Kubernetes * 蚌明曞の曎新に cert-manager のような倖郚コンポヌネントを䜿甚 * クラりド・プロバむダヌがサヌビスの䞀郚ずしお内郚的に凊理䞋蚘を参照👇 @@ -193,7 +193,7 @@ FastAPI アプリケヌションでは、Uvicorn を実行する `fastapi` コ ### ワヌカヌ・プロセス ず ポヌト { #worker-processes-and-ports } -[HTTPSに぀いお](https.md){.internal-link target=_blank}のドキュメントで、1぀のサヌバヌで1぀のポヌトずIPアドレスの組み合わせでリッスンできるのは1぀のプロセスだけであるこずを芚えおいたすでしょうか +[HTTPSに぀いお](https.md)のドキュメントで、1぀のサヌバヌで1぀のポヌトずIPアドレスの組み合わせでリッスンできるのは1぀のプロセスだけであるこずを芚えおいたすでしょうか これはいただに同じです。 @@ -250,7 +250,7 @@ FastAPI アプリケヌションでは、Uvicorn を実行する `fastapi` コ これらの**コンテナ**やDockerそしおKubernetesに関する項目が、ただあたり意味をなしおいなくおも心配しないでください。 -コンテナ・むメヌゞ、Docker、Kubernetesなどに぀いおは、将来の章で詳しく説明したす: [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}. +コンテナ・むメヌゞ、Docker、Kubernetesなどに぀いおは、将来の章で詳しく説明したす: [コンテナ内のFastAPI - Docker](docker.md). /// @@ -290,7 +290,7 @@ FastAPI アプリケヌションでは、Uvicorn を実行する `fastapi` コ /// tip | 豆知識 -コンテナを䜿った具䜓的な䟋に぀いおは、将来の章で玹介したす: [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}. +コンテナを䜿った具䜓的な䟋に぀いおは、将来の章で玹介したす: [コンテナ内のFastAPI - Docker](docker.md). /// diff --git a/docs/ja/docs/deployment/docker.md b/docs/ja/docs/deployment/docker.md index 883f98c985..6248e69b7c 100644 --- a/docs/ja/docs/deployment/docker.md +++ b/docs/ja/docs/deployment/docker.md @@ -1,6 +1,6 @@ # コンテナ内のFastAPI - Docker { #fastapi-in-containers-docker } -FastAPIアプリケヌションをデプロむする堎合、䞀般的なアプロヌチは**Linuxコンテナ・むメヌゞ**をビルドするこずです。基本的には **Docker**を甚いお行われたす。生成されたコンテナ・むメヌゞは、いく぀かの方法のいずれかでデプロむできたす。 +FastAPIアプリケヌションをデプロむする堎合、䞀般的なアプロヌチは**Linuxコンテナ・むメヌゞ**をビルドするこずです。基本的には [**Docker**](https://www.docker.com/) を甚いお行われたす。生成されたコンテナ・むメヌゞは、いく぀かの方法のいずれかでデプロむできたす。 Linuxコンテナの䜿甚には、**セキュリティ**、**反埩可胜性レプリカビリティ**、**シンプリシティ**など、いく぀かの利点がありたす。 @@ -60,16 +60,16 @@ Linuxコンテナは、ホストマシン、仮想マシン、クラりドサ Dockerは、**コンテナ・むメヌゞ**ず**コンテナ**を䜜成・管理するための䞻芁なツヌルの1぀です。 -そしお、倚くのツヌルや環境、デヌタベヌス、アプリケヌションに察応しおいる予め䜜成された**公匏のコンテナ・むメヌゞ**をパブリックに提䟛しおいるDocker Hubずいうものがありたす。 +そしお、倚くのツヌルや環境、デヌタベヌス、アプリケヌションに察応しおいる予め䜜成された**公匏のコンテナ・むメヌゞ**をパブリックに提䟛しおいる [Docker Hub](https://hub.docker.com/) ずいうものがありたす。 -䟋えば、公匏むメヌゞの1぀にPython Imageがありたす。 +䟋えば、公匏むメヌゞの1぀に [Python Image](https://hub.docker.com/_/python) がありたす。 その他にも、デヌタベヌスなどさたざたなむメヌゞがありたす -* PostgreSQL -* MySQL -* MongoDB -* Redis, etc. +* [PostgreSQL](https://hub.docker.com/_/postgres) +* [MySQL](https://hub.docker.com/_/mysql) +* [MongoDB](https://hub.docker.com/_/mongo) +* [Redis](https://hub.docker.com/_/redis), etc. 予め䜜成されたコンテナ・むメヌゞを䜿甚するこずで、異なるツヌルを**組み合わせお**䜿甚するこずが非垞に簡単になりたす。䟋えば、新しいデヌタベヌスを詊す堎合に特に䟿利です。ほずんどの堎合、**公匏むメヌゞ**を䜿い、環境倉数で蚭定するだけで良いです。 @@ -111,7 +111,7 @@ FastAPI甚の**Dockerむメヌゞ**を、**公匏Python**むメヌゞに基づ 最も䞀般的な方法は、`requirements.txt` ファむルにパッケヌゞ名ずそのバヌゞョンを 1 行ず぀曞くこずです。 -もちろん、[FastAPI バヌゞョンに぀いお](versions.md){.internal-link target=_blank}で読んだのず同じアむデアを䜿甚しお、バヌゞョンの範囲を蚭定したす。 +もちろん、[FastAPI バヌゞョンに぀いお](versions.md)で読んだのず同じアむデアを䜿甚しお、バヌゞョンの範囲を蚭定したす。 䟋えば、`requirements.txt` は次のようになりたす @@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] #### `CMD` を䜿う - Exec圢匏 { #use-cmd-exec-form } -Docker呜什 `CMD` は2぀の圢匏で曞けたす +Docker呜什 [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) は2぀の圢匏で曞けたす ✅ **Exec** 圢匏 @@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] CMD fastapi run app/main.py --port 80 ``` -FastAPIが正垞にシャットダりンでき、[lifespan events](../advanced/events.md){.internal-link target=_blank}がトリガヌされるように、垞に **exec** 圢匏を䜿甚しおください。 +FastAPIが正垞にシャットダりンでき、[lifespan events](../advanced/events.md)がトリガヌされるように、垞に **exec** 圢匏を䜿甚しおください。 -詳しくは、shell圢匏ずexec圢匏に関するDockerドキュメントをご芧ください。 +詳しくは、[shell圢匏ずexec圢匏に関する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?。 +これは `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)。 #### ディレクトリ構造 { #directory-structure } @@ -354,7 +354,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 確認する { #check-it } -Dockerコンテナのhttp://192.168.99.100/items/5?q=somequery や http://127.0.0.1/items/5?q=somequery (たたはそれに盞圓するDockerホストを䜿甚したものずいったURLで確認できるはずです。 +Dockerコンテナの[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) や [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery) (たたはそれに盞圓するDockerホストを䜿甚したものずいったURLで確認できるはずです。 アクセスするず以䞋のようなものが衚瀺されたす @@ -364,17 +364,17 @@ Dockerコンテナのhttp://192.168.99.100/docs や http://127.0.0.1/docs (たたはそれに盞圓するDockerホストを䜿甚したもの +これらのURLにもアクセスできたす: [http://192.168.99.100/docs](http://192.168.99.100/docs) や [http://127.0.0.1/docs](http://127.0.0.1/docs) (たたはそれに盞圓するDockerホストを䜿甚したもの -アクセスするず、自動察話型APIドキュメントSwagger UIが提䟛が衚瀺されたす +アクセスするず、自動察話型APIドキュメント[Swagger UI](https://github.com/swagger-api/swagger-ui)が提䟛が衚瀺されたす ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ## 代替のAPIドキュメント { #alternative-api-docs } -たた、http://192.168.99.100/redoc や http://127.0.0.1/redoc (たたはそれに盞圓するDockerホストを䜿甚したものにもアクセスできたす。 +たた、[http://192.168.99.100/redoc](http://192.168.99.100/redoc) や [http://127.0.0.1/redoc](http://127.0.0.1/redoc) (たたはそれに盞圓するDockerホストを䜿甚したものにもアクセスできたす。 -代替の自動ドキュメントReDocによっお提䟛されるが衚瀺されたす +代替の自動ドキュメント[ReDoc](https://github.com/Rebilly/ReDoc)によっお提䟛されるが衚瀺されたす ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -415,7 +415,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ## デプロむメントのコンセプト { #deployment-concepts } -コンテナずいう芳点から、[デプロむのコンセプト](concepts.md){.internal-link target=_blank}に共通するいく぀かに぀いお、もう䞀床説明したしょう。 +コンテナずいう芳点から、[デプロむのコンセプト](concepts.md)に共通するいく぀かに぀いお、もう䞀床説明したしょう。 コンテナは䞻に、アプリケヌションの**ビルドずデプロむ**のプロセスを簡玠化するためのツヌルですが、これらの**デプロむのコンセプト**を扱うための特定のアプロヌチを匷制するものではなく、いく぀かの戊略がありたす。 @@ -434,7 +434,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] FastAPI アプリケヌションの **コンテナ・むメヌゞ**および埌で実行䞭の **コンテナ**だけに焊点を圓おるず、通垞、HTTPSは別のツヌルを甚いお**倖郚で**凊理されたす。 -䟋えばTraefikのように、**HTTPS**ず**蚌明曞**の**自動**取埗を扱う別のコンテナである可胜性もありたす。 +䟋えば [Traefik](https://traefik.io/) のように、**HTTPS**ず**蚌明曞**の**自動**取埗を扱う別のコンテナである可胜性もありたす。 /// tip | 豆知識 @@ -564,7 +564,7 @@ Docker Composeで**単䞀サヌバ**クラスタではないにデプロ /// info | 情報 -もしKubernetesを䜿甚しおいる堎合, これはおそらくInit Containerでしょう。 +もしKubernetesを䜿甚しおいる堎合, これはおそらく[Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)でしょう。 /// @@ -576,7 +576,7 @@ Docker Composeで**単䞀サヌバ**クラスタではないにデプロ ### ベヌスDockerむメヌゞ { #base-docker-image } -以前は、公匏のFastAPI Dockerむメヌゞがありたしたtiangolo/uvicorn-gunicorn-fastapi。しかし、珟圚は非掚奚です。⛔ +以前は、公匏のFastAPI Dockerむメヌゞがありたした[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)。しかし、珟圚は非掚奚です。⛔ おそらく、このベヌスDockerむメヌゞたたはその他の類䌌のものは**䜿甚しない**方がよいでしょう。 @@ -606,7 +606,7 @@ Docker Composeで**単䞀サヌバ**クラスタではないにデプロ ## `uv` を䜿ったDockerむメヌゞ { #docker-image-with-uv } -uv を䜿っおプロゞェクトのむンストヌルず管理をしおいる堎合は、uv Docker guideに埓っおください。 +[uv](https://github.com/astral-sh/uv) を䜿っおプロゞェクトのむンストヌルず管理をしおいる堎合は、[uv Docker guide](https://docs.astral.sh/uv/guides/integration/docker/)に埓っおください。 ## たずめ { #recap } diff --git a/docs/ja/docs/deployment/fastapicloud.md b/docs/ja/docs/deployment/fastapicloud.md index 43d9ce0d02..3dd5685a2b 100644 --- a/docs/ja/docs/deployment/fastapicloud.md +++ b/docs/ja/docs/deployment/fastapicloud.md @@ -1,6 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -FastAPI Cloud に **コマンド1぀** でデプロむできたす。ただならりェむティングリストにご登録ください。🚀 +[FastAPI Cloud](https://fastapicloud.com) に **コマンド1぀** でデプロむできたす。ただならりェむティングリストにご登録ください。🚀 ## ログむン { #login } @@ -40,7 +40,7 @@ Deploying to FastAPI Cloud... ## FastAPI Cloud に぀いお { #about-fastapi-cloud } -**FastAPI Cloud** は、**FastAPI** の䜜者ずチヌムによっお開発されおいたす。 +**[FastAPI Cloud](https://fastapicloud.com)** は、**FastAPI** の䜜者ずチヌムによっお開発されおいたす。 最小限の手間で API を**構築**・**デプロむ**・**利甚**できるように工皋を簡玠化したす。 diff --git a/docs/ja/docs/deployment/https.md b/docs/ja/docs/deployment/https.md index 8e588aadc3..37ad7072c8 100644 --- a/docs/ja/docs/deployment/https.md +++ b/docs/ja/docs/deployment/https.md @@ -10,7 +10,7 @@ HTTPSは単に「有効」か「無効」かで決たるものだず思いがち /// -利甚者の芖点から **HTTPS の基本を孊ぶ**に圓たっおは、次のリ゜ヌスをオススメしたす: https://howhttps.works/. +利甚者の芖点から **HTTPS の基本を孊ぶ**に圓たっおは、次のリ゜ヌスをオススメしたす: [https://howhttps.works/](https://howhttps.works/). さお、**開発者の芖点**から、HTTPSに぀いお考える際に念頭に眮くべきこずをいく぀かみおいきたしょう @@ -28,13 +28,13 @@ HTTPSは単に「有効」か「無効」かで決たるものだず思いがち * **デフォルトでは**、**IPアドレスごずに1぀のHTTPS蚌明曞**しか持おないこずになりたす。 * これは、サヌバヌの芏暡やアプリケヌションの芏暡に寄りたせん。 * しかし、これには**解決策**がありたす。 -* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を凊理するもの)には、**SNI**ず呌ばれる**拡匵**がありたす。 +* **TLS**プロトコル(HTTPの前に、TCPレベルで暗号化を凊理するもの)には、**[SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**ず呌ばれる**拡匵**がありたす。 * このSNI拡匵機胜により、1぀のサヌバヌ**単䞀のIPアドレス**を持぀が**耇数のHTTPS蚌明曞**を持ち、**耇数のHTTPSドメむン/アプリケヌション**にサヌビスを提䟛できるようになりたす。 * これが機胜するためには、**パブリックIPアドレス**でリッスンしおいる、サヌバヌ䞊で動䜜しおいる**単䞀の**コンポヌネント(プログラム)が、サヌバヌ内の**すべおのHTTPS蚌明曞**を持っおいる必芁がありたす。 * セキュアな接続を取埗した**埌**でも、通信プロトコルは**HTTPのたた**です。 * コンテンツは**HTTPプロトコル**で送信されおいるにもかかわらず、**暗号化**されおいたす。 -サヌバヌマシン、ホストなど䞊で**1぀のプログラム/HTTPサヌバヌ**を実行させ、**HTTPSに関する党おのこず**を管理するのが䞀般的です。**暗号化された HTTPS リク゚スト** を受信し、**埩号化された HTTP リク゚スト** を同じサヌバヌで実行されおいる実際の HTTP アプリケヌションこの堎合は **FastAPI** アプリケヌションに送信し、アプリケヌションから **HTTP レスポンス** を受け取り、適切な **HTTPS 蚌明曞** を䜿甚しお **暗号化** し、そしお**HTTPS** を䜿甚しおクラむアントに送り返したす。このサヌバヌはしばしば **TLS Termination Proxy**ず呌ばれたす。 +サヌバヌマシン、ホストなど䞊で**1぀のプログラム/HTTPサヌバヌ**を実行させ、**HTTPSに関する党おのこず**を管理するのが䞀般的です。**暗号化された HTTPS リク゚スト** を受信し、**埩号化された HTTP リク゚スト** を同じサヌバヌで実行されおいる実際の HTTP アプリケヌションこの堎合は **FastAPI** アプリケヌションに送信し、アプリケヌションから **HTTP レスポンス** を受け取り、適切な **HTTPS 蚌明曞** を䜿甚しお **暗号化** し、そしお**HTTPS** を䜿甚しおクラむアントに送り返したす。このサヌバヌはしばしば **[TLS Termination Proxy](https://en.wikipedia.org/wiki/TLS_termination_proxy)**ず呌ばれたす。 TLS Termination Proxyずしお䜿えるオプションには、以䞋のようなものがありたす @@ -50,7 +50,7 @@ Let's Encrypt以前は、これらの**HTTPS蚌明曞**は信頌できる第䞉 これらの蚌明曞を取埗するための手続きは面倒で、かなりの曞類を必芁ずし、蚌明曞はかなり高䟡なものでした。 -しかしその埌、**Let's Encrypt** が䜜られたした。 +しかしその埌、**[Let's Encrypt](https://letsencrypt.org/)** が䜜られたした。 これはLinux Foundationのプロゞェクトから生たれたものです。 自動化された方法で、**HTTPS蚌明曞を無料で**提䟛したす。これらの蚌明曞は、すべおの暙準的な暗号化セキュリティを䜿甚し、たた短呜玄3ヶ月ですが、こういった寿呜の短さによっお、**セキュリティは実際に優れおいたす**。 @@ -68,7 +68,7 @@ Let's Encrypt以前は、これらの**HTTPS蚌明曞**は信頌できる第䞉 おそらくクラりドサヌバヌ仮想マシンかそれに類するものを手に入れ、固定の **パブリックIPアドレス**を持぀こずになるでしょう。 -DNSサヌバヌでは、**取埗したドメむン**をあなたのサヌバヌのパプリック**IPアドレス**に向けるレコヌド「`A record`」を蚭定したす。 +DNSサヌバヌでは、**取埗したドメむン**をあなたのサヌバヌのパブリック**IPアドレス**に向けるレコヌド「`A record`」を蚭定したす。 これはおそらく、最初の1回だけあり、すべおをセットアップするずきに行うでしょう。 @@ -80,7 +80,7 @@ DNSサヌバヌでは、**取埗したドメむン**をあなたのサヌバヌ ### DNS { #dns } -では、実際のHTTPSの郚分に泚目しおみよう。 +では、実際のHTTPSの郚分に泚目しおみたしょう。 たず、ブラりザは**DNSサヌバヌ**に**ドメむンに察するIP**が䜕であるかを確認したす。今回は、`someapp.example.com`ずしたす。 @@ -100,7 +100,7 @@ TLS接続を確立するためのクラむアントずサヌバヌ間のこの ### SNI拡匵機胜付きのTLS { #tls-with-sni-extension } -サヌバヌ内の**1぀のプロセス**だけが、特定 の**IPアドレス**の特定の**ポヌト** で埅ち受けるこずができたす。 +サヌバヌ内の**1぀のプロセス**だけが、特定の**IPアドレス**の特定の**ポヌト**で埅ち受けるこずができたす。 同じIPアドレスの他のポヌトで他のプロセスがリッスンしおいる可胜性もありたすが、IPアドレスずポヌトの組み合わせごずに1぀だけです。 @@ -204,9 +204,9 @@ TLS Termination Proxyは次に、事前に合意が取れおいる暗号(`someap プロキシヘッダヌは次のずおりです -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -222,7 +222,7 @@ TLS Termination Proxyは次に、事前に合意が取れおいる暗号(`someap /// tip | 豆知識 -これに぀いおは、[Behind a Proxy - Enable Proxy Forwarded Headers](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} のドキュメントで詳しく孊べたす。 +これに぀いおは、[Behind a Proxy - Enable Proxy Forwarded Headers](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) のドキュメントで詳しく孊べたす。 /// diff --git a/docs/ja/docs/deployment/index.md b/docs/ja/docs/deployment/index.md index eba6eae6ea..9a3e1068e6 100644 --- a/docs/ja/docs/deployment/index.md +++ b/docs/ja/docs/deployment/index.md @@ -16,7 +16,7 @@ 耇数のツヌルを組み合わせお自分で**サヌバヌをデプロむ**するこずもできたすし、䜜業の䞀郚を代行しおくれる **クラりドサヌビス** を䜿うこずもできたす。ほかにも遞択肢がありたす。 -たずえば、FastAPI の開発チヌムである私たちは、クラりドぞの FastAPI アプリのデプロむを可胜な限り合理化し、FastAPI を䜿っお開発するのず同じ開発者䜓隓を提䟛するために、**FastAPI Cloud** を構築したした。 +たずえば、FastAPI の開発チヌムである私たちは、クラりドぞの FastAPI アプリのデプロむを可胜な限り合理化し、FastAPI を䜿っお開発するのず同じ開発者䜓隓を提䟛するために、[**FastAPI Cloud**](https://fastapicloud.com) を構築したした。 **FastAPI** アプリケヌションをデプロむする際に、おそらく念頭に眮くべき䞻芁な抂念をいく぀か玹介したすただし、そのほずんどは他の皮類の Web アプリケヌションにも圓おはたりたす。 diff --git a/docs/ja/docs/deployment/manually.md b/docs/ja/docs/deployment/manually.md index 1931cd87e5..1c0d59a715 100644 --- a/docs/ja/docs/deployment/manually.md +++ b/docs/ja/docs/deployment/manually.md @@ -52,11 +52,11 @@ FastAPI は、Python の Web フレヌムワヌクずサヌバヌのための暙 他にもいく぀かの遞択肢がありたす: -* Uvicorn: 高性胜な ASGI サヌバヌ。 -* Hypercorn: HTTP/2 や Trio に察応する ASGI サヌバヌなど。 -* Daphne: Django Channels のために䜜られた ASGI サヌバヌ。 -* Granian: Python アプリケヌション向けの Rust 補 HTTP サヌバヌ。 -* NGINX Unit: 軜量で倚甚途な Web アプリケヌションランタむム。 +* [Uvicorn](https://www.uvicorn.dev/): 高性胜な ASGI サヌバヌ。 +* [Hypercorn](https://hypercorn.readthedocs.io/): HTTP/2 や Trio に察応する ASGI サヌバヌなど。 +* [Daphne](https://github.com/django/daphne): Django Channels のために䜜られた ASGI サヌバヌ。 +* [Granian](https://github.com/emmett-framework/granian): Python アプリケヌション向けの Rust 補 HTTP サヌバヌ。 +* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): 軜量で倚甚途な Web アプリケヌションランタむム。 ## サヌバヌマシンずサヌバヌプログラム { #server-machine-and-server-program } @@ -74,7 +74,7 @@ FastAPI をむンストヌルするず、本番サヌバヌの Uvicorn が同梱 ただし、ASGI サヌバヌを手動でむンストヌルするこずもできたす。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、サヌバヌアプリケヌションをむンストヌルしおください。 +[仮想環境](../virtual-environments.md)を䜜成しお有効化し、サヌバヌアプリケヌションをむンストヌルしおください。 䟋ずしお、Uvicorn をむンストヌルするには: @@ -94,7 +94,7 @@ $ pip install "uvicorn[standard]" `standard` を付けるず、Uvicorn は掚奚の远加䟝存関係もむンストヌルしお䜿甚したす。 -その䞭には、`asyncio` の高性胜なドロップむン代替であり、倧きな䞊行実行性胜の向䞊をもたらす `uvloop` も含たれたす。 +その䞭には、`uvloop` も含たれたす。これは `asyncio` の高性胜なドロップむン代替で、倧きな䞊行実行性胜の向䞊をもたらしたす。 `pip install "fastapi[standard]"` のように FastAPI をむンストヌルした堎合は、すでに `uvicorn[standard]` も含たれたす。 diff --git a/docs/ja/docs/deployment/server-workers.md b/docs/ja/docs/deployment/server-workers.md index 933b875d76..c4c6e93557 100644 --- a/docs/ja/docs/deployment/server-workers.md +++ b/docs/ja/docs/deployment/server-workers.md @@ -13,13 +13,13 @@ アプリケヌションをデプロむする際には、**耇数のコア**を利甚し、そしおより倚くのリク゚ストを凊理できるようにするために、プロセスの**レプリケヌション**を持぀こずを望むでしょう。 -前のチャプタヌである[デプロむメントのコンセプト](concepts.md){.internal-link target=_blank}にお芋おきたように、有効な戊略がいく぀かありたす。 +前のチャプタヌである[デプロむメントのコンセプト](concepts.md)にお芋おきたように、有効な戊略がいく぀かありたす。 ここでは、`fastapi` コマンド、たたは `uvicorn` コマンドを盎接䜿っお、**ワヌカヌプロセス**付きの **Uvicorn** を䜿う方法を玹介したす。 /// info | 情報 -DockerやKubernetesなどのコンテナを䜿甚しおいる堎合は、次の章で詳しく説明したす [コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}。 +DockerやKubernetesなどのコンテナを䜿甚しおいる堎合は、次の章で詳しく説明したす [コンテナ内のFastAPI - Docker](docker.md)。 特に**Kubernetes**䞊で実行する堎合は、おそらくワヌカヌは䜿わず、代わりに**コンテナごずに単䞀のUvicornプロセス**を実行したいはずですが、それに぀いおはその章の埌半で説明したす。 @@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 ## コンテナずDocker { #containers-and-docker } -次章の[コンテナ内のFastAPI - Docker](docker.md){.internal-link target=_blank}では、その他の**デプロむメントのコンセプト**を扱うために䜿える戊略をいく぀か説明したす。 +次章の[コンテナ内のFastAPI - Docker](docker.md)では、その他の**デプロむメントのコンセプト**を扱うために䜿える戊略をいく぀か説明したす。 単䞀のUvicornプロセスを実行するために、**れロから独自のむメヌゞを構築する**方法も玹介したす。これは簡単なプロセスで、**Kubernetes**のような分散コンテナ管理システムを䜿う堎合に、おそらくやりたいこずでしょう。 diff --git a/docs/ja/docs/deployment/versions.md b/docs/ja/docs/deployment/versions.md index 7980b8be2a..36e22636c8 100644 --- a/docs/ja/docs/deployment/versions.md +++ b/docs/ja/docs/deployment/versions.md @@ -4,7 +4,7 @@ 新機胜が高頻床で远加され、定期的にバグが修正され、コヌドは継続的に改善されおいたす。 -これが珟圚のバヌゞョンがいただに `0.x.x` な理由であり、それぞれのバヌゞョンは砎壊的な倉曎がなされる可胜性がありたす。これは、セマンティック バヌゞョニングの芏則に則っおいたす。 +これが珟圚のバヌゞョンがいただに `0.x.x` な理由であり、それぞれのバヌゞョンは砎壊的な倉曎がなされる可胜性がありたす。これは、[セマンティック バヌゞョニング](https://semver.org/)の芏則に則っおいたす。 **FastAPI** を䜿甚するず本番甚アプリケヌションを今すぐ䜜成できたすそしお、おそらくあなたはしばらく前からそうしおいるはずです。必芁なのは、残りのコヌドず正しく動䜜するバヌゞョンを䜿甚しおいるこずを確認するこずだけです。 @@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0 ## 利甚可胜なバヌゞョン { #available-versions } -利甚可胜なバヌゞョン䟋: 珟圚の最新が䜕かを確認するためは、[Release Notes](../release-notes.md){.internal-link target=_blank} で確認できたす。 +利甚可胜なバヌゞョン䟋: 珟圚の最新が䜕かを確認するためは、[Release Notes](../release-notes.md) で確認できたす。 ## バヌゞョンに぀いお { #about-versions } @@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0 アプリケヌションにテストを远加すべきです。 -**FastAPI** では非垞に簡単に実珟できたすStarlette のおかげです。ドキュメントを確認しお䞋さい: [テスト](../tutorial/testing.md){.internal-link target=_blank} +**FastAPI** では非垞に簡単に実珟できたすStarlette のおかげです。ドキュメントを確認しお䞋さい: [テスト](../tutorial/testing.md) テストを远加したら、**FastAPI** のバヌゞョンをより新しいものにアップグレヌドし、テストを実行するこずで党おのコヌドが正しく動䜜するか確認できたす。 diff --git a/docs/ja/docs/environment-variables.md b/docs/ja/docs/environment-variables.md index 4deae70446..846f328461 100644 --- a/docs/ja/docs/environment-variables.md +++ b/docs/ja/docs/environment-variables.md @@ -2,7 +2,7 @@ /// tip | 豆知識 -もし、「環境倉数」ずは䜕か、それをどう䜿うかを既に知っおいる堎合は、このセクションをスキップしお構いたせん。 +もし「環境倉数」ずは䜕か、それをどう䜿うかを既に知っおいる堎合は、このセクションをスキップしお構いたせん。 /// @@ -19,10 +19,10 @@
```console -// You could create an env var MY_NAME with +// 環境倉数 MY_NAME を䜜成する䟋 $ export MY_NAME="Wade Wilson" -// Then you could use it with other programs, like +// その埌、他のプログラムで利甚できたす。䟋えば $ echo "Hello $MY_NAME" Hello Wade Wilson @@ -37,10 +37,10 @@ Hello Wade Wilson
```console -// Create an env var MY_NAME +// 環境倉数 MY_NAME を䜜成 $ $Env:MY_NAME = "Wade Wilson" -// Use it with other programs, like +// 他のプログラムで利甚、䟋えば $ echo "Hello $Env:MY_NAME" Hello Wade Wilson @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip | 豆知識 -`os.getenv()` の第2匕数は、デフォルトで返される倀です。 +[`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) の第2匕数は、返されるデフォルト倀です。 指定しない堎合、デフォルトは`None`ですが、ここでは䜿甚するデフォルト倀ずしお`"World"`を指定しおいたす。 @@ -78,20 +78,20 @@ print(f"Hello {name} from Python")
```console -// Here we don't set the env var yet +// ここではただ環境倉数を蚭定しおいたせん $ python main.py -// As we didn't set the env var, we get the default value +// 環境倉数を蚭定しおいないため、デフォルト倀が䜿われたす Hello World from Python -// But if we create an environment variable first +// しかし、先に環境倉数を䜜成するず $ export MY_NAME="Wade Wilson" -// And then call the program again +// それからもう䞀床プログラムを実行するず $ python main.py -// Now it can read the environment variable +// するず環境倉数を読み取れたす Hello Wade Wilson from Python ``` @@ -105,20 +105,20 @@ Hello Wade Wilson from Python
```console -// Here we don't set the env var yet +// ここではただ環境倉数を蚭定しおいたせん $ python main.py -// As we didn't set the env var, we get the default value +// 環境倉数を蚭定しおいないため、デフォルト倀が䜿われたす Hello World from Python -// But if we create an environment variable first +// しかし、先に環境倉数を䜜成するず $ $Env:MY_NAME = "Wade Wilson" -// And then call the program again +// それからもう䞀床プログラムを実行するず $ python main.py -// Now it can read the environment variable +// するず環境倉数を読み取れたす Hello Wade Wilson from Python ``` @@ -136,14 +136,14 @@ Hello Wade Wilson from Python
```console -// Create an env var MY_NAME in line for this program call +// このプログラム呌び出し甚に同じ行で環境倉数 MY_NAME を䜜成 $ MY_NAME="Wade Wilson" python main.py -// Now it can read the environment variable +// これで環境倉数を読み取れたす Hello Wade Wilson from Python -// The env var no longer exists afterwards +// その埌は環境倉数は存圚したせん $ python main.py Hello World from Python @@ -153,7 +153,7 @@ Hello World from Python /// tip | 豆知識 -詳しくは The Twelve-Factor App: 蚭定 を参照しおください。 +詳しくは [The Twelve-Factor App: 蚭定](https://12factor.net/config) を参照しおください。 /// @@ -163,7 +163,7 @@ Hello World from Python ぀たり、環境倉数からPythonで読み取る**あらゆる倀**は **`str`になり**、他の型ぞの倉換やバリデヌションはコヌド内で行う必芁がありたす。 -環境倉数を䜿っお**アプリケヌション蚭定**を扱う方法に぀いおは、[高床なナヌザヌガむド - Settings and Environment Variables](./advanced/settings.md){.internal-link target=_blank} で詳しく孊べたす。 +環境倉数を䜿っお**アプリケヌション蚭定**を扱う方法に぀いおは、[高床なナヌザヌガむド - Settings and Environment Variables](./advanced/settings.md)で詳しく孊べたす。 ## `PATH`環境倉数 { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -この情報は、[Virtual Environments](virtual-environments.md){.internal-link target=_blank} に぀いお孊ぶ際にも圹立ちたす。 +この情報は、[Virtual Environments](virtual-environments.md)に぀いお孊ぶ際にも圹立ちたす。 ## たずめ { #conclusion } これで、**環境倉数**ずは䜕か、Pythonでどのように䜿甚するかに぀いお、基本的な理解が埗られたはずです。 -環境倉数に぀いおの詳现は、Wikipedia の環境倉数 も参照しおください。 +環境倉数に぀いおの詳现は、[Wikipedia の環境倉数](https://en.wikipedia.org/wiki/Environment_variable)も参照しおください。 倚くの堎合、環境倉数がどのように圹立ち、すぐに適甚できるのかはあたり明確ではありたせん。しかし、開発䞭のさたざたなシナリオで䜕床も登堎するため、知っおおくずよいでしょう。 diff --git a/docs/ja/docs/fastapi-cli.md b/docs/ja/docs/fastapi-cli.md index 20cc9c2fb8..298ed91416 100644 --- a/docs/ja/docs/fastapi-cli.md +++ b/docs/ja/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI** は、FastAPI アプリの提䟛、FastAPI プロゞェクトの管理などに䜿甚できるコマンドラむンプログラムです。 +**FastAPI CLI** は、FastAPI アプリの提䟛、FastAPI プロゞェクトの管理などに䜿甚できるコマンドラむンプログラムです。 -FastAPI をむンストヌルするず䟋: `pip install "fastapi[standard]"`、`fastapi-cli` ずいうパッケヌゞが含たれたす。このパッケヌゞがタヌミナルで䜿甚する `fastapi` コマンドを提䟛したす。 +FastAPI をむンストヌルするず䟋: `pip install "fastapi[standard]"`、タヌミナルで実行できるコマンドラむンプログラムが付属したす。 開発甚に FastAPI アプリを起動するには、`fastapi dev` コマンドを䜿甚できたす:
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -46,13 +46,66 @@ $ fastapi dev Uvicorn高性胜で本番運甚向けの ASGI サヌバヌを䜿甚したす。😎 +さらに、[VS Code 拡匵機胜](editor-support.md) や [FastAPI Cloud](https://fastapicloud.com) など、ほかのツヌルがそれを芋぀けられない堎合がありたす。そのため、`pyproject.toml` の `entrypoint` を䜿甚するこずを掚奚したす。 ## `fastapi dev` { #fastapi-dev } @@ -68,8 +121,8 @@ FastAPI CLI は、Python プログラムぞのパス䟋: `main.py`を受 倚くの堎合そしお掚奚されるのは、䞊䜍に HTTPS を終端する「termination proxy」を眮きたす。これはアプリのデプロむ方法に䟝存し、プロバむダが代行する堎合もあれば、自分で蚭定する必芁がある堎合もありたす。 -/// tip | 豆知識 +/// tip -詳しくは、[デプロむのドキュメント](deployment/index.md){.internal-link target=_blank}を参照しおください。 +詳しくは、[デプロむのドキュメント](deployment/index.md)を参照しおください。 /// diff --git a/docs/ja/docs/features.md b/docs/ja/docs/features.md index 40a1d2e60d..cfde6592d2 100644 --- a/docs/ja/docs/features.md +++ b/docs/ja/docs/features.md @@ -6,8 +6,8 @@ ### オヌプンスタンダヌド準拠 { #based-on-open-standards } -* API 䜜成のための OpenAPI。path operations、パラメヌタ、リク゚ストボディ、セキュリティなどの宣蚀を含みたす。 -* JSON Schema によるデヌタモデルの自動ドキュメント化OpenAPI 自䜓が JSON Schema に基づいおいたす。 +* API 䜜成のための [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification)。パス オペレヌション、パラメヌタ、リク゚ストボディ、セキュリティなどの宣蚀を含みたす。 +* [**JSON Schema**](https://json-schema.org/) によるデヌタモデルの自動ドキュメント化OpenAPI 自䜓が JSON Schema に基づいおいたす。 * 入念な調査のうえ、これらの暙準を䞭心に蚭蚈されおいたす。埌付けのレむダヌではありたせん。 * これにより、倚くの蚀語で自動 **クラむアントコヌド生成** が可胜です。 @@ -15,11 +15,11 @@ 察話的な API ドキュメントず探玢的な Web ナヌザヌむンタヌフェヌス。フレヌムワヌクは OpenAPI に基づいおいるため、耇数のオプションがあり、デフォルトで 2 ぀含たれたす。 -* Swagger UI。むンタラクティブに探玢し぀぀、ブラりザから盎接 API を呌び出しおテストできたす。 +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)。むンタラクティブに探玢し぀぀、ブラりザから盎接 API を呌び出しおテストできたす。 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* ReDoc による代替の API ドキュメント。 +* [**ReDoc**](https://github.com/Rebilly/ReDoc) による代替の API ドキュメント。 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) @@ -27,7 +27,7 @@ すべお暙準の **Python の型** 宣蚀Pydantic に感謝に基づいおいたす。新しい構文を孊ぶ必芁はありたせん。暙準的でモダンな Python だけです。 -FastAPI を䜿わない堎合でもPython の型の䜿い方を 2 分で埩習したい堎合は、短いチュヌトリアル [Python Types](python-types.md){.internal-link target=_blank} を参照しおください。 +FastAPI を䜿わない堎合でもPython の型の䜿い方を 2 分で埩習したい堎合は、短いチュヌトリアル [Python の型](python-types.md) を参照しおください。 型を䜿った暙準的な Python を蚘述したす: @@ -36,13 +36,13 @@ from datetime import date from pydantic import BaseModel -# 倉数を str ずしお宣蚀 -# そしお関数内で゚ディタ支揎を受ける +# Declare a variable as a str +# and get editor support inside the function def main(user_id: str): return user_id -# Pydantic モデル +# A Pydantic model class User(BaseModel): id: int name: str @@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data) フレヌムワヌク党䜓が䜿いやすく盎感的になるよう蚭蚈されおおり、最高の開発䜓隓を確保するため、開発開始前から耇数の゚ディタであらゆる刀断が怜蚌されおいたす。 -Python 開発者調査では、最もよく䜿われる機胜の 1 ぀が「オヌトコンプリヌト」であるこずが明らかです。 +Python 開発者調査では、[最もよく䜿われる機胜の 1 ぀が「オヌトコンプリヌト」であるこずが明らかです](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)。 **FastAPI** はその芁求を満たすこずを基盀にしおいたす。オヌトコンプリヌトはどこでも機胜したす。 @@ -83,11 +83,11 @@ Python 開発者調査では、Visual Studio Code の堎合: +* [Visual Studio Code](https://code.visualstudio.com/) の堎合: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -* PyCharm の堎合: +* [PyCharm](https://www.jetbrains.com/pycharm/) の堎合: ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) @@ -124,7 +124,7 @@ Python 開発者調査では、Starlette ず完党に互換性がありか぀それに基づいおいたす。そのため、手元の Starlette の远加コヌドも動䜜したす。 +**FastAPI** は [**Starlette**](https://www.starlette.dev/) ず完党に互換性がありか぀それに基づいおいたす。そのため、手元の Starlette の远加コヌドも動䜜したす。 `FastAPI` は実際には `Starlette` のサブクラスです。すでに Starlette を知っおいる、あるいは䜿っおいるなら、ほずんどの機胜は同じように動䜜したす。 **FastAPI** では **Starlette** のすべおの機胜が利甚できたすFastAPI は匷化された Starlette にすぎたせん: -* 圧倒的なパフォヌマンス。利甚可胜な最速クラスの Python フレヌムワヌクの 1 ぀で、**NodeJS** や **Go** ず同等です。 +* 圧倒的なパフォヌマンス。[利甚可胜な最速クラスの Python フレヌムワヌクの 1 ぀で、**NodeJS** や **Go** ず同等です](https://github.com/encode/starlette#performance)。 * **WebSocket** のサポヌト。 * プロセス内バックグラりンドタスク。 * 起動およびシャットダりンむベント。 @@ -177,7 +177,7 @@ FastAPI には、非垞に䜿いやすく、か぀非垞に匷力な Pydantic ず完党に互換性がありか぀それに基づいおいたす。そのため、手元の Pydantic の远加コヌドも動䜜したす。 +**FastAPI** は [**Pydantic**](https://docs.pydantic.dev/) ず完党に互換性がありか぀それに基づいおいたす。そのため、手元の Pydantic の远加コヌドも動䜜したす。 Pydantic に基づく倖郚ラむブラリデヌタベヌス甚の ORM、ODM なども含たれたす。 diff --git a/docs/ja/docs/help-fastapi.md b/docs/ja/docs/help-fastapi.md index ed91bb19f6..3ae18449fa 100644 --- a/docs/ja/docs/help-fastapi.md +++ b/docs/ja/docs/help-fastapi.md @@ -12,7 +12,7 @@ FastAPIや他のナヌザヌ、䜜者を応揎したいですか ## ニュヌスレタヌを賌読 { #subscribe-to-the-newsletter } -[**FastAPI and friends** ニュヌスレタヌ](newsletter.md){.internal-link target=_blank}配信はたれですを賌読するず、次の情報をキャッチアップできたす: +[**FastAPI and friends** ニュヌスレタヌ](newsletter.md)配信はたれですを賌読するず、次の情報をキャッチアップできたす: * FastAPI ず関連プロゞェクトのニュヌス 🚀 * ガむド 📝 @@ -22,17 +22,17 @@ FastAPIや他のナヌザヌ、䜜者を応揎したいですか ## X (Twitter) で FastAPI をフォロヌ { #follow-fastapi-on-x-twitter } -**X (Twitter)** で @fastapi をフォロヌしお、**FastAPI** の最新情報を受け取りたしょう。🐊 +[**X (Twitter)** で @fastapi をフォロヌ](https://x.com/fastapi)しお、**FastAPI** の最新情報を受け取りたしょう。🐊 ## GitHubで **FastAPI** にStar { #star-fastapi-in-github } -GitHubでFastAPIに「Star」を぀けるこずができたす右䞊郚のStarボタンをクリック: https://github.com/fastapi/fastapi。⭐ +GitHubでFastAPIに「Star」を぀けるこずができたす右䞊郚のStarボタンをクリック: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。⭐ スタヌを増やすこずで、他のナヌザヌの目に぀きやすくなり、すでに倚くの人の圹に立っおいるこずが䌝わりたす。 ## GitHubレポゞトリのリリヌスをWatch { #watch-the-github-repository-for-releases } -GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: https://github.com/fastapi/fastapi。👀 +GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 そこで「Releases only」を遞択できたす。 @@ -40,45 +40,45 @@ GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンを ## 開発者ず぀ながる { #connect-with-the-author } -䜜者である私Sebastián Ramírez / `tiangolo`ず぀ながれたす。 +䜜者である[私Sebastián Ramírez / `tiangolo`](https://tiangolo.com)ず぀ながれたす。 できるこず: -* **GitHub** でフォロヌ。 +* [**GitHub** でフォロヌ](https://github.com/tiangolo)。 * 圹に立぀かもしれない、私が䜜成した他のオヌプン゜ヌスプロゞェクトを芋られたす。 * 新しいオヌプン゜ヌスプロゞェクトを䜜成したずきにわかりたす。 -* **X (Twitter)** でフォロヌ たたは Mastodon。 +* [**X (Twitter)** でフォロヌ](https://x.com/tiangolo) たたは [Mastodon](https://fosstodon.org/@tiangolo)。 * あなたがどのようにFastAPIを䜿っおいるか教えおください聞けるず嬉しいです。 * 新しいツヌルの告知やリリヌスを聞けたす。 - * さらに、X (Twitter) の @fastapi別アカりントもフォロヌできたす。 -* **LinkedIn** でフォロヌ。 + * さらに、[X (Twitter) の @fastapi](https://x.com/fastapi)別アカりントもフォロヌできたす。 +* [**LinkedIn** でフォロヌ](https://www.linkedin.com/in/tiangolo/)。 * 新しいツヌルの告知やリリヌスを聞けたすただしX (Twitter) の方をよく䜿っおいたす 🀷‍♂。 -* **Dev.to** や **Medium** で執筆内容を読むたたはフォロヌ。 +* [**Dev.to**](https://dev.to/tiangolo) や [**Medium**](https://medium.com/@tiangolo) で執筆内容を読むたたはフォロヌ。 * 私のアむデアや、䜜成したツヌルに関する蚘事を読めたす。 * 新しい蚘事を公開したずきに読めたす。 ## **FastAPI** に぀いおツむヌト { #tweet-about-fastapi } -**FastAPI** に぀いおツむヌトしお、なぜ気に入っおいるのかを私や他の人に教えおください。🎉 +[**FastAPI** に぀いおツむヌト](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)しお、なぜ気に入っおいるのかを私や他の人に教えおください。🎉 **FastAPI** がどのように䜿われおいるか、どこを気に入っおいるか、どのプロゞェクト/䌚瀟で䜿っおいるか等、聞けるず嬉しいです。 ## FastAPIに投祚 { #vote-for-fastapi } -* Slantで **FastAPI** に投祚。 -* AlternativeToで **FastAPI** に投祚。 -* StackShare で **FastAPI** を䜿っおいるず宣蚀。 +* [Slantで **FastAPI** に投祚](https://www.slant.co/options/34241/~fastapi-review)。 +* [AlternativeToで **FastAPI** に投祚](https://alternativeto.net/software/fastapi/about/)。 +* [StackShare で **FastAPI** を䜿っおいるず宣蚀](https://stackshare.io/pypi-fastapi)。 ## GitHubで質問に困っおいる人を助ける { #help-others-with-questions-in-github } 次の堎所で、他の人の質問を手助けできたす: -* GitHub Discussions -* GitHub Issues +* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) +* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+) 倚くの堎合、その質問の答えをすでに知っおいるかもしれたせん。🀓 -もし倚くの人の質問に答えお助けおくれたなら、あなたは公匏の[FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}になりたす。🎉 +もし倚くの人の質問に答えお助けおくれたなら、あなたは公匏の[FastAPI Expert](fastapi-people.md#fastapi-experts)になりたす。🎉 最も倧事なポむントは「芪切であるこず」を心がけるこずです。人はフラストレヌションを抱えおやっお来るので、必ずしも最良の聞き方をしおいるずは限りたせんが、できる限り芪切に察応したしょう。🀗 @@ -98,13 +98,13 @@ GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンを * 質問が理解できない堎合は、さらに「詳现」を尋ねたす。 -### 問題を再珟する { #reproduce-the-problem } +### 问題を再珟する { #reproduce-the-problem } 倚くのケヌスや質問は、その人の「元のコヌド」に関係しおいたす。 しばしばコヌドの断片だけが共有されたすが、それでは問題を「再珟」するには䞍十分です。 -* ロヌカルで同じ゚ラヌや挙動を確認できるように、たたはナヌスケヌスをよりよく理解できるように、**コピヌ&ペヌスト**しお実行できる最小の再珟可胜な䟋の提䟛を䟝頌できたす。 +* ロヌカルで同じ゚ラヌや挙動を確認できるように、たたはナヌスケヌスをよりよく理解できるように、**コピヌ&ペヌスト**しお実行できる[最小の再珟可胜な䟋](https://stackoverflow.com/help/minimal-reproducible-example)の提䟛を䟝頌できたす。 * ずおも寛倧な気分なら、問題の説明だけをもずに、あなた自身でそのような**䟋を䜜成**しおみるこずもできたす。ただし時間がかかる可胜性が高いので、たずは問題の明確化を䟝頌した方が良い堎合もありたす。 @@ -125,7 +125,7 @@ GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンを ## GitHubレポゞトリをWatch { #watch-the-github-repository } -GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: https://github.com/fastapi/fastapi。👀 +GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンをクリック: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 「Releases only」ではなく「Watching」を遞択するず、新しい issue や質問が䜜成されたずきに通知を受け取れたす。新しい issue のみ、Discussions のみ、PR のみ、など通知察象を絞るこずもできたす。 @@ -133,7 +133,7 @@ GitHubでFastAPIを「Watch」できたす右䞊郚の「Watch」ボタンを ## 質問する { #ask-questions } -GitHubレポゞトリで新しい質問を䜜成できたす。䟋えば: +GitHubレポゞトリで[新しい質問](https://github.com/fastapi/fastapi/discussions/new?category=questions)を䜜成できたす。䟋えば: * **質問**をする、たたは**問題**に぀いお尋ねる。 * 新しい**機胜**を提案する。 @@ -196,12 +196,12 @@ GitHubレポゞトリでこのファむルを線集しお共有。 +* 自分が䜜成/発芋した FastAPI に関する蚘事・動画・ポッドキャストを、[このファむルを線集](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)しお共有。 * 該圓セクションの先頭にリンクを远加しおください。 -* 自分の蚀語ぞの[ドキュメント翻蚳を手䌝う](contributing.md#translations){.internal-link target=_blank}。 +* 自分の蚀語ぞの[ドキュメント翻蚳を手䌝う](contributing.md#translations)。 * 他の人が䜜成した翻蚳のレビュヌも手䌝えたす。 * 新しいドキュメントセクションの提案。 * 既存のissue/バグの修正。 @@ -218,8 +218,8 @@ GitHubレポゞトリでDiscord チャットサヌバヌ 👥 に参加し、FastAPI コミュニティのみんなず亀流したしょう。 +👥 [Discord チャットサヌバヌ](https://discord.gg/VQjSZaeJmf) 👥 に参加し、FastAPI コミュニティのみんなず亀流したしょう。 /// tip | 豆知識 -質問は GitHub Discussions に投皿しおください。そこなら[FastAPI Experts](fastapi-people.md#fastapi-experts){.internal-link target=_blank}から助けおもらえる可胜性がずっず高いです。 +質問は [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions) に投皿しおください。そこなら[FastAPI Experts](fastapi-people.md#fastapi-experts)から助けおもらえる可胜性がずっず高いです。 チャットは䞀般的な䌚話のみに䜿いたしょう。 @@ -243,13 +243,13 @@ GitHubレポゞトリでGitHub sponsors を通じお䜜者私を支揎できたす。プランに応じお、ドキュメントにバッゞが衚瀺されるなどの特兞がある堎合がありたす。🎁 +あなたの**補品/䌚瀟**が **FastAPI** に䟝存しおいる、たたは関連しおおり、そのナヌザヌにリヌチしたい堎合は、[GitHub sponsors](https://github.com/sponsors/tiangolo) を通じお䜜者私を支揎できたす。プランに応じお、ドキュメントにバッゞが衚瀺されるなどの特兞がある堎合がありたす。🎁 --- diff --git a/docs/ja/docs/history-design-future.md b/docs/ja/docs/history-design-future.md index 1465557080..8364002886 100644 --- a/docs/ja/docs/history-design-future.md +++ b/docs/ja/docs/history-design-future.md @@ -1,6 +1,6 @@ # 歎史、蚭蚈、そしおこれから { #history-design-and-future } -少し前に、**FastAPI**のナヌザヌに以䞋の様に尋ねられたした: +しばらく前に、[ある **FastAPI** ナヌザヌが質問したした](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920): > このプロゞェクトの歎史は䜕もないずころから、数週間ですごいものができおいるようです。 [...] @@ -14,7 +14,7 @@ **FastAPI** の歎史は、その前身の歎史が倧郚分を占めおいたす。 -[代替ツヌルから受けたむンスピレヌションず比范](alternatives.md){.internal-link target=_blank}のセクションでこう述べおいたす: +[代替手段](alternatives.md)のセクションでこう述べおいたす:
@@ -44,7 +44,7 @@ もっずも人気のあるPython゚ディタヌでいく぀かのアむデアをテストしたした。PyCharm、VS Code、Jediベヌスの゚ディタヌです。 -最新の Python開発者調査で、それらの゚ディタヌがナヌザヌの80%をカバヌしおいたした。 +最新の [Python開発者調査](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)で、それらの゚ディタヌがナヌザヌの80%をカバヌしおいたした。 これは、**FastAPI**がPython開発者の80%が䜿甚しおいる゚ディタヌで特別にテストされたこずを意味したす。たた、ほずんどの他の゚ディタヌも同様に動䜜する傟向があるため、この恩恵は事実䞊すべおの゚ディタヌでうけられるはずです。 @@ -54,11 +54,11 @@ ## 芁件 { #requirements } -いく぀かの代替手法を詊したあず、私は**Pydantic**の匷みを利甚するこずを決めたした。 +いく぀かの代替手法を詊したあず、私は[**Pydantic**](https://docs.pydantic.dev/)の匷みを利甚するこずを決めたした。 そしお、JSON Schemaに完党に準拠するようにしたり、制玄宣蚀を定矩するさたざたな方法をサポヌトしたり、いく぀かの゚ディタヌでのテストに基づいお゚ディタヌのサポヌト (型チェック、自動補完) を改善するために貢献したした。 -開発䞭、もう1぀の重芁な鍵ずなる**Starlette**にも貢献したした。 +開発䞭、もう1぀の重芁な鍵ずなる[**Starlette**](https://www.starlette.dev/)にも貢献したした。 ## 開発 { #development } @@ -76,4 +76,4 @@ **FastAPI**には倧きな未来が埅っおいたす。 -そしお、[あなたの助け](help-fastapi.md){.internal-link target=_blank}を倧いに歓迎したす。 +そしお、[あなたの助け](help-fastapi.md)を倧いに歓迎したす。 diff --git a/docs/ja/docs/how-to/authentication-error-status-code.md b/docs/ja/docs/how-to/authentication-error-status-code.md index 9bef476444..ec5e25b75b 100644 --- a/docs/ja/docs/how-to/authentication-error-status-code.md +++ b/docs/ja/docs/how-to/authentication-error-status-code.md @@ -2,7 +2,7 @@ FastAPI バヌゞョン `0.122.0` より前は、統合されたセキュリティナヌティリティが認蚌に倱敗しおクラむアントぞ゚ラヌを返す際、HTTP ステヌタスコヌド `403 Forbidden` を䜿甚しおいたした。 -FastAPI バヌゞョン `0.122.0` 以降では、より適切な HTTP ステヌタスコヌド `401 Unauthorized` を䜿甚し、HTTP 仕様に埓っおレスポンスに劥圓な `WWW-Authenticate` ヘッダヌを含めたす。RFC 7235、RFC 9110。 +FastAPI バヌゞョン `0.122.0` 以降では、より適切な HTTP ステヌタスコヌド `401 Unauthorized` を䜿甚し、HTTP 仕様に埓っおレスポンスに劥圓な `WWW-Authenticate` ヘッダヌを含めたす。[RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)。 しかし、䜕らかの理由でクラむアントが埓来の挙動に䟝存しおいる堎合は、セキュリティクラスでメ゜ッド `make_not_authenticated_error` をオヌバヌラむドするこずで、その挙動に戻せたす。 diff --git a/docs/ja/docs/how-to/conditional-openapi.md b/docs/ja/docs/how-to/conditional-openapi.md index 0febe1ef67..b6281ed06f 100644 --- a/docs/ja/docs/how-to/conditional-openapi.md +++ b/docs/ja/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ もしセキュリティ䞊の欠陥が゜ヌスコヌドにあるならば、それは存圚したたたです。 -ドキュメンテヌションを非衚瀺にするのは、単にあなたのAPIぞのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしおしたう可胜性がありたす。単玔に、 秘匿によるセキュリティ の䞀぀の圢態ずしお考えられるでしょう。 +ドキュメンテヌションを非衚瀺にするのは、単にあなたのAPIぞのアクセス方法を難解にするだけでなく、同時にあなた自身の本番環境でのAPIのデバッグを困難にしおしたう可胜性がありたす。単玔に、[秘匿によるセキュリティ](https://en.wikipedia.org/wiki/Security_through_obscurity) の䞀぀の圢態ずしお考えられるでしょう。 もしあなたのAPIのセキュリティを匷化したいなら、いく぀かのよりよい方法がありたす。䟋を瀺すず、 diff --git a/docs/ja/docs/how-to/configure-swagger-ui.md b/docs/ja/docs/how-to/configure-swagger-ui.md index 8be7adc84c..2950918575 100644 --- a/docs/ja/docs/how-to/configure-swagger-ui.md +++ b/docs/ja/docs/how-to/configure-swagger-ui.md @@ -1,6 +1,6 @@ # Swagger UI の蚭定 { #configure-swagger-ui } -いく぀かの远加の Swagger UI パラメヌタを蚭定できたす。 +いく぀かの远加の [Swagger UI パラメヌタ](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)を蚭定できたす。 蚭定するには、`FastAPI()` のアプリオブゞェクトを䜜成するずき、たたは `get_swagger_ui_html()` 関数に `swagger_ui_parameters` 匕数を枡したす。 @@ -50,7 +50,7 @@ FastAPI には、倚くのナヌスケヌスに適した既定の蚭定パラメ ## その他の Swagger UI パラメヌタ { #other-swagger-ui-parameters } -利甚可胜な他のすべおの蚭定に぀いおは、公匏の Swagger UI パラメヌタのドキュメントを参照しおください。 +利甚可胜な他のすべおの蚭定に぀いおは、公匏の [Swagger UI パラメヌタのドキュメント](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)を参照しおください。 ## JavaScript 専甚の蚭定 { #javascript-only-settings } diff --git a/docs/ja/docs/how-to/custom-docs-ui-assets.md b/docs/ja/docs/how-to/custom-docs-ui-assets.md index c0c9745b28..eb1b96c5af 100644 --- a/docs/ja/docs/how-to/custom-docs-ui-assets.md +++ b/docs/ja/docs/how-to/custom-docs-ui-assets.md @@ -54,7 +54,7 @@ Swagger UI がこの凊理を裏偎で行いたすが、そのためにこの「 ### テスト { #test-it } -これで、http://127.0.0.1:8000/docs にアクセスしおペヌゞを再読み蟌みするず、新しい CDN からそれらのアセットが読み蟌たれるはずです。 +これで、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしおペヌゞを再読み蟌みするず、新しい CDN からそれらのアセットが読み蟌たれるはずです。 ## ドキュメント甚 JavaScript ず CSS のセルフホスティング { #self-hosting-javascript-and-css-for-docs } @@ -93,12 +93,12 @@ Swagger UI がこの凊理を裏偎で行いたすが、そのためにこの「 **Swagger UI** では次のファむルを䜿甚したす: -- `swagger-ui-bundle.js` -- `swagger-ui.css` +- [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js) +- [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css) そしお **ReDoc** では次のファむルを䜿甚したす: -- `redoc.standalone.js` +- [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js) その埌、ファむル構成は次のようになりたす: @@ -122,7 +122,7 @@ Swagger UI がこの凊理を裏偎で行いたすが、そのためにこの「 ### 静的ファむルのテスト { #test-the-static-files } -アプリケヌションを起動し、http://127.0.0.1:8000/static/redoc.standalone.js にアクセスしたす。 +アプリケヌションを起動し、[http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js) にアクセスしたす。 **ReDoc** 甚の非垞に長い JavaScript ファむルが衚瀺されるはずです。 @@ -180,6 +180,6 @@ Swagger UI がこの凊理を裏偎で行いたすが、そのためにこの「 ### 静的ファむル UI のテスト { #test-static-files-ui } -これで、WiFi を切断しお http://127.0.0.1:8000/docs にアクセスし、ペヌゞを再読み蟌みできるはずです。 +これで、WiFi を切断しお [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスし、ペヌゞを再読み蟌みできるはずです。 むンタヌネットに接続しおいなくおも、API のドキュメントを衚瀺し、API ず察話できたす。 diff --git a/docs/ja/docs/how-to/custom-request-and-route.md b/docs/ja/docs/how-to/custom-request-and-route.md index ae64f31097..d2b0806e44 100644 --- a/docs/ja/docs/how-to/custom-request-and-route.md +++ b/docs/ja/docs/how-to/custom-request-and-route.md @@ -18,7 +18,7 @@ FastAPI を始めたばかりの堎合は、このセクションは読み飛ば ナヌスケヌスの䟋: -* JSON ではないリク゚ストボディを JSON に倉換する䟋: `msgpack`。 +* JSON ではないリク゚ストボディを JSON に倉換する䟋: [`msgpack`](https://msgpack.org/index.html)。 * gzip 圧瞮されたリク゚ストボディの解凍。 * すべおのリク゚ストボディの自動ロギング。 @@ -32,7 +32,7 @@ gzip のリク゚ストを解凍するために、カスタムの `Request` サ /// tip | 豆知識 -これは仕組みを瀺すためのサンプルです。Gzip 察応が必芁な堎合は、甚意されおいる [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank} を䜿甚できたす。 +これは仕組みを瀺すためのサンプルです。Gzip 察応が必芁な堎合は、甚意されおいる [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware) を䜿甚できたす。 /// @@ -66,7 +66,7 @@ gzip のリク゚ストを解凍するために、カスタムの `Request` サ そしおこの 2 ぀`scope` ず `receive`が、新しい `Request` むンスタンスを䜜成するために必芁なものです。 -`Request` に぀いお詳しくは、Starlette の Requests に関するドキュメント を参照しおください。 +`Request` に぀いお詳しくは、[Starlette の Requests に関するドキュメント](https://www.starlette.dev/requests/) を参照しおください。 /// @@ -82,7 +82,7 @@ gzip のリク゚ストを解凍するために、カスタムの `Request` サ /// tip | 豆知識 -同じ問題を解決するには、`RequestValidationError` 甚のカスタムハンドラで `body` を䜿う方がずっず簡単でしょう[゚ラヌ凊理](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}。 +同じ問題を解決するには、`RequestValidationError` 甚のカスタムハンドラで `body` を䜿う方がずっず簡単でしょう[゚ラヌ凊理](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)。 ただし、この䟋も有効で、内郚コンポヌネントずどのようにやり取りするかを瀺しおいたす。 diff --git a/docs/ja/docs/how-to/extending-openapi.md b/docs/ja/docs/how-to/extending-openapi.md index df5b3cd35a..e9ef9923fd 100644 --- a/docs/ja/docs/how-to/extending-openapi.md +++ b/docs/ja/docs/how-to/extending-openapi.md @@ -37,7 +37,7 @@ 䞊蚘の情報を䜿っお、同じナヌティリティ関数で OpenAPI スキヌマを生成し、必芁な郚分を䞊曞きできたす。 -たずえば、カスタムロゎを含めるための ReDoc の OpenAPI 拡匵を远加しおみたしょう。 +たずえば、[カスタムロゎを含めるための ReDoc の OpenAPI 拡匵](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)を远加しおみたしょう。 ### 通垞の **FastAPI** { #normal-fastapi } @@ -75,6 +75,6 @@ OpenAPI スキヌマの `info`「オブゞェクト」にカスタムの `x-logo ### 確認 { #check-it } -http://127.0.0.1:8000/redoc にアクセスするず、カスタムロゎこの䟋では **FastAPI** のロゎが䜿われおいるこずが確認できたす: +[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスするず、カスタムロゎこの䟋では **FastAPI** のロゎが䜿われおいるこずが確認できたす: diff --git a/docs/ja/docs/how-to/general.md b/docs/ja/docs/how-to/general.md index 8879c68eb9..ca2de8f3fb 100644 --- a/docs/ja/docs/how-to/general.md +++ b/docs/ja/docs/how-to/general.md @@ -4,36 +4,40 @@ ## デヌタのフィルタリング - セキュリティ { #filter-data-security } -返すべき以䞊のデヌタを返さないようにするには、[チュヌトリアル - レスポンスモデル - 戻り倀の型](../tutorial/response-model.md){.internal-link target=_blank} を参照しおください。 +返すべき以䞊のデヌタを返さないようにするには、[チュヌトリアル - レスポンスモデル - 戻り倀の型](../tutorial/response-model.md) を参照しおください。 + +## レスポンス性胜の最適化 - レスポンスモデル - 戻り倀の型 { #optimize-response-performance-response-model-return-type } + +JSON デヌタを返す際の性胜を最適化するには、戻り倀の型たたはレスポンスモデルを䜿甚しおください。そうするこずで、Pydantic が Python を経由せずに Rust 偎で JSON ぞのシリアラむズを凊理したす。詳现は [チュヌトリアル - レスポンスモデル - 戻り倀の型](../tutorial/response-model.md) を参照しおください。 ## ドキュメントのタグ - OpenAPI { #documentation-tags-openapi } -*path operations* にタグを远加し、ドキュメント UI でグルヌプ化するには、[チュヌトリアル - path operation の蚭定 - タグ](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} を参照しおください。 +*path operations* にタグを远加し、ドキュメント UI でグルヌプ化するには、[チュヌトリアル - path operation の蚭定 - タグ](../tutorial/path-operation-configuration.md#tags) を参照しおください。 ## ドキュメントの抂芁ず説明 - OpenAPI { #documentation-summary-and-description-openapi } -*path operations* に抂芁ず説明を远加し、ドキュメント UI に衚瀺するには、[チュヌトリアル - path operation の蚭定 - 抂芁ず説明](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} を参照しおください。 +*path operations* に抂芁ず説明を远加し、ドキュメント UI に衚瀺するには、[チュヌトリアル - path operation の蚭定 - 抂芁ず説明](../tutorial/path-operation-configuration.md#summary-and-description) を参照しおください。 ## ドキュメントのレスポンス説明 - OpenAPI { #documentation-response-description-openapi } -ドキュメント UI に衚瀺されるレスポンスの説明を定矩するには、[チュヌトリアル - path operation の蚭定 - レスポンスの説明](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} を参照しおください。 +ドキュメント UI に衚瀺されるレスポンスの説明を定矩するには、[チュヌトリアル - path operation の蚭定 - レスポンスの説明](../tutorial/path-operation-configuration.md#response-description) を参照しおください。 ## *Path Operation* の非掚奚化 - OpenAPI { #documentation-deprecate-a-path-operation-openapi } -*path operation* を非掚奚にし、ドキュメント UI に衚瀺するには、[チュヌトリアル - path operation の蚭定 - 非掚奚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} を参照しおください。 +*path operation* を非掚奚にし、ドキュメント UI に衚瀺するには、[チュヌトリアル - path operation の蚭定 - 非掚奚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) を参照しおください。 ## 任意のデヌタを JSON 互換に倉換 { #convert-any-data-to-json-compatible } -任意のデヌタを JSON 互換に倉換するには、[チュヌトリアル - JSON 互換゚ンコヌダ](../tutorial/encoder.md){.internal-link target=_blank} を参照しおください。 +任意のデヌタを JSON 互換に倉換するには、[チュヌトリアル - JSON 互換゚ンコヌダ](../tutorial/encoder.md) を参照しおください。 ## OpenAPI メタデヌタ - ドキュメント { #openapi-metadata-docs } -ラむセンス、バヌゞョン、連絡先などを含むメタデヌタを OpenAPI スキヌマに远加するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md){.internal-link target=_blank} を参照しおください。 +ラむセンス、バヌゞョン、連絡先などを含むメタデヌタを OpenAPI スキヌマに远加するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md) を参照しおください。 ## OpenAPI のカスタム URL { #openapi-custom-url } -OpenAPI の URL をカスタマむズたたは削陀するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} を参照しおください。 +OpenAPI の URL をカスタマむズたたは削陀するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md#openapi-url) を参照しおください。 ## OpenAPI ドキュメントの URL { #openapi-docs-urls } -自動生成されるドキュメント UI が䜿甚する URL を倉曎するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} を参照しおください。 +自動生成されるドキュメント UI が䜿甚する URL を倉曎するには、[チュヌトリアル - メタデヌタずドキュメントの URL](../tutorial/metadata.md#docs-urls) を参照しおください。 diff --git a/docs/ja/docs/how-to/graphql.md b/docs/ja/docs/how-to/graphql.md index bd0d223498..d1356b59a9 100644 --- a/docs/ja/docs/how-to/graphql.md +++ b/docs/ja/docs/how-to/graphql.md @@ -18,18 +18,18 @@ **ASGI** をサポヌトする **GraphQL** ラむブラリの䞀郚を以䞋に瀺したす。**FastAPI** ず組み合わせお䜿甚できたす: -* Strawberry 🍓 - * FastAPI 向けドキュメントあり -* Ariadne - * FastAPI 向けドキュメントあり -* Tartiflette - * ASGI 連携甚の Tartiflette ASGI あり -* Graphene - * starlette-graphene3 あり +* [Strawberry](https://strawberry.rocks/) 🍓 + * [FastAPI 向けドキュメント](https://strawberry.rocks/docs/integrations/fastapi)あり +* [Ariadne](https://ariadnegraphql.org/) + * [FastAPI 向けドキュメント](https://ariadnegraphql.org/docs/fastapi-integration)あり +* [Tartiflette](https://tartiflette.io/) + * ASGI 連携甚の [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) あり +* [Graphene](https://graphene-python.org/) + * [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) あり ## Strawberry で GraphQL { #graphql-with-strawberry } -**GraphQL** が必芁、たたは利甚したい堎合は、**Strawberry** を**掚奚**したす。**FastAPI** の蚭蚈に最も近く、すべおが**型アノテヌション**に基づいおいたす。 +**GraphQL** が必芁、たたは利甚したい堎合は、[**Strawberry**](https://strawberry.rocks/) を**掚奚**したす。**FastAPI** の蚭蚈に最も近く、すべおが**型アノテヌション**に基づいおいたす。 ナヌスケヌスによっおは他のラむブラリを遞ぶ方がよい堎合もありたすが、私に尋ねられれば、おそらく **Strawberry** を詊すこずを勧めるでしょう。 @@ -37,24 +37,24 @@ FastAPI ず Strawberry を統合する方法の簡単なプレビュヌです: {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *} -詳现は Strawberry のドキュメントをご芧ください。 +詳现は [Strawberry のドキュメント](https://strawberry.rocks/)をご芧ください。 -たた、Strawberry ず FastAPI の連携に関するドキュメントもありたす。 +たた、[Strawberry ず FastAPI](https://strawberry.rocks/docs/integrations/fastapi) の連携に関するドキュメントもありたす。 ## Starlette の旧 `GraphQLApp` { #older-graphqlapp-from-starlette } -以前の Starlette には、Graphene ず統合するための `GraphQLApp` クラスが含たれおいたした。 +以前の Starlette には、[Graphene](https://graphene-python.org/) ず統合するための `GraphQLApp` クラスが含たれおいたした。 -これは Starlette からは非掚奚になりたしたが、もしそれを䜿甚しおいるコヌドがある堎合は、同じナヌスケヌスをカバヌし、**ほが同䞀のむンタヌフェヌス**を持぀ starlette-graphene3 ぞ容易に**移行**できたす。 +これは Starlette からは非掚奚になりたしたが、もしそれを䜿甚しおいるコヌドがある堎合は、同じナヌスケヌスをカバヌし、**ほが同䞀のむンタヌフェヌス**を持぀ [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) ぞ容易に**移行**できたす。 /// tip | 豆知識 -GraphQL が必芁であれば、䟝然ずしお Strawberry の利甚を掚奚したす。独自のクラスや型ではなく、型アノテヌションに基づいおいるためです。 +GraphQL が必芁であれば、䟝然ずしお [Strawberry](https://strawberry.rocks/) の利甚を掚奚したす。独自のクラスや型ではなく、型アノテヌションに基づいおいるためです。 /// ## さらに孊ぶ { #learn-more } -**GraphQL** に぀いおは、公匏 GraphQL ドキュメントでさらに孊べたす。 +**GraphQL** に぀いおは、[公匏 GraphQL ドキュメント](https://graphql.org/)でさらに孊べたす。 䞊蚘の各ラむブラリに぀いおは、リンク先のドキュメントをご参照ください。 diff --git a/docs/ja/docs/how-to/index.md b/docs/ja/docs/how-to/index.md index b1cd177852..9d9348abfc 100644 --- a/docs/ja/docs/how-to/index.md +++ b/docs/ja/docs/how-to/index.md @@ -8,6 +8,6 @@ /// tip | 豆知識 -**FastAPI を孊ぶ**こずを䜓系的に進めたい堎合掚奚、代わりに [チュヌトリアル - ナヌザヌガむド](../tutorial/index.md){.internal-link target=_blank} を章ごずに読んでください。 +**FastAPI を孊ぶ**こずを䜓系的に進めたい堎合掚奚、代わりに [チュヌトリアル - ナヌザヌガむド](../tutorial/index.md) を章ごずに読んでください。 /// diff --git a/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md index f1414ac281..320be14443 100644 --- a/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md +++ b/docs/ja/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md @@ -22,7 +22,7 @@ Python の最新機胜を䜿いたい堎合は、Pydantic v2 を䜿甚しおい ## 公匏ガむド { #official-guide } -Pydantic には v1 から v2 ぞの公匏の 移行ガむド がありたす。 +Pydantic には v1 から v2 ぞの公匏の [移行ガむド](https://docs.pydantic.dev/latest/migration/) がありたす。 倉曎点、怜蚌がより正確で厳密になった点、泚意事項などが含たれたす。 @@ -30,7 +30,7 @@ Pydantic には v1 から v2 ぞの公匏の `bump-pydantic` を䜿甚できたす。 +同じ Pydantic チヌムが提䟛する [`bump-pydantic`](https://github.com/pydantic/bump-pydantic) を䜿甚できたす。 このツヌルは必芁なコヌド倉曎のほずんどを自動で行いたす。 @@ -88,7 +88,7 @@ graph TB style V2Field fill:#f9fff3 ``` -...but, you can have separated models using Pydantic v1 and v2 in the same app. +...しかし、同じアプリ内で Pydantic v1 ず v2 を別々のモデルずしお分けお䜿うこずは可胜です。 ```mermaid graph TB diff --git a/docs/ja/docs/how-to/testing-database.md b/docs/ja/docs/how-to/testing-database.md index af9ad75090..76d448e02a 100644 --- a/docs/ja/docs/how-to/testing-database.md +++ b/docs/ja/docs/how-to/testing-database.md @@ -1,7 +1,7 @@ # デヌタベヌスのテスト { #testing-a-database } -デヌタベヌス、SQL、SQLModel に぀いおは、SQLModel ドキュメントで孊べたす。🀓 +デヌタベヌス、SQL、SQLModel に぀いおは、[SQLModel ドキュメント](https://sqlmodel.tiangolo.com/)で孊べたす。🀓 -FastAPI ず䞀緒に SQLModel を䜿うためのミニ チュヌトリアルがありたす。✚ +FastAPI ず䞀緒に SQLModel を䜿うためのミニ [チュヌトリアル](https://sqlmodel.tiangolo.com/tutorial/fastapi/)がありたす。✚ -そのチュヌトリアルには、SQL デヌタベヌスのテストに関するセクションも含たれおいたす。😎 +そのチュヌトリアルには、[SQL デヌタベヌスのテスト](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)に関するセクションも含たれおいたす。😎 diff --git a/docs/ja/docs/index.md b/docs/ja/docs/index.md index 90368b4ae3..a8b9741985 100644 --- a/docs/ja/docs/index.md +++ b/docs/ja/docs/index.md @@ -11,25 +11,25 @@ FastAPI フレヌムワヌク、高パフォヌマンス、孊びやすい、玠早くコヌディングできる、本番運甚に察応

- + Test - + Coverage - + Package version - + Supported Python versions

--- -**ドキュメント**: https://fastapi.tiangolo.com +**ドキュメント**: [https://fastapi.tiangolo.com/ja](https://fastapi.tiangolo.com/ja) -**゜ヌスコヌド**: https://github.com/fastapi/fastapi +**゜ヌスコヌド**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- @@ -44,7 +44,7 @@ FastAPI は、Python の暙準である型ヒントに基づいお Python で AP * **簡単**: 簡単に利甚・習埗できるようにデザむンされおいたす。ドキュメントを読む時間を削枛したす。 * **短い**: コヌドの重耇を最小限にしたす。各パラメヌタ宣蚀から耇数の機胜を埗られたす。バグも枛りたす。 * **堅牢性**: 自動察話型ドキュメントにより、本番環境向けのコヌドが埗られたす。 -* **Standards-based**: API のオヌプンスタンダヌドに基づいおおりそしお完党に互換性がありたす、OpenAPI以前は Swagger ずしお知られおいたしたや JSON Schema をサポヌトしたす。 +* **Standards-based**: API のオヌプンスタンダヌドに基づいおおりそしお完党に互換性がありたす、[OpenAPI](https://github.com/OAI/OpenAPI-Specification)以前は Swagger ずしお知られおいたしたや [JSON Schema](https://json-schema.org/) をサポヌトしたす。 * 本番アプリケヌションを構築しおいる瀟内開発チヌムのテストに基づく芋積もりです。 @@ -55,51 +55,51 @@ FastAPI は、Python の暙準である型ヒントに基づいお Python で AP ### Keystone Sponsor { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} - + {% endfor -%} ### Gold and Silver Sponsors { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} - + {% endfor -%} {%- for sponsor in sponsors.silver -%} - + {% endfor %} -その他のスポンサヌ +[その他のスポンサヌ](https://fastapi.tiangolo.com/ja/fastapi-people/#sponsors) ## 評䟡 { #opinions } "_[...] 最近 **FastAPI** を䜿っおいたす。 [...] 実際に私のチヌムの党おの **Microsoft の機械孊習サヌビス** で䜿甚する予定です。 そのうちのいく぀かのコアな **Windows** 補品ず **Office** 補品に統合され぀぀ありたす。_" -
Kabir Khan - Microsoft (ref)
+
Kabir Khan - Microsoft (ref)
--- "_FastAPIラむブラリを採甚し、ク゚リで **予枬倀** を取埗できる **REST** サヌバを構築したした。 [for Ludwig]_" -
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
--- "_**Netflix** は、**危機管理**オヌケストレヌションフレヌムワヌク、**Dispatch** のオヌプン゜ヌスリリヌスを発衚できるこずをうれしく思いたす。 [built with **FastAPI**]_" -
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
--- "_私は **FastAPI** にワクワクしおいたす。 めちゃくちゃ楜しいです_" -
Brian Okken - Python Bytes podcast host (ref)
+
Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast host (ref)
--- "_正盎、あなたが䜜ったものは超堅実で掗緎されおいるように芋えたす。いろんな意味で、それは私が **Hug** にそうなっおほしかったものです。誰かがそれを䜜るのを芋るのは本圓に刺激的です。_" -
Timothy Crosley - Hug creator (ref)
+
Timothy Crosley - [Hug](https://github.com/hugapi/hug) creator (ref)
--- @@ -107,27 +107,27 @@ FastAPI は、Python の暙準である型ヒントに基づいお Python で AP "_私たちの **API** は **FastAPI** に切り替えたした [...] きっず気に入るず思いたす [...]_" -
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
+
Ines Montani - Matthew Honnibal - [Explosion AI](https://explosion.ai) founders - [spaCy](https://spacy.io) creators (ref) - (ref)
--- "_本番運甚の Python API を構築したい方には、**FastAPI** を匷くおすすめしたす。**矎しく蚭蚈**されおおり、**䜿いやすく**、**高いスケヌラビリティ**がありたす。私たちの API ファヌスト開発戊略の **䞻芁コンポヌネント** ずなり、Virtual TAC Engineer などの倚くの自動化やサヌビスを掚進しおいたす。_" -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (ref)
--- ## FastAPI ミニドキュメンタリヌ { #fastapi-mini-documentary } -2025 幎末に公開された FastAPI ミニドキュメンタリヌがありたす。オンラむンで芖聎できたす: +2025 幎末に公開された [FastAPI ミニドキュメンタリヌ](https://www.youtube.com/watch?v=mpR8ngthqiE)がありたす。オンラむンで芖聎できたす: -FastAPI Mini Documentary +FastAPI Mini Documentary ## **Typer**、CLI 版 FastAPI { #typer-the-fastapi-of-clis } - + -Web API の代わりにタヌミナルで䜿甚する CLI アプリを構築する堎合は、**Typer** を確認しおください。 +Web API の代わりにタヌミナルで䜿甚する CLI アプリを構築する堎合は、[**Typer**](https://typer.tiangolo.com/) を確認しおください。 **Typer** は FastAPI の匟分です。そしお、**CLI 版 FastAPI** を意図しおいたす。 ⌚ 🚀 @@ -135,12 +135,12 @@ Web API の代わりにタヌミナルで䜿甚する Starlette -* デヌタの郚分は Pydantic +* [Starlette](https://www.starlette.dev/)Web 郚分 +* [Pydantic](https://docs.pydantic.dev/)デヌタ郚分 ## むンストヌル { #installation } -virtual environment を䜜成しお有効化し、それから FastAPI をむンストヌルしたす。 +[仮想環境](https://fastapi.tiangolo.com/ja/virtual-environments/) を䜜成しお有効化し、それから FastAPI をむンストヌルしたす。
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **泚**: -わからない堎合は、ドキュメントの `async` ず `await` の _"In a hurry?"_ セクションを確認しおください。 +わからない堎合は、_「In a hurry?」_ セクションの [ドキュメントの `async` ず `await`](https://fastapi.tiangolo.com/ja/async/#in-a-hurry) を確認しおください。 @@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.
-fastapi dev main.py コマンドに぀いお +fastapi dev コマンドに぀いお -`fastapi dev` コマンドは `main.py` ファむルを読み取り、その䞭の **FastAPI** アプリを怜出し、Uvicorn を䜿甚しおサヌバヌを起動したす。 +`fastapi dev` コマンドは `main.py` ファむルを自動的に読み取り、その䞭の **FastAPI** アプリを怜出し、[Uvicorn](https://www.uvicorn.dev) を䜿甚しおサヌバヌを起動したす。 デフォルトでは、`fastapi dev` はロヌカル開発向けに自動リロヌドを有効にしお起動したす。 -詳しくは FastAPI CLI docs を参照しおください。 +詳しくは [FastAPI CLI docs](https://fastapi.tiangolo.com/ja/fastapi-cli/) を参照しおください。
### 動䜜確認 { #check-it } -ブラりザで http://127.0.0.1:8000/items/5?q=somequery を開きたす。 +ブラりザで [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery) を開きたす。 以䞋の JSON のレスポンスが確認できたす。 @@ -264,17 +264,17 @@ INFO: Application startup complete. ### 自動察話型 API ドキュメント { #interactive-api-docs } -次に、http://127.0.0.1:8000/docs にアクセスしたす。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしたす。 -自動察話型 API ドキュメントが衚瀺されたすSwagger UI が提䟛しおいたす。 +自動察話型 API ドキュメントが衚瀺されたす[Swagger UI](https://github.com/swagger-api/swagger-ui) が提䟛しおいたす。 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 代替 API ドキュメント { #alternative-api-docs } -次に、http://127.0.0.1:8000/redoc にアクセスしたす。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスしたす。 -代替の自動ドキュメントが衚瀺されたすReDoc が提䟛しおいたす。 +代替の自動ドキュメントが衚瀺されたす[ReDoc](https://github.com/Rebilly/ReDoc) が提䟛しおいたす。 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item): ### 自動察話型 API ドキュメントのアップグレヌド { #interactive-api-docs-upgrade } -次に、http://127.0.0.1:8000/docs にアクセスしたす。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) にアクセスしたす。 * 自動察話型 API ドキュメントは新しいボディも含めお自動でアップデヌトされたす。 @@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item): ### 代替 API ドキュメントのアップグレヌド { #alternative-api-docs-upgrade } -次に、http://127.0.0.1:8000/redoc にアクセスしたす。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスしたす。 * 代替のドキュメントにも新しいク゚リパラメヌタやボディが反映されたす。 @@ -442,7 +442,7 @@ item: Item * 非垞に匷力で䜿いやすい **䟝存性泚入** システム。 * **JWT トヌクン**を甚いた **OAuth2** や **HTTP Basic** 認蚌のサポヌトを含む、セキュリティず認蚌。 * **深くネストされた JSON モデル**を宣蚀するための、より高床なしかし同様に簡単な手法Pydantic のおかげです。 -* Strawberry および他のラむブラリによる **GraphQL** 統合。 +* [Strawberry](https://strawberry.rocks) および他のラむブラリによる **GraphQL** 統合。 * 以䞋のようなたくさんのおたけ機胜Starlette のおかげです: * **WebSockets** * HTTPX ず `pytest` に基づく極めお簡単なテスト @@ -452,24 +452,10 @@ item: Item ### アプリをデプロむ任意 { #deploy-your-app-optional } -必芁に応じお FastAPI アプリを FastAPI Cloud にデプロむできたす。ただの堎合はりェむティングリストに参加しおください。 🚀 +必芁に応じお FastAPI アプリを [FastAPI Cloud](https://fastapicloud.com) にデプロむできたす。ただの堎合はりェむティングリストに参加しおください。 🚀 すでに **FastAPI Cloud** アカりントりェむティングリストから招埅されたした 😉がある堎合は、1 コマンドでアプリケヌションをデプロむできたす。 -デプロむ前に、ログむンしおいるこずを確認しおください。 - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -次に、アプリをデプロむしたす。 -
```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### FastAPI Cloud に぀いお { #about-fastapi-cloud } -**FastAPI Cloud** は **FastAPI** の䜜者ず同じチヌムによっお䜜られおいたす。 +**[FastAPI Cloud](https://fastapicloud.com)** は **FastAPI** の䜜者ず同じチヌムによっお䜜られおいたす。 最小限の劎力で API を **構築**、**デプロむ**、**アクセス** するためのプロセスを効率化したす。 @@ -504,9 +490,9 @@ FastAPI はオヌプン゜ヌスであり、暙準に基づいおいたす。遞 ## パフォヌマンス { #performance } -独立した TechEmpower のベンチマヌクでは、Uvicorn で動䜜する **FastAPI** アプリケヌションが、利甚可胜な最も高速な Python フレヌムワヌクの䞀぀であり、Starlette ず UvicornFastAPI で内郚的に䜿甚されおいたすにのみ䞋回っおいるず瀺されおいたす。* +独立した 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 で内郚的に䜿甚されおいたすにのみ䞋回っおいるず瀺されおいたす。* -詳现は Benchmarks セクションをご芧ください。 +詳现は [Benchmarks](https://fastapi.tiangolo.com/ja/benchmarks/) セクションをご芧ください。 ## 䟝存関係 { #dependencies } @@ -518,19 +504,19 @@ FastAPI を `pip install "fastapi[standard]"` でむンストヌルするず、` Pydantic によっお䜿甚されるもの: -* email-validator - メヌル怜蚌のため。 +* [`email-validator`](https://github.com/JoshData/python-email-validator) - メヌル怜蚌のため。 Starlette によっお䜿甚されるもの: -* httpx - `TestClient` を䜿甚したい堎合に必芁です。 -* jinja2 - デフォルトのテンプレヌト蚭定を䜿甚したい堎合に必芁です。 -* python-multipart - `request.form()` ずずもに、フォヌムの 「parsing」 をサポヌトしたい堎合に必芁です。 +* [`httpx`](https://www.python-httpx.org) - `TestClient` を䜿甚したい堎合に必芁です。 +* [`jinja2`](https://jinja.palletsprojects.com) - デフォルトのテンプレヌト蚭定を䜿甚したい堎合に必芁です。 +* [`python-multipart`](https://github.com/Kludex/python-multipart) - `request.form()` ずずもに、フォヌムの 「parsing」 をサポヌトしたい堎合に必芁です。 FastAPI によっお䜿甚されるもの: -* uvicorn - アプリケヌションをロヌドしお提䟛するサヌバヌのため。これには `uvicorn[standard]` も含たれ、高性胜なサヌビングに必芁な䟝存関係䟋: `uvloop`が含たれたす。 +* [`uvicorn`](https://www.uvicorn.dev) - アプリケヌションをロヌドしお提䟛するサヌバヌのため。これには `uvicorn[standard]` も含たれ、高性胜なサヌビングに必芁な䟝存関係䟋: `uvloop`が含たれたす。 * `fastapi-cli[standard]` - `fastapi` コマンドを提䟛したす。 - * これには `fastapi-cloud-cli` が含たれ、FastAPI アプリケヌションを FastAPI Cloud にデプロむできたす。 + * これには `fastapi-cloud-cli` が含たれ、FastAPI アプリケヌションを [FastAPI Cloud](https://fastapicloud.com) にデプロむできたす。 ### `standard` 䟝存関係なし { #without-standard-dependencies } @@ -546,13 +532,13 @@ FastAPI によっお䜿甚されるもの: 远加のオプション Pydantic 䟝存関係: -* pydantic-settings - 蚭定管理のため。 -* pydantic-extra-types - 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 - `ORJSONResponse` を䜿甚したい堎合に必芁です。 -* ujson - `UJSONResponse` を䜿甚したい堎合に必芁です。 +* [`orjson`](https://github.com/ijl/orjson) - `ORJSONResponse` を䜿甚したい堎合に必芁です。 +* [`ujson`](https://github.com/esnme/ultrajson) - `UJSONResponse` を䜿甚したい堎合に必芁です。 ## ラむセンス { #license } diff --git a/docs/ja/docs/project-generation.md b/docs/ja/docs/project-generation.md index c930fb557c..b6550e3ac3 100644 --- a/docs/ja/docs/project-generation.md +++ b/docs/ja/docs/project-generation.md @@ -4,7 +4,7 @@ このテンプレヌトを䜿っお開始できたす。初期セットアップ、セキュリティ、デヌタベヌス、いく぀かのAPI゚ンドポむントがすでに甚意されおいたす。 -GitHubリポゞトリ: Full Stack FastAPI Template +GitHubリポゞトリ: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) ## Full Stack FastAPI テンプレヌト - 技術スタックず機胜 { #full-stack-fastapi-template-technology-stack-and-features } diff --git a/docs/ja/docs/python-types.md b/docs/ja/docs/python-types.md index a6b46c256d..67336c31ef 100644 --- a/docs/ja/docs/python-types.md +++ b/docs/ja/docs/python-types.md @@ -231,7 +231,7 @@ def some_function(data: Any): {!> ../../docs_src/python_types/tutorial008b_py310.py!} ``` -これは `item` が `int` たたは `str` になり埗るこずを意味したす. +これは `item` が `int` たたは `str` になり埗るこずを意味したす。 #### `None` の可胜性 { #possibly-none } @@ -269,7 +269,7 @@ def some_function(data: Any): ## Pydantic のモデル { #pydantic-models } -Pydantic はデヌタ怜蚌を行うための Python ラむブラリです。 +[Pydantic](https://docs.pydantic.dev/) はデヌタ怜蚌を行うための Python ラむブラリです。 デヌタの「圢」を属性付きのクラスずしお宣蚀したす。 @@ -285,13 +285,13 @@ Pydantic の公匏ドキュメントからの䟋: /// info | 情報 -Pydantic の詳现はドキュメントを参照しおください。 +[ Pydantic の詳现はドキュメントを参照しおください](https://docs.pydantic.dev/)。 /// **FastAPI** はすべお Pydantic をベヌスにしおいたす。 -すべおのこずは [チュヌトリアル - ナヌザヌガむド](tutorial/index.md){.internal-link target=_blank} で実際に芋るこずができたす。 +すべおのこずは [チュヌトリアル - ナヌザヌガむド](tutorial/index.md) で実際に芋るこずができたす。 ## メタデヌタアノテヌション付き型ヒント { #type-hints-with-metadata-annotations } @@ -337,12 +337,12 @@ Python 自䜓は、この `Annotated` で䜕かをするわけではありたせ * OpenAPI を䜿甚しお API を **ドキュメント化** したす: * これは自動の察話型ドキュメントのナヌザヌむンタヌフェむスで䜿われたす。 -すべおが抜象的に聞こえるかもしれたせん。心配しないでください。 この党おの動䜜は [チュヌトリアル - ナヌザヌガむド](tutorial/index.md){.internal-link target=_blank} で芋るこずができたす。 +すべおが抜象的に聞こえるかもしれたせん。心配しないでください。 この党おの動䜜は [チュヌトリアル - ナヌザヌガむド](tutorial/index.md) で芋るこずができたす。 重芁なのは、Python の暙準的な型を䜿うこずで、クラスやデコレヌタなどを远加するのではなく1 ぀の堎所で **FastAPI** が倚くの䜜業を代わりにやっおくれおいるずいうこずです。 /// info | 情報 -すでにすべおのチュヌトリアルを終えお、型に぀いおの詳现を芋るためにこのペヌゞに戻っおきた堎合は、良いリ゜ヌスずしお `mypy` の「チヌトシヌト」 がありたす。 +すでにすべおのチュヌトリアルを終えお、型に぀いおの詳现を芋るためにこのペヌゞに戻っおきた堎合は、良いリ゜ヌスずしお [`mypy` の「チヌトシヌト`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html) がありたす。 /// diff --git a/docs/ja/docs/tutorial/background-tasks.md b/docs/ja/docs/tutorial/background-tasks.md index d32c141b5b..0bacbb3947 100644 --- a/docs/ja/docs/tutorial/background-tasks.md +++ b/docs/ja/docs/tutorial/background-tasks.md @@ -63,7 +63,7 @@ ## 技術的な詳现 { #technical-details } -`BackgroundTasks` クラスは、`starlette.background`から盎接取埗されたす。 +`BackgroundTasks` クラスは、[`starlette.background`](https://www.starlette.dev/background/) から盎接取埗されたす。 これは、FastAPI に盎接むンポヌト/むンクルヌドされるため、`fastapi` からむンポヌトできる䞊に、`starlette.background`から別の `BackgroundTask` (末尟に `s` がない) を誀っおむンポヌトするこずを回避できたす。 @@ -71,11 +71,11 @@ それでも、FastAPI で `BackgroundTask` を単独で䜿甚するこずは可胜ですが、コヌド内でオブゞェクトを䜜成し、それを含むStarlette `Response` を返す必芁がありたす。 -詳现に぀いおは、Starlette のバックグラりンドタスクに関する公匏ドキュメントを参照しお䞋さい。 +詳现に぀いおは、[Starlette のバックグラりンドタスクに関する公匏ドキュメント](https://www.starlette.dev/background/)を参照しお䞋さい。 ## 泚意 { #caveat } -倧量のバックグラりンド蚈算が必芁であり、必ずしも同じプロセスで実行する必芁がない堎合 (たずえば、メモリや倉数などを共有する必芁がない堎合)、Celery のようなより倧きな他のツヌルを䜿甚するずメリットがあるかもしれたせん。 +倧量のバックグラりンド蚈算が必芁であり、必ずしも同じプロセスで実行する必芁がない堎合 (たずえば、メモリや倉数などを共有する必芁がない堎合)、[Celery](https://docs.celeryq.dev) のようなより倧きな他のツヌルを䜿甚するずメリットがあるかもしれたせん。 これらは、より耇雑な構成、RabbitMQ や Redis などのメッセヌゞ/ゞョブキュヌマネヌゞャヌを必芁ずする傟向がありたすが、耇数のプロセス、特に耇数のサヌバヌでバックグラりンドタスクを実行できたす。 diff --git a/docs/ja/docs/tutorial/bigger-applications.md b/docs/ja/docs/tutorial/bigger-applications.md index 9c1cc0fe69..3518eaed39 100644 --- a/docs/ja/docs/tutorial/bigger-applications.md +++ b/docs/ja/docs/tutorial/bigger-applications.md @@ -58,17 +58,17 @@ from app.routers import items ```bash . -├── app # "app" is a Python package -│   ├── __init__.py # this file makes "app" a "Python package" -│   ├── main.py # "main" module, e.g. import app.main -│   ├── dependencies.py # "dependencies" module, e.g. import app.dependencies -│   └── routers # "routers" is a "Python subpackage" -│   │ ├── __init__.py # makes "routers" a "Python subpackage" -│   │ ├── items.py # "items" submodule, e.g. import app.routers.items -│   │ └── users.py # "users" submodule, e.g. import app.routers.users -│   └── internal # "internal" is a "Python subpackage" -│   ├── __init__.py # makes "internal" a "Python subpackage" -│   └── admin.py # "admin" submodule, e.g. import app.internal.admin +├── app # "app" は Python パッケヌゞ +│   ├── __init__.py # このファむルにより "app" は「Python パッケヌゞ」になる +│   ├── main.py # "main" モゞュヌル䟋: import app.main +│   ├── dependencies.py # "dependencies" モゞュヌル䟋: import app.dependencies +│   └── routers # "routers" は「Python サブパッケヌゞ」 +│   │ ├── __init__.py # このファむルにより "routers" は「Python サブパッケヌゞ」になる +│   │ ├── items.py # "items" サブモゞュヌル䟋: import app.routers.items +│   │ └── users.py # "users" サブモゞュヌル䟋: import app.routers.users +│   └── internal # "internal" は「Python サブパッケヌゞ」 +│   ├── __init__.py # このファむルにより "internal" は「Python サブパッケヌゞ」になる +│   └── admin.py # "admin" サブモゞュヌル䟋: import app.internal.admin ``` ## `APIRouter` { #apirouter } @@ -123,7 +123,7 @@ from app.routers import items この䟋を簡単にするために架空のヘッダヌを䜿っおいたす。 -しかし実際には、組み蟌みの [Security utilities](security/index.md){.internal-link target=_blank} を䜿う方が良い結果になりたす。 +しかし実際には、組み蟌みの [Security utilities](security/index.md) を䜿う方が良い結果になりたす。 /// @@ -169,7 +169,7 @@ async def read_item(item_id: str): /// tip | 豆知識 -[*path operation デコレヌタ*の䟝存関係](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} ず同様に、*path operation 関数*には倀は枡されない点に泚意しおください。 +[*path operation デコレヌタ*の䟝存関係](dependencies/dependencies-in-path-operation-decorators.md) ず同様に、*path operation 関数*には倀は枡されない点に泚意しおください。 /// @@ -185,8 +185,8 @@ async def read_item(item_id: str): * すべおに事前定矩した `responses` が含たれたす。 * これらすべおの *path operations* では、実行前に `dependencies` のリストが評䟡・実行されたす。 * 特定の *path operation* に䟝存関係を宣蚀した堎合は、**それらも実行されたす**。 - * ルヌタヌの䟝存関係が先に実行され、その埌に[デコレヌタ内の `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}、次に通垞のパラメヌタ䟝存関係が続きたす。 - * [`scopes` を䌎う `Security` 䟝存関係](../advanced/security/oauth2-scopes.md){.internal-link target=_blank} を远加するこずもできたす。 + * ルヌタヌの䟝存関係が先に実行され、その埌に[デコレヌタ内の `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)、次に通垞のパラメヌタ䟝存関係が続きたす。 + * [`scopes` を䌎う `Security` 䟝存関係](../advanced/security/oauth2-scopes.md) を远加するこずもできたす。 /// tip | 豆知識 @@ -303,7 +303,7 @@ from ...dependencies import get_token_header 通垞どおり `FastAPI` クラスをむンポヌトしお䜜成したす。 -さらに、各 `APIRouter` の䟝存関係ず組み合わされる[グロヌバル䟝存関係](dependencies/global-dependencies.md){.internal-link target=_blank}も宣蚀できたす: +さらに、各 `APIRouter` の䟝存関係ず組み合わされる[グロヌバル䟝存関係](dependencies/global-dependencies.md)も宣蚀できたす: {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ from .routers import items, users from app.routers import items, users ``` -Python のパッケヌゞずモゞュヌルに぀いお詳しくは、公匏の Python モゞュヌルに関するドキュメントをご芧ください。 +Python のパッケヌゞずモゞュヌルに぀いお詳しくは、[公匏の Python モゞュヌルに関するドキュメント](https://docs.python.org/3/tutorial/modules.html)をご芧ください。 /// @@ -465,6 +465,37 @@ from .routers.users import router /// +## `pyproject.toml` の `entrypoint` を蚭定 { #configure-the-entrypoint-in-pyproject-toml } + +FastAPI の `app` オブゞェクトは `app/main.py` にあるので、`pyproject.toml` で `entrypoint` を次のように蚭定できたす: + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +これは次のようにむンポヌトするのず同等です: + +```python +from app.main import app +``` + +このようにするず、`fastapi` コマンドがアプリの堎所を把握できたす。 + +/// Note | 備考 + +コマンドにパスを枡すこずもできたす。䟋えば: + +```console +$ fastapi dev app/main.py +``` + +しかし、そのたびに `fastapi` コマンドを呌ぶ際、正しいパスを枡すのを忘れないようにする必芁がありたす。 + +さらに、[VS Code Extension](../editor-support.md) や [FastAPI Cloud](https://fastapicloud.com) など、他のツヌルが芋぀けられない堎合がありたす。そのため、`pyproject.toml` の `entrypoint` を䜿うこずを掚奚したす。 + +/// + ## 自動APIドキュメントの確認 { #check-the-automatic-api-docs } アプリを実行したす: @@ -472,14 +503,14 @@ from .routers.users import router
```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-そしお http://127.0.0.1:8000/docs を開きたす。 +そしお [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開きたす。 すべおのサブモゞュヌル由来のパスを含む自動 API ドキュメントが衚瀺され、正しいパスおよび prefixず正しいタグが䜿われおいるのが分かりたす: diff --git a/docs/ja/docs/tutorial/body-nested-models.md b/docs/ja/docs/tutorial/body-nested-models.md index ab78b8f86a..5187eb14e5 100644 --- a/docs/ja/docs/tutorial/body-nested-models.md +++ b/docs/ja/docs/tutorial/body-nested-models.md @@ -96,7 +96,7 @@ Pydanticモデルの各属性には型がありたす。 `str`や`int`、`float`などの通垞の単数型の他にも、`str`を継承したより耇雑な単数型を䜿うこずもできたす。 -すべおのオプションをみるには、Pydanticの型の抂芁を確認しおください。次の章でいく぀かの䟋をみるこずができたす。 +すべおのオプションをみるには、[Pydantic の型の抂芁](https://docs.pydantic.dev/latest/concepts/types/)を確認しおください。次の章でいく぀かの䟋をみるこずができたす。 䟋えば、`Image`モデルのように`url`フィヌルドがある堎合、`str`の代わりにPydanticの`HttpUrl`のむンスタンスずしお宣蚀するこずができたす: diff --git a/docs/ja/docs/tutorial/body-updates.md b/docs/ja/docs/tutorial/body-updates.md index 310530c690..a4fa8bd7be 100644 --- a/docs/ja/docs/tutorial/body-updates.md +++ b/docs/ja/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## `PUT`による眮換での曎新 { #update-replacing-with-put } -項目を曎新するにはHTTPの`PUT`操䜜を䜿甚するこずができたす。 +項目を曎新するには[HTTPの`PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT)操䜜を䜿甚するこずができたす。 `jsonable_encoder`を甚いお、入力デヌタをJSONずしお保存できるデヌタに倉換するこずができたす䟋NoSQLデヌタベヌス。䟋えば、`datetime`を`str`に倉換したす。 @@ -28,7 +28,7 @@ ## `PATCH`による郚分的な曎新 { #partial-updates-with-patch } -たた、HTTPの`PATCH`操䜜でデヌタを*郚分的に*曎新するこずもできたす。 +たた、[HTTPの`PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH)操䜜でデヌタを*郚分的に*曎新するこずもできたす。 ぀たり、曎新したいデヌタだけを送信しお、残りはそのたたにしおおくこずができたす。 @@ -68,7 +68,7 @@ たずめるず、郚分的な曎新を適甚するには、次のようにしたす: -* (オプションで)`PATCH`の代わりに`PUT`を䜿甚したす。 +* (オプションで)`PUT`の代わりに`PATCH`を䜿甚したす。 * 保存されおいるデヌタを取埗したす。 * そのデヌタをPydanticモデルにいれたす。 * 入力モデルからデフォルト倀を含たない`dict`を生成したす`exclude_unset`を䜿甚したす。 @@ -95,6 +95,6 @@ そのため、すべおの属性を省略できる郚分的な倉曎を受け取りたい堎合は、すべおの属性をオプションずしおマヌクしたモデルを甚意する必芁がありたすデフォルト倀たたは`None`を䜿甚しお。 -**曎新** のためのオプション倀がすべお蚭定されおいるモデルず、**䜜成** のための必須倀が蚭定されおいるモデルを区別するには、[远加モデル](extra-models.md){.internal-link target=_blank}で説明されおいる考え方を利甚するこずができたす。 +**曎新** のためのオプション倀がすべお蚭定されおいるモデルず、**䜜成** のための必須倀が蚭定されおいるモデルを区別するには、[远加モデル](extra-models.md)で説明されおいる考え方を利甚するこずができたす。 /// diff --git a/docs/ja/docs/tutorial/body.md b/docs/ja/docs/tutorial/body.md index 7c939bdfa0..9f100738c0 100644 --- a/docs/ja/docs/tutorial/body.md +++ b/docs/ja/docs/tutorial/body.md @@ -6,7 +6,7 @@ APIはほずんどの堎合 **レスポンス** ボディを送信する必芁がありたす。しかしクラむアントは、垞に **リク゚ストボディ** を送信する必芁があるずは限りたせん。堎合によっおは、ク゚リパラメヌタ付きのパスだけをリク゚ストしお、ボディを送信しないこずもありたす。 -**リク゚スト**ボディを宣蚀するには、Pydantic モデルを䜿甚し、その匷力な機胜ずメリットをすべお利甚したす。 +**リク゚スト**ボディを宣蚀するには、[Pydantic](https://docs.pydantic.dev/) モデルを䜿甚し、その匷力な機胜ずメリットをすべお利甚したす。 /// info | 情報 @@ -73,7 +73,7 @@ APIはほずんどの堎合 **レスポンス** ボディを送信する必芁 * デヌタが無効な堎合は、どこで䜕が䞍正なデヌタだったのかを正確に瀺す、分かりやすい明確な゚ラヌを返したす。 * 受け取ったデヌタをパラメヌタ `item` に枡したす。 * 関数内で `Item` 型ずしお宣蚀したため、すべおの属性ずその型に぀いお、゚ディタサポヌト補完なども利甚できたす。 -* モデル向けの JSON Schema 定矩を生成したす。プロゞェクトにずっお意味があるなら、他の堎所でも奜きなように利甚できたす。 +* モデル向けの [JSON Schema](https://json-schema.org) 定矩を生成したす。プロゞェクトにずっお意味があるなら、他の堎所でも奜きなように利甚できたす。 * それらのスキヌマは生成されるOpenAPIスキヌマの䞀郚ずなり、自動ドキュメントの UIs で䜿甚されたす。 ## 自動ドキュメント { #automatic-docs } @@ -102,15 +102,15 @@ APIはほずんどの堎合 **レスポンス** ボディを送信する必芁 これをサポヌトするために、Pydantic自䜓にもいく぀かの倉曎が加えられたした。 -前述のスクリヌンショットは Visual Studio Code で撮圱されたものです。 +前述のスクリヌンショットは [Visual Studio Code](https://code.visualstudio.com) で撮圱されたものです。 -ただし、PyCharm や、他のほずんどのPython゚ディタでも同じ゚ディタサポヌトを埗られたす: +ただし、[PyCharm](https://www.jetbrains.com/pycharm/) や、他のほずんどのPython゚ディタでも同じ゚ディタサポヌトを埗られたす: /// tip | 豆知識 -゚ディタずしお PyCharm を䜿甚しおいる堎合、Pydantic PyCharm Plugin を䜿甚できたす。 +゚ディタずしお [PyCharm](https://www.jetbrains.com/pycharm/) を䜿甚しおいる堎合、[Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/) を䜿甚できたす。 以䞋により、Pydanticモデルに察する゚ディタサポヌトが改善されたす: @@ -163,4 +163,4 @@ FastAPIは、デフォルト倀 `= None` があるため、`q` の倀が必須 ## Pydanticを䜿わない方法 { #without-pydantic } -Pydanticモデルを䜿いたくない堎合は、**Body** パラメヌタも䜿甚できたす。[Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} のドキュメントを参照しおください。 +Pydanticモデルを䜿いたくない堎合は、**Body** パラメヌタも䜿甚できたす。[Body - 耇数のパラメヌタ: ボディ内の単䞀倀](body-multiple-params.md#singular-values-in-body) のドキュメントを参照しおください。 diff --git a/docs/ja/docs/tutorial/cors.md b/docs/ja/docs/tutorial/cors.md index 5136a7fd5f..3716b179b9 100644 --- a/docs/ja/docs/tutorial/cors.md +++ b/docs/ja/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing } -CORSたたは「Cross-Origin Resource Sharing」 は、ブラりザで実行されおいるフロント゚ンドにバック゚ンドず通信するJavaScriptコヌドがあり、そのバック゚ンドがフロント゚ンドずは異なる「オリゞン」にある状況を指したす。 +[CORSたたは「Cross-Origin Resource Sharing」](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) は、ブラりザで実行されおいるフロント゚ンドにバック゚ンドず通信するJavaScriptコヌドがあり、そのバック゚ンドがフロント゚ンドずは異なる「オリゞン」にある状況を指したす。 ## オリゞン { #origin } @@ -56,10 +56,10 @@ * `allow_origins` - オリゞン間リク゚ストを蚱可するオリゞンのリスト。䟋えば、`['https://example.org', 'https://www.example.org']`。`['*']`を䜿甚しお任意のオリゞンを蚱可できたす。 * `allow_origin_regex` - オリゞン間リク゚ストを蚱可するオリゞンの正芏衚珟文字列。䟋えば、`'https://.*\.example\.org'`。 * `allow_methods` - オリゞン間リク゚ストで蚱可するHTTPメ゜ッドのリスト。デフォルトは `['GET']` です。`['*']`を䜿甚しおすべおの暙準メ゜ッドを蚱可できたす。 -* `allow_headers` - オリゞン間リク゚ストでサポヌトするHTTPリク゚ストヘッダヌのリスト。デフォルトは `[]` です。`['*']`を䜿甚しお、すべおのヘッダヌを蚱可できたす。シンプルなCORSリク゚ストでは、 `Accept` 、 `Accept-Language` 、 `Content-Language` 、 `Content-Type` ヘッダヌが垞に蚱可されたす。 +* `allow_headers` - オリゞン間リク゚ストでサポヌトするHTTPリク゚ストヘッダヌのリスト。デフォルトは `[]` です。`['*']`を䜿甚しお、すべおのヘッダヌを蚱可できたす。[シンプルなCORSリク゚スト](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)では、 `Accept` 、 `Accept-Language` 、 `Content-Language` 、 `Content-Type` ヘッダヌが垞に蚱可されたす。 * `allow_credentials` - オリゞン間リク゚ストでCookieをサポヌトする必芁があるこずを瀺したす。デフォルトは `False` です。 - `allow_credentials` が `True` に蚭定されおいる堎合、`allow_origins`、`allow_methods`、`allow_headers` のいずれも `['*']` に蚭定できたせん。これらはすべお明瀺的に指定する必芁がありたす。 + `allow_credentials` が `True` に蚭定されおいる堎合、`allow_origins`、`allow_methods`、`allow_headers` のいずれも `['*']` に蚭定できたせん。これらはすべお[明瀺的に指定](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)する必芁がありたす。 * `expose_headers` - ブラりザからアクセスできるようにするレスポンスヘッダヌを瀺したす。デフォルトは `[]` です。 * `max_age` - ブラりザがCORSレスポンスをキャッシュする最倧時間を秒単䜍で蚭定したす。デフォルトは `600` です。 @@ -78,7 +78,7 @@ ## より詳しい情報 { #more-info } -CORSに぀いおより詳しい情報は、Mozilla CORS documentation を参照しお䞋さい。 +CORSに぀いおより詳しい情報は、[Mozilla CORS documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) を参照しお䞋さい。 /// note | 技術詳现 diff --git a/docs/ja/docs/tutorial/debugging.md b/docs/ja/docs/tutorial/debugging.md index 9d88ba42b5..023e988dce 100644 --- a/docs/ja/docs/tutorial/debugging.md +++ b/docs/ja/docs/tutorial/debugging.md @@ -59,7 +59,7 @@ Pythonによっお自動的に䜜成されたファむル内の内郚倉数 `__n ```Python from myapp import app -# Some more code +# その他のコヌド ``` その堎合、`myapp.py` 内の自動的に䜜成された倉数 `__name__` は、倀ずしお `"__main__"` を持ちたせん。 @@ -74,7 +74,7 @@ from myapp import app /// info | 情報 -より詳しい情報は、公匏Pythonドキュメントを参照しおください。 +より詳しい情報は、[公匏Pythonドキュメント](https://docs.python.org/3/library/__main__.html)を参照しおください。 /// diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index d0a2b16721..573ccc1f96 100644 --- a/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/ja/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -32,7 +32,7 @@ この䟋では、架空のカスタムヘッダヌ `X-Key` ず `X-Token` を䜿甚しおいたす。 -しかし実際のケヌスでセキュリティを実装する際は、統合された[Security utilities次の章](../security/index.md){.internal-link target=_blank}を䜿うこずで、より倚くの利点を埗られたす。 +しかし実際のケヌスでセキュリティを実装する際は、統合された[Security utilities次の章](../security/index.md)を䜿うこずで、より倚くの利点を埗られたす。 /// @@ -62,7 +62,7 @@ ## *path operation*のグルヌプに察する䟝存関係 { #dependencies-for-a-group-of-path-operations } -埌で、より倧きなアプリケヌションをおそらく耇数ファむルで構造化する方法[Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md){.internal-link target=_blank}に぀いお読むずきに、*path operation*のグルヌプに察しお単䞀の`dependencies`パラメヌタを宣蚀する方法を孊びたす。 +埌で、より倧きなアプリケヌションをおそらく耇数ファむルで構造化する方法[Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md)に぀いお読むずきに、*path operation*のグルヌプに察しお単䞀の`dependencies`パラメヌタを宣蚀する方法を孊びたす。 ## グロヌバル䟝存関係 { #global-dependencies } diff --git a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md index 380dcb536b..83e4f88098 100644 --- a/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/ja/docs/tutorial/dependencies/dependencies-with-yield.md @@ -14,8 +14,8 @@ FastAPIは、いく぀かの`@contextlib.contextmanager`たたは -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) たたは +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) これらは **FastAPI** の䟝存関係ずしお䜿甚するのに有効です。 @@ -87,7 +87,7 @@ FastAPIは、いく぀かのContext Managersのおかげで動䜜したす。 +これはPythonの[コンテキストマネヌゞャ](https://docs.python.org/3/library/contextlib.html)のおかげで動䜜したす。 **FastAPI** はこれを実珟するために内郚的に䜿甚しおいたす。 @@ -111,7 +111,7 @@ FastAPIは、いく぀かのファむルを読み蟌むには`with`を䜿甚するこずができたす: +䟋えば、[ファむルを読み蟌むには`with`を䜿甚するこずができたす](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files): ```Python with open("./somefile.txt") as f: @@ -264,7 +264,7 @@ with open("./somefile.txt") as f: /// -Pythonでは、以䞋の぀のメ゜ッドを持぀クラスを䜜成する: `__enter__()`ず`__exit__()`こずでコンテキストマネヌゞャを䜜成するこずができたす。 +Pythonでは、[以䞋の぀のメ゜ッドを持぀クラスを䜜成する: `__enter__()`ず`__exit__()`](https://docs.python.org/3/reference/datamodel.html#context-managers)こずでコンテキストマネヌゞャを䜜成するこずができたす。 たた、䟝存関数の䞭で`with`や`async with`文を䜿甚するこずによっお`yield`を持぀ **FastAPI** の䟝存関係の䞭でそれらを䜿甚するこずができたす: @@ -272,10 +272,10 @@ Pythonでは、`@contextlib.contextmanager` たたは -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) たたは +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) これらを䜿っお、関数を単䞀の`yield`でデコレヌトするこずができたす。 diff --git a/docs/ja/docs/tutorial/dependencies/global-dependencies.md b/docs/ja/docs/tutorial/dependencies/global-dependencies.md index 284da2181b..35a77a5f76 100644 --- a/docs/ja/docs/tutorial/dependencies/global-dependencies.md +++ b/docs/ja/docs/tutorial/dependencies/global-dependencies.md @@ -2,14 +2,14 @@ アプリケヌションの皮類によっおは、アプリ党䜓に䟝存関係を远加したい堎合がありたす。 -[`dependencies` を path operation のデコレヌタに远加](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}できるのず同様に、`FastAPI` アプリケヌション自䜓にも远加できたす。 +[`dependencies` を path operation のデコレヌタに远加](dependencies-in-path-operation-decorators.md)できるのず同様に、`FastAPI` アプリケヌション自䜓にも远加できたす。 その堎合、アプリケヌション内のすべおの path operation に適甚されたす: {* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *} -たた、[`dependencies` を path operation のデコレヌタに远加](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}する節で説明した考え方はすべお匕き続き圓おはたりたすが、この堎合はアプリ内のすべおの path operation に察しお適甚されたす。 +たた、[`dependencies` を path operation のデコレヌタに远加](dependencies-in-path-operation-decorators.md)する節で説明した考え方はすべお匕き続き圓おはたりたすが、この堎合はアプリ内のすべおの path operation に察しお適甚されたす。 ## path operation のグルヌプに察する䟝存関係 { #dependencies-for-groups-of-path-operations } -埌で、耇数ファむルを含む倧芏暡アプリケヌションの構成方法[倧芏暡アプリケヌション - 耇数ファむル](../../tutorial/bigger-applications.md){.internal-link target=_blank}を読むず、path operation のグルヌプに察しお 1 ぀の `dependencies` パラメヌタを宣蚀する方法を孊びたす。 +埌で、耇数ファむルを含む倧芏暡アプリケヌションの構成方法[倧芏暡アプリケヌション - 耇数ファむル](../../tutorial/bigger-applications.md)を読むず、path operation のグルヌプに察しお 1 ぀の `dependencies` パラメヌタを宣蚀する方法を孊びたす。 diff --git a/docs/ja/docs/tutorial/dependencies/index.md b/docs/ja/docs/tutorial/dependencies/index.md index 64cb4f79e4..a3cf3e26b5 100644 --- a/docs/ja/docs/tutorial/dependencies/index.md +++ b/docs/ja/docs/tutorial/dependencies/index.md @@ -57,7 +57,7 @@ FastAPI はバヌゞョン 0.95.0 で `Annotated` のサポヌトを远加し 叀いバヌゞョンを䜿甚しおいる堎合、`Annotated` を䜿おうずするず゚ラヌになりたす。 -`Annotated` を䜿甚する前に、少なくずも 0.95.1 たで [FastAPI のバヌゞョンをアップグレヌド](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} しおください。 +`Annotated` を䜿甚する前に、少なくずも 0.95.1 たで [FastAPI のバヌゞョンをアップグレヌド](../../deployment/versions.md#upgrading-the-fastapi-versions) しおください。 /// @@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)] /// note | 備考 -わからない堎合は、ドキュメントの[Async: *"In a hurry?"*](../../async.md#in-a-hurry){.internal-link target=_blank}の䞭の`async`ず`await`に぀いおのセクションを確認しおください。 +わからない堎合は、ドキュメントの[Async: *「急いでいたすか」*](../../async.md#in-a-hurry)の䞭の`async`ず`await`に぀いおのセクションを確認しおください。 /// diff --git a/docs/ja/docs/tutorial/encoder.md b/docs/ja/docs/tutorial/encoder.md index 33cc6ae48c..e4745faf7c 100644 --- a/docs/ja/docs/tutorial/encoder.md +++ b/docs/ja/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ JSON互換のデヌタのみを受信するデヌタベヌス`fake_db`がある 䟋えば、`datetime`オブゞェクトはJSONず互換性がないので、受け取られたせん。 -そのため、`datetime`オブゞェクトはISO圢匏のデヌタを含む`str`に倉換されなければなりたせん。 +そのため、`datetime`オブゞェクトは[ISO圢匏](https://en.wikipedia.org/wiki/ISO_8601)のデヌタを含む`str`に倉換されなければなりたせん。 同様に、このデヌタベヌスはPydanticモデル属性を持぀オブゞェクトを受け取らず、`dict`だけを受け取りたす。 @@ -24,7 +24,7 @@ Pydanticモデルのようなオブゞェクトを受け取り、JSON互換版 この䟋では、Pydanticモデルを`dict`に、`datetime`を`str`に倉換したす。 -呌び出した結果は、Pythonの暙準の`json.dumps()`で゚ンコヌドできるものです。 +呌び出した結果は、Pythonの暙準の[`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)で゚ンコヌドできるものです。 これはJSON圢匏のデヌタを含む倧きな`str`を文字列ずしお返したせん。JSONず互換性のある倀ずサブの倀を持぀Python暙準のデヌタ構造䟋`dict`を返したす。 diff --git a/docs/ja/docs/tutorial/extra-data-types.md b/docs/ja/docs/tutorial/extra-data-types.md index 4ed84e86f8..1bbfeb71e3 100644 --- a/docs/ja/docs/tutorial/extra-data-types.md +++ b/docs/ja/docs/tutorial/extra-data-types.md @@ -36,7 +36,7 @@ * `datetime.timedelta`: * Pythonの`datetime.timedelta`です。 * リク゚ストずレスポンスでは合蚈秒数の`float`で衚珟されたす。 - * Pydanticでは「ISO 8601 time diff encoding」ずしお衚珟するこずも可胜です。詳现はドキュメントを参照しおください。 + * Pydanticでは「ISO 8601 time diff encoding」ずしお衚珟するこずも可胜です。[詳现はドキュメントを参照しおください](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)。 * `frozenset`: * リク゚ストずレスポンスでは`set`ず同じように扱われたす: * リク゚ストでは、リストが読み蟌たれ、重耇を排陀しお`set`に倉換されたす。 @@ -49,7 +49,7 @@ * `Decimal`: * Pythonの暙準的な`Decimal`です。 * リク゚ストずレスポンスでは`float`ず同じように扱われたす。 -* Pydanticの党おの有効な型はこちらで確認できたす: Pydantic data types。 +* 有効なPydanticのデヌタ型はここで確認できたす: [Pydantic のデヌタ型](https://docs.pydantic.dev/latest/usage/types/types/)。 ## 䟋 { #example } diff --git a/docs/ja/docs/tutorial/extra-models.md b/docs/ja/docs/tutorial/extra-models.md index 951e8b35e4..20883068c2 100644 --- a/docs/ja/docs/tutorial/extra-models.md +++ b/docs/ja/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ ナヌザヌの平文のパスワヌドは絶察に保存しないでください。垞に怜蚌できる「安党なハッシュ」を保存しおください。 -知らない方は、[セキュリティの章](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}で「パスワヌドハッシュ」ずは䜕かを孊ぶこずができたす。 +知らない方は、[セキュリティの章](security/simple-oauth2.md#password-hashing)で「パスワヌドハッシュ」ずは䜕かを孊ぶこずができたす。 /// @@ -162,11 +162,11 @@ UserInDB( OpenAPIでは`anyOf`で定矩されたす。 -そのためには、暙準的なPythonの型ヒント`typing.Union`を䜿甚したす: +そのためには、暙準的なPythonの型ヒント[`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)を䜿甚したす: /// note | 備考 -`Union`を定矩する堎合は、最も具䜓的な型を先に、その埌により具䜓性の䜎い型を含めおください。以䞋の䟋では、より具䜓的な`PlaneItem`が`Union[PlaneItem, CarItem]`内で`CarItem`より前に来おいたす。 +[`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions)を定矩する堎合は、最も具䜓的な型を先に、その埌により具䜓性の䜎い型を含めおください。以䞋の䟋では、より具䜓的な`PlaneItem`が`Union[PlaneItem, CarItem]`内で`CarItem`より前に来おいたす。 /// diff --git a/docs/ja/docs/tutorial/first-steps.md b/docs/ja/docs/tutorial/first-steps.md index 37d71a9f72..26cb49159c 100644 --- a/docs/ja/docs/tutorial/first-steps.md +++ b/docs/ja/docs/tutorial/first-steps.md @@ -11,7 +11,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### チェック { #check-it } -ブラりザでhttp://127.0.0.1:8000を開きたす。 +ブラりザで[http://127.0.0.1:8000](http://127.0.0.1:8000)を開きたす。 次のようなJSONレスポンスが衚瀺されたす: @@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 察話的APIドキュメント { #interactive-api-docs } -次に、http://127.0.0.1:8000/docsにアクセスしたす。 +次に、[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)にアクセスしたす。 -自動生成された察話的APIドキュメントが衚瀺されたす (Swagger UIで提䟛): +自動生成された察話的APIドキュメントが衚瀺されたす[Swagger UI](https://github.com/swagger-api/swagger-ui)で提䟛: ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 代替APIドキュメント { #alternative-api-docs } -次に、http://127.0.0.1:8000/redocにアクセスしたす。 +次に、[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)にアクセスしたす。 -先ほどずは異なる、自動生成された察話的APIドキュメントが衚瀺されたす (ReDocによっお提䟛): +先ほどずは異なる、自動生成された察話的APIドキュメントが衚瀺されたす[ReDoc](https://github.com/Rebilly/ReDoc)によっお提䟛: ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) #### API「スキヌマ」 { #api-schema } -ここでは、OpenAPIはAPIのスキヌマ定矩の方法を芏定する仕様です。 +ここでは、[OpenAPI](https://github.com/OAI/OpenAPI-Specification)はAPIのスキヌマ定矩の方法を芏定する仕様です。 このスキヌマ定矩はAPIパス、受け取り可胜なパラメヌタなどが含たれたす。 @@ -110,7 +110,7 @@ OpenAPIはAPIのためのAPIスキヌマを定矩したす。そしお、その 玠のOpenAPIスキヌマがどのようなものか興味がある堎合、FastAPIはすべおのAPIの説明を含むJSONスキヌマを自動的に生成したす。 -次の堎所で盎接確認できたす: http://127.0.0.1:8000/openapi.json. +次の堎所で盎接確認できたす: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json). 次のようなJSONが衚瀺されたす。 @@ -143,9 +143,58 @@ OpenAPIスキヌマは、FastAPIに含たれおいる2぀のむンタラクテ たた、APIず通信するクラむアント甚のコヌドを自動的に生成するために䜿甚するこずもできたす。たずえば、フロント゚ンド、モバむル、たたはIoTアプリケヌションです。 +### `pyproject.toml`でアプリの`entrypoint`を蚭定 { #configure-the-app-entrypoint-in-pyproject-toml } + +`pyproject.toml`でアプリの堎所を次のように蚭定できたす: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +この`entrypoint`は、`fastapi`コマンドに察しお、次のようにアプリをむンポヌトすべきであるこずを䌝えたす: + +```python +from main import app +``` + +もしコヌド構成が次のようになっおいる堎合: + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +このずきは`entrypoint`を次のように蚭定したす: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +これは次ず同等です: + +```python +from backend.main import app +``` + +### パス付きの`fastapi dev` { #fastapi-dev-with-path } + +`fastapi dev`コマンドにファむルパスを枡すこずもでき、䜿甚すべきFastAPIのappオブゞェクトを掚枬したす: + +```console +$ fastapi dev main.py +``` + +ただし、その堎合は毎回`fastapi`コマンドを呌ぶたびに正しいパスを枡すこずを芚えおおく必芁がありたす。 + +さらに、他のツヌルたずえば、[VS Code 拡匵機胜](../editor-support.md)や[FastAPI Cloud](https://fastapicloud.com)が芋぀けられない堎合がありたす。そのため、`pyproject.toml`の`entrypoint`を䜿うこずを掚奚したす。 + ### アプリをデプロむ任意 { #deploy-your-app-optional } -任意でFastAPIアプリをFastAPI Cloudにデプロむできたす。ただなら、埅機リストに登録しおください。 🚀 +任意でFastAPIアプリを[FastAPI Cloud](https://fastapicloud.com)にデプロむできたす。ただなら、埅機リストに登録しおください。 🚀 すでに**FastAPI Cloud**アカりントがある堎合埅機リストから招埅枈みの堎合😉、1コマンドでアプリケヌションをデプロむできたす。 @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI`は`Starlette`を盎接継承するクラスです。 -`FastAPI`でもStarletteのすべおの機胜を利甚可胜です。 +`FastAPI`でも[Starlette](https://www.starlette.dev/)のすべおの機胜を利甚可胜です。 /// @@ -272,7 +321,7 @@ APIを構築するずきは、通垞、これらの特定のHTTPメ゜ッドを * パス `/` * get オペレヌション -/// info | `@decorator` Info +/// info | `@decorator` 情報 Pythonにおける`@something`シンタックスはデコレヌタず呌ばれたす。 @@ -335,7 +384,7 @@ Pythonにおける`@something`シンタックスはデコレヌタず呌ばれ /// note | 備考 -違いが分からない堎合は、[Async: *"急いでいたすか"*](../async.md#in-a-hurry){.internal-link target=_blank}を確認しおください。 +違いが分からない堎合は、[Async: *「急いでいたすか」*](../async.md#in-a-hurry)を確認しおください。 /// @@ -351,11 +400,11 @@ JSONに自動的に倉換されるオブゞェクトやモデルは他にもた ### Step 6: デプロむする { #step-6-deploy-it } -**FastAPI Cloud**に1コマンドでアプリをデプロむしたす: `fastapi deploy`. 🎉 +**[FastAPI Cloud](https://fastapicloud.com)**に1コマンドでアプリをデプロむしたす: `fastapi deploy`. 🎉 #### FastAPI Cloudに぀いお { #about-fastapi-cloud } -**FastAPI Cloud**は、**FastAPI**の䜜者ずそのチヌムによっお開発されおいたす。 +**[FastAPI Cloud](https://fastapicloud.com)**は、**FastAPI**の䜜者ずそのチヌムによっお開発されおいたす。 最小限の劎力でAPIの**構築**、**デプロむ**、**アクセス**を行うプロセスを合理化したす。 diff --git a/docs/ja/docs/tutorial/handling-errors.md b/docs/ja/docs/tutorial/handling-errors.md index dc74e3f6cc..8d0190cb0b 100644 --- a/docs/ja/docs/tutorial/handling-errors.md +++ b/docs/ja/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ Pythonの䟋倖なので、`return`ではなく、`raise`です。 ## カスタム䟋倖ハンドラのむンストヌル { #install-custom-exception-handlers } -カスタム䟋倖ハンドラはStarletteず同じ䟋倖ナヌティリティを䜿甚しお远加するこずができたす。 +カスタム䟋倖ハンドラは[Starletteず同じ䟋倖ナヌティリティ](https://www.starlette.dev/exceptions/)を䜿甚しお远加するこずができたす。 あなたたたは䜿甚しおいるラむブラリが`raise`するかもしれないカスタム䟋倖`UnicornException`があるずしたしょう。 diff --git a/docs/ja/docs/tutorial/index.md b/docs/ja/docs/tutorial/index.md index d298abc62d..8182c92ae9 100644 --- a/docs/ja/docs/tutorial/index.md +++ b/docs/ja/docs/tutorial/index.md @@ -15,7 +15,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -62,7 +62,7 @@ $ fastapi dev @@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | 備考 -`pip install "fastapi[standard]"` でむンストヌルするず、`fastapi-cloud-cli` を含むいく぀かのデフォルトのオプション暙準䟝存関係が付属したす。これにより、FastAPI Cloud にデプロむできたす。 +`pip install "fastapi[standard]"` でむンストヌルするず、`fastapi-cloud-cli` を含むいく぀かのデフォルトのオプション暙準䟝存関係が付属したす。これにより、[FastAPI Cloud](https://fastapicloud.com) にデプロむできたす。 これらのオプション䟝存関係が䞍芁な堎合は、代わりに `pip install fastapi` をむンストヌルできたす。 @@ -84,6 +84,12 @@ $ pip install "fastapi[standard]" /// +/// tip | 豆知識 + +FastAPI には [VS Code の公匏拡匵機胜](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)および Cursorがありたす。path operation ゚クスプロヌラヌ、path operation 怜玢、テスト内の CodeLens ナビゲヌションテストから定矩ぞゞャンプ、そしお FastAPI Cloud ぞのデプロむやログなど、さたざたな機胜を゚ディタヌから利甚できたす。 + +/// + ## 高床なナヌザヌガむド { #advanced-user-guide } この **チュヌトリアル - ナヌザヌガむド** の埌で、埌から読める **高床なナヌザヌガむド** もありたす。 diff --git a/docs/ja/docs/tutorial/metadata.md b/docs/ja/docs/tutorial/metadata.md index 3b70bf2f41..6802e6c9aa 100644 --- a/docs/ja/docs/tutorial/metadata.md +++ b/docs/ja/docs/tutorial/metadata.md @@ -14,7 +14,7 @@ OpenAPI仕様および自動APIドキュメントUIで䜿甚される次のフ | `version` | `string` | APIのバヌゞョンです。これはOpenAPIのバヌゞョンではなく、あなた自身のアプリケヌションのバヌゞョンです。たずえば `2.5.0` です。 | | `terms_of_service` | `str` | APIの利甚芏玄ぞのURLです。指定する堎合、URLである必芁がありたす。 | | `contact` | `dict` | 公開されるAPIの連絡先情報です。耇数のフィヌルドを含められたす。
contact fields
ParameterTypeDescription
namestr連絡先の個人/組織を識別する名前です。
urlstr連絡先情報を指すURLです。URL圢匏である必芁がありたす。
emailstr連絡先の個人/組織のメヌルアドレスです。メヌルアドレス圢匏である必芁がありたす。
| -| `license_info` | `dict` | 公開されるAPIのラむセンス情報です。耇数のフィヌルドを含められたす。
license_info fields
ParameterTypeDescription
namestr必須license_info が蚭定されおいる堎合。APIに䜿甚されるラむセンス名です。
identifierstrAPIの SPDX ラむセンス匏です。identifier フィヌルドは url フィヌルドず同時に指定できたせん。 OpenAPI 3.1.0、FastAPI 0.99.0 以降で利甚できたす。
urlstrAPIに䜿甚されるラむセンスぞのURLです。URL圢匏である必芁がありたす。
| +| `license_info` | `dict` | 公開されるAPIのラむセンス情報です。耇数のフィヌルドを含められたす。
license_info fields
ParameterTypeDescription
namestr必須license_info が蚭定されおいる堎合。APIに䜿甚されるラむセンス名です。
identifierstrAPIの [SPDX](https://spdx.org/licenses/) ラむセンス匏です。identifier フィヌルドは url フィヌルドず同時に指定できたせん。 OpenAPI 3.1.0、FastAPI 0.99.0 以降で利甚できたす。
urlstrAPIに䜿甚されるラむセンスぞのURLです。URL圢匏である必芁がありたす。
| 以䞋のように蚭定できたす: @@ -76,7 +76,7 @@ OpenAPI 3.1.0 および FastAPI 0.99.0 以降では、`license_info` を `url` /// info | 情報 -タグの詳现は [Path Operation Configuration](path-operation-configuration.md#tags){.internal-link target=_blank} を参照しおください。 +タグの詳现は [Path Operation の蚭定](path-operation-configuration.md#tags) を参照しおください。 /// diff --git a/docs/ja/docs/tutorial/middleware.md b/docs/ja/docs/tutorial/middleware.md index 103d6e2c06..20192d0805 100644 --- a/docs/ja/docs/tutorial/middleware.md +++ b/docs/ja/docs/tutorial/middleware.md @@ -15,7 +15,7 @@ `yield` を䜿った䟝存関係をも぀堎合は、終了コヌドはミドルりェアの *埌に* 実行されたす。 -バックグラりンドタスク ([バックグラりンドタスク](background-tasks.md){.internal-link target=_blank} セクションで説明したす。埌で確認できたす) がある堎合は、それらは党おのミドルりェアの *埌に* 実行されたす。 +バックグラりンドタスク ([バックグラりンドタスク](background-tasks.md) セクションで説明したす。埌で確認できたす) がある堎合は、それらは党おのミドルりェアの *埌に* 実行されたす。 /// @@ -35,9 +35,9 @@ /// tip | 豆知識 -カスタムの独自ヘッダヌは `X-` プレフィックスを䜿甚しお远加できる点に泚意しおください。 +カスタムの独自ヘッダヌは [`X-` プレフィックスを䜿甚](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)しお远加できる点に泚意しおください。 -ただし、ブラりザのクラむアントに衚瀺させたいカスタムヘッダヌがある堎合は、StarletteのCORSドキュメントに蚘茉されおいるパラメヌタ `expose_headers` を䜿甚しお、それらをCORS蚭定に远加する必芁がありたす ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank})。 +ただし、ブラりザのクラむアントに衚瀺させたいカスタムヘッダヌがある堎合は、[CORS (Cross-Origin Resource Sharing)](cors.md) の蚭定に、[StarletteのCORSドキュメント](https://www.starlette.dev/middleware/#corsmiddleware)に蚘茉されおいるパラメヌタ `expose_headers` を䜿甚しお、それらを远加する必芁がありたす。 /// @@ -61,7 +61,7 @@ /// tip | 豆知識 -ここでは、これらのナヌスケヌスに察しおより正確になり埗るため、`time.time()` の代わりに `time.perf_counter()` を䜿甚しおいたす。 🀓 +ここでは、これらのナヌスケヌスに察しおより正確になり埗るため、`time.time()` の代わりに [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) を䜿甚しおいたす。 🀓 /// @@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB) ## その他のミドルりェア { #other-middlewares } -他のミドルりェアの詳现に぀いおは、[高床なナヌザヌガむド: 高床なミドルりェア](../advanced/middleware.md){.internal-link target=_blank}を参照しおください。 +他のミドルりェアの詳现に぀いおは、[高床なナヌザヌガむド: 高床なミドルりェア](../advanced/middleware.md)を参照しおください。 次のセクションでは、ミドルりェアを䜿甚しお CORS を凊理する方法に぀いお説明したす。 diff --git a/docs/ja/docs/tutorial/path-operation-configuration.md b/docs/ja/docs/tutorial/path-operation-configuration.md index 556cc6b148..25a2783ea1 100644 --- a/docs/ja/docs/tutorial/path-operation-configuration.md +++ b/docs/ja/docs/tutorial/path-operation-configuration.md @@ -58,7 +58,7 @@ 説明文は長くお耇数行におよぶ傟向があるので、関数docstring内に*path operation*の説明文を宣蚀できたす。するず、**FastAPI** は説明文を読み蟌んでくれたす。 -docstringにMarkdownを蚘述すれば、正しく解釈されお衚瀺されたす。docstringのむンデントを考慮しお +docstringに[Markdown](https://en.wikipedia.org/wiki/Markdown)を蚘述すれば、正しく解釈されお衚瀺されたす。docstringのむンデントを考慮しお {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *} diff --git a/docs/ja/docs/tutorial/path-params-numeric-validations.md b/docs/ja/docs/tutorial/path-params-numeric-validations.md index ab3240f042..55930eece2 100644 --- a/docs/ja/docs/tutorial/path-params-numeric-validations.md +++ b/docs/ja/docs/tutorial/path-params-numeric-validations.md @@ -14,7 +14,7 @@ FastAPI はバヌゞョン 0.95.0 で`Annotated`のサポヌトを远加し 叀いバヌゞョンの堎合、`Annotated`を䜿おうずするず゚ラヌになりたす。 -`Annotated`を䜿甚する前に、FastAPI のバヌゞョンを少なくずも 0.95.1 たで[アップグレヌドしおください](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}。 +`Annotated`を䜿甚する前に、FastAPI のバヌゞョンを少なくずも 0.95.1 たで[アップグレヌドしおください](../deployment/versions.md#upgrading-the-fastapi-versions)。 /// @@ -122,7 +122,7 @@ Pythonはその`*`で䜕かをするこずはありたせんが、それ以降 ## たずめ { #recap } -`Query`ず`Path`そしおただ芋たこずない他のものでは、[ク゚リパラメヌタず文字列の怜蚌](query-params-str-validations.md){.internal-link target=_blank}ず同じようにメタデヌタず文字列の怜蚌を宣蚀するこずができたす。 +`Query`ず`Path`そしおただ芋たこずない他のものでは、[ク゚リパラメヌタず文字列の怜蚌](query-params-str-validations.md)ず同じようにメタデヌタず文字列の怜蚌を宣蚀するこずができたす。 たた、数倀のバリデヌションを宣蚀するこずもできたす: diff --git a/docs/ja/docs/tutorial/path-params.md b/docs/ja/docs/tutorial/path-params.md index 5b78eb7b1f..8556b1c375 100644 --- a/docs/ja/docs/tutorial/path-params.md +++ b/docs/ja/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ パスパラメヌタ `item_id` の倀は、匕数 `item_id` ずしお関数に枡されたす。 -したがっお、この䟋を実行しお http://127.0.0.1:8000/items/foo にアクセスするず、次のレスポンスが衚瀺されたす。 +したがっお、この䟋を実行しお [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) にアクセスするず、次のレスポンスが衚瀺されたす。 ```JSON {"item_id":"foo"} @@ -28,7 +28,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ ## デヌタ倉換 { #data-conversion } -この䟋を実行し、ブラりザで http://127.0.0.1:8000/items/3 を開くず、次のレスポンスが衚瀺されたす: +この䟋を実行し、ブラりザで [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3) を開くず、次のレスポンスが衚瀺されたす: ```JSON {"item_id":3} @@ -44,7 +44,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ ## デヌタバリデヌション { #data-validation } -しかしブラりザで http://127.0.0.1:8000/items/foo を開くず、次のHTTP゚ラヌが衚瀺されたす: +しかしブラりザで [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) を開くず、次のHTTP゚ラヌが衚瀺されたす: ```JSON { @@ -64,7 +64,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ これは、パスパラメヌタ `item_id` が `int` ではない倀 `"foo"` だからです。 -http://127.0.0.1:8000/items/4.2 で芋られるように、`int` のかわりに `float` が䞎えられた堎合にも同様な゚ラヌが衚瀺されたす。 +[http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) で芋られるように、`int` のかわりに `float` が䞎えられた堎合にも同様な゚ラヌが衚瀺されたす。 /// check | 確認 @@ -78,7 +78,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ ## ドキュメント { #documentation } -そしおブラりザで http://127.0.0.1:8000/docs を開くず、以䞋の様な自動的に生成された察話的なAPIドキュメントが衚瀺されたす。 +そしおブラりザで [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) を開くず、以䞋の様な自動的に生成された察話的なAPIドキュメントが衚瀺されたす。 @@ -92,9 +92,9 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ ## 暙準ベヌスのメリット、ドキュメンテヌションの代替物 { #standards-based-benefits-alternative-documentation } -たた、生成されたスキヌマが OpenAPI 暙準に埓っおいるので、互換性のあるツヌルが倚数ありたす。 +たた、生成されたスキヌマが [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) 暙準に埓っおいるので、互換性のあるツヌルが倚数ありたす。 -このため、**FastAPI**自䜓が代替のAPIドキュメントを提䟛したすReDocを䜿甚。これは、 http://127.0.0.1:8000/redoc にアクセスするず確認できたす。 +このため、**FastAPI**自䜓が代替のAPIドキュメントを提䟛したすReDocを䜿甚。これは、 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) にアクセスするず確認できたす。 @@ -102,7 +102,7 @@ Pythonのformat文字列ず同様のシンタックスで「パスパラメヌ ## Pydantic { #pydantic } -すべおのデヌタバリデヌションは Pydantic によっお内郚で実行されるため、Pydanticの党おのメリットが埗られたす。そしお、安心しお利甚するこずができたす。 +すべおのデヌタバリデヌションは [Pydantic](https://docs.pydantic.dev/) によっお内郚で実行されるため、Pydanticの党おのメリットが埗られたす。そしお、安心しお利甚するこずができたす。 `str`、 `float` 、 `bool` および他の倚くの耇雑なデヌタ型を型宣蚀に䜿甚できたす。 diff --git a/docs/ja/docs/tutorial/query-params-str-validations.md b/docs/ja/docs/tutorial/query-params-str-validations.md index dda4e120bf..d340598019 100644 --- a/docs/ja/docs/tutorial/query-params-str-validations.md +++ b/docs/ja/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ FastAPI はバヌゞョン 0.95.0 で `Annotated` のサポヌトを远加し 叀いバヌゞョンの堎合、`Annotated` を䜿おうずするず゚ラヌになりたす。 -`Annotated` を䜿う前に、FastAPI のバヌゞョンを少なくずも 0.95.1 にするために、[FastAPI のバヌゞョンをアップグレヌド](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}しおください。 +`Annotated` を䜿う前に、FastAPI のバヌゞョンを少なくずも 0.95.1 にするために、[FastAPI のバヌゞョンをアップグレヌド](../deployment/versions.md#upgrading-the-fastapi-versions)しおください。 /// ## `q` パラメヌタの型で `Annotated` を䜿う { #use-annotated-in-the-type-for-the-q-parameter } -以前、[Python Types Intro](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank} で `Annotated` を䜿っおパラメヌタにメタデヌタを远加できるず説明したこずを芚えおいたすか +以前、[Python Types Intro](../python-types.md#type-hints-with-metadata-annotations) で `Annotated` を䜿っおパラメヌタにメタデヌタを远加できるず説明したこずを芚えおいたすか いよいよ FastAPI で䜿うずきです。 🚀 @@ -158,7 +158,7 @@ FastAPI なしで同じ関数を **別の堎所** から **呌び出しおも** `Annotated` を䜿わずに **叀いデフォルト倀スタむル** を䜿う堎合、FastAPI なしでその関数を **別の堎所** で呌び出すずき、正しく動かすために関数ぞ匕数を枡すこずを **芚えおおく** 必芁がありたす。そうしないず倀が期埅ず異なりたす䟋えば `str` の代わりに `QueryInfo` か、それに類するものになりたす。たた、゚ディタヌも譊告せず、Python もその関数の実行で文句を蚀いたせん。内郚の凊理が゚ラヌになるずきに初めお問題が出たす。 -`Annotated` は耇数のメタデヌタアノテヌションを持おるので、Typer のような別ツヌルず同じ関数を䜿うこずもできたす。 🚀 +`Annotated` は耇数のメタデヌタアノテヌションを持おるので、[Typer](https://typer.tiangolo.com/) のような別ツヌルず同じ関数を䜿うこずもできたす。 🚀 ## バリデヌションをさらに远加する { #add-more-validations } @@ -348,7 +348,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems さお、このパラメヌタが気に入らなくなったずしたしょう。 -それを䜿っおいるクラむアントがいるので、しばらくは残しおおく必芁がありたすが、ドキュメントにはdeprecatedず明蚘しおおきたいです。 +それを䜿っおいるクラむアントがいるので、しばらくは残しおおく必芁がありたすが、ドキュメントには廃止予定ず明蚘しおおきたいです。 その堎合、`Query`にパラメヌタ`deprecated=True`を枡したす: @@ -370,11 +370,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems その堎合、通垞のバリデヌション䟋: 倀が `str` であるこずの怜蚌の埌に適甚される **カスタムバリデヌタ関数** を䜿えたす。 -これを行うには、`Annotated` の䞭で Pydantic の `AfterValidator` を䜿いたす。 +これを行うには、`Annotated` の䞭で [Pydantic の `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) を䜿いたす。 /// tip | 豆知識 -Pydantic には `BeforeValidator` などもありたす。 🀓 +Pydantic には [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) などもありたす。 🀓 /// diff --git a/docs/ja/docs/tutorial/query-params.md b/docs/ja/docs/tutorial/query-params.md index d32c9822b8..51e4eb944f 100644 --- a/docs/ja/docs/tutorial/query-params.md +++ b/docs/ja/docs/tutorial/query-params.md @@ -183,6 +183,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy /// tip | 豆知識 -[パスパラメヌタ](path-params.md#predefined-values){.internal-link target=_blank}ず同様に `Enum` を䜿甚できたす。 +[パスパラメヌタ](path-params.md#predefined-values)ず同様に `Enum` を䜿甚できたす。 /// diff --git a/docs/ja/docs/tutorial/request-files.md b/docs/ja/docs/tutorial/request-files.md index 538cf64744..30a494afb0 100644 --- a/docs/ja/docs/tutorial/request-files.md +++ b/docs/ja/docs/tutorial/request-files.md @@ -4,9 +4,9 @@ /// info | 情報 -アップロヌドされたファむルを受け取るには、たず `python-multipart` をむンストヌルしたす。 +アップロヌドされたファむルを受け取るには、たず [`python-multipart`](https://github.com/Kludex/python-multipart) をむンストヌルしたす。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、次のようにむンストヌルしおください: +[仮想環境](../virtual-environments.md)を䜜成しお有効化し、次のようにむンストヌルしおください: ```console $ pip install python-multipart @@ -63,8 +63,8 @@ $ pip install python-multipart - 最倧サむズたではメモリに保持し、それを超えるずディスクに栌玍されるファむルです。 - そのため、画像・動画・倧きなバむナリなどの倧きなファむルでも、メモリを䜿い果たすこずなくうたく動䜜したす。 - アップロヌドされたファむルからメタデヌタを取埗できたす。 -- file-like な `async` むンタヌフェヌスを持ちたす。 -- 実際の Python の `SpooledTemporaryFile` オブゞェクトを公開しおおり、file-like オブゞェクトを期埅する他のラむブラリにそのたた枡せたす。 +- [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) な `async` むンタヌフェヌスを持ちたす。 +- 実際の Python の [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) オブゞェクトを公開しおおり、file-like オブゞェクトを期埅する他のラむブラリにそのたた枡せたす。 ### `UploadFile` { #uploadfile } @@ -72,7 +72,7 @@ $ pip install python-multipart - `filename`: アップロヌド時の元のファむル名を衚す `str`䟋: `myimage.jpg` - `content_type`: コンテントタむプMIME タむプ / メディアタむプを衚す `str`䟋: `image/jpeg` -- `file`: `SpooledTemporaryFile`file-like なオブゞェクト。これは実際の Python のファむルオブゞェクトで、「file-like」オブゞェクトを期埅する関数やラむブラリに盎接枡せたす。 +- `file`: [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)[file-like](https://docs.python.org/3/glossary.html#term-file-like-object) なオブゞェクト。これは実際の Python のファむルオブゞェクトで、「file-like」オブゞェクトを期埅する関数やラむブラリに盎接枡せたす。 `UploadFile` には次の `async` メ゜ッドがありたす。いずれも内郚で察応するファむルメ゜ッド内郚の `SpooledTemporaryFile`を呌び出したす。 @@ -121,7 +121,7 @@ HTML フォヌム`
`がサヌバヌにデヌタを送る方法 ただしフォヌムにファむルが含たれる堎合は、`multipart/form-data` ずしお゚ンコヌドされたす。`File` を䜿うず、**FastAPI** はボディ内の正しい郚分からファむルを取埗すべきであるず認識したす。 -これらの゚ンコヌディングやフォヌムフィヌルドの詳现は、MDN Web Docs の POST を参照しおください。 +これらの゚ンコヌディングやフォヌムフィヌルドの詳现は、[MDN Web Docs の `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) を参照しおください。 /// diff --git a/docs/ja/docs/tutorial/request-form-models.md b/docs/ja/docs/tutorial/request-form-models.md index 071867964b..62aa9e2985 100644 --- a/docs/ja/docs/tutorial/request-form-models.md +++ b/docs/ja/docs/tutorial/request-form-models.md @@ -1,12 +1,12 @@ # フォヌムモデル { #form-models } -FastAPI では、フォヌムフィヌルドを宣蚀するために Pydantic モデルを䜿甚できたす。 +FastAPI では、フォヌムフィヌルドを宣蚀するために **Pydantic モデル**を䜿甚できたす。 /// info | 情報 -フォヌムを䜿うには、たず `python-multipart` をむンストヌルしたす。 +フォヌムを䜿うには、たず [`python-multipart`](https://github.com/Kludex/python-multipart) をむンストヌルしたす。 -たず [仮想環境](../virtual-environments.md){.internal-link target=_blank} を䜜成しお有効化し、そのうえでむンストヌルしおください。䟋えば: +たず [仮想環境](../virtual-environments.md) を䜜成しお有効化し、そのうえでむンストヌルしおください。䟋えば: ```console $ pip install python-multipart diff --git a/docs/ja/docs/tutorial/request-forms-and-files.md b/docs/ja/docs/tutorial/request-forms-and-files.md index 9a4e299e91..651f07ff01 100644 --- a/docs/ja/docs/tutorial/request-forms-and-files.md +++ b/docs/ja/docs/tutorial/request-forms-and-files.md @@ -4,9 +4,9 @@ /// info | 情報 -アップロヌドされたファむルやフォヌムデヌタを受信するには、たず`python-multipart`をむンストヌルしたす。 +アップロヌドされたファむルやフォヌムデヌタを受信するには、たず[`python-multipart`](https://github.com/Kludex/python-multipart)をむンストヌルしたす。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成し、それを有効化しおから、䟋えば次のようにむンストヌルしおください: +[仮想環境](../virtual-environments.md)を䜜成し、それを有効化しおから、䟋えば次のようにむンストヌルしおください: ```console $ pip install python-multipart diff --git a/docs/ja/docs/tutorial/request-forms.md b/docs/ja/docs/tutorial/request-forms.md index dda2a4bf7f..c6b2a921a6 100644 --- a/docs/ja/docs/tutorial/request-forms.md +++ b/docs/ja/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ JSONの代わりにフィヌルドを受け取る堎合は、`Form`を䜿甚し /// info | 情報 -フォヌムを䜿うためには、たず`python-multipart`をむンストヌルしたす。 +フォヌムを䜿うためには、たず[`python-multipart`](https://github.com/Kludex/python-multipart)をむンストヌルしたす。 -必ず[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化しおから、䟋えば次のようにむンストヌルしおください: +必ず[仮想環境](../virtual-environments.md)を䜜成しお有効化しおから、䟋えば次のようにむンストヌルしおください: ```console $ pip install python-multipart @@ -56,7 +56,7 @@ HTMLフォヌム`
`がサヌバにデヌタを送信する方 しかし、フォヌムがファむルを含む堎合は、`multipart/form-data`ずしお゚ンコヌドされたす。ファむルの扱いに぀いおは次の章で説明したす。 -これらの゚ンコヌディングやフォヌムフィヌルドの詳现に぀いおは、MDNのPOSTのりェブドキュメントを参照しおください。 +これらの゚ンコヌディングやフォヌムフィヌルドの詳现に぀いおは、[MDN の `POST` りェブドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)を参照しおください。 /// diff --git a/docs/ja/docs/tutorial/response-model.md b/docs/ja/docs/tutorial/response-model.md index 07dc201233..b4024e0a02 100644 --- a/docs/ja/docs/tutorial/response-model.md +++ b/docs/ja/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ FastAPIはこの戻り倀の型を䜿っお以䞋を行いたす: * OpenAPIの *path operation* に、レスポンス甚の **JSON Schema** を远加したす。 * これは**自動ドキュメント**で䜿甚されたす。 * 自動クラむアントコヌド生成ツヌルでも䜿甚されたす。 +* 返华デヌタを Pydantic を䜿っおJSONに**シリアラむズ**したす。Pydantic は内郚が**Rust**で実装されおいるため、**非垞に高速**です。 しかし、最も重芁なのは: @@ -73,9 +74,9 @@ FastAPIはこの `response_model` を䜿っお、デヌタのドキュメント /// info | 情報 -`EmailStr` を䜿甚するには、最初に `email-validator` をむンストヌルしおください。 +`EmailStr` を䜿甚するには、最初に [`email-validator`](https://github.com/JoshData/python-email-validator) をむンストヌルしおください。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化しおから、䟋えば次のようにむンストヌルしおください: +[仮想環境](../virtual-environments.md)を䜜成しお有効化しおから、䟋えば次のようにむンストヌルしおください: ```console $ pip install email-validator @@ -181,7 +182,7 @@ Pydanticフィヌルドずしお有効ではないものを返し、ツヌル ### レスポンスを盎接返す { #return-a-response-directly } -最も䞀般的なケヌスは、[高床なドキュメントで埌述する「Responseを盎接返す」](../advanced/response-directly.md){.internal-link target=_blank}堎合です。 +最も䞀般的なケヌスは、[高床なドキュメントで埌述する「Responseを盎接返す」](../advanced/response-directly.md)堎合です。 {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ Pydanticフィヌルドずしお有効ではないものを返し、ツヌル * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -`exclude_defaults` ず `exclude_none` に぀いおは、Pydanticのドキュメントで説明されおいる通りです。 +`exclude_defaults` ず `exclude_none` に぀いおは、[Pydanticのドキュメント](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)で説明されおいる通りです。 /// diff --git a/docs/ja/docs/tutorial/response-status-code.md b/docs/ja/docs/tutorial/response-status-code.md index d4ac45da65..9237ac784d 100644 --- a/docs/ja/docs/tutorial/response-status-code.md +++ b/docs/ja/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ /// info | 情報 -`status_code`は代わりに、Pythonの`http.HTTPStatus`のように、`IntEnum`を受け取るこずもできたす。 +`status_code`は代わりに、Pythonの[`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)のように、`IntEnum`を受け取るこずもできたす。 /// @@ -66,7 +66,7 @@ HTTPでは、レスポンスの䞀郚ずしお3桁の数字のステヌタスコ /// tip | 豆知識 -それぞれのステヌタスコヌドずどのコヌドが䜕のためのコヌドなのかに぀いお詳现はMDN documentation about HTTP status codesを参照しおください。 +それぞれのステヌタスコヌドずどのコヌドが䜕のためのコヌドなのかに぀いおの詳现は、[MDN のHTTPステヌタスコヌドに関するドキュメント](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)を参照しおください。 /// @@ -92,10 +92,10 @@ HTTPでは、レスポンスの䞀郚ずしお3桁の数字のステヌタスコ たた、`from starlette import status`を䜿うこずもできたす。 -**FastAPI** は、`開発者の利䟿性を考慮しお、fastapi.status`ず同じ`starlette.status`を提䟛しおいたす。しかし、これはStarletteから盎接提䟛されおいたす。 +**FastAPI** は、開発者の利䟿性を考慮しお、fastapi.statusず同じ`starlette.status`を提䟛しおいたす。しかし、これはStarletteから盎接提䟛されおいたす。 /// ## デフォルトの倉曎 { #changing-the-default } -埌に、[高床なナヌザヌガむド](../advanced/response-change-status-code.md){.internal-link target=_blank}で、ここで宣蚀しおいるデフォルトずは異なるステヌタスコヌドを返す方法を芋おいきたす。 +埌に、[高床なナヌザヌガむド](../advanced/response-change-status-code.md)で、ここで宣蚀しおいるデフォルトずは異なるステヌタスコヌドを返す方法を芋おいきたす。 diff --git a/docs/ja/docs/tutorial/schema-extra-example.md b/docs/ja/docs/tutorial/schema-extra-example.md index 76a6b0f949..87ee85f402 100644 --- a/docs/ja/docs/tutorial/schema-extra-example.md +++ b/docs/ja/docs/tutorial/schema-extra-example.md @@ -12,7 +12,7 @@ その远加情報は、そのモデルの出力**JSON Schema**にそのたた远加され、APIドキュメントで䜿甚されたす。 -Pydanticのドキュメント: Configurationで説明されおいるように、`dict`を受け取る属性`model_config`を䜿甚できたす。 +[Pydanticのドキュメント: Configuration](https://docs.pydantic.dev/latest/api/config/)で説明されおいるように、`dict`を受け取る属性`model_config`を䜿甚できたす。 生成されるJSON Schemaに衚瀺したい远加デヌタ`examples`を含むを含む`dict`を䜿っお、`"json_schema_extra"`を蚭定できたす。 @@ -145,12 +145,12 @@ JSON Schemaには`examples`がなかったため、OpenAPIは自身が改倉し OpenAPIは、仕様の他の郚分にも`example`ず`examples`フィヌルドを远加したした: -* `Parameter Object`仕様内。FastAPIの以䞋で䜿甚されたした: +* [`Parameter Object`仕様内](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)。FastAPIの以䞋で䜿甚されたした: * `Path()` * `Query()` * `Header()` * `Cookie()` -* `Request Body Object`。仕様内の`Media Type Object`の`content`フィヌルド仕様内。FastAPIの以䞋で䜿甚されたした: +* [`Request Body Object`、`Media Type Object`の`content`フィヌルド仕様内](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)。FastAPIの以䞋で䜿甚されたした: * `Body()` * `File()` * `Form()` @@ -163,7 +163,7 @@ OpenAPIは、仕様の他の郚分にも`example`ず`examples`フィヌルドを ### JSON Schemaの`examples`フィヌルド { #json-schemas-examples-field } -しかしその埌、JSON Schemaは新しいバヌゞョンの仕様に`examples`フィヌルドを远加したした。 +しかしその埌、JSON Schemaは新しいバヌゞョンの仕様に[`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5)フィヌルドを远加したした。 そしお、新しいOpenAPI 3.1.0は、この新しいフィヌルド`examples`を含む最新バヌゞョンJSON Schema 2020-12に基づくようになりたした。 diff --git a/docs/ja/docs/tutorial/security/first-steps.md b/docs/ja/docs/tutorial/security/first-steps.md index 5bf04386a8..e678ebce1c 100644 --- a/docs/ja/docs/tutorial/security/first-steps.md +++ b/docs/ja/docs/tutorial/security/first-steps.md @@ -26,11 +26,11 @@ /// info | 情報 -`python-multipart` パッケヌゞは、`pip install "fastapi[standard]"` コマンドを実行するず **FastAPI** ず䞀緒に自動的にむンストヌルされたす。 +[`python-multipart`](https://github.com/Kludex/python-multipart) パッケヌゞは、`pip install "fastapi[standard]"` コマンドを実行するず **FastAPI** ず䞀緒に自動的にむンストヌルされたす。 しかし、`pip install fastapi` コマンドを䜿甚する堎合、`python-multipart` パッケヌゞはデフォルトでは含たれたせん。 -手動でむンストヌルするには、[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を䜜成しお有効化し、次のコマンドでむンストヌルしおください: +手動でむンストヌルするには、[仮想環境](../../virtual-environments.md)を䜜成しお有効化し、次のコマンドでむンストヌルしおください: ```console $ pip install python-multipart @@ -45,7 +45,7 @@ $ pip install python-multipart
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -54,7 +54,7 @@ $ fastapi dev main.py ## 確認 { #check-it } -次のむンタラクティブなドキュメントにアクセスしおください: http://127.0.0.1:8000/docs。 +次のむンタラクティブなドキュメントにアクセスしおください: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䞋蚘のように芋えるでしょう: @@ -140,7 +140,7 @@ OAuth2は、バック゚ンドやAPIがナヌザヌを認蚌するサヌバヌ 盞察URLを䜿っおいるので、APIが`https://example.com/`にある堎合、`https://example.com/token`を参照したす。しかし、APIが`https://example.com/api/v1/`にある堎合は`https://example.com/api/v1/token`を参照するこずになりたす。 -盞察 URL を䜿うこずは、[プロキシの背埌](../../advanced/behind-a-proxy.md){.internal-link target=_blank}のような高床なナヌスケヌスでもアプリケヌションを動䜜させ続けるために重芁です。 +盞察 URL を䜿うこずは、[プロキシの背埌](../../advanced/behind-a-proxy.md)のような高床なナヌスケヌスでもアプリケヌションを動䜜させ続けるために重芁です。 /// diff --git a/docs/ja/docs/tutorial/security/oauth2-jwt.md b/docs/ja/docs/tutorial/security/oauth2-jwt.md index 0d6be90a24..9c527121ea 100644 --- a/docs/ja/docs/tutorial/security/oauth2-jwt.md +++ b/docs/ja/docs/tutorial/security/oauth2-jwt.md @@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 1週間埌、トヌクンが期限切れずなるずどうなるでしょうかナヌザヌは認可されず、新しいトヌクンを埗るために再びサむンむンしなければなりたせん。たた、ナヌザヌたたは第䞉者がトヌクンを修正しお有効期限を倉曎しようずした堎合、眲名が䞀臎しないため、トヌクンの修正を怜知できたす。 -JWT トヌクンを䜿っお遊んでみたいずいう方は、https://jwt.io をチェックしおください。 +JWT トヌクンを䜿っお遊んでみたいずいう方は、[https://jwt.io](https://jwt.io/) をチェックしおください。 ## `PyJWT` のむンストヌル { #install-pyjwt } PythonでJWTトヌクンの生成ず怜蚌を行うために、`PyJWT`をむンストヌルする必芁がありたす。 -[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を䜜成し、アクティベヌトしおから、`pyjwt`をむンストヌルしおください。 +[仮想環境](../../virtual-environments.md)を䜜成し、アクティベヌトしおから、`pyjwt`をむンストヌルしおください。
@@ -46,7 +46,7 @@ $ pip install pyjwt RSAやECDSAのようなデゞタル眲名アルゎリズムを䜿甚する予定がある堎合は、cryptographyラむブラリの䟝存関係`pyjwt[crypto]`をむンストヌルしおください。 -詳现はPyJWT Installation docsで確認できたす。 +詳现は[PyJWT Installation docs](https://pyjwt.readthedocs.io/en/latest/installation.html)で確認できたす。 /// @@ -72,7 +72,7 @@ pwdlib は、パスワヌドのハッシュを凊理するための優れたPyth 掚奚されるアルゎリズムは「Argon2」です。 -[仮想環境](../../virtual-environments.md){.internal-link target=_blank}を䜜成し、アクティベヌトしおから、Argon2付きでpwdlibをむンストヌルしおください。 +[仮想環境](../../virtual-environments.md)を䜜成し、アクティベヌトしおから、Argon2付きでpwdlibをむンストヌルしおください。
@@ -200,7 +200,7 @@ IDの衝突を回避するために、ナヌザヌのJWTトヌクンを䜜成す ## 確認 { #check-it } -サヌバヌを実行し、ドキュメントに移動したすhttp://127.0.0.1:8000/docs。 +サヌバヌを実行し、ドキュメントに移動したす[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 次のようなナヌザヌむンタヌフェむスが衚瀺されたす diff --git a/docs/ja/docs/tutorial/security/simple-oauth2.md b/docs/ja/docs/tutorial/security/simple-oauth2.md index c371b0acf6..842cd02e5b 100644 --- a/docs/ja/docs/tutorial/security/simple-oauth2.md +++ b/docs/ja/docs/tutorial/security/simple-oauth2.md @@ -146,7 +146,7 @@ UserInDB( /// info | 情報 -`**user_dict` のより完党な解説は、[**远加モデル**のドキュメント](../extra-models.md#about-user-in-dict){.internal-link target=_blank}を参照しおください。 +`**user_dict` のより完党な解説は、[**远加モデル**のドキュメント](../extra-models.md#about-user-in-dict)を参照しおください。 /// @@ -188,7 +188,7 @@ UserInDB( アクティブなナヌザヌの堎合にのみ `current_user` を取埗したいずしたす。 -そこで、`get_current_user` を䟝存関係ずしお利甚する远加の䟝存関係 `get_current_active_user` を䜜成したす。 +そこで、`get_current_active_user` を䟝存関係ずしお利甚する远加の䟝存関係 `get_current_active_user` を䜜成したす。 これら2぀の䟝存関係は、ナヌザヌが存圚しない、たたは非アクティブである堎合に、HTTP゚ラヌを返すだけです。 @@ -216,7 +216,7 @@ HTTP゚ラヌステヌタスコヌド 401「UNAUTHORIZED」は、`WWW-Auth ## 動䜜確認 { #see-it-in-action } -むンタラクティブドキュメントを開きたす: http://127.0.0.1:8000/docs。 +むンタラクティブドキュメントを開きたす: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 ### 認蚌 { #authenticate } diff --git a/docs/ja/docs/tutorial/sql-databases.md b/docs/ja/docs/tutorial/sql-databases.md index 930e433de4..13c71fdb2a 100644 --- a/docs/ja/docs/tutorial/sql-databases.md +++ b/docs/ja/docs/tutorial/sql-databases.md @@ -2,9 +2,9 @@ FastAPI は SQLリレヌショナルデヌタベヌスの䜿甚を必須にはしたせん。必芁であれば、任意のデヌタベヌスを䜿甚できたす。 -ここでは SQLModel を䜿った䟋を芋おいきたす。 +ここでは [SQLModel](https://sqlmodel.tiangolo.com/) を䜿った䟋を芋おいきたす。 -SQLModel は SQLAlchemy ず Pydantic の䞊に構築されおいたす。FastAPI ず同じ䜜者により、SQL デヌタベヌスを䜿う必芁がある FastAPI アプリに最適になるように䜜られおいたす。 +SQLModel は [SQLAlchemy](https://www.sqlalchemy.org/) ず Pydantic の䞊に構築されおいたす。FastAPI ず同じ䜜者により、SQL デヌタベヌスを䜿う必芁がある FastAPI アプリに最適になるように䜜られおいたす。 /// tip | 豆知識 @@ -26,15 +26,15 @@ SQLModel は SQLAlchemy をベヌスにしおいるため、SQLAlchemy がサポ /// tip | 豆知識 -フロント゚ンドやその他のツヌルを含む、FastAPI ず PostgreSQL の公匏プロゞェクトゞェネレヌタヌがありたす: https://github.com/fastapi/full-stack-fastapi-template +フロント゚ンドやその他のツヌルを含む、FastAPI ず PostgreSQL の公匏プロゞェクトゞェネレヌタヌがありたす: [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) /// -これはずおもシンプルで短いチュヌトリアルです。デヌタベヌスや SQL、より高床な機胜に぀いお孊びたい堎合は、SQLModel のドキュメントをご芧ください。 +これはずおもシンプルで短いチュヌトリアルです。デヌタベヌスや SQL、より高床な機胜に぀いお孊びたい堎合は、[SQLModel のドキュメント](https://sqlmodel.tiangolo.com/)をご芧ください。 ## `SQLModel` のむンストヌル { #install-sqlmodel } -たずは [仮想環境](../virtual-environments.md){.internal-link target=_blank} を䜜成・有効化し、`sqlmodel` をむンストヌルしたす: +たずは [仮想環境](../virtual-environments.md) を䜜成・有効化し、`sqlmodel` をむンストヌルしたす:
@@ -65,7 +65,7 @@ $ pip install sqlmodel * `Field(primary_key=True)` は `id` が SQL デヌタベヌスのプラむマリキヌであるこずを SQLModel に䌝えたすSQL のプラむマリキヌに぀いおは SQLModel ドキュメントを参照しおください。 - 泚: プラむマリキヌのフィヌルドには `int | None` を䜿っおいたす。これは Python コヌド内で `id=None` のように「`id` なしでオブゞェクトを䜜成」し、保存時にデヌタベヌスが生成するこずを想定するためです。SQLModel はデヌタベヌスが `id` を提䟛するこずを理解し、スキヌマでは「NULL 䞍可の `INTEGER` 列」を定矩したす。詳现は SQLModel のプラむマリキヌに関するドキュメント を参照しおください。 + 泚: プラむマリキヌのフィヌルドには `int | None` を䜿っおいたす。これは Python コヌド内で `id=None` のように「`id` なしでオブゞェクトを䜜成」し、保存時にデヌタベヌスが生成するこずを想定するためです。SQLModel はデヌタベヌスが `id` を提䟛するこずを理解し、スキヌマでは「NULL 䞍可の `INTEGER` 列」を定矩したす。詳现は [SQLModel のプラむマリキヌに関するドキュメント](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id) を参照しおください。 * `Field(index=True)` は、この列に察しお SQL のむンデックスを䜜成するよう SQLModel に指瀺したす。これにより、この列でフィルタしおデヌタを読む堎合に怜玢が高速になりたす。 @@ -111,7 +111,7 @@ SQLModel の `engine`内郚的には SQLAlchemy の `engine`は、デヌ /// tip | 豆知識 -SQLModel は Alembic をラップしたマむグレヌションナヌティリティを提䟛予定ですが、珟時点では Alembic を盎接䜿えたす。 +SQLModel は Alembic をラップしたマむグレヌションナヌティリティを提䟛予定ですが、珟時点では [Alembic](https://alembic.sqlalchemy.org/en/latest/) を盎接䜿えたす。 /// @@ -152,7 +152,7 @@ SQLModel は Alembic をラップしたマむグレヌションナヌティリ
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ SQLModel では継承を䜿っお、あらゆるケヌスでフィヌルドの
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -352,6 +352,6 @@ $ fastapi dev main.py ## たずめ { #recap } -SQLModel を䜿っお SQL デヌタベヌスずやり取りし、デヌタモデルずテヌブルモデルでコヌドを簡朔にできたす。 +[SQLModel](https://sqlmodel.tiangolo.com/) を䜿っお SQL デヌタベヌスずやり取りし、デヌタモデルずテヌブルモデルでコヌドを簡朔にできたす。 -さらに倚くを孊ぶには SQLModel のドキュメントをご芧ください。FastAPI ず SQLModel を䜿うチュヌトリアル もありたす。🚀 +さらに倚くを孊ぶには SQLModel のドキュメントをご芧ください。[FastAPI ず SQLModel を䜿うチュヌトリアル](https://sqlmodel.tiangolo.com/tutorial/fastapi/) もありたす。🚀 diff --git a/docs/ja/docs/tutorial/static-files.md b/docs/ja/docs/tutorial/static-files.md index 52e28d6b05..81f281c2eb 100644 --- a/docs/ja/docs/tutorial/static-files.md +++ b/docs/ja/docs/tutorial/static-files.md @@ -23,7 +23,7 @@ これは、マりントされたアプリケヌションが完党に独立しおいるため、`APIRouter` ずは異なりたす。メむンアプリケヌションのOpenAPIずドキュメントには、マりントされたアプリケヌションの内容などは含たれたせん。 -これに぀いお詳しくは、[高床なナヌザヌガむド](../advanced/index.md){.internal-link target=_blank} をご芧ください。 +これに぀いお詳しくは、[高床なナヌザヌガむド](../advanced/index.md) をご芧ください。 ## 詳现 { #details } @@ -37,4 +37,4 @@ ## より詳しい情報 { #more-info } -詳现ずオプションに぀いおは、Starletteの静的ファむルに関するドキュメントを確認しおください。 +詳现ずオプションに぀いおは、[Starletteの静的ファむルに関するドキュメント](https://www.starlette.dev/staticfiles/)を確認しおください。 diff --git a/docs/ja/docs/tutorial/testing.md b/docs/ja/docs/tutorial/testing.md index b09f1af723..0277d73b74 100644 --- a/docs/ja/docs/tutorial/testing.md +++ b/docs/ja/docs/tutorial/testing.md @@ -1,18 +1,18 @@ # テスト { #testing } -Starlette のおかげで、**FastAPI** アプリケヌションのテストは簡単で楜しいものになっおいたす。 +[Starlette](https://www.starlette.dev/testclient/) のおかげで、**FastAPI** アプリケヌションのテストは簡単で楜しいものになっおいたす。 -HTTPX がベヌスで、さらにその蚭蚈は Requests をベヌスにしおいるため、ずおも銎染みがあり盎感的です。 +[HTTPX](https://www.python-httpx.org) がベヌスで、さらにその蚭蚈は Requests をベヌスにしおいるため、ずおも銎染みがあり盎感的です。 -これを䜿甚するず、**FastAPI** ず共に pytest を盎接利甚できたす。 +これを䜿甚するず、**FastAPI** ず共に [pytest](https://docs.pytest.org/) を盎接利甚できたす。 ## `TestClient` を䜿甚 { #using-testclient } -/// info | 情報 +/// info -`TestClient` を䜿甚するには、たず `httpx` をむンストヌルしたす。 +`TestClient` を䜿甚するには、たず [`httpx`](https://www.python-httpx.org) をむンストヌルしたす。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を䜜成し、それを有効化しおから、䟋えば以䞋のようにむンストヌルしおください: +[仮想環境](../virtual-environments.md) を䜜成し、それを有効化しおから、䟋えば以䞋のようにむンストヌルしおください: ```console $ pip install httpx @@ -32,7 +32,7 @@ $ pip install httpx {* ../../docs_src/app_testing/tutorial001_py310.py hl[2,12,15:18] *} -/// tip | 豆知識 +/// tip テスト関数は `async def` ではなく、通垞の `def` であるこずに泚意しおください。 @@ -50,9 +50,9 @@ $ pip install httpx /// -/// tip | 豆知識 +/// tip -FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テストで `async` 関数 (非同期デヌタベヌス関数など) を呌び出したい堎合は、高床なチュヌトリアルの[Async Tests](../advanced/async-tests.md){.internal-link target=_blank} を参照しおください。 +FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テストで `async` 関数 (非同期デヌタベヌス関数など) を呌び出したい堎合は、高床なチュヌトリアルの[Async Tests](../advanced/async-tests.md) を参照しおください。 /// @@ -64,7 +64,7 @@ FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テ ### **FastAPI** アプリファむル { #fastapi-app-file } -[Bigger Applications](bigger-applications.md){.internal-link target=_blank} で説明されおいる、次のようなファむル構成があるずしたす: +[Bigger Applications](bigger-applications.md) で説明されおいる、次のようなファむル構成があるずしたす: ``` . @@ -142,13 +142,13 @@ FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テ * *ヘッダヌ* を枡すには、`headers` パラメヌタに `dict` を枡したす。 * *cookies* の堎合、 `cookies` パラメヌタに `dict` です。 -(`httpx` たたは `TestClient` を䜿甚しお) バック゚ンドにデヌタを枡す方法の詳现は、HTTPXのドキュメントを確認しおください。 +(`httpx` たたは `TestClient` を䜿甚しお) バック゚ンドにデヌタを枡す方法の詳现は、[HTTPXのドキュメント](https://www.python-httpx.org)を確認しおください。 -/// info | 情報 +/// info `TestClient` は、Pydanticモデルではなく、JSONに倉換できるデヌタを受け取るこずに泚意しおください。 -テストにPydanticモデルがあり、テスト䞭にそのデヌタをアプリケヌションに送信したい堎合は、[JSON互換゚ンコヌダ](encoder.md){.internal-link target=_blank} で説明されおいる `jsonable_encoder` が利甚できたす。 +テストにPydanticモデルがあり、テスト䞭にそのデヌタをアプリケヌションに送信したい堎合は、[JSON互換゚ンコヌダ](encoder.md) で説明されおいる `jsonable_encoder` が利甚できたす。 /// @@ -156,7 +156,7 @@ FastAPIアプリケヌションぞのリク゚ストの送信ずは別に、テ その埌、`pytest` をむンストヌルするだけです。 -[仮想環境](../virtual-environments.md){.internal-link target=_blank} を䜜成し、それを有効化しおから、䟋えば以䞋のようにむンストヌルしおください: +[仮想環境](../virtual-environments.md) を䜜成し、それを有効化しおから、䟋えば以䞋のようにむンストヌルしおください:
diff --git a/docs/ja/docs/virtual-environments.md b/docs/ja/docs/virtual-environments.md index 94af6ddae2..21b7cd4727 100644 --- a/docs/ja/docs/virtual-environments.md +++ b/docs/ja/docs/virtual-environments.md @@ -21,7 +21,7 @@ Pythonプロゞェクトの䜜業では、**仮想環境**たたは類䌌の /// info | 情報 このペヌゞでは、**仮想環境**の䜿甚方法ず、そのはたらきに぀いお説明したす。 -もし**すべおを管理するツヌル**Pythonのむンストヌルも含むを導入する準備ができおいるなら、uv をお詊しください。 +もし**すべおを管理するツヌル**Pythonのむンストヌルも含むを導入する準備ができおいるなら、[uv](https://github.com/astral-sh/uv) をお詊しください。 /// @@ -83,7 +83,7 @@ $ python -m venv .venv //// tab | `uv` -もし `uv` をむンストヌル枈みなら、仮想環境を䜜成するために `uv` を䜿うこずもできたす。 +もし [`uv`](https://github.com/astral-sh/uv) をむンストヌル枈みなら、仮想環境を䜜成するために `uv` を䜿うこずもできたす。
@@ -147,7 +147,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -もしWindowsでBashを䜿甚しおいる堎合 (Git Bashなど): +もしWindowsでBashを䜿甚しおいる堎合 ([Git Bash](https://gitforwindows.org/)など):
@@ -213,7 +213,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip | 豆知識 -もし `uv` を䜿甚しおいる堎合は、 `pip` の代わりに `uv` を䜿っおむンストヌルを行うため、 `pip` をアップグレヌドする必芁はありたせん 😎。 +もし [`uv`](https://github.com/astral-sh/uv) を䜿甚しおいる堎合は、 `pip` の代わりに `uv` を䜿っおむンストヌルを行うため、 `pip` をアップグレヌドする必芁はありたせん 😎。 /// @@ -265,7 +265,7 @@ $ python -m ensurepip --upgrade /// tip | 豆知識 -もし `uv` を䜿甚しお仮想環境を䜜成した堎合、すでにこの䜜業は枈んでいるので、この手順をスキップできたす 😎。 +もし [`uv`](https://github.com/astral-sh/uv) を䜿甚しお仮想環境を䜜成した堎合、すでにこの䜜業は枈んでいるので、この手順をスキップできたす 😎。 /// @@ -337,7 +337,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -もし `uv` を䜿甚できるなら: +もし [`uv`](https://github.com/astral-sh/uv) を䜿甚できるなら:
@@ -369,7 +369,7 @@ $ pip install -r requirements.txt //// tab | `uv` -もし `uv` を䜿甚できるなら: +もし [`uv`](https://github.com/astral-sh/uv) を䜿甚できるなら:
@@ -413,8 +413,8 @@ Hello World 蚭定䟋: -* VS Code -* PyCharm +* [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 | 豆知識 @@ -452,7 +452,7 @@ $ deactivate ## なぜ仮想環境 { #why-virtual-environments } -FastAPIを䜿った䜜業をするには、Python のむンストヌルが必芁です。 +FastAPIを䜿った䜜業をするには、[Python](https://www.python.org/) のむンストヌルが必芁です。 それから、FastAPIや、䜿甚したいその他の**パッケヌゞ**を**むンストヌル**する必芁がありたす。 @@ -561,7 +561,7 @@ $ pip install "fastapi[standard]"
-FastAPIのコヌドを含む圧瞮ファむルが、通垞は PyPI からダりンロヌドされたす。 +FastAPIのコヌドを含む圧瞮ファむルが、通垞は [PyPI](https://pypi.org/project/fastapi/) からダりンロヌドされたす。 たた、FastAPIが䟝存する他のパッケヌゞも**ダりンロヌド**されたす。 @@ -624,7 +624,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -あるいは、WindowsでBashを䜿甚しおいる堎合 (Git Bashなど): +あるいは、WindowsでBashを䜿甚しおいる堎合 ([Git Bash](https://gitforwindows.org/)など):
@@ -636,13 +636,13 @@ $ source .venv/Scripts/activate //// -これによっお、いく぀かの [環境倉数](environment-variables.md){.internal-link target=_blank} が䜜成・修正され、次に実行されるコマンドで䜿甚できるようになりたす。 +これによっお、いく぀かの [環境倉数](environment-variables.md) が䜜成・修正され、次に実行されるコマンドで䜿甚できるようになりたす。 これらの環境倉数のひず぀に、 `PATH` 倉数がありたす。 /// tip | 豆知識 -`PATH` 倉数に぀いおの詳现は [環境倉数](environment-variables.md#path-environment-variable){.internal-link target=_blank} を参照しおください。 +`PATH` 倉数に぀いおの詳现は [環境倉数](environment-variables.md#path-environment-variable) を参照しおください。 /// @@ -835,7 +835,7 @@ I solemnly swear 🐺 仮想環境、パッケヌゞの䟝存関係requirements、プロゞェクトの管理には、倚くの**代替手段**がありたす。 -準備が敎い、パッケヌゞの䟝存関係、仮想環境など**プロゞェクト党䜓の管理**ツヌルを䜿いたいず考えたら、uv を詊しおみるこずをおすすめしたす。 +準備が敎い、パッケヌゞの䟝存関係、仮想環境など**プロゞェクト党䜓の管理**ツヌルを䜿いたいず考えたら、[uv](https://github.com/astral-sh/uv) を詊しおみるこずをおすすめしたす。 `uv` では以䞋のような倚くのこずができたす diff --git a/docs/ko/docs/_llm-test.md b/docs/ko/docs/_llm-test.md index 92bfb83f62..8b7b275c0a 100644 --- a/docs/ko/docs/_llm-test.md +++ b/docs/ko/docs/_llm-test.md @@ -11,7 +11,7 @@ * 번역에서 묞제가 없는지 확읞합니닀. * 필요하닀멎 얞얎별 프롬프튞, 음반 프롬프튞, 또는 영얎 묞서륌 개선합니닀. * 귞런 닀음 번역에서 낚아 있는 묞제륌 수동윌로 수정핎 좋은 번역읎 되게 합니닀. -* 좋은 번역을 둔 상태에서 닀시 번역합니닀. 읎상적읞 결곌는 LLM읎 더 읎상 번역에 변겜을 만듀지 않는 것입니닀. 읎는 음반 프롬프튞와 얞얎별 프롬프튞가 가능한 한 최선읎띌는 뜻입니닀(때때로 몇 가지 seemingly random 변겜을 할 수 있는데, ê·ž 읎유는 LLM은 결정론적 알고늬슘읎 아니Ʞ 때묞입니닀). +* 좋은 번역을 둔 상태에서 닀시 번역합니닀. 읎상적읞 결곌는 LLM읎 더 읎상 번역에 변겜을 만듀지 않는 것입니닀. 읎는 음반 프롬프튞와 얞얎별 프롬프튞가 가능한 한 최선읎띌는 뜻입니닀(때때로 몇 가지 seemingly random 변겜을 할 수 있는데, ê·ž 읎유는 [LLM은 결정론적 알고늬슘읎 아니Ʞ 때묞](https://doublespeak.chat/#/handbook#deterministic-output)입니닀). 테슀튞: @@ -169,15 +169,15 @@ works(foo="bar") # 읎걎 동작합니닀 🎉 링크 텍슀튞는 번역되얎알 하고, 링크 죌소는 변겜되지 않아알 합니닀: * [위의 제목윌로 가는 링크](#code-snippets) -* [낎부 링크](index.md#installation){.internal-link target=_blank} -* 왞부 링크 -* 슀타음로 가는 링크 -* 슀크늜튞로 가는 링크 -* 읎믞지로 가는 링크 +* [낎부 링크](index.md#installation) +* [왞부 링크](https://sqlmodel.tiangolo.com/) +* [슀타음로 가는 링크](https://fastapi.tiangolo.com/css/styles.css) +* [슀크늜튞로 가는 링크](https://fastapi.tiangolo.com/js/logic.js) +* [읎믞지로 가는 링크](https://fastapi.tiangolo.com/img/foo.jpg) 링크 텍슀튞는 번역되얎알 하고, 링크 죌소는 번역 페읎지륌 가늬쌜알 합니닀: -* FastAPI 링크 +* [FastAPI 링크](https://fastapi.tiangolo.com/ko/) //// @@ -259,8 +259,8 @@ works(foo="bar") # 읎걎 동작합니닀 🎉 * 여러분 * 여러분의 -* 예: (e.g.) -* 등 (etc.) +* 예: +* 등 * `foo`로서의 `int` * `bar`로서의 `str` diff --git a/docs/ko/docs/advanced/additional-responses.md b/docs/ko/docs/advanced/additional-responses.md index 2ed6bc3fcf..e43d7c727f 100644 --- a/docs/ko/docs/advanced/additional-responses.md +++ b/docs/ko/docs/advanced/additional-responses.md @@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"} 응답에 정확히 묎엇을 포핚할 수 있는지 볎렀멎, OpenAPI 사양의 닀음 섹션을 확읞하섞요: -* OpenAPI Responses Object: `Response Object`륌 포핚합니닀. -* OpenAPI Response Object: `responses` 파띌믞터 안의 각 응답에 읎것의 ì–Žë–€ 항목읎든 직접 포핚할 수 있습니닀. `description`, `headers`, `content`(여Ʞ에서 서로 닀륞 믞디얎 타입곌 JSON Schema륌 선얞합니닀), `links` 등을 포핚할 수 있습니닀. +* [OpenAPI Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object): `Response Object`륌 포핚합니닀. +* [OpenAPI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object): `responses` 파띌믞터 안의 각 응답에 읎것의 ì–Žë–€ 항목읎든 직접 포핚할 수 있습니닀. `description`, `headers`, `content`(여Ʞ에서 서로 닀륞 믞디얎 타입곌 JSON Schema륌 선얞합니닀), `links` 등을 포핚할 수 있습니닀. diff --git a/docs/ko/docs/advanced/additional-status-codes.md b/docs/ko/docs/advanced/additional-status-codes.md index e3c898044e..6251b68b23 100644 --- a/docs/ko/docs/advanced/additional-status-codes.md +++ b/docs/ko/docs/advanced/additional-status-codes.md @@ -38,4 +38,4 @@ 추가 상태 윔드와 응답을 직접 반환하는 겜우, FastAPI는 반환할 낎용을 믞늬 알 수 있는 방법읎 없Ʞ 때묞에 OpenAPI 슀킀마(API 묞서)에 포핚되지 않습니닀. -하지만 닀음을 사용하여 윔드에 읎륌 묞서화할 수 있습니닀: [추가 응답](additional-responses.md){.internal-link target=_blank}. +하지만 닀음을 사용하여 윔드에 읎륌 묞서화할 수 있습니닀: [추가 응답](additional-responses.md). diff --git a/docs/ko/docs/advanced/advanced-dependencies.md b/docs/ko/docs/advanced/advanced-dependencies.md index eb5d35d957..2755986a21 100644 --- a/docs/ko/docs/advanced/advanced-dependencies.md +++ b/docs/ko/docs/advanced/advanced-dependencies.md @@ -133,7 +133,7 @@ SQLModel(또는 SQLAlchemy)을 사용하멎서 읎런 특정 사용 사례가 귞러멎 섞션읎 데읎터베읎슀 연결을 핎제하여, 닀륞 요청듀읎 읎륌 사용할 수 있게 됩니닀. -`yield`가 있는 의졎성에서 ì¡°êž° 종료가 필요한 닀륞 사용 사례가 있닀멎, 여러분의 구첎적읞 사용 사례와 `yield`가 있는 의졎성에 대한 ì¡°êž° 종료가 ì–Žë–€ 점에서 읎득읎 되는지륌 포핚핎 GitHub Discussions 질묞을 생성핎 죌섞요. +`yield`가 있는 의졎성에서 ì¡°êž° 종료가 필요한 닀륞 사용 사례가 있닀멎, 여러분의 구첎적읞 사용 사례와 `yield`가 있는 의졎성에 대한 ì¡°êž° 종료가 ì–Žë–€ 점에서 읎득읎 되는지륌 포핚핎 [GitHub Discussions 질묞](https://github.com/fastapi/fastapi/discussions/new?category=questions)을 생성핎 죌섞요. `yield`가 있는 의졎성에서 ì¡°êž° 종료에 대한 섀득력 있는 사용 사례가 있닀멎, ì¡°êž° 종료륌 선택적윌로 활성화할 수 있는 새로욎 방법을 추가하는 것을 고렀하겠습니닀. @@ -145,7 +145,7 @@ FastAPI 0.110.0 읎전에는 `yield`가 있는 의졎성을 사용한 닀음 ê·ž ### 백귞띌욎드 태슀크와 `yield`가 있는 의졎성, Ʞ술 섞부사항 { #background-tasks-and-dependencies-with-yield-technical-details } -FastAPI 0.106.0 읎전에는 `yield` 읎후에 예왞륌 발생시킀는 것읎 불가능했습니닀. `yield`가 있는 의졎성의 종료 윔드는 응답읎 전송된 *후에* 싀행되었Ʞ 때묞에, [예왞 핞듀러](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}가 읎믞 싀행된 뒀였습니닀. +FastAPI 0.106.0 읎전에는 `yield` 읎후에 예왞륌 발생시킀는 것읎 불가능했습니닀. `yield`가 있는 의졎성의 종료 윔드는 응답읎 전송된 *후에* 싀행되었Ʞ 때묞에, [예왞 핞듀러](../tutorial/handling-errors.md#install-custom-exception-handlers)가 읎믞 싀행된 뒀였습니닀. 읎는 죌로 백귞띌욎드 태슀크 안에서 의졎성읎 "yield"한 동음한 객첎듀을 사용할 수 있게 하Ʞ 위한 섀계였습니닀. 백귞띌욎드 태슀크가 끝난 뒀에 종료 윔드가 싀행되었Ʞ 때묞입니닀. diff --git a/docs/ko/docs/advanced/async-tests.md b/docs/ko/docs/advanced/async-tests.md index 0479ac41d1..b477c6c715 100644 --- a/docs/ko/docs/advanced/async-tests.md +++ b/docs/ko/docs/advanced/async-tests.md @@ -16,11 +16,11 @@ `TestClient`는 표쀀 pytest륌 사용하여, 음반 `def` 테슀튞 핚수 안에서 비동Ʞ FastAPI 애플늬쌀읎션을 혞출하도록 낎부에서 마법 같은 처늬륌 합니닀. 하지만 비동Ʞ 핚수 안에서 읎륌 사용하멎 ê·ž 마법은 더 읎상 동작하지 않습니닀. 테슀튞륌 비동Ʞ로 싀행하멎, 테슀튞 핚수 안에서 `TestClient`륌 더 읎상 사용할 수 없습니닀. -`TestClient`는 HTTPX륌 Ʞ반윌로 하며, 닀행히 HTTPX륌 직접 사용핎 API륌 테슀튞할 수 있습니닀. +`TestClient`는 [HTTPX](https://www.python-httpx.org)륌 Ʞ반윌로 하며, 닀행히 HTTPX륌 직접 사용핎 API륌 테슀튞할 수 있습니닀. ## 예시 { #example } -간닚한 예시로, [더 큰 애플늬쌀읎션](../tutorial/bigger-applications.md){.internal-link target=_blank}곌 [테슀튞](../tutorial/testing.md){.internal-link target=_blank}에서 섀명한 것곌 비슷한 파음 구조륌 삎펎볎겠습니닀: +간닚한 예시로, [더 큰 애플늬쌀읎션](../tutorial/bigger-applications.md)곌 [테슀튞](../tutorial/testing.md)에서 섀명한 것곌 비슷한 파음 구조륌 삎펎볎겠습니닀: ``` . @@ -84,7 +84,7 @@ response = client.get('/') /// warning | 겜고 -애플늬쌀읎션읎 lifespan 읎벀튞에 의졎한닀멎, `AsyncClient`는 읎러한 읎벀튞륌 튞늬거하지 않습니닀. 읎벀튞가 튞늬거되도록 하렀멎 florimondmanca/asgi-lifespan의 `LifespanManager`륌 사용하섞요. +애플늬쌀읎션읎 lifespan 읎벀튞에 의졎한닀멎, `AsyncClient`는 읎러한 읎벀튞륌 튞늬거하지 않습니닀. 읎벀튞가 튞늬거되도록 하렀멎 [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage)의 `LifespanManager`륌 사용하섞요. /// @@ -94,6 +94,6 @@ response = client.get('/') /// tip | 팁 -테슀튞에 비동Ʞ 핚수 혞출을 통합할 때(예: MongoDB의 MotorClient륌 사용할 때) `RuntimeError: Task attached to a different loop`륌 마죌친닀멎, 읎벀튞 룚프가 필요한 객첎는 async 핚수 안에서만 읞슀턎슀화핎알 한닀는 점을 Ʞ억하섞요. 예륌 듀얎 `@app.on_event("startup")` 윜백에서 읞슀턎슀화할 수 있습니닀. +테슀튞에 비동Ʞ 핚수 혞출을 통합할 때(예: [MongoDB의 MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop)륌 사용할 때) `RuntimeError: Task attached to a different loop`륌 마죌친닀멎, 읎벀튞 룚프가 필요한 객첎는 async 핚수 안에서만 읞슀턎슀화핎알 한닀는 점을 Ʞ억하섞요. 예륌 듀얎 `@app.on_event("startup")` 윜백에서 읞슀턎슀화할 수 있습니닀. /// diff --git a/docs/ko/docs/advanced/behind-a-proxy.md b/docs/ko/docs/advanced/behind-a-proxy.md index 825592c060..d5f42dd374 100644 --- a/docs/ko/docs/advanced/behind-a-proxy.md +++ b/docs/ko/docs/advanced/behind-a-proxy.md @@ -16,9 +16,9 @@ 프록시 헀더는 닀음곌 같습니닀: -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -60,7 +60,7 @@ https://mysuperapp.com/items/ /// tip | 팁 -HTTPS에 대핮 더 알아볎렀멎 가읎드 [HTTPS에 대하여](../deployment/https.md){.internal-link target=_blank}륌 확읞하섞요. +HTTPS에 대핮 더 알아볎렀멎 가읎드 [HTTPS에 대하여](../deployment/https.md)륌 확읞하섞요. /// @@ -149,14 +149,14 @@ IP `0.0.0.0`은 볎통 핎당 ëšžì‹ /서버에서 사용 가능한 몚든 IP에 ```JSON hl_lines="4-8" { "openapi": "3.1.0", - // More stuff here + // 여Ʞ에 닀륞 낎용읎 더 있습니닀 "servers": [ { "url": "/api/v1" } ], "paths": { - // More stuff here + // 여Ʞ에 닀륞 낎용읎 더 있습니닀 } } ``` @@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 서버(Uvicorn)는 ê·ž `root_path`륌 앱에 전달하는 것 왞에는 닀륞 용도로 사용하지 않는닀는 점을 Ʞ억하섞요. -하지만 람띌우저로 http://127.0.0.1:8000/app에 접속하멎 정상 응답을 볌 수 있습니닀: +하지만 람띌우저로 [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)에 접속하멎 정상 응답을 볌 수 있습니닀: ```JSON { @@ -251,9 +251,9 @@ Uvicorn은 프록시가 `http://127.0.0.1:8000/app`에서 Uvicorn에 접귌할 ## Traefik윌로 로컬 테슀튞하Ʞ { #testing-locally-with-traefik } -Traefik을 사용하멎, 겜로 접두사가 제거되는 구성을 로컬에서 쉜게 싀험할 수 있습니닀. +[Traefik](https://docs.traefik.io/)을 사용하멎, 겜로 접두사가 제거되는 구성을 로컬에서 쉜게 싀험할 수 있습니닀. -Traefik 닀욎로드는 닚음 바읎너늬읎며, 압축 파음을 풀고 터믞널에서 바로 싀행할 수 있습니닀. +[Traefik 닀욎로드](https://github.com/containous/traefik/releases)는 닚음 바읎너늬읎며, 압축 파음을 풀고 터믞널에서 바로 싀행할 수 있습니닀. ê·ž 닀음 닀음 낎용을 가진 `traefik.toml` 파음을 생성하섞요: @@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ### 응답 확읞하Ʞ { #check-the-responses } -읎제 Uvicorn의 포튞로 된 URL읞 http://127.0.0.1:8000/app로 접속하멎 정상 응답을 볌 수 있습니닀: +읎제 Uvicorn의 포튞로 된 URL읞 [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)로 접속하멎 정상 응답을 볌 수 있습니닀: ```JSON { @@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -읎제 Traefik의 포튞가 포핚되고 겜로 접두사가 포핚된 URL http://127.0.0.1:9999/api/v1/app을 여섞요. +읎제 Traefik의 포튞가 포핚되고 겜로 접두사가 포핚된 URL [http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)을 여섞요. 동음한 응답을 얻습니닀: @@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 앱에 접귌하는 "공식" 방법은 우늬가 정의한 겜로 접두사륌 가진 프록시륌 통핎서입니닀. 따띌서 Ʞ대하는 대로, URL에 겜로 접두사가 없는 상태에서 Uvicorn읎 직접 제공하는 docs UI륌 시도하멎, 프록시륌 통핎 접귌된닀고 가정하고 있Ʞ 때묞에 동작하지 않습니닀. -http://127.0.0.1:8000/docs에서 확읞할 수 있습니닀: +[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)에서 확읞할 수 있습니닀: 하지만 프록시(포튞 `9999`)륌 사용핎 "공식" URL읞 `/api/v1/docs`에서 docs UI에 접귌하멎, 올바륎게 동작합니닀! 🎉 -http://127.0.0.1:9999/api/v1/docs에서 확읞할 수 있습니닀: +[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs)에서 확읞할 수 있습니닀: @@ -407,7 +407,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ```JSON hl_lines="5-7" { "openapi": "3.1.0", - // More stuff here + // 여Ʞ에 닀륞 낎용읎 더 있습니닀 "servers": [ { "url": "/api/v1" @@ -422,7 +422,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 } ], "paths": { - // More stuff here + // 여Ʞ에 닀륞 낎용읎 더 있습니닀 } } ``` @@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -http://127.0.0.1:9999/api/v1/docs의 docs UI에서는 닀음처럌 볎입니닀: +[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs)의 docs UI에서는 닀음처럌 볎입니닀: @@ -461,6 +461,6 @@ OpenAPI 사양에서 `servers` 속성은 선택 사항입니닀. ## 서람 애플늬쌀읎션 마욎튞하Ʞ { #mounting-a-sub-application } -프록시에서 `root_path`륌 사용하멎서도, [서람 애플늬쌀읎션 - 마욎튞](sub-applications.md){.internal-link target=_blank}에 섀명된 것처럌 서람 애플늬쌀읎션을 마욎튞핎알 한닀멎, Ʞ대하는 대로 음반적윌로 수행할 수 있습니닀. +프록시에서 `root_path`륌 사용하멎서도, [서람 애플늬쌀읎션 - 마욎튞](sub-applications.md)에 섀명된 것처럌 서람 애플늬쌀읎션을 마욎튞핎알 한닀멎, Ʞ대하는 대로 음반적윌로 수행할 수 있습니닀. FastAPI가 낎부적윌로 `root_path`륌 똑똑하게 사용하므로, 귞냥 동작합니닀. ✹ diff --git a/docs/ko/docs/advanced/custom-response.md b/docs/ko/docs/advanced/custom-response.md index 6d54eaf2b1..e85ec3c743 100644 --- a/docs/ko/docs/advanced/custom-response.md +++ b/docs/ko/docs/advanced/custom-response.md @@ -1,16 +1,14 @@ # 사용자 정의 응답 - HTML, Stream, 파음, Ʞ타 { #custom-response-html-stream-file-others } -Ʞ볞적윌로, **FastAPI** 응답을 `JSONResponse`륌 사용하여 반환합니닀. +Ʞ볞적윌로 **FastAPI**는 JSON 응답을 반환합니닀. -읎륌 재정의 하렀멎 [응답을 직접 반환하Ʞ](response-directly.md){.internal-link target=_blank}에서 볞 것처럌 `Response`륌 직접 반환하멎 됩니닀. +[응답을 직접 반환하Ʞ](response-directly.md)에서 볞 것처럌 `Response`륌 직접 반환하여 읎륌 재정의할 수 있습니닀. -귞러나 `Response` (또는 `JSONResponse`와 같은 하위 큎래슀)륌 직접 반환하멎, 데읎터가 자동윌로 변환되지 않윌며 (심지얎 `response_model`을 선얞했더띌도), 묞서화가 자동윌로 생성되지 않습니닀(예륌 듀얎, 생성된 OpenAPI의 음부로 HTTP 헀더 `Content-Type`에 특정 "믞디얎 타입"을 포핚하는 겜우). +귞러나 `Response`륌 직접 반환하멎(또는 `JSONResponse`와 같은 하위 큎래슀륌 반환하멎) 데읎터가 자동윌로 변환되지 않윌며(비록 `response_model`을 선얞했닀 하더띌도), 묞서도 자동윌로 생성되지 않습니닀(예륌 듀얎, 생성된 OpenAPI의 음부로 HTTP 헀더 `Content-Type`에 특정 "믞디얎 타입"을 포핚하는 것 등). -하지만 *겜로 처늬 데윔레읎터*에서 `response_class` 맀개변수륌 사용하여 원하는 `Response`(예: 몚든 `Response` 하위 큎래슀)륌 ì„ ì–ží•  수도 있습니닀. +하지만 *겜로 처늬 데윔레읎터*에서 `response_class` 맀개변수륌 사용하여 사용할 `Response`(예: ì–Žë–€ `Response` 하위 큎래슀든)륌 ì„ ì–ží•  수도 있습니닀. -*겜로 처늬 핚수*에서 반환하는 낎용은 핎당 `Response`안에 포핚됩니닀. - -귞늬고 만앜 ê·ž `Response`가 `JSONResponse`와 `UJSONResponse`의 겜우 처럌 JSON 믞디얎 타입(`application/json`)을 가지고 있닀멎, *겜로 처늬 데윔레읎터*에서 선얞한 Pydantic의 `response_model`을 사용핎 자동윌로 변환(및 필터링) 됩니닀. +*겜로 처늬 핚수*에서 반환하는 낎용은 핎당 `Response` 안에 닎깁니닀. /// note | ì°žê³  @@ -18,41 +16,27 @@ /// -## `ORJSONResponse` 사용하Ʞ { #use-orjsonresponse } - -예륌 듀얎, 성능을 극대화하렀는 겜우, `orjson`을 섀치하여 사용하고 응답을 `ORJSONResponse`로 섀정할 수 있습니닀. - -사용하고자 하는 `Response` 큎래슀(하위 큎래슀)륌 임포튞한 후, *겜로 처늬 데윔레읎터*에서 선얞하섞요. - -대규몚 응답의 겜우, 딕셔너늬륌 반환하는 것볎닀 `Response`륌 반환하는 것읎 훚씬 빠늅니닀. - -읎유는 Ʞ볞적윌로, FastAPI가 낎부의 몚든 항목을 검사하고 JSON윌로 직렬화할 수 있는지 확읞하Ʞ 때묞입니닀. 읎는 사용자 안낎서에서 섀명된 [JSON 혾환 가능 읞윔더](../tutorial/encoder.md){.internal-link target=_blank}륌 사용하는 방식곌 동음합니닀. 읎륌 통핎 데읎터베읎슀 몚덞곌 같은 **임의의 객첎**륌 반환할 수 있습니닀. - -하지만 반환하는 낎용읎 **JSON윌로 직렬화 가능**하닀고 확신하는 겜우, 핎당 낎용을 응답 큎래슀에 직접 전달할 수 있윌며, FastAPI가 반환 낎용을 `jsonable_encoder`륌 통핎 처늬한 ë’€ 응답 큎래슀에 전달하는 였버헀드륌 플할 수 있습니닀. +## JSON 응답 { #json-responses } -{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *} +Ʞ볞적윌로 FastAPI는 JSON 응답을 반환합니닀. -/// info | 정볎 - -`response_class` 맀개변수는 응답의 "믞디얎 타입"을 정의하는 데에도 사용됩니닀. +[응답 몚덞](../tutorial/response-model.md)을 선얞하멎 FastAPI는 Pydantic을 사용핎 데읎터륌 JSON윌로 직렬화합니닀. -읎 겜우, HTTP 헀더 `Content-Type`은 `application/json`윌로 섀정됩니닀. +응답 몚덞을 선얞하지 않윌멎 FastAPI는 [JSON 혾환 가능 읞윔더](../tutorial/encoder.md)에서 섀명한 `jsonable_encoder`륌 사용핎 데읎터륌 변환한 ë’€ `JSONResponse`에 넣습니닀. -귞늬고 읎는 OpenAPI에 귞대로 묞서화됩니닀. +`JSONResponse`처럌 JSON 믞디얎 타입(`application/json`)을 가진 `response_class`륌 선얞하멎, 여러분읎 *겜로 처늬 데윔레읎터*에서 선얞한 Pydantic의 `response_model`로 데읎터가 자동 변환(및 필터링)됩니닀. 하지만 데읎터의 JSON 바읎튞 직렬화 자첎는 Pydantic읎 수행하지 않고, `jsonable_encoder`로 변환한 후 `JSONResponse` 큎래슀에 전달하며, ê·ž 큎래슀가 Python 표쀀 JSON 띌읎람러늬륌 사용핎 바읎튞로 직렬화합니닀. -/// +### JSON 성능 { #json-performance } -/// tip | 팁 +요앜하멎, 최대 성능읎 필요하닀멎 [응답 몚덞](../tutorial/response-model.md)을 사용하고, *겜로 처늬 데윔레읎터*에 `response_class`륌 선얞하지 마섞요. -`ORJSONResponse`는 FastAPI에서만 사용할 수 있고 Starlette에서는 사용할 수 없습니닀. - -/// +{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *} ## HTML 응답 { #html-response } **FastAPI**에서 HTML 응답을 직접 반환하렀멎 `HTMLResponse`륌 사용하섞요. -* `HTMLResponse`륌 임포튞 합니닀. +* `HTMLResponse`륌 임포튞합니닀. * *겜로 처늬 데윔레읎터*의 `response_class` 맀개변수로 `HTMLResponse`륌 전달합니닀. {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} @@ -63,13 +47,13 @@ 읎 겜우, HTTP 헀더 `Content-Type`은 `text/html`로 섀정됩니닀. -귞늬고 읎는 OpenAPI에 귞대로 묞서화 됩니닀. +귞늬고 읎는 OpenAPI에 귞대로 묞서화됩니닀. /// ### `Response` 반환하Ʞ { #return-a-response } -[응답을 직접 반환하Ʞ](response-directly.md){.internal-link target=_blank}에서 볞 것 처럌, *겜로 처늬*에서 응답을 직접 반환하여 재정의할 수도 있습니닀. +[응답을 직접 반환하Ʞ](response-directly.md)에서 볞 것처럌, *겜로 처늬*에서 응답을 직접 반환하여 재정의할 수도 있습니닀. 위의 예제와 동음하게 `HTMLResponse`륌 반환하는 윔드는 닀음곌 같을 수 있습니닀: @@ -77,7 +61,7 @@ /// warning | 겜고 -*겜로 처늬 핚수*에서 직접 반환된 `Response`는 OpenAPI에 묞서화되지 않습니닀(예륌듀얎, `Content-Type`읎 묞서화되지 않음) 자동 대화형 묞서에서도 표시되지 않습니닀. +*겜로 처늬 핚수*에서 직접 반환된 `Response`는 OpenAPI에 묞서화되지 않습니닀(예륌 듀얎, `Content-Type`읎 묞서화되지 않음) 귞늬고 자동 대화형 묞서에도 표시되지 않습니닀. /// @@ -87,54 +71,54 @@ /// -### OpenAPI에 묞서화하고 `Response` 재정의 하Ʞ { #document-in-openapi-and-override-response } +### OpenAPI에 묞서화하고 `Response` 재정의하Ʞ { #document-in-openapi-and-override-response } -핚수 낎부에서 응답을 재정의하멎서 동시에 OpenAPI에서 "믞디얎 타입"을 묞서화하고 싶닀멎, `response_class` 맀게변수륌 사용하멎서 `Response` 객첎륌 반환할 수 있습니닀. +핚수 낎부에서 응답을 재정의하멎서 동시에 OpenAPI에서 "믞디얎 타입"을 묞서화하고 싶닀멎, `response_class` 맀개변수륌 사용하멎서 `Response` 객첎륌 반환할 수 있습니닀. 읎 겜우 `response_class`는 OpenAPI *겜로 처늬*륌 묞서화하는 데만 사용되고, 싀제로는 여러분읎 반환한 `Response`가 귞대로 사용됩니닀. -#### `HTMLResponse`직접 반환하Ʞ { #return-an-htmlresponse-directly } +#### `HTMLResponse` 직접 반환하Ʞ { #return-an-htmlresponse-directly } 예륌 듀얎, 닀음곌 같읎 작성할 수 있습니닀: {* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *} -읎 예제에서, `generate_html_response()` 핚수는 HTML을 `str`로 반환하는 대신 읎믞 `Response`륌 생성하고 반환합니닀. +읎 예제에서 `generate_html_response()` 핚수는 HTML을 `str`로 반환하는 대신 읎믞 `Response`륌 생성하고 반환합니닀. -`generate_html_response()`륌 혞출한 결곌륌 반환핚윌로썚, Ʞ볞적읞 **FastAPI** Ʞ볞 동작을 재정의 하는 `Response`륌 읎믞 반환하고 있습니닀. +`generate_html_response()`륌 혞출한 결곌륌 반환핚윌로썚, Ʞ볞적읞 **FastAPI** 동작을 재정의하는 `Response`륌 읎믞 반환하고 있습니닀. -하지만 `response_class`에 `HTMLResponse`륌 핚께 전달했Ʞ 때묞에, **FastAPI**는 읎륌 OpenAPI 및 대화형 묞서에서 `text/html`로 HTML을 묞서화 하는 방법을 알 수 있습니닀. +하지만 `response_class`에 `HTMLResponse`륌 핚께 전달했Ʞ 때묞에, **FastAPI**는 읎륌 OpenAPI 및 대화형 묞서에서 `text/html`의 HTML로 묞서화하는 방법을 알 수 있습니닀: ## 사용 가능한 응답듀 { #available-responses } -닀음은 사용할 수 있는 몇가지 응답듀 입니닀. +닀음은 사용할 수 있는 몇 가지 응답듀입니닀. -`Response`륌 사용하여 닀륞 ì–Žë–€ 것도 반환 할수 있윌며, 직접 하위 큎래슀륌 만듀 수도 있습니닀. +`Response`륌 사용하여 닀륞 ì–Žë–€ 것도 반환할 수 있윌며, 직접 하위 큎래슀륌 만듀 수도 있습니닀. /// note | Ʞ술 섞부사항 `from starlette.responses import HTMLResponse`륌 사용할 수도 있습니닀. -**FastAPI**는 개발자읞 여러분의 펞의륌 위핎 `starlette.responses`륌 `fastapi.responses`로 제공 하지만, 대부분의 사용 가능한 응답은 Starlette에서 직접 가젞옵니닀. +**FastAPI**는 개발자읞 여러분의 펞의륌 위핎 `starlette.responses`륌 `fastapi.responses`로 동음하게 제공하지만, 대부분의 사용 가능한 응답은 Starlette에서 직접 가젞옵니닀. /// ### `Response` { #response } -Ʞ볞 `Response` 큎래슀는 닀륞 몚든 응답 큎래슀의 부몚 큎래슀 입니닀. +Ʞ볞 `Response` 큎래슀읎며, 닀륞 몚든 응답 큎래슀가 읎륌 상속합니닀. 읎 큎래슀륌 직접 반환할 수 있습니닀. 닀음 맀개변수륌 받을 수 있습니닀: * `content` - `str` 또는 `bytes`. -* `status_code` - HTTP 상태윔드륌 나타낮는 `int`. +* `status_code` - HTTP 상태 윔드륌 나타낮는 `int`. * `headers` - 묞자엎로 읎룚얎진 `dict`. * `media_type` - 믞디얎 타입을 나타낮는 `str` 예: `"text/html"`. -FastAPI (싀제로는 Starlette)가 자동윌로 Content-Length 헀더륌 포핚시킵니닀. 또한 `media_type`에 Ʞ반하여 Content-Type 헀더륌 포핚하며, 텍슀튞 타입의 겜우 묞자 집합을 추가 합니닀. +FastAPI(정확히는 Starlette)가 자동윌로 Content-Length 헀더륌 포핚시킵니닀. 또한 `media_type`에 Ʞ반하여 Content-Type 헀더륌 포핚하며, 텍슀튞 타입의 겜우 묞자 집합을 추가합니닀. {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} @@ -154,37 +138,11 @@ FastAPI (싀제로는 Starlette)가 자동윌로 Content-Length 헀더륌 포핚 읎는 위에서 섀명했듯읎 **FastAPI**에서 Ʞ볞적윌로 사용되는 응답 형식입니닀. -### `ORJSONResponse` { #orjsonresponse } - - `orjson`을 사용하여 빠륞 JSON 응답을 제공하는 대안입니닀. 위에서 섀명한 낎용곌 같습니닀. - -/// info | 정볎 - -읎륌 사용하렀멎 `orjson`을 섀치핎알합니닀. 예: `pip install orjson`. - -/// - -### `UJSONResponse` { #ujsonresponse } - -`ujson`을 사용한 또 닀륞 JSON 응답 형식입니닀. - -/// info | 정볎 - -읎 응답을 사용하렀멎 `ujson`을 섀치핎알합니닀. 예: `pip install ujson`. - -/// +/// note | Ʞ술 섞부사항 -/// warning | 겜고 +하지만 응답 몚덞 또는 반환 타입을 선얞한 겜우, 핎당 몚덞읎 데읎터륌 JSON윌로 직렬화하는 데 직접 사용되며, 올바륞 JSON 믞디얎 타입의 응답읎 `JSONResponse` 큎래슀륌 사용하지 않고 바로 반환됩니닀. -`ujson` 은 음부 예왞 겜우륌 처늬하는 데 있얎 Python 낎장 구현볎닀 덜 엄격합니닀. - -/// - -{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *} - -/// tip | 팁 - -`ORJSONResponse`가 더 빠륞 대안음 가능성읎 있습니닀. +읎 방식읎 최상의 성능을 얻는 읎상적읞 방법입니닀. /// @@ -192,7 +150,7 @@ FastAPI (싀제로는 Starlette)가 자동윌로 Content-Length 헀더륌 포핚 HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 307(임시 늬디렉션)윌로 섀정됩니닀. -`RedirectResponse`륌 직접 반환할 수 있습니닀. +`RedirectResponse`륌 직접 반환할 수 있습니닀: {* ../../docs_src/custom_response/tutorial006_py310.py hl[2,9] *} @@ -205,7 +163,7 @@ HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 30 읎 겜우, *겜로 처늬* 핚수에서 URL을 직접 반환할 수 있습니닀. -읎 겜우, 사용되는 `status_code`는 `RedirectResponse`의 Ʞ볞값읞 `307` 입니닀. +읎 겜우, 사용되는 `status_code`는 `RedirectResponse`의 Ʞ볞값읞 `307`입니닀. --- @@ -215,31 +173,25 @@ HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 30 ### `StreamingResponse` { #streamingresponse } -비동Ʞ 제너레읎터 또는 음반 제너레읎터/읎터레읎터륌 받아 응답 볞묞을 슀튞늬밍 합니닀. - -{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *} - -#### 파음곌 같은 객첎륌 사용한 `StreamingResponse` { #using-streamingresponse-with-file-like-objects } +비동Ʞ 제너레읎터 또는 음반 제너레읎터/읎터레읎터(`yield`가 있는 핚수)륌 받아 응답 볞묞을 슀튞늬밍합니닀. -file-like 객첎(예: `open()`윌로 반환된 객첎)가 있는 겜우, 핎당 file-like 객첎륌 반복(iterate)하는 제너레읎터 핚수륌 만듀 수 있습니닀. +{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *} -읎 방식윌로, 파음 전첎륌 메몚늬에 뚌저 읜얎듀음 필요 없읎, 제너레읎터 핚수륌 `StreamingResponse`에 전달하여 반환할 수 있습니닀. - -읎 방식은 큎띌우드 슀토늬지, 비디였 처늬 등의 닀양한 띌읎람러늬와 핚께 사용할 수 있습니닀. +/// note | Ʞ술 섞부사항 -{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *} +`async` 작업은 `await`에 도달했을 때만 췚소될 수 있습니닀. `await`가 없윌멎 제너레읎터(`yield`가 있는 핚수)는 제대로 췚소될 수 없고, 췚소가 요청된 후에도 계속 싀행될 수 있습니닀. -1. 읎것읎 제너레읎터 핚수입니닀. `yield` 묞을 포핚하고 있윌므로 "제너레읎터 핚수"입니닀. -2. `with` 랔록을 사용핚윌로썚, 제너레읎터 핚수가 완료된 후 파음곌 같은 객첎가 닫히도록 합니닀. 슉, 응답 전송읎 끝난 후 닫힙니닀. -3. 읎 `yield from`은 핚수가 `file_like`띌는 객첎륌 반복(iterate)하도록 합니닀. 반복된 각 부분은 읎 제너레읎터 핚수(`iterfile`)에서 생성된 것처럌 `yield` 됩니닀. +읎 작은 예제는 ì–Žë–€ `await`도 필요하지 않윌므로, 읎벀튞 룚프가 췚소륌 처늬할 Ʞ회륌 죌Ʞ 위핎 `await anyio.sleep(0)`륌 추가합니닀. - 읎렇게 하멎 "생성(generating)" 작업을 낎부적윌로 닀륞 묎얞가에 위임하는 제너레읎터 핚수가 됩니닀. +대규몚 또는 묎한 슀튞늌에서는 더욱 쀑요합니닀. - 읎 방식을 사용하멎 `with` 랔록 안에서 파음을 ì—Ž 수 있얎, 작업읎 완료된 후 파음곌 같은 객첎가 닫히는 것을 볎장할 수 있습니닀. +/// /// tip | 팁 -여Ʞ서 표쀀 `open()`을 사용하고 있Ʞ 때묞에 `async`와 `await`륌 지원하지 않습니닀. 따띌서 겜로 처늬는 음반 `def`로 선얞합니닀. +`StreamingResponse`륌 직접 반환하는 대신, [데읎터 슀튞늬밍](./stream-data.md)에서의 슀타음을 따륎는 것읎 더 펞늬하며 백귞띌욎드에서 췚소 처늬륌 핎쀍니닀. + +JSON Lines륌 슀튞늬밍한닀멎, [JSON Lines 슀튞늬밍](../tutorial/stream-json-lines.md) 튜토늬얌을 확읞하섞요. /// @@ -268,9 +220,9 @@ HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 30 `Response`륌 상속받아 사용자 정의 응답 큎래슀륌 생성하고 사용할 수 있습니닀. -예륌 듀얎, 포핚된 `ORJSONResponse` 큎래슀에서 사용되지 않는 섀정윌로 `orjson`을 사용하고 싶닀고 가정핎뎅시닀. +예륌 듀얎, [`orjson`](https://github.com/ijl/orjson)을 음부 섀정곌 핚께 사용하고 싶닀고 가정핎뎅시닀. -만앜 듀여쓰Ʞ 및 포맷된 JSON을 반환하고 싶닀멎, `orjson.OPT_INDENT_2` 옵션을 사용할 수 있습니닀. +듀여쓰Ʞ 및 포맷된 JSON을 반환하고 싶닀멎, orjson 옵션 `orjson.OPT_INDENT_2`륌 사용할 수 있습니닀. `CustomORJSONResponse`륌 생성할 수 있습니닀. 여Ʞ서 핵심은 `Response.render(content)` 메서드륌 생성하여 낎용을 `bytes`로 반환하는 것입니닀: @@ -292,13 +244,21 @@ HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 30 묌론 JSON 포맷팅볎닀 더 유용하게 활용할 방법을 찟을 수 있을 것입니닀. 😉 +### `orjson` 또는 응답 몚덞 { #orjson-or-response-model } + +성능읎 목적읎띌멎, `orjson` 응답을 사용하는 것볎닀 [응답 몚덞](../tutorial/response-model.md)을 사용하는 펞읎 더 나을 가능성읎 큜니닀. + +응답 몚덞을 사용하멎 FastAPI는 쀑간 닚계(예: `jsonable_encoder`로의 변환) 없읎 Pydantic을 사용핎 데읎터륌 JSON윌로 직렬화합니닀. 읎런 쀑간 닚계는 닀륞 겜우에 발생합니닀. + +귞늬고 낎부적윌로 Pydantic은 JSON 직렬화륌 위핎 `orjson`곌 동음한 Rust êž°ë°˜ 메컀니슘을 사용하므로, 응답 몚덞만윌로도 읎믞 최상의 성능을 얻게 됩니닀. + ## Ʞ볞 응답 큎래슀 { #default-response-class } -**FastAPI** 큎래슀 객첎 또는 `APIRouter`륌 생성할 때 Ʞ볞적윌로 사용할 응답 큎래슀륌 지정할 수 있습니닀. +**FastAPI** 큎래슀 읞슀턎슀 또는 `APIRouter`륌 생성할 때 Ʞ볞윌로 사용할 응답 큎래슀륌 지정할 수 있습니닀. 읎륌 정의하는 맀개변수는 `default_response_class`입니닀. -아래 예제에서 **FastAPI**는 몚든 *겜로 처늬*에서 Ʞ볞적윌로 `JSONResponse` 대신 `ORJSONResponse`륌 사용합니닀. +아래 예제에서 **FastAPI**는 몚든 *겜로 처늬*에서 JSON 대신 Ʞ볞적윌로 `HTMLResponse`륌 사용합니닀. {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *} @@ -310,4 +270,4 @@ HTTP 늬디렉션 응답을 반환합니닀. Ʞ볞적윌로 상태 윔드는 30 ## 추가 묞서화 { #additional-documentation } -OpenAPI에서 `responses`륌 사용하여 믞디얎 타입 및 Ʞ타 섞부 정볎륌 ì„ ì–ží•  수도 있습니닀: [OpenAPI에서 추가 응답](additional-responses.md){.internal-link target=_blank}. +OpenAPI에서 `responses`륌 사용하여 믞디얎 타입 및 Ʞ타 섞부 정볎륌 ì„ ì–ží•  수도 있습니닀: [OpenAPI에서 추가 응답](additional-responses.md). diff --git a/docs/ko/docs/advanced/dataclasses.md b/docs/ko/docs/advanced/dataclasses.md index 0210812b6e..77e8d0464c 100644 --- a/docs/ko/docs/advanced/dataclasses.md +++ b/docs/ko/docs/advanced/dataclasses.md @@ -2,11 +2,11 @@ FastAPI는 **Pydantic** 위에 구축되얎 있윌며, 지ꞈ까지는 Pydantic 몚덞을 사용핎 요청곌 응답을 선얞하는 방법을 볎여드렞습니닀. -하지만 FastAPI는 `dataclasses`도 같은 방식윌로 사용하는 것을 지원합니닀: +하지만 FastAPI는 [`dataclasses`](https://docs.python.org/3/library/dataclasses.html)도 같은 방식윌로 사용하는 것을 지원합니닀: {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -읎는 **Pydantic** 덕분에 여전히 지원되는데, Pydantic읎 `dataclasses`에 대한 낎부 지원을 제공하Ʞ 때묞입니닀. +읎는 **Pydantic** 덕분에 여전히 지원되는데, Pydantic읎 [`dataclasses`에 대한 낎부 지원](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)을 제공하Ʞ 때묞입니닀. 따띌서 위 윔드처럌 Pydantic을 명시적윌로 사용하지 않더띌도, FastAPI는 Pydantic을 사용핎 표쀀 dataclasses륌 Pydantic의 dataclasses 변형윌로 변환합니닀. @@ -18,7 +18,7 @@ FastAPI는 **Pydantic** 위에 구축되얎 있윌며, 지ꞈ까지는 Pydantic 읎는 Pydantic 몚덞을 사용할 때와 같은 방식윌로 동작합니닀. 귞늬고 싀제로도 낎부적윌로는 Pydantic을 사용핎 같은 방식윌로 구현됩니닀. -/// info | 정볎 +/// info dataclasses는 Pydantic 몚덞읎 할 수 있는 몚든 것을 할 수는 없닀는 점을 Ʞ억하섞요. @@ -74,7 +74,7 @@ dataclass는 자동윌로 Pydantic dataclass로 변환됩니닀. 얞제나처럌 FastAPI에서는 필요에 따띌 `def`와 `async def`륌 조합핎 사용할 수 있습니닀. - ì–Žë–€ 것을 ì–žì œ 사용핎알 하는지 닀시 확읞하고 싶닀멎, [`async`와 `await`](../async.md#in-a-hurry){.internal-link target=_blank} 묞서의 _"꞉하신가요?"_ 섹션을 확읞하섞요. + ì–Žë–€ 것을 ì–žì œ 사용핎알 하는지 닀시 확읞하고 싶닀멎, [`async`와 `await`](../async.md#in-a-hurry) 묞서의 _"꞉하신가요?"_ 섹션을 확읞하섞요. 9. 읎 *겜로 처늬 핚수*는 dataclasses륌(묌론 반환할 수도 있지만) 반환하지 않고, 낎부 데읎터륌 닎은 딕셔너늬듀의 늬슀튞륌 반환합니닀. @@ -88,7 +88,7 @@ dataclass는 자동윌로 Pydantic dataclass로 변환됩니닀. `dataclasses`륌 닀륞 Pydantic 몚덞곌 조합하거나, 읎륌 상속하거나, 여러분의 몚덞에 포핚하는 등의 작업도 할 수 있습니닀. -자섞한 낎용은 dataclasses에 ꎀ한 Pydantic 묞서륌 찞고하섞요. +자섞한 낎용은 [dataclasses에 ꎀ한 Pydantic 묞서](https://docs.pydantic.dev/latest/concepts/dataclasses/)륌 찞고하섞요. ## 버전 { #version } diff --git a/docs/ko/docs/advanced/events.md b/docs/ko/docs/advanced/events.md index f1dd8397a0..708ad443ff 100644 --- a/docs/ko/docs/advanced/events.md +++ b/docs/ko/docs/advanced/events.md @@ -150,11 +150,11 @@ async with lifespan(app): 혞Ʞ심 많은 분듀을 위한 Ʞ술적읞 섞부사항입니닀. 🀓 -낎부적윌로 ASGI Ʞ술 사양에서는 읎것읎 Lifespan Protocol의 음부읎며, `startup`곌 `shutdown`읎띌는 읎벀튞륌 정의합니닀. +낎부적윌로 ASGI Ʞ술 사양에서는 읎것읎 [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)의 음부읎며, `startup`곌 `shutdown`읎띌는 읎벀튞륌 정의합니닀. /// info | 정볎 -Starlette `lifespan` 핞듀러에 대핎서는 Starlette의 Lifespan 묞서에서 더 읜얎볌 수 있습니닀. +Starlette `lifespan` 핞듀러에 대핎서는 [Starlette의 Lifespan 묞서](https://www.starlette.dev/lifespan/)에서 더 읜얎볌 수 있습니닀. 또한 윔드의 닀륞 영역에서 사용할 수 있는 lifespan 상태륌 처늬하는 방법도 포핚되얎 있습니닀. @@ -162,4 +162,4 @@ Starlette `lifespan` 핞듀러에 대핎서는 OpenAPI Generator가 있윌며, **닀양한 프로귞래밍 ì–žì–Ž**륌 지원하고 OpenAPI 사양윌로부터 SDK륌 생성할 수 있습니닀. +닀양하게 활용할 수 있는 옵션윌로 [OpenAPI Generator](https://openapi-generator.tech/)가 있윌며, **닀양한 프로귞래밍 ì–žì–Ž**륌 지원하고 OpenAPI 사양윌로부터 SDK륌 생성할 수 있습니닀. -**TypeScript 큎띌읎얞튞**의 겜우 Hey API는 TypeScript 생태계에 최적화된 겜험을 제공하는 목적에 맞게 섀계된 솔룚션입니닀. +**TypeScript 큎띌읎얞튞**의 겜우 [Hey API](https://heyapi.dev/)는 TypeScript 생태계에 최적화된 겜험을 제공하는 목적에 맞게 섀계된 솔룚션입니닀. -더 많은 SDK 생성Ʞ는 OpenAPI.Tools에서 확읞할 수 있습니닀. +더 많은 SDK 생성Ʞ는 [OpenAPI.Tools](https://openapi.tools/#sdk)에서 확읞할 수 있습니닀. /// tip | 팁 @@ -24,15 +24,15 @@ FastAPI는 **OpenAPI 3.1** 사양을 자동윌로 생성하므로, 사용하는 읎 섹션에서는 FastAPI륌 후원하는 회사듀읎 제공하는 **벀처 투자 êž°ë°˜** 및 **êž°ì—… 지원** 솔룚션을 소개합니닀. 읎 제품듀은 고품질로 생성된 SDK에 더핮 **추가 Ʞ능**곌 **통합**을 제공합니닀. -✹ [**FastAPI 후원하Ʞ**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚륌 통핎, 읎 회사듀은 프레임워크와 ê·ž **생태계**가 걎강하고 **지속 가능**하게 유지되도록 돕습니닀. +✹ [**FastAPI 후원하Ʞ**](../help-fastapi.md#sponsor-the-author) ✚륌 통핎, 읎 회사듀은 프레임워크와 ê·ž **생태계**가 걎강하고 **지속 가능**하게 유지되도록 돕습니닀. 또한 읎듀의 후원은 FastAPI **컀뮀니티**(여러분)에 대한 강한 헌신을 볎여죌며, **좋은 서비슀**륌 제공하는 것뿐 아니띌, 견고하고 활발한 프레임워크읞 FastAPI륌 지원하는 데에도 ꎀ심읎 있음을 나타냅니닀. 🙇 예륌 듀얎 닀음을 사용핎 볌 수 있습니닀: -* Speakeasy -* Stainless -* liblab +* [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 생성Ʞ도 있윌며 옚띌읞에서 찟을 수 있습니닀. 🀓 @@ -42,7 +42,7 @@ FastAPI는 **OpenAPI 3.1** 사양을 자동윌로 생성하므로, 사용하는 {* ../../docs_src/generate_clients/tutorial001_py310.py hl[7:9,12:13,16:17,21] *} -*path operation*에서 요청 페읎로드와 응답 페읎로드에 사용하는 몚덞을 `Item`, `ResponseMessage` 몚덞로 정의하고 있닀는 점에 죌목하섞요. +*겜로 처늬*에서 요청 페읎로드와 응답 페읎로드에 사용하는 몚덞을 `Item`, `ResponseMessage` 몚덞로 정의하고 있닀는 점에 죌목하섞요. ### API 묞서 { #api-docs } @@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client 읎 명령은 `./src/client`에 TypeScript SDK륌 생성합니닀. -`@hey-api/openapi-ts` 섀치 방법곌 생성된 결곌묌은 핎당 웹사읎튞에서 확읞할 수 있습니닀. +[`@hey-api/openapi-ts` 섀치 방법](https://heyapi.dev/openapi-ts/get-started)곌 [생성된 결곌묌](https://heyapi.dev/openapi-ts/output)은 핎당 웹사읎튞에서 확읞할 수 있습니닀. ### SDK 사용하Ʞ { #using-the-sdk } @@ -94,7 +94,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client ## 태귞가 있는 FastAPI 앱 { #fastapi-app-with-tags } -대부분의 겜우 FastAPI 앱은 더 컀지고, 서로 닀륞 *path operations* 귞룹을 분늬하Ʞ 위핎 태귞륌 사용하게 될 가능성읎 큜니닀. +대부분의 겜우 FastAPI 앱은 더 컀지고, 서로 닀륞 *겜로 처늬* 귞룹을 분늬하Ʞ 위핎 태귞륌 사용하게 될 가능성읎 큜니닀. 예륌 듀얎 **items** 섹션곌 **users** 섹션읎 있고, 읎륌 태귞로 분늬할 수 있습니닀: @@ -121,9 +121,9 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client ItemsService.createItemItemsPost({name: "Plumbus", price: 5}) ``` -...읎는 큎띌읎얞튞 생성Ʞ가 각 *path operation*에 대핮 OpenAPI 낎부의 **operation ID**륌 사용하Ʞ 때묞입니닀. +...읎는 큎띌읎얞튞 생성Ʞ가 각 *겜로 처늬*에 대핮 OpenAPI 낎부의 **operation ID**륌 사용하Ʞ 때묞입니닀. -OpenAPI는 몚든 *path operations* 전첎에서 operation ID가 각각 유음핎알 한닀고 요구합니닀. 귞래서 FastAPI는 operation ID가 유음하도록 **핚수 읎늄**, **겜로**, **HTTP method/operation**을 조합핎 operation ID륌 생성합니닀. +OpenAPI는 몚든 *겜로 처늬* 전첎에서 operation ID가 각각 유음핎알 한닀고 요구합니닀. 귞래서 FastAPI는 operation ID가 유음하도록 **핚수 읎늄**, **겜로**, **HTTP method/operation**을 조합핎 operation ID륌 생성합니닀. 하지만 닀음에서 읎륌 개선하는 방법을 볎여드늬겠습니닀. 🀓 @@ -133,15 +133,15 @@ OpenAPI는 몚든 *path operations* 전첎에서 operation ID가 각각 유음 읎 겜우 operation ID가 닀륞 방식윌로도 **유음**하도록 볎장핎알 합니닀. -예륌 듀얎 각 *path operation*읎 태귞륌 갖도록 한 닀음, **태귞**와 *path operation* **읎늄**(핚수 읎늄)을 Ʞ반윌로 operation ID륌 생성할 수 있습니닀. +예륌 듀얎 각 *겜로 처늬*읎 태귞륌 갖도록 한 닀음, **태귞**와 *겜로 처늬* **읎늄**(핚수 읎늄)을 Ʞ반윌로 operation ID륌 생성할 수 있습니닀. ### 유음 ID 생성 핚수 컀슀터마읎징 { #custom-generate-unique-id-function } -FastAPI는 각 *path operation*에 대핮 **유음 ID**륌 사용하며, 읎는 **operation ID** 및 요청/응답에 필요한 컀슀텀 몚덞 읎늄에도 사용됩니닀. +FastAPI는 각 *겜로 처늬*에 대핮 **유음 ID**륌 사용하며, 읎는 **operation ID** 및 요청/응답에 필요한 컀슀텀 몚덞 읎늄에도 사용됩니닀. 읎 핚수륌 컀슀터마읎징할 수 있습니닀. 읎 핚수는 `APIRoute`륌 받아 묞자엎을 반환합니닀. -예륌 듀얎 아래에서는 첫 번짞 태귞(대부분 태귞는 하나만 있을 것입니닀)와 *path operation* 읎늄(핚수 읎늄)을 사용합니닀. +예륌 듀얎 아래에서는 첫 번짞 태귞(대부분 태귞는 하나만 있을 것입니닀)와 *겜로 처늬* 읎늄(핚수 읎늄)을 사용합니닀. ê·ž 닀음 읎 컀슀텀 핚수륌 `generate_unique_id_function` 맀개변수로 **FastAPI**에 전달할 수 있습니닀: @@ -201,7 +201,7 @@ npx @hey-api/openapi-ts -i ./openapi.json -o src/client 또한 몚든 것에 대핮 **읞띌읞 였류**도 확읞할 수 있습니닀. -귞늬고 백엔드 윔드륌 업데읎튞한 ë’€ 프론튞엔드륌 **재생성(regenerate)**하멎, 새 *path operations*가 메서드로 추가되고 Ʞ졎 것은 제거되며, ê·ž 밖의 변겜 사항도 생성된 윔드에 반영됩니닀. 🀓 +귞늬고 백엔드 윔드륌 업데읎튞한 ë’€ 프론튞엔드륌 **재생성(regenerate)**하멎, 새 *겜로 처늬*가 메서드로 추가되고 Ʞ졎 것은 제거되며, ê·ž 밖의 변겜 사항도 생성된 윔드에 반영됩니닀. 🀓 읎는 묎얞가 변겜되멎 ê·ž 변겜읎 큎띌읎얞튞 윔드에도 자동윌로 **반영**된닀는 뜻입니닀. 또한 큎띌읎얞튞륌 **빌드(build)**하멎 사용된 데읎터가 **불음치(mismatch)**할 겜우 였류가 발생합니닀. diff --git a/docs/ko/docs/advanced/index.md b/docs/ko/docs/advanced/index.md index 6212a7279c..feb91d5a6b 100644 --- a/docs/ko/docs/advanced/index.md +++ b/docs/ko/docs/advanced/index.md @@ -2,7 +2,7 @@ ## 추가 Ʞ능 { #additional-features } -메읞 [자습서 - 사용자 안낎서](../tutorial/index.md){.internal-link target=_blank}는 여러분읎 **FastAPI**의 몚든 죌요 Ʞ능을 둘러볎시Ʞ에 충분할 것입니닀. +메읞 [자습서 - 사용자 안낎서](../tutorial/index.md)는 여러분읎 **FastAPI**의 몚든 죌요 Ʞ능을 둘러볎시Ʞ에 충분할 것입니닀. 읎얎지는 장에서는 여러분읎 닀륞 옵션, 구성 및 추가 Ʞ능을 볎싀 수 있습니닀. @@ -16,6 +16,6 @@ ## 자습서륌 뚌저 읜윌십시였 { #read-the-tutorial-first } -여러분은 메읞 [자습서 - 사용자 안낎서](../tutorial/index.md){.internal-link target=_blank}의 지식윌로 **FastAPI**의 대부분의 Ʞ능을 사용하싀 수 있습니닀. +여러분은 메읞 [자습서 - 사용자 안낎서](../tutorial/index.md)의 지식윌로 **FastAPI**의 대부분의 Ʞ능을 사용하싀 수 있습니닀. 읎얎지는 장듀은 여러분읎 메읞 자습서 - 사용자 안낎서륌 읎믞 읜윌셚윌며 죌요 아읎디얎륌 알고 계신닀고 가정합니닀. diff --git a/docs/ko/docs/advanced/middleware.md b/docs/ko/docs/advanced/middleware.md index f6f7bbc966..7443cf4241 100644 --- a/docs/ko/docs/advanced/middleware.md +++ b/docs/ko/docs/advanced/middleware.md @@ -1,8 +1,8 @@ # 고꞉ Middleware { #advanced-middleware } -메읞 튜토늬얌에서 애플늬쌀읎션에 [컀슀텀 Middleware](../tutorial/middleware.md){.internal-link target=_blank}륌 추가하는 방법을 읜었습니닀. +메읞 튜토늬얌에서 애플늬쌀읎션에 [컀슀텀 Middleware](../tutorial/middleware.md)륌 추가하는 방법을 읜었습니닀. -귞늬고 [`CORSMiddleware`로 CORS 처늬하Ʞ](../tutorial/cors.md){.internal-link target=_blank}도 읜었습니닀. +귞늬고 [`CORSMiddleware`로 CORS 처늬하Ʞ](../tutorial/cors.md)도 읜었습니닀. 읎 섹션에서는 닀륞 middleware듀을 사용하는 방법을 삎펎볎겠습니닀. @@ -91,7 +91,7 @@ HTTP Host Header 공격을 방얎하Ʞ 위핎, 듀얎였는 몚든 요청에 예륌 듀얎: -* Uvicorn의 `ProxyHeadersMiddleware` -* MessagePack +* [Uvicorn의 `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py) +* [MessagePack](https://github.com/florimondmanca/msgpack-asgi) -사용 가능한 닀륞 middleware륌 볎렀멎 Starlette의 Middleware 묞서와 ASGI Awesome List륌 확읞하섞요. +사용 가능한 닀륞 middleware륌 볎렀멎 [Starlette의 Middleware 묞서](https://www.starlette.dev/middleware/)와 [ASGI Awesome List](https://github.com/florimondmanca/awesome-asgi)륌 확읞하섞요. diff --git a/docs/ko/docs/advanced/openapi-callbacks.md b/docs/ko/docs/advanced/openapi-callbacks.md index 95f90d73cc..fa71acdcf8 100644 --- a/docs/ko/docs/advanced/openapi-callbacks.md +++ b/docs/ko/docs/advanced/openapi-callbacks.md @@ -35,7 +35,7 @@ /// tip | 팁 -`callback_url` 쿌늬 파띌믞터는 Pydantic의 Url 타입을 사용합니닀. +`callback_url` 쿌늬 파띌믞터는 Pydantic의 [Url](https://docs.pydantic.dev/latest/api/networks/) 타입을 사용합니닀. /// @@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 싀제 윜백은 닚지 HTTP 요청입니닀. -윜백을 직접 구현할 때는 HTTPX나 Requests 같은 것을 사용할 수 있습니닀. +윜백을 직접 구현할 때는 [HTTPX](https://www.python-httpx.org)나 [Requests](https://requests.readthedocs.io/) 같은 것을 사용할 수 있습니닀. /// @@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 음반적읞 *겜로 처늬*와의 죌요 찚읎점은 2가지입니닀: * 싀제 윔드륌 가질 필요가 없습니닀. 여러분의 앱은 읎 윔드륌 절대 혞출하지 않Ʞ 때묞입니닀. 읎는 *external API*륌 묞서화하는 데만 사용됩니닀. 따띌서 핚수는 귞냥 `pass`만 있얎도 됩니닀. -* *path*에는 OpenAPI 3 expression(자섞한 낎용은 아래 ì°žê³ )읎 포핚될 수 있윌며, 읎륌 통핎 *여러분의 API*로 볎낎진 원래 요청의 파띌믞터와 음부 값을 변수로 사용할 수 있습니닀. +* *path*에는 [OpenAPI 3 표현식](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)(자섞한 낎용은 아래 ì°žê³ )읎 포핚될 수 있윌며, 읎륌 통핎 *여러분의 API*로 볎낎진 원래 요청의 파띌믞터와 음부 값을 변수로 사용할 수 있습니닀. ### 윜백 겜로 표현식 { #the-callback-path-expression } -윜백 *path*는 *여러분의 API*로 볎낎진 원래 요청의 음부륌 포핚할 수 있는 OpenAPI 3 expression을 가질 수 있습니닀. +윜백 *path*는 *여러분의 API*로 볎낎진 원래 요청의 음부륌 포핚할 수 있는 [OpenAPI 3 표현식](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)을 가질 수 있습니닀. 읎 겜우, 닀음 `str`입니닀: @@ -179,7 +179,7 @@ https://www.external.org/events/invoices/2expen51ve ### 묞서 확읞하Ʞ { #check-the-docs } -읎제 앱을 싀행하고 http://127.0.0.1:8000/docs로 읎동하섞요. +읎제 앱을 싀행하고 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)로 읎동하섞요. *겜로 처늬*에 대핮 "Callbacks" 섹션을 포핚한 묞서가 표시되며, *external API*가 ì–Žë–€ 형태여알 하는지 확읞할 수 있습니닀: diff --git a/docs/ko/docs/advanced/openapi-webhooks.md b/docs/ko/docs/advanced/openapi-webhooks.md index 8651c4176c..e40a7bb186 100644 --- a/docs/ko/docs/advanced/openapi-webhooks.md +++ b/docs/ko/docs/advanced/openapi-webhooks.md @@ -48,7 +48,7 @@ webhook에서는 싀제로(`/items/` 같은) *겜로(path)*륌 선얞하지 않 ### 묞서 확읞하Ʞ { #check-the-docs } -읎제 앱을 싀행하고 http://127.0.0.1:8000/docs로 읎동하섞요. +읎제 앱을 싀행하고 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)로 읎동하섞요. 묞서에 음반적읞 *겜로 처늬*가 볎읎고, 읎제는 음부 **webhooks**도 핚께 볎음 것입니닀: diff --git a/docs/ko/docs/advanced/path-operation-advanced-configuration.md b/docs/ko/docs/advanced/path-operation-advanced-configuration.md index da8e43bd3e..253a6f3021 100644 --- a/docs/ko/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/ko/docs/advanced/path-operation-advanced-configuration.md @@ -60,7 +60,7 @@ OpenAPI에 사용할 *겜로 처늬 핚수*의 docstring 쀄 수륌 제한할 몚덞, 상태 윔드 등곌 핚께 추가 응답도 ì„ ì–ží•  수 있습니닀. -읎에 대한 묞서의 전첎 장읎 있윌니, [OpenAPI의 추가 응답](additional-responses.md){.internal-link target=_blank}에서 읜얎볎섞요. +읎에 대한 묞서의 전첎 장읎 있윌니, [OpenAPI의 추가 응답](additional-responses.md)에서 읜얎볎섞요. ## OpenAPI Extra { #openapi-extra } @@ -68,7 +68,7 @@ OpenAPI에 사용할 *겜로 처늬 핚수*의 docstring 쀄 수륌 제한할 /// note | Ʞ술 섞부사항 -OpenAPI 명섞에서는 읎륌 Operation Object띌고 부늅니닀. +OpenAPI 명섞에서는 읎륌 [Operation Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)띌고 부늅니닀. /// @@ -82,7 +82,7 @@ OpenAPI 명섞에서는 읎륌 Starlette의 묞서에서 확읞할 수 있습니닀. +사용 가능한 몚든 맀개변수와 옵션은 [Starlette의 묞서](https://www.starlette.dev/responses/#set-cookie)에서 확읞할 수 있습니닀. diff --git a/docs/ko/docs/advanced/response-directly.md b/docs/ko/docs/advanced/response-directly.md index c43b11a4d5..301a259b2f 100644 --- a/docs/ko/docs/advanced/response-directly.md +++ b/docs/ko/docs/advanced/response-directly.md @@ -2,19 +2,23 @@ **FastAPI**에서 *겜로 처늬(path operation)*륌 생성할 때, 음반적윌로 `dict`, `list`, Pydantic 몚덞, 데읎터베읎슀 몚덞 등의 데읎터륌 반환할 수 있습니닀. -Ʞ볞적윌로 **FastAPI**는 [JSON 혾환 가능 읞윔더](../tutorial/encoder.md){.internal-link target=_blank}에 섀명된 `jsonable_encoder`륌 사용핎 핎당 반환 값을 자동윌로 JSON윌로 변환합니닀. +[응답 몚덞](../tutorial/response-model.md)을 선얞하멎 FastAPI는 Pydantic을 사용핎 데읎터륌 JSON윌로 직렬화합니닀. -귞런 닀음, 낎부적윌로는 JSON 혾환 데읎터(예: `dict`)륌 `JSONResponse`에 넣얎 큎띌읎얞튞로 응답을 전송하는 데 사용합니닀. +응답 몚덞을 선얞하지 않윌멎, FastAPI는 [JSON 혾환 가능 읞윔더](../tutorial/encoder.md)에 섀명된 `jsonable_encoder`륌 사용핎 데읎터륌 변환하고 읎륌 `JSONResponse`에 넣습니닀. -하지만 *겜로 처늬*에서 `JSONResponse`륌 직접 반환할 수도 있습니닀. +또한 `JSONResponse`륌 직접 생성핎 반환할 수도 있습니닀. -예륌 듀얎, 사용자 정의 헀더나 쿠킀륌 반환핎알 하는 겜우에 유용할 수 있습니닀. +/// tip | 팁 + +음반적윌로 `JSONResponse`륌 직접 반환하는 것볎닀 [응답 몚덞](../tutorial/response-model.md)을 사용하는 펞읎 성능읎 훚씬 좋습니닀. 읎렇게 하멎 Pydantic읎 Rust에서 데읎터륌 직렬화합니닀. + +/// ## `Response` 반환하Ʞ { #return-a-response } -사싀, `Response` 또는 ê·ž 하위 큎래슀륌 반환할 수 있습니닀. +`Response` 또는 ê·ž 하위 큎래슀륌 반환할 수 있습니닀. -/// tip | 팁 +/// info | 정볎 `JSONResponse` 자첎도 `Response`의 하위 큎래슀입니닀. @@ -26,6 +30,8 @@ Pydantic 몚덞로 데읎터 변환을 수행하지 않윌며, 낎용을 닀륞 읎로 읞핎 많은 유연성을 얻을 수 있습니닀. ì–Žë–€ 데읎터 유형읎든 반환할 수 있고, 데읎터 선얞읎나 유횚성 검사륌 재정의할 수 있습니닀. +또한 많은 책임도 따늅니닀. 반환하는 데읎터가 올바륎고, 올바륞 형식읎며, 직렬화가 가능하도록 여러분읎 직접 볎장핎알 합니닀. + ## `Response`에서 `jsonable_encoder` 사용하Ʞ { #using-the-jsonable-encoder-in-a-response } **FastAPI**는 반환하는 `Response`에 아묎런 변겜도 하지 않윌므로, ê·ž 낎용읎 쀀비되얎 있는지 확읞핎알 합니닀. @@ -50,16 +56,28 @@ Pydantic 몚덞로 데읎터 변환을 수행하지 않윌며, 낎용을 닀륞 읎제, 읎륌 사용핎 사용자 정의 응답을 반환하는 방법을 알아볎겠습니닀. -예륌 듀얎 XML 응답을 반환하고 싶닀고 가정핎 볎겠습니닀. +예륌 듀얎 [XML](https://en.wikipedia.org/wiki/XML) 응답을 반환하고 싶닀고 가정핎 볎겠습니닀. XML 낎용을 묞자엎에 넣고, 읎륌 `Response`에 넣얎 반환할 수 있습니닀: {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} +## 응답 몚덞 동작 방식 { #how-a-response-model-works } + +겜로 처늬에서 [응답 몚덞 - 반환 타입](../tutorial/response-model.md)을 선얞하멎 **FastAPI**는 Pydantic을 사용핎 데읎터륌 JSON윌로 직렬화합니닀. + +{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} + +읎는 Rust 잡에서 처늬되므로, 음반적읞 Python곌 `JSONResponse` 큎래슀로 수행하는 것볎닀 성능읎 훚씬 좋습니닀. + +`response_model` 또는 반환 타입을 사용할 때 FastAPI는 `jsonable_encoder`로 데읎터륌 변환(읎는 더 느늜니닀)하지도 않고, `JSONResponse` 큎래슀륌 사용하지도 않습니닀. + +대신 응답 몚덞(또는 반환 타입)을 사용핎 Pydantic읎 생성한 JSON 바읎튞륌 가젞와, JSON에 맞는 믞디얎 타입(`application/json`)을 가진 `Response`륌 직접 반환합니닀. + ## ì°žê³  사항 { #notes } `Response`륌 직접 반환할 때, ê·ž 데읎터는 자동윌로 유횚성 검사되거나, 변환(직렬화)되거나, 묞서화되지 않습니닀. -귞러나 [OpenAPI에서 추가 응답](additional-responses.md){.internal-link target=_blank}에서 섀명된 대로 묞서화할 수 있습니닀. +귞러나 [OpenAPI에서 추가 응답](additional-responses.md)에서 섀명된 대로 묞서화할 수 있습니닀. 읎후 섹션에서 자동 데읎터 변환, 묞서화 등을 계속 사용하멎서 읎러한 사용자 정의 `Response`륌 사용하는/선얞하는 방법을 확읞할 수 있습니닀. diff --git a/docs/ko/docs/advanced/response-headers.md b/docs/ko/docs/advanced/response-headers.md index a4cb287fec..e7157d8f48 100644 --- a/docs/ko/docs/advanced/response-headers.md +++ b/docs/ko/docs/advanced/response-headers.md @@ -20,7 +20,7 @@ `Response`륌 직접 반환할 때에도 헀더륌 추가할 수 있습니닀. -[응답을 직접 반환하Ʞ](response-directly.md){.internal-link target=_blank}에서 섀명한 대로 응답을 생성하고, 헀더륌 추가 맀개변수로 전달하섞요: +[응답을 직접 반환하Ʞ](response-directly.md)에 섀명한 대로 응답을 생성하고, 헀더륌 추가 맀개변수로 전달하섞요: {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *} @@ -36,6 +36,6 @@ ## 컀슀텀 헀더 { #custom-headers } -`X-` 접두얎륌 사용하여 컀슀텀 사섀 헀더륌 추가할 수 있닀는 점을 Ʞ억하섞요. +컀슀텀 사섀 헀더는 [`X-` 접두얎륌 사용하여](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) 추가할 수 있닀는 점을 Ʞ억하섞요. -하지만, 여러분읎 람띌우저에서 큎띌읎얞튞가 볌 수 있Ʞ륌 원하는 컀슀텀 헀더가 있는 겜우, CORS 섀정에 읎륌 추가핎알 합니닀([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank}에서 자섞히 알아볎섞요). Starlette의 CORS 묞서에 묞서화된 `expose_headers` 맀개변수륌 사용하섞요. +하지만, 여러분읎 람띌우저에서 큎띌읎얞튞가 볌 수 있Ʞ륌 원하는 컀슀텀 헀더가 있는 겜우, CORS 섀정에 읎륌 추가핎알 합니닀([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md)에서 자섞히 알아볎섞요). [Starlette의 CORS 묞서](https://www.starlette.dev/middleware/#corsmiddleware)에 묞서화된 `expose_headers` 맀개변수륌 사용하섞요. diff --git a/docs/ko/docs/advanced/security/http-basic-auth.md b/docs/ko/docs/advanced/security/http-basic-auth.md index 5b50c65fda..273b802050 100644 --- a/docs/ko/docs/advanced/security/http-basic-auth.md +++ b/docs/ko/docs/advanced/security/http-basic-auth.md @@ -32,7 +32,7 @@ HTTP Basic Auth에서는 애플늬쌀읎션읎 사용자명곌 비밀번혞가 dependency륌 사용핎 사용자명곌 비밀번혞가 올바륞지 확읞하섞요. -읎륌 위핎 Python 표쀀 몚듈 `secrets`륌 사용핎 사용자명곌 비밀번혞륌 확읞합니닀. +읎륌 위핎 Python 표쀀 몚듈 [`secrets`](https://docs.python.org/3/library/secrets.html)륌 사용핎 사용자명곌 비밀번혞륌 확읞합니닀. `secrets.compare_digest()`는 `bytes` 또는 ASCII 묞자(영얎에서 사용하는 묞자)만 포핚한 `str`을 받아알 합니닀. 슉, `Sebastián`의 `á` 같은 묞자가 있윌멎 동작하지 않습니닀. @@ -52,7 +52,7 @@ if not (credentials.username == "stanleyjobson") or not (credentials.password == 하지만 `secrets.compare_digest()`륌 사용하멎 "timing attacks"띌고 불늬는 한 유형의 공격에 대핮 안전핎집니닀. -### Timing Attacks { #timing-attacks } +### 타읎밍 공격 { #timing-attacks } 귞렇닀멎 "timing attack"읎란 묎엇음까요? diff --git a/docs/ko/docs/advanced/security/index.md b/docs/ko/docs/advanced/security/index.md index 4c7abfacc7..126e6524a3 100644 --- a/docs/ko/docs/advanced/security/index.md +++ b/docs/ko/docs/advanced/security/index.md @@ -2,7 +2,7 @@ ## 추가 Ʞ능 { #additional-features } -[튜토늬얌 - 사용자 가읎드: 볎안](../../tutorial/security/index.md){.internal-link target=_blank}에서 닀룬 낎용 왞에도, 볎안을 처늬하Ʞ 위한 몇 가지 추가 Ʞ능읎 있습니닀. +[튜토늬얌 - 사용자 가읎드: 볎안](../../tutorial/security/index.md)에서 닀룬 낎용 왞에도, 볎안을 처늬하Ʞ 위한 몇 가지 추가 Ʞ능읎 있습니닀. /// tip | 팁 @@ -14,6 +14,6 @@ ## 뚌저 튜토늬얌 읜Ʞ { #read-the-tutorial-first } -닀음 섹션은 죌요 [튜토늬얌 - 사용자 가읎드: 볎안](../../tutorial/security/index.md){.internal-link target=_blank}을 읎믞 읜었닀고 가정합니닀. +닀음 섹션은 죌요 [튜토늬얌 - 사용자 가읎드: 볎안](../../tutorial/security/index.md)을 읎믞 읜었닀고 가정합니닀. 몚두 동음한 개념을 Ʞ반윌로 하지만, 몇 가지 추가 Ʞ능을 사용할 수 있게 핎쀍니닀. diff --git a/docs/ko/docs/advanced/security/oauth2-scopes.md b/docs/ko/docs/advanced/security/oauth2-scopes.md index 0f90f92ae9..5a785ff9fd 100644 --- a/docs/ko/docs/advanced/security/oauth2-scopes.md +++ b/docs/ko/docs/advanced/security/oauth2-scopes.md @@ -60,7 +60,7 @@ OAuth2 입장에서는 ê·žì € 묞자엎입니닀. ## 전첎 개요 { #global-view } -뚌저, 메읞 **튜토늬얌 - 사용자 가읎드**의 [비밀번혞(및 핎싱)륌 사용하는 OAuth2, JWT 토큰을 사용하는 Bearer](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} 예제에서 ì–Žë–€ 부분읎 바뀌는지 빠륎게 삎펎볎겠습니닀. 읎제 OAuth2 슀윔프륌 사용합니닀: +뚌저, 메읞 **튜토늬얌 - 사용자 가읎드**의 [비밀번혞(및 핎싱)륌 사용하는 OAuth2, JWT 토큰을 사용하는 Bearer](../../tutorial/security/oauth2-jwt.md) 예제에서 ì–Žë–€ 부분읎 바뀌는지 빠륎게 삎펎볎겠습니닀. 읎제 OAuth2 슀윔프륌 사용합니닀: {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *} @@ -271,4 +271,4 @@ API 묞서륌 엎멎, 읞슝하고 읞가할 슀윔프륌 지정할 수 있습 ## 데윔레읎터 `dependencies`에서의 `Security` { #security-in-decorator-dependencies } -[겜로 처늬 데윔레읎터의 의졎성](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}에서 섀명한 것처럌 데윔레읎터의 `dependencies` 맀개변수에 `Depends`의 `list`륌 정의할 수 있는 것곌 같은 방식윌로, 거Ʞ에서 `scopes`와 핚께 `Security`륌 사용할 수도 있습니닀. +[겜로 처늬 데윔레읎터의 의졎성](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)에서 섀명한 것처럌 데윔레읎터의 `dependencies` 맀개변수에 `Depends`의 `list`륌 정의할 수 있는 것곌 같은 방식윌로, 거Ʞ에서 `scopes`와 핚께 `Security`륌 사용할 수도 있습니닀. diff --git a/docs/ko/docs/advanced/settings.md b/docs/ko/docs/advanced/settings.md index f53006bfba..49a2b640e9 100644 --- a/docs/ko/docs/advanced/settings.md +++ b/docs/ko/docs/advanced/settings.md @@ -8,7 +8,7 @@ /// tip | 팁 -환겜 변수륌 읎핎하렀멎 [환겜 변수](../environment-variables.md){.internal-link target=_blank}륌 읜얎볎섞요. +환겜 변수륌 읎핎하렀멎 [환겜 변수](../environment-variables.md)륌 읜얎볎섞요. /// @@ -20,11 +20,11 @@ ## Pydantic `Settings` { #pydantic-settings } -닀행히 Pydantic은 Pydantic: Settings management륌 통핎 환겜 변수에서 였는 읎러한 섀정을 처늬할 수 있는 훌륭한 유틞늬티륌 제공합니닀. +닀행히 Pydantic은 환겜 변수에서 였는 읎러한 섀정을 처늬할 수 있는 훌륭한 유틞늬티륌 [Pydantic: Settings ꎀ늬](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)로 제공합니닀. ### `pydantic-settings` 섀치하Ʞ { #install-pydantic-settings } -뚌저 [가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 만듀고 활성화한 닀음, `pydantic-settings` 팚킀지륌 섀치하섞요: +뚌저 [가상 환겜](../virtual-environments.md)을 만듀고 활성화한 닀음, `pydantic-settings` 팚킀지륌 섀치하섞요:
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p ## 닀륞 몚듈의 섀정 { #settings-in-another-module } -[Bigger Applications - Multiple Files](../tutorial/bigger-applications.md){.internal-link target=_blank}에서 볞 것처럌, 섀정을 닀륞 몚듈 파음에 넣을 수도 있습니닀. +[더 큰 애플늬쌀읎션 - 여러 파음](../tutorial/bigger-applications.md)에서 볞 것처럌, 섀정을 닀륞 몚듈 파음에 넣을 수도 있습니닀. 예륌 듀얎 `config.py` 파음을 닀음처럌 만듀 수 있습니닀: @@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// tip | 팁 -[Bigger Applications - Multiple Files](../tutorial/bigger-applications.md){.internal-link target=_blank}에서 볞 것처럌 `__init__.py` 파음도 필요합니닀. +[더 큰 애플늬쌀읎션 - 여러 파음](../tutorial/bigger-applications.md)에서 볞 것처럌 `__init__.py` 파음도 필요합니닀. /// @@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// -Pydantic은 왞부 띌읎람러늬륌 사용핎 읎런 유형의 파음에서 읜는 Ʞ능을 지원합니닀. 자섞한 낎용은 Pydantic Settings: Dotenv (.env) support륌 찞고하섞요. +Pydantic은 왞부 띌읎람러늬륌 사용핎 읎런 유형의 파음에서 읜는 Ʞ능을 지원합니닀. 자섞한 낎용은 [Pydantic Settings: Dotenv (.env) 지원](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support)을 찞고하섞요. /// tip | 팁 @@ -197,7 +197,7 @@ APP_NAME="ChimichangApp" /// tip | 팁 -`model_config` 속성은 Pydantic 섀정을 위한 것입니닀. 자섞한 낎용은 Pydantic: Concepts: Configuration륌 찞고하섞요. +`model_config` 속성은 Pydantic 섀정을 위한 것입니닀. 자섞한 낎용은 [Pydantic: 개념: 구성](https://docs.pydantic.dev/latest/concepts/config/)을 찞고하섞요. /// @@ -291,7 +291,7 @@ participant execute as Execute function 읎렇게 하멎 거의 전역 변수처럌 동작합니닀. 하지만 의졎성 핚수륌 사용하므로 테슀튞륌 위핎 쉜게 override할 수 있습니닀. -`@lru_cache`는 Python 표쀀 띌읎람러늬의 `functools`에 포핚되얎 있윌며, 자섞한 낎용은 `@lru_cache`에 대한 Python 묞서에서 확읞할 수 있습니닀. +`@lru_cache`는 Python 표쀀 띌읎람러늬의 `functools`에 포핚되얎 있윌며, 자섞한 낎용은 [`@lru_cache`에 대한 Python 묞서](https://docs.python.org/3/library/functools.html#functools.lru_cache)에서 확읞할 수 있습니닀. ## 정늬 { #recap } diff --git a/docs/ko/docs/advanced/sub-applications.md b/docs/ko/docs/advanced/sub-applications.md index 8da217aab6..b592c0a39d 100644 --- a/docs/ko/docs/advanced/sub-applications.md +++ b/docs/ko/docs/advanced/sub-applications.md @@ -1,10 +1,10 @@ -# 하위 응용프로귞랚 - 마욎튞 { #sub-applications-mounts } +# 하위 애플늬쌀읎션 - 마욎튞 { #sub-applications-mounts } -각각의 독늜적읞 OpenAPI와 묞서 UI륌 갖는 두 개의 독늜적읞 FastAPI 애플늬쌀읎션읎 필요하닀멎, 메읞 앱을 두고 하나(또는 ê·ž 읎상)의 하위 응용프로귞랚을 "마욎튞"할 수 있습니닀. +각각의 독늜적읞 OpenAPI와 묞서 UI륌 갖는 두 개의 독늜적읞 FastAPI 애플늬쌀읎션읎 필요하닀멎, 메읞 앱을 두고 하나(또는 ê·ž 읎상)의 하위 애플늬쌀읎션을 "마욎튞"할 수 있습니닀. ## **FastAPI** 애플늬쌀읎션 마욎튞 { #mounting-a-fastapi-application } -"마욎튞"란 완전히 "독늜적읞" 애플늬쌀읎션을 특정 겜로에 추가하고, ê·ž 하위 응용프로귞랚에 선얞된 _겜로 처늬_로 핎당 겜로 아래의 몚든 것을 처늬하도록 하는 것을 의믞합니닀. +"마욎튞"란 완전히 "독늜적읞" 애플늬쌀읎션을 특정 겜로에 추가하고, ê·ž 하위 애플늬쌀읎션에 선얞된 _겜로 처늬_로 핎당 겜로 아래의 몚든 것을 처늬하도록 하는 것을 의믞합니닀. ### 최상위 애플늬쌀읎션 { #top-level-application } @@ -12,17 +12,17 @@ {* ../../docs_src/sub_applications/tutorial001_py310.py hl[3, 6:8] *} -### 하위 응용프로귞랚 { #sub-application } +### 하위 애플늬쌀읎션 { #sub-application } -ê·ž 닀음, 하위 응용프로귞랚곌 ê·ž *겜로 처늬*륌 생성합니닀. +ê·ž 닀음, 하위 애플늬쌀읎션곌 ê·ž *겜로 처늬*륌 생성합니닀. -읎 하위 응용프로귞랚은 또 닀륞 표쀀 FastAPI 애플늬쌀읎션읎지만, "마욎튞"될 애플늬쌀읎션입니닀: +읎 하위 애플늬쌀읎션은 또 닀륞 표쀀 FastAPI 애플늬쌀읎션읎지만, "마욎튞"될 애플늬쌀읎션입니닀: {* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 14:16] *} -### 하위 응용프로귞랚 마욎튞 { #mount-the-sub-application } +### 하위 애플늬쌀읎션 마욎튞 { #mount-the-sub-application } -최상위 애플늬쌀읎션 `app`에서 하위 응용프로귞랚 `subapi`륌 마욎튞합니닀. +최상위 애플늬쌀읎션 `app`에서 하위 애플늬쌀읎션 `subapi`륌 마욎튞합니닀. 읎 겜우 `/subapi` 겜로에 마욎튞됩니닀: @@ -30,27 +30,27 @@ ### 자동 API 묞서 확읞 { #check-the-automatic-api-docs } -읎제 파음곌 핚께 `fastapi` 명령을 싀행하섞요: +읎제 `fastapi` 명령얎륌 싀행하섞요:
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-귞늬고 http://127.0.0.1:8000/docs에서 묞서륌 여섞요. +귞늬고 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)에서 묞서륌 여섞요. 메읞 앱의 자동 API 묞서륌 볎게 될 것읎며, 메읞 앱 자첎의 _겜로 처늬_만 포핚됩니닀: -ê·ž 닀음, http://127.0.0.1:8000/subapi/docs에서 하위 응용프로귞랚의 묞서륌 여섞요. +ê·ž 닀음, [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)에서 하위 애플늬쌀읎션의 묞서륌 여섞요. -하위 응용프로귞랚의 자동 API 묞서륌 볎게 될 것읎며, 하위 겜로 접두사 `/subapi` 아래에 올바륎게 포핚된 하위 응용프로귞랚 자첎의 _겜로 처늬_만 포핚됩니닀: +하위 애플늬쌀읎션의 자동 API 묞서륌 볎게 될 것읎며, 하위 겜로 접두사 `/subapi` 아래에 올바륎게 포핚된 하위 애플늬쌀읎션 자첎의 _겜로 처늬_만 포핚됩니닀: @@ -58,10 +58,10 @@ $ fastapi dev main.py ### Ʞ술적 섞부사항: `root_path` { #technical-details-root-path } -위에서 섀명한 대로 하위 응용프로귞랚을 마욎튞하멎, FastAPI는 ASGI 명섞의 메컀니슘읞 `root_path`륌 사용핎 하위 응용프로귞랚에 대한 마욎튞 겜로륌 전달하는 작업을 처늬합니닀. +위에서 섀명한 대로 하위 애플늬쌀읎션을 마욎튞하멎, FastAPI는 ASGI 명섞의 메컀니슘읞 `root_path`륌 사용핎 하위 애플늬쌀읎션에 대한 마욎튞 겜로륌 전달하는 작업을 처늬합니닀. -읎렇게 하멎 하위 응용프로귞랚은 묞서 UI륌 위핎 핎당 겜로 접두사륌 사용핎알 한닀는 것을 알게 됩니닀. +읎렇게 하멎 하위 애플늬쌀읎션은 묞서 UI륌 위핎 핎당 겜로 접두사륌 사용핎알 한닀는 것을 알게 됩니닀. -또한 하위 응용프로귞랚도 자첎적윌로 하위 앱을 마욎튞할 수 있윌며, FastAPI가 읎 몚든 `root_path`륌 자동윌로 처늬하Ʞ 때묞에 몚든 것읎 올바륎게 동작합니닀. +또한 하위 애플늬쌀읎션도 자첎적윌로 하위 앱을 마욎튞할 수 있윌며, FastAPI가 읎 몚든 `root_path`륌 자동윌로 처늬하Ʞ 때묞에 몚든 것읎 올바륎게 동작합니닀. -`root_path`와 읎륌 명시적윌로 사용하는 방법에 대핎서는 [프록시 ë’€](behind-a-proxy.md){.internal-link target=_blank} 섹션에서 더 알아볌 수 있습니닀. +`root_path`와 읎륌 명시적윌로 사용하는 방법에 대핎서는 [프록시 ë’€](behind-a-proxy.md) 섹션에서 더 알아볌 수 있습니닀. diff --git a/docs/ko/docs/advanced/templates.md b/docs/ko/docs/advanced/templates.md index 3ae718f153..9c33f37e91 100644 --- a/docs/ko/docs/advanced/templates.md +++ b/docs/ko/docs/advanced/templates.md @@ -8,7 +8,7 @@ ## 의졎성 섀치 { #install-dependencies } -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고, 활성화한 후 `jinja2`륌 섀치핎알 합니닀: +[가상 환겜](../virtual-environments.md)을 생성하고, 활성화한 후 `jinja2`륌 섀치핎알 합니닀:
@@ -123,4 +123,4 @@ Item ID: 42 ## 더 많은 섞부 사항 { #more-details } -템플늿 테슀튞륌 포핚한 더 많은 섞부 사항은 Starlette의 템플늿 묞서륌 확읞하섞요. +템플늿 테슀튞륌 포핚한 더 많은 섞부 사항은 [Starlette의 템플늿 묞서](https://www.starlette.dev/templates/)륌 확읞하섞요. diff --git a/docs/ko/docs/advanced/testing-websockets.md b/docs/ko/docs/advanced/testing-websockets.md index 23ff34cd3a..28f131c2d1 100644 --- a/docs/ko/docs/advanced/testing-websockets.md +++ b/docs/ko/docs/advanced/testing-websockets.md @@ -6,8 +6,8 @@ {* ../../docs_src/app_testing/tutorial002_py310.py hl[27:31] *} -/// note | ì°žê³  +/// note -자섞한 낎용은 Starlette의 WebSocket 테슀튞 묞서륌 확읞하섞요. +자섞한 낎용은 Starlette의 [WebSocket 테슀튞](https://www.starlette.dev/testclient/#testing-websocket-sessions) 묞서륌 확읞하섞요. /// diff --git a/docs/ko/docs/advanced/using-request-directly.md b/docs/ko/docs/advanced/using-request-directly.md index 0c45e2e2f8..7456d2a79c 100644 --- a/docs/ko/docs/advanced/using-request-directly.md +++ b/docs/ko/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ ## `Request` 객첎에 대한 섞부 사항 { #details-about-the-request-object } -**FastAPI**는 싀제로 낎부에 **Starlette**을 사용하며, ê·ž 위에 여러 도구륌 덧붙읞 구조입니닀. 따띌서 여러분읎 필요할 때 Starlette의 `Request` 객첎륌 직접 사용할 수 있습니닀. +**FastAPI**는 싀제로 낎부에 **Starlette**을 사용하며, ê·ž 위에 여러 도구륌 덧붙읞 구조입니닀. 따띌서 여러분읎 필요할 때 Starlette의 [`Request`](https://www.starlette.dev/requests/) 객첎륌 직접 사용할 수 있습니닀. 또한 읎는 `Request` 객첎에서 데읎터륌 직접 가젞였는 겜우(예: 볞묞을 읜Ʞ) FastAPI가 핎당 데읎터륌 검슝하거나 변환하지 않윌며, 묞서화(OpenAPI륌 통한 자동 API 사용자 읞터페읎슀용)도 되지 않는닀는 의믞읎Ʞ도 합니닀. @@ -45,7 +45,7 @@ ## `Request` 섀명서 { #request-documentation } -여러분은 공식 Starlette 섀명서 사읎튞의 `Request` 객첎에 대한 더 자섞한 낎용을 읜얎볌 수 있습니닀. +여러분은 [`Request` 객첎에 대한 공식 Starlette 섀명서 사읎튞](https://www.starlette.dev/requests/)에 대한 더 자섞한 낎용을 읜얎볌 수 있습니닀. /// note | Ʞ술 섞부사항 diff --git a/docs/ko/docs/advanced/websockets.md b/docs/ko/docs/advanced/websockets.md index cb59097f6e..0b920c3b38 100644 --- a/docs/ko/docs/advanced/websockets.md +++ b/docs/ko/docs/advanced/websockets.md @@ -1,10 +1,10 @@ # WebSockets { #websockets } -여러분은 **FastAPI**에서 WebSockets륌 사용할 수 있습니닀. +여러분은 **FastAPI**에서 [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)륌 사용할 수 있습니닀. ## `websockets` 섀치 { #install-websockets } -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고 활성화한 닀음, `websockets`("WebSocket" 프로토윜을 쉜게 사용할 수 있게 핎죌는 Python 띌읎람러늬)륌 섀치하섞요: +[가상 환겜](../virtual-environments.md)을 생성하고 활성화한 닀음, `websockets`("WebSocket" 프로토윜을 쉜게 사용할 수 있게 핎죌는 Python 띌읎람러늬)륌 섀치하섞요:
@@ -64,19 +64,19 @@ WebSocket 겜로에서 메시지륌 대Ʞ(`await`)하고 전송할 수 있습 ## 시도핎볎Ʞ { #try-it } -파음 읎늄읎 `main.py`띌고 가정하고 닀음윌로 애플늬쌀읎션을 싀행합니닀: +윔드륌 `main.py` 파음에 넣고 애플늬쌀읎션을 싀행합니닀:
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-람띌우저에서 http://127.0.0.1:8000을 여섞요. +람띌우저에서 [http://127.0.0.1:8000](http://127.0.0.1:8000)을 여섞요. 간닚한 페읎지가 나타날 것입니닀: @@ -115,25 +115,25 @@ WebSocket 엔드포읞튞에서 `fastapi`에서 닀음을 가젞와 사용할 WebSocket읎Ʞ 때묞에 `HTTPException`을 발생시킀는 것은 적절하지 않습니닀. 대신 `WebSocketException`을 발생시킵니닀. -명섞서에 정의된 유횚한 윔드륌 사용하여 종료 윔드륌 섀정할 수 있습니닀. +명섞서에 정의된 [유횚한 윔드](https://tools.ietf.org/html/rfc6455#section-7.4.1)륌 사용하여 종료 윔드륌 섀정할 수 있습니닀. /// ### 종속성을 가진 WebSockets 시도핎볎Ʞ { #try-the-websockets-with-dependencies } -파음 읎늄읎 `main.py`띌고 가정하고 닀음윌로 애플늬쌀읎션을 싀행합니닀: +애플늬쌀읎션을 싀행합니닀:
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-람띌우저에서 http://127.0.0.1:8000을 여섞요. +람띌우저에서 [http://127.0.0.1:8000](http://127.0.0.1:8000)을 여섞요. 여Ʞ에서 닀음을 섀정할 수 있습니닀: @@ -174,7 +174,7 @@ Client #1596980209979 left the chat 하지만 몚든 것을 메몚늬의 닚음 늬슀튞로 처늬하므로, 프로섞슀가 싀행 쀑읞 동안만 동작하며 닚음 프로섞슀에서만 작동한닀는 점을 Ʞ억하섞요. -FastAPI와 쉜게 통합할 수 있윌멎서 더 견고하고 Redis, PostgreSQL 등을 지원하는 도구가 필요하닀멎, encode/broadcaster륌 확읞하섞요. +FastAPI와 쉜게 통합할 수 있윌멎서 더 견고하고 Redis, PostgreSQL 등을 지원하는 도구가 필요하닀멎, [encode/broadcaster](https://github.com/encode/broadcaster)륌 확읞하섞요. /// @@ -182,5 +182,5 @@ FastAPI와 쉜게 통합할 수 있윌멎서 더 견고하고 Redis, PostgreSQL 닀음 옵션에 대핮 더 알아볎렀멎 Starlette의 묞서륌 확읞하섞요: -* `WebSocket` 큎래슀. -* 큎래슀 êž°ë°˜ WebSocket 처늬. +* [`WebSocket` 큎래슀](https://www.starlette.dev/websockets/). +* [큎래슀 êž°ë°˜ WebSocket 처늬](https://www.starlette.dev/endpoints/#websocketendpoint). diff --git a/docs/ko/docs/advanced/wsgi.md b/docs/ko/docs/advanced/wsgi.md index 24b074443d..921e426efd 100644 --- a/docs/ko/docs/advanced/wsgi.md +++ b/docs/ko/docs/advanced/wsgi.md @@ -1,6 +1,6 @@ # WSGI 포핚하Ʞ - Flask, Django 등 { #including-wsgi-flask-django-others } -[서람 애플늬쌀읎션 - 마욎튞](sub-applications.md){.internal-link target=_blank}, [프록시 뒀에서](behind-a-proxy.md){.internal-link target=_blank}에서 볞 것처럌 WSGI 애플늬쌀읎션을 마욎튞할 수 있습니닀. +[서람 애플늬쌀읎션 - 마욎튞](sub-applications.md), [프록시 뒀에서](behind-a-proxy.md)에서 볞 것처럌 WSGI 애플늬쌀읎션을 마욎튞할 수 있습니닀. 읎륌 위핎 `WSGIMiddleware`륌 사용핎 WSGI 애플늬쌀읎션(예: Flask, Django 등)을 감쌀 수 있습니닀. @@ -36,13 +36,13 @@ 귞늬고 나뚞지는 **FastAPI**에 의핎 처늬됩니닀. -싀행하고 http://localhost:8000/v1/로 읎동하멎 Flask의 응답을 볌 수 있습니닀: +싀행하고 [http://localhost:8000/v1/](http://localhost:8000/v1/)로 읎동하멎 Flask의 응답을 볌 수 있습니닀: ```txt Hello, World from Flask! ``` -귞늬고 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 f26fbe39dd..4f92f69d24 100644 --- a/docs/ko/docs/alternatives.md +++ b/docs/ko/docs/alternatives.md @@ -14,7 +14,7 @@ ## 읎전 도구듀 { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } 가장 읞Ʞ 있는 Python framework읎며 널늬 신뢰받고 있습니닀. Instagram 같은 시슀템을 만드는 데 사용됩니닀. @@ -22,7 +22,7 @@ 백엔드에서 HTML을 생성하Ʞ 위핎 만듀얎졌지, 현대적읞 프런튞엔드(예: React, Vue.js, Angular)나 닀륞 시슀템(예: IoT êž°êž°)에서 사용되는 API륌 만듀Ʞ 위핎 섀계된 것은 아닙니닀. -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST framework는 Django륌 Ʞ반윌로 Web API륌 구축하Ʞ 위한 유연한 toolkit윌로 만듀얎졌고, Django의 API Ʞ능을 개선하Ʞ 위한 목적읎었습니닀. @@ -42,7 +42,7 @@ Django REST Framework는 Tom Christie가 만듀었습니닀. **FastAPI**의 êž° /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask는 "microframework"로, Django에 Ʞ볞윌로 포핚된 데읎터베읎슀 통합읎나 여러 Ʞ능듀을 포핚하지 않습니닀. @@ -64,7 +64,7 @@ micro-framework가 되Ʞ. 필요한 도구와 구성요소륌 쉜게 조합할 /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI**는 싀제로 **Requests**의 대안읎 아닙니닀. 둘의 범위는 맀우 닀늅니닀. @@ -106,7 +106,7 @@ def read_url(): /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } 제가 Django REST Framework에서 가장 원했던 죌요 Ʞ능은 자동 API 묞서화였습니닀. @@ -124,8 +124,8 @@ def read_url(): 또한 표쀀 Ʞ반의 사용자 읞터페읎슀 도구륌 통합하Ʞ: -* Swagger UI -* ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) 읎 두 가지는 ꜀ 대쀑적읎고 안정적읎Ʞ 때묞에 선택되었습니닀. 하지만 간닚히 검색핎볎멎 OpenAPI륌 위한 대안 UI가 수십 가지나 있닀는 것을 알 수 있습니닀(**FastAPI**와 핚께 사용할 수 있습니닀). @@ -135,7 +135,7 @@ def read_url(): Flask REST framework는 여러 개가 있지만, 시간을 듀여 조사핎 볞 결곌, 상당수가 쀑닚되었거나 방치되얎 있었고, 핎결되지 않은 여러 읎슈 때묞에 적합하지 않은 겜우가 많았습니닀. -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } API 시슀템에 필요한 죌요 Ʞ능 쀑 하나는 데읎터 "직렬화"입니닀. 읎는 윔드(Python)에서 데읎터륌 가젞와 넀튞워크로 전송할 수 있는 형태로 변환하는 것을 의믞합니닀. 예륌 듀얎 데읎터베읎슀의 데읎터륌 닎은 객첎륌 JSON 객첎로 변환하거나, `datetime` 객첎륌 묞자엎로 변환하는 등의 작업입니닀. @@ -153,7 +153,7 @@ API에 또 하나 크게 필요한 Ʞ능은 데읎터 검슝입니닀. 특정 /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } API에 필요한 또 닀륞 큰 Ʞ능은 듀얎였는 요청에서 데읎터륌 파싱하는 것입니닀. @@ -175,7 +175,7 @@ Webargs는 Marshmallow와 같은 개발자듀읎 만듀었습니닀. /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } Marshmallow와 Webargs는 plug-in 형태로 검슝, parsing, serialization을 제공합니닀. @@ -205,7 +205,7 @@ API륌 위한 엎늰 표쀀읞 OpenAPI륌 지원하Ʞ. /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } Flask plug-in윌로, Webargs, Marshmallow, APISpec을 묶얎쀍니닀. @@ -219,11 +219,11 @@ Flask + Flask-apispec + Marshmallow + Webargs 조합은 **FastAPI**륌 만듀Ʞ 읎륌 사용하멎서 여러 Flask full-stack generator가 만듀얎졌습니닀. 읎것듀읎 지ꞈ까지 저(귞늬고 여러 왞부 팀)가 사용핎 옚 죌요 stack입니닀: -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [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){.internal-link target=_blank}의 Ʞ반읎 되었습니닀. +귞늬고 읎 동음한 full-stack generator듀읎 [**FastAPI** Project Generators](project-generation.md)의 Ʞ반읎 되었습니닀. /// info | 정볎 @@ -237,7 +237,7 @@ serialization곌 validation을 정의하는 동음한 윔드로부터 OpenAPI sc /// -### NestJS (귞늬고 Angular) { #nestjs-and-angular } +### [NestJS](https://nestjs.com/) (귞늬고 [Angular](https://angular.io/)) { #nestjs-and-angular } 읎걎 Python도 아닙니닀. NestJS는 Angular에서 영감을 받은 JavaScript(TypeScript) NodeJS framework입니닀. @@ -259,13 +259,13 @@ Python 타입을 사용핎 뛰얎난 에디터 지원을 제공하Ʞ. /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } `asyncio` Ʞ반의 맀우 빠륞 Python framework 쀑 쎈Ʞ 사례였습니닀. Flask와 맀우 유사하게 만듀얎졌습니닀. /// note | Ʞ술 섞부사항 -Ʞ볞 Python `asyncio` 룚프 대신 `uvloop`륌 사용했습니닀. 읎것읎 맀우 빠륎게 만든 요읞입니닀. +[`uvloop`](https://github.com/MagicStack/uvloop)륌 Ʞ볞 Python `asyncio` 룚프 대신 사용했습니닀. 읎것읎 맀우 빠륎게 만든 요읞입니닀. 읎는 Uvicorn곌 Starlette에 명확히 영감을 죌었고, 현재 공개 benchmark에서는 읎 둘읎 Sanic볎닀 더 빠늅니닀. @@ -279,7 +279,7 @@ Python 타입을 사용핎 뛰얎난 에디터 지원을 제공하Ʞ. /// -### Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falcon은 또 닀륞 고성능 Python framework로, 최소한윌로 섀계되었고 Hug 같은 닀륞 framework의 Ʞ반윌로 동작하도록 만듀얎졌습니닀. @@ -297,7 +297,7 @@ Hug(= Falcon êž°ë°˜)곌 핚께, 핚수에서 `response` 파띌믞터륌 ì„ ì–ž /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } **FastAPI**륌 만듀Ʞ 시작한 쎈Ʞ 닚계에서 Molten을 알게 되었고, ꜀ 비슷한 아읎디얎륌 갖고 있었습니닀: @@ -321,7 +321,7 @@ Route는 한 곳에서 선얞하고, 닀륞 곳에 선얞된 핚수륌 사용합 /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hug는 Python type hints륌 사용핎 API 파띌믞터 타입을 선얞하는 Ʞ능을 구현한 쎈Ʞ framework 쀑 하나였습니닀. 읎는 닀륞 도구듀도 같은 방식을 하도록 영감을 쀀 훌륭한 아읎디얎였습니닀. @@ -337,7 +337,7 @@ OpenAPI나 JSON Schema 같은 표쀀을 Ʞ반윌로 하지 않았Ʞ 때묞에 /// info | 정볎 -Hug는 Timothy Crosley가 만듀었습니닀. Python 파음에서 import륌 자동윌로 정렬하는 훌륭한 도구읞 `isort`의 제작자읎Ʞ도 합니닀. +Hug는 Timothy Crosley가 만듀었습니닀. Python 파음에서 import륌 자동윌로 정렬하는 훌륭한 도구읞 [`isort`](https://github.com/timothycrosley/isort)의 제작자읎Ʞ도 합니닀. /// @@ -351,7 +351,7 @@ Hug는 헀더와 쿠킀륌 섀정하Ʞ 위핎 핚수에 `response` 파띌믞터 /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } **FastAPI**륌 만듀Ʞ로 결정하Ʞ 직전에 **APIStar** 서버륌 발견했습니닀. ì°Ÿê³  있던 거의 몚든 것을 갖추고 있었고 섀계도 훌륭했습니닀. @@ -401,7 +401,7 @@ APIStar는 Tom Christie가 만듀었습니닀. 닀음을 만든 사람곌 동음 ## **FastAPI**가 사용하는 것 { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydantic은 Python type hints륌 Ʞ반윌로 데읎터 검슝, serialization, 묞서화(JSON Schema 사용)륌 정의하는 띌읎람러늬입니닀. @@ -417,7 +417,7 @@ Marshmallow와 비교할 수 있습니닀. 닀만 benchmark에서 Marshmallow볎 /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starlette는 겜량 ASGI framework/toolkit윌로, 고성능 asyncio 서비슀륌 만듀Ʞ에 읎상적입니닀. @@ -462,7 +462,7 @@ ASGI는 Django 윔얎 팀 멀버듀읎 개발 쀑읞 새로욎 "표쀀"입니닀 /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicorn은 uvloop곌 httptools로 구축된 쎈고속 ASGI 서버입니닀. @@ -476,10 +476,10 @@ Starlette와 **FastAPI**에서 권장하는 서버입니닀. 또한 `--workers` 컀맚드띌읞 옵션을 사용하멎 비동Ʞ 멀티프로섞슀 서버로 싀행할 수도 있습니닀. -자섞한 낎용은 [배포](deployment/index.md){.internal-link target=_blank} 섹션을 확읞하섞요. +자섞한 낎용은 [배포](deployment/index.md) 섹션을 확읞하섞요. /// ## 벀치마크와 속도 { #benchmarks-and-speed } -Uvicorn, Starlette, FastAPI 사읎의 찚읎륌 읎핎하고 비교하렀멎 [벀치마크](benchmarks.md){.internal-link target=_blank} 섹션을 확읞하섞요. +Uvicorn, Starlette, FastAPI 사읎의 찚읎륌 읎핎하고 비교하렀멎 [벀치마크](benchmarks.md) 섹션을 확읞하섞요. diff --git a/docs/ko/docs/async.md b/docs/ko/docs/async.md index 36f1ca6bf1..485111fac9 100644 --- a/docs/ko/docs/async.md +++ b/docs/ko/docs/async.md @@ -141,7 +141,7 @@ def results(): /// info | 정볎 -아늄닀욎 음러슀튞: Ketrina Thompson. 🎚 +아늄닀욎 음러슀튞: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎚 /// @@ -207,7 +207,7 @@ def results(): /// info | 정볎 -아늄닀욎 음러슀튞: Ketrina Thompson. 🎚 +아늄닀욎 음러슀튞: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎚 /// @@ -251,7 +251,7 @@ def results(): 귞늬고 읎것읎 **FastAPI**로 얻는 것곌 같은 수쀀의 성능입니닀. -또한 병렬성곌 비동Ʞ성을 동시에 사용할 수 있윌므로, 대부분의 테슀튞된 NodeJS 프레임워크볎닀 더 높은 성능을 얻고, C에 더 가까욎 컎파음 얞얎읞 Go와 동등한 성능을 얻을 수 있습니닀 (몚두 Starlette 덕분입니닀). +또한 병렬성곌 비동Ʞ성을 동시에 사용할 수 있윌므로, 대부분의 테슀튞된 NodeJS 프레임워크볎닀 더 높은 성능을 얻고, C에 더 가까욎 컎파음 얞얎읞 Go와 동등한 성능을 얻을 수 있습니닀 [(몚두 Starlette 덕분입니닀)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1). ### 동시성읎 병렬성볎닀 더 나은가요? { #is-concurrency-better-than-parallelism } @@ -298,7 +298,7 @@ CPU bound 작업의 흔한 예시는 복잡한 수학 처늬가 필요한 것듀 읎것은 파읎썬읎 **데읎터 사읎얞슀**, 뚞신러닝, 특히 딥러닝의 죌요 얞얎띌는 닚순한 사싀곌 더핎젞, FastAPI륌 데읎터 사읎얞슀/뚞신러닝 웹 API 및 애플늬쌀읎션(ê·ž 왞에도 많은 것듀)에 맀우 잘 맞는 선택윌로 만듀얎 쀍니닀. -프로덕션에서 읎 병렬성을 얎떻게 달성하는지 볎렀멎 [배포](deployment/index.md){.internal-link target=_blank} 섹션을 찞고하섞요. +프로덕션에서 읎 병렬성을 얎떻게 달성하는지 볎렀멎 [배포](deployment/index.md) 섹션을 찞고하섞요. ## `async`와 `await` { #async-and-await } @@ -363,13 +363,13 @@ async def read_burgers(): ### 여러분만의 async 윔드 작성하Ʞ { #write-your-own-async-code } -Starlette(귞늬고 **FastAPI**)는 AnyIO륌 Ʞ반윌로 하고 있윌며, 파읎썬 표쀀 띌읎람러늬 asyncio와 Trio 몚두와 혞환됩니닀. +Starlette(귞늬고 **FastAPI**)는 [AnyIO](https://anyio.readthedocs.io/en/stable/)륌 Ʞ반윌로 하고 있윌며, 파읎썬 표쀀 띌읎람러늬 [asyncio](https://docs.python.org/3/library/asyncio-task.html)와 [Trio](https://trio.readthedocs.io/en/stable/) 몚두와 혞환됩니닀. -특히, 윔드에서 더 고꞉ 팚턎읎 필요한 고꞉ 동시성 사용 사례에서는 직접 AnyIO륌 사용할 수 있습니닀. +특히, 윔드에서 더 고꞉ 팚턎읎 필요한 고꞉ 동시성 사용 사례에서는 직접 [AnyIO](https://anyio.readthedocs.io/en/stable/)륌 사용할 수 있습니닀. -귞늬고 FastAPI륌 사용하지 않더띌도, 높은 혞환성을 확볎하고 ê·ž 읎점(예: *structured concurrency*)을 얻Ʞ 위핎 AnyIO로 여러분만의 async 애플늬쌀읎션을 작성할 수도 있습니닀. +귞늬고 FastAPI륌 사용하지 않더띌도, 높은 혞환성을 확볎하고 ê·ž 읎점(예: *structured concurrency*)을 얻Ʞ 위핎 [AnyIO](https://anyio.readthedocs.io/en/stable/)로 여러분만의 async 애플늬쌀읎션을 작성할 수도 있습니닀. -저는 AnyIO 위에 얇은 레읎얎로 또 닀륞 띌읎람러늬륌 만듀었는데, 타입 얎녞테읎션을 조ꞈ 개선하고 더 나은 **자동완성**, **읞띌읞 였류** 등을 얻Ʞ 위한 것입니닀. 또한 **읎핎**하고 **여러분만의 async 윔드**륌 작성하도록 돕는 친절한 소개와 튜토늬얌도 제공합니닀: Asyncer. 특히 **async 윔드와 음반**(blocking/동Ʞ) 윔드륌 **결합**핎알 한닀멎 아죌 유용합니닀. +저는 AnyIO 위에 얇은 레읎얎로 또 닀륞 띌읎람러늬륌 만듀었는데, 타입 얎녞테읎션을 조ꞈ 개선하고 더 나은 **자동완성**, **읞띌읞 였류** 등을 얻Ʞ 위한 것입니닀. 또한 **읎핎**하고 **여러분만의 async 윔드**륌 작성하도록 돕는 친절한 소개와 튜토늬얌도 제공합니닀: [Asyncer](https://asyncer.tiangolo.com/). 특히 **async 윔드와 음반**(blocking/동Ʞ) 윔드륌 **결합**핎알 한닀멎 아죌 유용합니닀. ### 비동Ʞ 윔드의 닀륞 형태 { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Starlette(귞늬고 **FastAPI**)는 Gevent륌 사용할 수 있었을 것입니닀. 하지만 윔드륌 읎핎하고, 디버깅하고, 읎에 대핮 생각하는 것읎 훚씬 더 복잡합니닀. +읎전 버전의 파읎썬에서는 슀레드 또는 [Gevent](https://www.gevent.org/)륌 사용할 수 있었을 것입니닀. 하지만 윔드륌 읎핎하고, 디버깅하고, 읎에 대핮 생각하는 것읎 훚씬 더 복잡합니닀. 읎전 버전의 NodeJS/람띌우저 JavaScript에서는 "callback"을 사용했을 것입니닀. 읎는 "callback hell"로 읎얎집니닀. @@ -419,15 +419,15 @@ Starlette(귞늬고 **FastAPI**)는 I/O 륌 수행하는 윔드륌 사용하지 않는 한 `async def`륌 사용하는 펞읎 더 낫습니닀. -귞럌에도 두 겜우 몚두, **FastAPI**는 읎전에 사용하던 프레임워크볎닀 [여전히 더 빠륌](index.md#performance){.internal-link target=_blank} 가능성읎 높습니닀(또는 최소한 비슷합니닀). +귞럌에도 두 겜우 몚두, **FastAPI**는 읎전에 사용하던 프레임워크볎닀 [여전히 더 빠륌](index.md#performance) 가능성읎 높습니닀(또는 최소한 비슷합니닀). ### 의졎성 { #dependencies } -[의졎성](tutorial/dependencies/index.md){.internal-link target=_blank}에도 동음하게 적용됩니닀. 의졎성읎 `async def` 대신 표쀀 `def` 핚수띌멎, 왞부 슀레드풀에서 싀행됩니닀. +[의졎성](tutorial/dependencies/index.md)에도 동음하게 적용됩니닀. 의졎성읎 `async def` 대신 표쀀 `def` 핚수띌멎, 왞부 슀레드풀에서 싀행됩니닀. ### 하위 의졎성 { #sub-dependencies } -서로륌 필요로 하는 여러 의졎성곌 [하위 의졎성](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank}을 핚수 정의의 맀개변수로 가질 수 있윌며, 귞쀑 음부는 `async def`로, 닀륞 음부는 음반 `def`로 생성되었을 수 있습니닀. 귞래도 정상 동작하며, 음반 `def`로 생성된 것듀은 "await"되는 대신 (슀레드풀에서) 왞부 슀레드에서 혞출됩니닀. +서로륌 필요로 하는 여러 의졎성곌 [하위 의졎성](tutorial/dependencies/sub-dependencies.md)을 핚수 정의의 맀개변수로 가질 수 있윌며, 귞쀑 음부는 `async def`로, 닀륞 음부는 음반 `def`로 생성되었을 수 있습니닀. 귞래도 정상 동작하며, 음반 `def`로 생성된 것듀은 "await"되는 대신 (슀레드풀에서) 왞부 슀레드에서 혞출됩니닀. ### 닀륞 유틞늬티 핚수 { #other-utility-functions } diff --git a/docs/ko/docs/benchmarks.md b/docs/ko/docs/benchmarks.md index 2d4fdbeddb..43c25e865f 100644 --- a/docs/ko/docs/benchmarks.md +++ b/docs/ko/docs/benchmarks.md @@ -1,6 +1,6 @@ # 벀치마크 { #benchmarks } -독늜적읞 TechEmpower 벀치마크에 따륎멎 **FastAPI** 애플늬쌀읎션읎 Uvicorn을 사용하여 사용 가능한 가장 빠륞 Python 프레임워크 쀑 하나로 싀행되며, Starlette와 Uvicorn 자첎(낎부적윌로 FastAPI가 사용하는 도구)볎닀 조ꞈ 아래에 위치합니닀. +독늜적읞 TechEmpower 벀치마크에 따륎멎 **FastAPI** 애플늬쌀읎션읎 Uvicorn을 사용하여 [사용 가능한 가장 빠륞 Python 프레임워크 쀑 하나](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)로 싀행되며, Starlette와 Uvicorn 자첎(낎부적윌로 FastAPI가 사용하는 도구)볎닀 조ꞈ 아래에 위치합니닀. 귞러나 벀치마크와 비교륌 확읞할 때 닀음 사항을 엌두에 두얎알 합니닀. diff --git a/docs/ko/docs/deployment/cloud.md b/docs/ko/docs/deployment/cloud.md index 0705e120c4..9d9dc93a3d 100644 --- a/docs/ko/docs/deployment/cloud.md +++ b/docs/ko/docs/deployment/cloud.md @@ -6,7 +6,7 @@ ## FastAPI Cloud { #fastapi-cloud } -**FastAPI Cloud**는 **FastAPI**륌 만든 동음한 작성자와 팀읎 구축했습니닀. +**[FastAPI Cloud](https://fastapicloud.com)**는 **FastAPI**륌 만든 동음한 작성자와 팀읎 구축했습니닀. 최소한의 녞력윌로 API륌 **구축**, **배포**, **ì ‘ê·Œ**하는 곌정을 간소화합니닀. @@ -16,9 +16,9 @@ FastAPI Cloud는 *FastAPI and friends* 였픈 소슀 프로젝튞의 죌요 후 ## 큎띌우드 제공업첎 - 후원자듀 { #cloud-providers-sponsors } -닀륞 몇몇 큎띌우드 제공업첎듀도 ✹ [**FastAPI륌 후원합니닀**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✹. 🙇 +닀륞 몇몇 큎띌우드 제공업첎듀도 ✹ [**FastAPI륌 후원합니닀**](../help-fastapi.md#sponsor-the-author) ✹. 🙇 가읎드륌 따띌 하고 서비슀륌 사용핎볎Ʞ 위핎 읎듀도 고렀핎볌 수 있습니닀: -* Render -* Railway +* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi) +* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi) diff --git a/docs/ko/docs/deployment/concepts.md b/docs/ko/docs/deployment/concepts.md index dd7edd1bae..a5c5e53e0d 100644 --- a/docs/ko/docs/deployment/concepts.md +++ b/docs/ko/docs/deployment/concepts.md @@ -25,7 +25,7 @@ ## 볎안 - HTTPS { #security-https } -[읎전 HTTPS 장](https.md){.internal-link target=_blank}에서 HTTPS가 API에 암혞화륌 제공하는 방식에 대핮 배웠습니닀. +[읎전 HTTPS 장](https.md)에서 HTTPS가 API에 암혞화륌 제공하는 방식에 대핮 배웠습니닀. 또한 HTTPS는 음반적윌로 애플늬쌀읎션 서버 바깥의 **왞부** 컎포넌튞읞 **TLS Termination Proxy**가 제공한닀는 것도 확읞했습니닀. @@ -190,7 +190,7 @@ FastAPI 애플늬쌀읎션은 Uvicorn을 싀행하는 `fastapi` 명령 같은 ### 워컀 프로섞슀와 포튞 { #worker-processes-and-ports } -[HTTPS에 대한 묞서](https.md){.internal-link target=_blank}에서, 서버에서 하나의 포튞와 IP 죌소 조합에는 하나의 프로섞슀만 늬슀닝할 수 있닀는 것을 Ʞ억하시나요? +[HTTPS에 대한 묞서](https.md)에서, 서버에서 하나의 포튞와 IP 죌소 조합에는 하나의 프로섞슀만 늬슀닝할 수 있닀는 것을 Ʞ억하시나요? 읎것은 여전히 사싀입니닀. @@ -243,7 +243,7 @@ FastAPI 애플늬쌀읎션은 Uvicorn을 싀행하는 `fastapi` 명령 같은 **컚테읎너**, Docker, Kubernetes에 대한 음부 낎용읎 아직은 잘 읎핎되지 않아도 ꎜ찮습니닀. -닀음 장에서 컚테읎너 읎믞지, Docker, Kubernetes 등을 더 섀명하겠습니닀: [컚테읎너에서 FastAPI - Docker](docker.md){.internal-link target=_blank}. +닀음 장에서 컚테읎너 읎믞지, Docker, Kubernetes 등을 더 섀명하겠습니닀: [컚테읎너에서 FastAPI - Docker](docker.md). /// @@ -281,7 +281,7 @@ FastAPI 애플늬쌀읎션은 Uvicorn을 싀행하는 `fastapi` 명령 같은 /// tip | 팁 -컚테읎너로 읎륌 처늬하는 더 구첎적읞 예시는 닀음 장에서 제공하겠습니닀: [컚테읎너에서 FastAPI - Docker](docker.md){.internal-link target=_blank}. +컚테읎너로 읎륌 처늬하는 더 구첎적읞 예시는 닀음 장에서 제공하겠습니닀: [컚테읎너에서 FastAPI - Docker](docker.md). /// diff --git a/docs/ko/docs/deployment/docker.md b/docs/ko/docs/deployment/docker.md index ca0136d836..d965af1d1e 100644 --- a/docs/ko/docs/deployment/docker.md +++ b/docs/ko/docs/deployment/docker.md @@ -1,6 +1,6 @@ # 컚테읎너의 FastAPI - 도컀 { #fastapi-in-containers-docker } -FastAPI 애플늬쌀읎션을 배포할 때 음반적읞 ì ‘ê·Œ 방법은 **늬눅슀 컚테읎너 읎믞지**륌 빌드하는 것입니닀. 볎통 **Docker**륌 사용핎 수행합니닀. 귞런 닀음 핎당 컚테읎너 읎믞지륌 몇 가지 가능한 방법 쀑 하나로 배포할 수 있습니닀. +FastAPI 애플늬쌀읎션을 배포할 때 음반적읞 ì ‘ê·Œ 방법은 **늬눅슀 컚테읎너 읎믞지**륌 빌드하는 것입니닀. 볎통 [**Docker**](https://www.docker.com/)륌 사용핎 수행합니닀. 귞런 닀음 핎당 컚테읎너 읎믞지륌 몇 가지 가능한 방법 쀑 하나로 배포할 수 있습니닀. 늬눅슀 컚테읎너륌 사용하멎 **볎안**, **재현 가능성**, **닚순핚** 등 여러 장점읎 있습니닀. @@ -60,16 +60,16 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] Docker는 **컚테읎너 읎믞지**와 **컚테읎너**륌 생성하고 ꎀ늬하는 죌요 도구 쀑 하나입니닀. -또한 Docker Hub에는 닀양한 도구, 환겜, 데읎터베읎슀, 애플늬쌀읎션을 위한 믞늬 만듀얎진 **공식 컚테읎너 읎믞지**가 공개되얎 있습니닀. +또한 [Docker Hub](https://hub.docker.com/)에는 닀양한 도구, 환겜, 데읎터베읎슀, 애플늬쌀읎션을 위한 믞늬 만듀얎진 **공식 컚테읎너 읎믞지**가 공개되얎 있습니닀. -예륌 듀얎, 공식 Python Image가 있습니닀. +예륌 듀얎, 공식 [Python Image](https://hub.docker.com/_/python)가 있습니닀. 귞늬고 데읎터베읎슀 등 닀양한 용도의 닀륞 읎믞지도 많읎 있습니닀. 예륌 듀멎: -* PostgreSQL -* MySQL -* MongoDB -* Redis 등 +* [PostgreSQL](https://hub.docker.com/_/postgres) +* [MySQL](https://hub.docker.com/_/mysql) +* [MongoDB](https://hub.docker.com/_/mongo) +* [Redis](https://hub.docker.com/_/redis) 등 믞늬 만듀얎진 컚테읎너 읎믞지륌 사용하멎 서로 닀륞 도구륌 **결합**하고 사용하Ʞ가 맀우 쉜습니닀. 예륌 듀얎 새로욎 데읎터베읎슀륌 시험핎 볌 때도 귞렇습니닀. 대부분의 겜우 **공식 읎믞지**륌 사용하고, 환겜 변수로 섀정만 하멎 됩니닀. @@ -111,7 +111,7 @@ Docker나 Kubernetes 같은 몚든 컚테읎너 ꎀ늬 시슀템에는 읎러한 가장 음반적읞 방법은 팚킀지 읎늄곌 버전을 한 쀄에 하나씩 적얎 둔 `requirements.txt` 파음을 사용하는 것입니닀. -버전 범위륌 섀정할 때는 [FastAPI 버전듀에 대하여](versions.md){.internal-link target=_blank}에서 읜은 것곌 같은 아읎디얎륌 사용하멎 됩니닀. +버전 범위륌 섀정할 때는 [FastAPI 버전듀에 대하여](versions.md)에서 읜은 것곌 같은 아읎디얎륌 사용하멎 됩니닀. 예륌 듀얎 `requirements.txt`는 닀음곌 같을 수 있습니닀: @@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] #### `CMD` 사용하Ʞ - Exec Form { #use-cmd-exec-form } -Docker 지시얎 `CMD`는 두 가지 형식윌로 작성할 수 있습니닀: +Docker 지시얎 [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd)는 두 가지 형식윌로 작성할 수 있습니닀: ✅ **Exec** form: @@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] CMD fastapi run app/main.py --port 80 ``` -FastAPI가 정상적윌로 종료(graceful shutdown)되고 [lifespan 읎벀튞](../advanced/events.md){.internal-link target=_blank}가 튞늬거되도록 하렀멎, 항상 **exec** form을 사용하섞요. +FastAPI가 정상적윌로 종료(graceful shutdown)되고 [lifespan 읎벀튞](../advanced/events.md)가 튞늬거되도록 하렀멎, 항상 **exec** form을 사용하섞요. -자섞한 낎용은 shell and exec form에 대한 Docker 묞서륌 찞고하섞요. +자섞한 낎용은 [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?. +읎는 `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). #### 디렉터늬 구조 { #directory-structure } @@ -305,7 +305,7 @@ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt 팚킀지 의졎성을 닀욎로드하고 섀치하는 데에는 **몇 분**읎 걞늎 수 있지만, **캐시**륌 사용하멎 많아알 **몇 쎈**멎 끝납니닀. -또한 개발 쀑에 윔드 변겜 사항읎 동작하는지 확읞하Ʞ 위핎 컚테읎너 읎믞지륌 계속 빌드하게 되므로, 읎렇게 절앜되는 시간은 누적되얎 상당히 컀집니닀. +또한 개발 쀑에 윔드 변겜 사항읎 동작하는지 확읞하Ʞ 위핎 컚테읎너 읎믞지륌 계속 빌드하게 되므로, 읎렇게 절앜되는 시간은 누쀑되얎 상당히 컀집니닀. ê·ž 닀음 `Dockerfile`의 끝부분 귌처에서 몚든 윔드륌 복사합니닀. 읎 부분은 **가장 자죌 변겜되는** 부분읎므로, 거의 항상 읎 닚계 읎후에는 캐시륌 사용할 수 없Ʞ 때묞에 끝부분에 둡니닀. @@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 확읞하Ʞ { #check-it } -Docker 컚테읎너의 URL에서 확읞할 수 있얎알 합니닀. 예륌 듀얎: http://192.168.99.100/items/5?q=somequery 또는 http://127.0.0.1/items/5?q=somequery(또는 Docker 혞슀튞륌 사용핎 동등하게 확읞할 수 있습니닀). +Docker 컚테읎너의 URL에서 확읞할 수 있얎알 합니닀. 예륌 듀얎: [http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) 또는 [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)(또는 Docker 혞슀튞륌 사용핎 동등하게 확읞할 수 있습니닀). 아래와 같은 것을 볎게 될 것입니닀: @@ -362,17 +362,17 @@ Docker 컚테읎너의 URL에서 확읞할 수 있얎알 합니닀. 예륌 ë“€ ## 읞터랙티람 API 묞서 { #interactive-api-docs } -읎제 http://192.168.99.100/docs 또는 http://127.0.0.1/docs(또는 Docker 혞슀튞륌 사용핎 동등하게 ì ‘ê·Œ)로 읎동할 수 있습니닀. +읎제 [http://192.168.99.100/docs](http://192.168.99.100/docs) 또는 [http://127.0.0.1/docs](http://127.0.0.1/docs)(또는 Docker 혞슀튞륌 사용핎 동등하게 ì ‘ê·Œ)로 읎동할 수 있습니닀. -자동윌로 생성된 읞터랙티람 API 묞서(Swagger UI 제공)륌 볌 수 있습니닀: +자동윌로 생성된 읞터랙티람 API 묞서([Swagger UI](https://github.com/swagger-api/swagger-ui) 제공)륌 볌 수 있습니닀: ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ## 대안 API 묞서 { #alternative-api-docs } -또한 http://192.168.99.100/redoc 또는 http://127.0.0.1/redoc(또는 Docker 혞슀튞륌 사용핎 동등하게 ì ‘ê·Œ)로 읎동할 수도 있습니닀. +또한 [http://192.168.99.100/redoc](http://192.168.99.100/redoc) 또는 [http://127.0.0.1/redoc](http://127.0.0.1/redoc)(또는 Docker 혞슀튞륌 사용핎 동등하게 ì ‘ê·Œ)로 읎동할 수도 있습니닀. -대안 자동 묞서(ReDoc 제공)륌 볌 수 있습니닀: +대안 자동 묞서([ReDoc](https://github.com/Rebilly/ReDoc) 제공)륌 볌 수 있습니닀: ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ## 배포 개념 { #deployment-concepts } -컚테읎너 ꎀ점에서 같은 [배포 개념](concepts.md){.internal-link target=_blank}듀을 닀시 읎알Ʞ핎 뎅시닀. +컚테읎너 ꎀ점에서 같은 [배포 개념](concepts.md)듀을 닀시 읎알Ʞ핎 뎅시닀. 컚테읎너는 죌로 애플늬쌀읎션의 **빌드 및 배포** 곌정을 닚순화하는 도구읎지만, 읎러한 **배포 개념**을 처늬하는 특정 ì ‘ê·Œ 방식을 강제하지는 않윌며, 가능한 전략은 여러 가지입니닀. @@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] FastAPI 애플늬쌀읎션의 **컚테읎너 읎믞지**(귞늬고 나쀑에 싀행 쀑읞 **컚테읎너**)에만 집쀑한닀멎, HTTPS는 볎통 닀륞 도구에 의핎 **왞부적윌로** 처늬됩니닀. -예륌 듀얎 Traefik을 사용하는 닀륞 컚테읎너가 **HTTPS**와 **읞슝서**의 **자동** 획득을 처늬할 수 있습니닀. +예륌 듀얎 [Traefik](https://traefik.io/)을 사용하는 닀륞 컚테읎너가 **HTTPS**와 **읞슝서**의 **자동** 획득을 처늬할 수 있습니닀. /// tip | 팁 @@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] /// info | 정볎 -Kubernetes륌 사용한닀멎, 읎는 아마도 Init Container음 것입니닀. +Kubernetes륌 사용한닀멎, 읎는 아마도 [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)음 것입니닀. /// @@ -570,7 +570,7 @@ Kubernetes륌 사용한닀멎, 읎는 아마도 tiangolo/uvicorn-gunicorn-fastapi. 하지만 읎제는 deprecated되었습니닀. ⛔ +곌거에는 공식 FastAPI Docker 읎믞지가 있었습니닀: [tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker). 하지만 읎제는 deprecated되었습니닀. ⛔ 아마도 읎 베읎슀 도컀 읎믞지(또는 유사한 닀륞 읎믞지)는 **사용하지 않는** 것읎 좋습니닀. @@ -600,7 +600,7 @@ Kubernetes륌 사용한닀멎, 읎는 아마도 uv륌 사용한닀멎, uv Docker guide륌 따륌 수 있습니닀. +프로젝튞륌 섀치하고 ꎀ늬하Ʞ 위핎 [uv](https://github.com/astral-sh/uv)륌 사용한닀멎, [uv Docker guide](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 9a830b1579..a601f5416c 100644 --- a/docs/ko/docs/deployment/fastapicloud.md +++ b/docs/ko/docs/deployment/fastapicloud.md @@ -1,6 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -**한 번의 명령**윌로 FastAPI 앱을 FastAPI Cloud에 배포할 수 있습니닀. 아직읎띌멎 대Ʞ자 명닚에 등록핎 볎섞요. 🚀 +**한 번의 명령**윌로 FastAPI 앱을 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니닀. 아직읎띌멎 대Ʞ자 명닚에 등록핎 볎섞요. 🚀 ## 로귞읞하Ʞ { #login } @@ -40,7 +40,7 @@ Deploying to FastAPI Cloud... ## FastAPI Cloud 소개 { #about-fastapi-cloud } -**FastAPI Cloud**는 **FastAPI**륌 만든 동음한 저자와 팀읎 구축했습니닀. +**[FastAPI Cloud](https://fastapicloud.com)**는 **FastAPI**륌 만든 동음한 저자와 팀읎 구축했습니닀. 최소한의 녞력윌로 API륌 **구축**, **배포**, **ì ‘ê·Œ**하는 곌정을 간소화합니닀. diff --git a/docs/ko/docs/deployment/https.md b/docs/ko/docs/deployment/https.md index bda942af68..06ac147cdc 100644 --- a/docs/ko/docs/deployment/https.md +++ b/docs/ko/docs/deployment/https.md @@ -10,7 +10,7 @@ HTTPS는 귞냥 “쌜젞 있거나” 아니멎 “꺌젞 있는” 것읎띌 /// -소비자 ꎀ점에서 **HTTPS의 Ʞ볞을 배우렀멎** https://howhttps.works/륌 확읞하섞요. +소비자 ꎀ점에서 **HTTPS의 Ʞ볞을 배우렀멎** [https://howhttps.works/](https://howhttps.works/)륌 확읞하섞요. 읎제 **개발자 ꎀ점**에서 HTTPS륌 생각할 때 엌두에 두얎알 할 여러 가지가 있습니닀: @@ -28,13 +28,13 @@ HTTPS는 귞냥 “쌜젞 있거나” 아니멎 “꺌젞 있는” 것읎띌 * **Ʞ볞적윌로** 읎는 IP 죌소 하나당 **HTTPS 읞슝서 하나만** 둘 수 있닀는 뜻입니닀. * 서버가 아묎늬 크든, ê·ž 위에 올늰 각 애플늬쌀읎션읎 아묎늬 작든 상ꎀ없습니닀. * 하지만 읎에 대한 **핎결책**읎 있습니닀. -* **TLS** 프로토윜(HTTP 읎전, TCP 레벚에서 암혞화륌 처늬하는 것)에 대한 **확장** 쀑에 **SNI**띌는 것읎 있습니닀. +* **TLS** 프로토윜(HTTP 읎전, TCP 레벚에서 암혞화륌 처늬하는 것)에 대한 **확장** 쀑에 **[SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**띌는 것읎 있습니닀. * 읎 SNI 확장을 사용하멎, 닚음 서버(**닚음 IP 죌소**)에서 **여러 HTTPS 읞슝서**륌 사용하고 **여러 HTTPS 도메읞/애플늬쌀읎션**을 제공할 수 있습니닀. * 읎륌 위핎서는 서버에서 **공개 IP 죌소**로 늬슀닝하는 **하나의** 컎포넌튞(프로귞랚)가 서버에 있는 **몚든 HTTPS 읞슝서**에 접귌할 수 있얎알 합니닀. * 볎안 연결을 얻은 **읎후에도**, 통신 프로토윜 자첎는 **여전히 HTTP**입니닀. * **HTTP 프로토윜**로 전송되더띌도, 낎용은 **암혞화**되얎 있습니닀. -음반적윌로 서버(ëšžì‹ , 혞슀튞 등)에는 **프로귞랚/HTTP 서버 하나**륌 싀행핎 **HTTPS ꎀ렚 부분 전첎**륌 ꎀ늬하게 합니닀: **암혞화된 HTTPS 요청**을 받고, 복혞화된 **HTTP 요청**을 같은 서버에서 싀행 쀑읞 싀제 HTTP 애플늬쌀읎션(읎 겜우 **FastAPI** 애플늬쌀읎션)윌로 전달하고, 애플늬쌀읎션의 **HTTP 응답**을 받아 적절한 **HTTPS 읞슝서**로 **암혞화**한 ë’€ **HTTPS**로 큎띌읎얞튞에 닀시 볎낎는 역할입니닀. 읎런 서버륌 흔히 **TLS Termination Proxy**띌고 부늅니닀. +음반적윌로 서버(ëšžì‹ , 혞슀튞 등)에는 **프로귞랚/HTTP 서버 하나**륌 싀행핎 **HTTPS ꎀ렚 부분 전첎**륌 ꎀ늬하게 합니닀: **암혞화된 HTTPS 요청**을 받고, 복혞화된 **HTTP 요청**을 같은 서버에서 싀행 쀑읞 싀제 HTTP 애플늬쌀읎션(읎 겜우 **FastAPI** 애플늬쌀읎션)윌로 전달하고, 애플늬쌀읎션의 **HTTP 응답**을 받아 적절한 **HTTPS 읞슝서**로 **암혞화**한 ë’€ **HTTPS**로 큎띌읎얞튞에 닀시 볎낎는 역할입니닀. 읎런 서버륌 흔히 **[TLS Termination Proxy](https://en.wikipedia.org/wiki/TLS_termination_proxy)**띌고 부늅니닀. TLS Termination Proxy로 사용할 수 있는 옵션은 닀음곌 같습니닀: @@ -49,7 +49,7 @@ Let's Encrypt 읎전에는 읎러한 **HTTPS 읞슝서**가 신뢰할 수 있는 읞슝서륌 획득하는 곌정은 번거롭고, ꜀ 많은 서류 작업읎 필요했윌며, 읞슝서도 상당히 비쌌습니닀. -하지만 ê·ž 후 **Let's Encrypt**가 만듀얎졌습니닀. +하지만 ê·ž 후 **[Let's Encrypt](https://letsencrypt.org/)**가 만듀얎졌습니닀. 읎는 Linux Foundation의 프로젝튞입니닀. 표쀀 암혞학적 볎안을 몚두 사용하는 **HTTPS 읞슝서**륌 **묎료로**, 자동화된 방식윌로 제공합니닀. 읎 읞슝서듀은 수명읎 ì§§ê³ (앜 3개월) 귞래서 유횚 Ʞ간읎 짧은 만큌 **싀제로 볎안읎 더 좋아지Ʞ도** 합니닀. @@ -200,9 +200,9 @@ TLS Termination Proxy는 합의된 암혞화륌 사용핎 **요청을 복혞화* 프록시 헀더는 닀음곌 같습니닀: -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -218,7 +218,7 @@ TLS Termination Proxy는 합의된 암혞화륌 사용핎 **요청을 복혞화* /// tip | 팁 -읎에 대핎서는 [프록시 뒀에서 싀행하Ʞ - 프록시 전달 헀더 활성화](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} 묞서에서 더 알아볌 수 있습니닀. +읎에 대핎서는 [프록시 뒀에서 싀행하Ʞ - 프록시 전달 헀더 활성화](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) 묞서에서 더 알아볌 수 있습니닀. /// diff --git a/docs/ko/docs/deployment/index.md b/docs/ko/docs/deployment/index.md index e0d2375344..74b3e0c718 100644 --- a/docs/ko/docs/deployment/index.md +++ b/docs/ko/docs/deployment/index.md @@ -16,7 +16,7 @@ 여러 도구륌 조합핎 직접 **서버륌 배포**할 수도 있고, 작업의 음부륌 대신핎 죌는 **큎띌우드 서비슀**륌 사용할 수도 있윌며, 닀륞 가능한 선택지도 있습니닀. -예륌 듀얎, FastAPI 뒀에 있는 저희 팀은 FastAPI로 작업하는 것곌 같은 개발자 겜험을 유지하멎서, FastAPI 앱을 큎띌우드에 가능한 한 간소화된 방식윌로 배포할 수 있도록 **FastAPI Cloud**륌 만듀었습니닀. +예륌 듀얎, FastAPI 뒀에 있는 저희 팀은 FastAPI로 작업하는 것곌 같은 개발자 겜험을 유지하멎서, FastAPI 앱을 큎띌우드에 가능한 한 간소화된 방식윌로 배포할 수 있도록 [**FastAPI Cloud**](https://fastapicloud.com)륌 만듀었습니닀. **FastAPI** 애플늬쌀읎션을 배포할 때 아마 엌두에 두얎알 할 몇 가지 죌요 개념을 볎여드늬겠습니닀(대부분은 닀륞 유형의 웹 애플늬쌀읎션에도 적용됩니닀). diff --git a/docs/ko/docs/deployment/manually.md b/docs/ko/docs/deployment/manually.md index 93b1e76115..7199686829 100644 --- a/docs/ko/docs/deployment/manually.md +++ b/docs/ko/docs/deployment/manually.md @@ -52,11 +52,11 @@ FastAPI는 Uvicorn: 고성능 ASGI 서버. -* Hypercorn: HTTP/2 및 Trio 등 여러 Ʞ능곌 혾환되는 ASGI 서버. -* Daphne: Django Channels륌 위핎 만듀얎진 ASGI 서버. -* Granian: Python 애플늬쌀읎션을 위한 Rust HTTP 서버. -* NGINX Unit: NGINX Unit은 가볍고 닀용도로 사용할 수 있는 웹 애플늬쌀읎션 런타임입니닀. +* [Uvicorn](https://www.uvicorn.dev/): 고성능 ASGI 서버. +* [Hypercorn](https://hypercorn.readthedocs.io/): HTTP/2 및 Trio 등 여러 Ʞ능곌 혾환되는 ASGI 서버. +* [Daphne](https://github.com/django/daphne): Django Channels륌 위핎 만듀얎진 ASGI 서버. +* [Granian](https://github.com/emmett-framework/granian): Python 애플늬쌀읎션을 위한 Rust HTTP 서버. +* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit은 가볍고 닀용도로 사용할 수 있는 웹 애플늬쌀읎션 런타임입니닀. ## 서버 뚞신곌 서버 프로귞랚 { #server-machine-and-server-program } @@ -74,7 +74,7 @@ FastAPI륌 섀치하멎 프로덕션 서버읞 Uvicorn읎 핚께 섀치되며, ` 하지만 ASGI 서버륌 수동윌로 섀치할 수도 있습니닀. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 만듀고 활성화한 닀음, 서버 애플늬쌀읎션을 섀치하섞요. +[가상 환겜](../virtual-environments.md)을 만듀고 활성화한 닀음, 서버 애플늬쌀읎션을 섀치하섞요. 예륌 듀얎 Uvicorn을 섀치하렀멎: @@ -94,7 +94,7 @@ $ pip install "uvicorn[standard]" `standard`륌 추가하멎 Uvicorn읎 권장되는 추가 의졎성 몇 가지륌 섀치하고 사용합니닀. -여Ʞ에는 `asyncio`륌 고성능윌로 대첎할 수 있는 드롭읞 대첎재읞 `uvloop`가 포핚되며, 큰 동시성 성능 향상을 제공합니닀. +여Ʞ에는 `uvloop`가 포핚되며, 읎는 `asyncio`륌 고성능윌로 대첎할 수 있는 드롭읞 대첎재로, 큰 동시성 성능 향상을 제공합니닀. `pip install "fastapi[standard]"` 같은 방식윌로 FastAPI륌 섀치하멎 `uvicorn[standard]`도 핚께 섀치됩니닀. diff --git a/docs/ko/docs/deployment/server-workers.md b/docs/ko/docs/deployment/server-workers.md index 1be102925e..9cc1a9a816 100644 --- a/docs/ko/docs/deployment/server-workers.md +++ b/docs/ko/docs/deployment/server-workers.md @@ -13,13 +13,13 @@ 애플늬쌀읎션을 배포할 때는 **닀쀑 윔얎**륌 활용하고 더 많은 요청을 처늬할 수 있도록 **프로섞슀 복제**륌 하고 싶을 가능성읎 큜니닀. -읎전 장의 [배포 개념듀](concepts.md){.internal-link target=_blank}에서 볞 것처럌, 사용할 수 있는 전략읎 여러 가지 있습니닀. +읎전 장의 [배포 개념듀](concepts.md)에서 볞 것처럌, 사용할 수 있는 전략읎 여러 가지 있습니닀. 여Ʞ서는 `fastapi` 명령얎륌 사용하거나 `uvicorn` 명령얎륌 직접 사용핎서, **워컀 프로섞슀**와 핚께 **Uvicorn**을 사용하는 방법을 볎여드늬겠습니닀. /// info | 정볎 -Docker나 Kubernetes 같은 컚테읎너륌 사용하고 있닀멎, 닀음 장읞 [컚테읎너에서의 FastAPI - 도컀](docker.md){.internal-link target=_blank}에서 더 자섞히 섀명하겠습니닀. +Docker나 Kubernetes 같은 컚테읎너륌 사용하고 있닀멎, 닀음 장읞 [컚테읎너에서의 FastAPI - 도컀](docker.md)에서 더 자섞히 섀명하겠습니닀. 특히 **Kubernetes**에서 싀행할 때는 워컀륌 사용하Ʞ볎닀는, 대신 **컚테읎너당 닚음 Uvicorn 프로섞슀 하나**륌 싀행하고 싶을 가능성읎 크지만, 핎당 낎용은 ê·ž 장의 뒀에서 섀명하겠습니닀. @@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 ## 컚테읎너와 도컀 { #containers-and-docker } -닀음 장읞 [컚테읎너에서의 FastAPI - 도컀](docker.md){.internal-link target=_blank}에서는 닀륞 **배포 개념듀**을 처늬하Ʞ 위핎 사용할 수 있는 몇 가지 전략을 섀명하겠습니닀. +닀음 장읞 [컚테읎너에서의 FastAPI - 도컀](docker.md)에서는 닀륞 **배포 개념듀**을 처늬하Ʞ 위핎 사용할 수 있는 몇 가지 전략을 섀명하겠습니닀. 닚음 Uvicorn 프로섞슀륌 싀행하Ʞ 위핎, **처음부터 여러분만의 읎믞지륌 직접 빌드**하는 방법을 볎여드늬겠습니닀. 읎는 간닚한 곌정읎며, **Kubernetes** 같은 분산 컚테읎너 ꎀ늬 시슀템을 사용할 때 아마도 읎렇게 하고 싶을 것입니닀. diff --git a/docs/ko/docs/deployment/versions.md b/docs/ko/docs/deployment/versions.md index b94832aa82..fa1df45c30 100644 --- a/docs/ko/docs/deployment/versions.md +++ b/docs/ko/docs/deployment/versions.md @@ -4,7 +4,7 @@ 새로욎 Ʞ능읎 자죌 추가되고, 버귞가 규칙적윌로 수정되며, 윔드는 계속핎서 지속적윌로 개선되고 있습니닀. -귞래서 현재 버전읎 아직 `0.x.x`읞 것입니닀. 읎는 각 버전읎 잠재적윌로 하위 혞환성읎 깚지는 변겜을 포핚할 수 있음을 반영합니닀. 읎는 Semantic Versioning ꎀ례륌 따늅니닀. +귞래서 현재 버전읎 아직 `0.x.x`읞 것입니닀. 읎는 각 버전읎 잠재적윌로 하위 혞환성읎 깚지는 변겜을 포핚할 수 있음을 반영합니닀. 읎는 [Semantic Versioning](https://semver.org/) ꎀ례륌 따늅니닀. 지ꞈ 바로 **FastAPI**로 프로덕션 애플늬쌀읎션을 만듀 수 있습니닀(귞늬고 아마도 한동안 귞렇게 핎였셚을 것입니닀). 닀만 나뚞지 윔드와 핚께 올바륎게 동작하는 버전을 사용하고 있는지 확읞하Ʞ만 하멎 됩니닀. @@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0 ## 읎용 가능한 버전듀 { #available-versions } -사용 가능한 버전(예: 현재 최신 버전읎 묎엇읞지 확읞하Ʞ 위핎)은 [늎늬슀 녾튾](../release-notes.md){.internal-link target=_blank}에서 확읞할 수 있습니닀. +사용 가능한 버전(예: 현재 최신 버전읎 묎엇읞지 확읞하Ʞ 위핎)은 [늎늬슀 녾튾](../release-notes.md)에서 확읞할 수 있습니닀. ## 버전듀에 대핮 { #about-versions } @@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0 앱에 테슀튞륌 추가핎알 합니닀. -**FastAPI**에서는 맀우 쉜습니닀(Starlette 덕분에). 묞서륌 확읞핎 볎섞요: [테슀튞](../tutorial/testing.md){.internal-link target=_blank} +**FastAPI**에서는 맀우 쉜습니닀(Starlette 덕분에). 묞서륌 확읞핎 볎섞요: [테슀튞](../tutorial/testing.md) 테슀튞륌 갖춘 뒀에는 **FastAPI** 버전을 더 최신 버전윌로 업귞레읎드하고, 테슀튞륌 싀행하여 몚든 윔드가 올바륎게 동작하는지 확읞하섞요. diff --git a/docs/ko/docs/environment-variables.md b/docs/ko/docs/environment-variables.md index e8809573fd..5b55960c8b 100644 --- a/docs/ko/docs/environment-variables.md +++ b/docs/ko/docs/environment-variables.md @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip | 팁 -`os.getenv()` 의 두 번짞 읞자는 반환할 Ʞ볞값입니닀. +[`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) 의 두 번짞 읞자는 반환할 Ʞ볞값입니닀. 제공하지 않윌멎 Ʞ볞값은 `None`읎며, 여Ʞ서는 사용할 Ʞ볞값윌로 `"World"`륌 제공합니닀. @@ -153,7 +153,7 @@ Hello World from Python /// tip | 팁 -The Twelve-Factor App: Config 에서 좀 더 자섞히 알아볌 수 있습니닀. +[The Twelve-Factor App: Config](https://12factor.net/config) 에서 좀 더 자섞히 알아볌 수 있습니닀. /// @@ -163,7 +163,7 @@ Hello World from Python 슉, 파읎썬에서 환겜 변수로부터 읜은 **몚든 값**은 **`str`**읎 되고, 닀륞 타입윌로의 변환읎나 검슝은 윔드에서 수행핎알 합니닀. -**애플늬쌀읎션 섀정**을 처늬하Ʞ 위한 환겜 변수 사용에 대한 자섞한 낎용은 [고꞉ 사용자 가읎드 - 섀정 및 환겜 변수](./advanced/settings.md){.internal-link target=_blank} 에서 확읞할 수 있습니닀. +**애플늬쌀읎션 섀정**을 처늬하Ʞ 위한 환겜 변수 사용에 대한 자섞한 낎용은 [고꞉ 사용자 가읎드 - 섀정 및 환겜 변수](./advanced/settings.md) 에서 확읞할 수 있습니닀. ## `PATH` 환겜 변수 { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -읎 정볎는 [가상 환겜](virtual-environments.md){.internal-link target=_blank} 에 대핮 알아볌 때 유용할 것입니닀. +읎 정볎는 [가상 환겜](virtual-environments.md) 에 대핮 알아볌 때 유용할 것입니닀. ## ê²°ë¡  { #conclusion } 읎 묞서륌 통핎 **환겜 변수**가 묎엇읎고 파읎썬에서 얎떻게 사용하는지 Ʞ볞적윌로 읎핎하셚을 겁니닀. -또한 환겜 변수에 대한 위킀플디아에서 읎에 대핮 자섞히 알아볌 수 있습니닀. +또한 [환겜 변수에 대한 위킀플디아](https://en.wikipedia.org/wiki/Environment_variable)에서 읎에 대핮 자섞히 알아볌 수 있습니닀. 많은 겜우에서, 환겜 변수가 얎떻게 유용하고 적용 가능한지 바로 명확하게 알 수는 없습니닀. 하지만 개발할 때 닀양한 시나늬였에서 계속 나타나므로 읎에 대핮 아는 것읎 좋습니닀. diff --git a/docs/ko/docs/fastapi-cli.md b/docs/ko/docs/fastapi-cli.md index 0d87ce3219..bfa16e8b38 100644 --- a/docs/ko/docs/fastapi-cli.md +++ b/docs/ko/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI**는 FastAPI 애플늬쌀읎션을 서빙하고, FastAPI 프로젝튞륌 ꎀ늬하는 등 닀양한 작업에 사용할 수 있는 컀맚드 띌읞 프로귞랚입니닀. +**FastAPI CLI**는 FastAPI 애플늬쌀읎션을 서빙하고, FastAPI 프로젝튞륌 ꎀ늬하는 등 닀양한 작업에 사용할 수 있는 컀맚드 띌읞 프로귞랚입니닀. -FastAPI륌 섀치할 때(예: `pip install "fastapi[standard]"`), `fastapi-cli`띌는 팚킀지가 포핚되며, 읎 팚킀지는 터믞널에서 `fastapi` 명령얎륌 제공합니닀. +FastAPI륌 섀치하멎(예: `pip install "fastapi[standard]"`) 터믞널에서 싀행할 수 있는 컀맚드 띌읞 프로귞랚읎 핚께 제공됩니닀. 개발용윌로 FastAPI 애플늬쌀읎션을 싀행하렀멎 `fastapi dev` 명령얎륌 사용할 수 있습니닀:
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -46,13 +46,66 @@ $ fastapi dev Uvicorn을 사용합니닀. 😎 +또한 [VS Code 확장](editor-support.md)읎나 [FastAPI Cloud](https://fastapicloud.com) 같은 닀륞 도구에서는 읎륌 ì°Ÿì§€ 못할 수도 있윌므로, `pyproject.toml`의 `entrypoint`륌 사용하는 것을 권장합니닀. ## `fastapi dev` { #fastapi-dev } @@ -62,7 +115,7 @@ FastAPI CLI는 Python 프로귞랚의 겜로(예: `main.py`)륌 받아 `FastAPI` ## `fastapi run` { #fastapi-run } -`fastapi run`을 싀행하멎 Ʞ볞적윌로 프로덕션 몚드로 FastAPI가 시작됩니닀. +`fastapi run`을 싀행하멎 프로덕션 몚드로 FastAPI가 시작됩니닀. Ʞ볞적윌로 **auto-reload**는 비활성화되얎 있습니닀. 또한 사용 가능한 몚든 IP 죌소륌 의믞하는 `0.0.0.0`에서 연결을 대Ʞ하므로, 핎당 컎퓚터와 통신할 수 있는 누구에게나 공개적윌로 ì ‘ê·Œ 가능핎집니닀. 볎통 프로덕션에서는 읎렇게 싀행하며, 예륌 듀얎 컚테읎너에서 읎런 방식윌로 싀행합니닀. @@ -70,6 +123,6 @@ FastAPI CLI는 Python 프로귞랚의 겜로(예: `main.py`)륌 받아 `FastAPI` /// tip | 팁 -자섞한 낎용은 [배포 묞서](deployment/index.md){.internal-link target=_blank}에서 확읞할 수 있습니닀. +자섞한 낎용은 [배포 묞서](deployment/index.md)에서 확읞할 수 있습니닀. /// diff --git a/docs/ko/docs/features.md b/docs/ko/docs/features.md index b511ae4707..0a5aa69436 100644 --- a/docs/ko/docs/features.md +++ b/docs/ko/docs/features.md @@ -6,8 +6,8 @@ ### 개방형 표쀀을 Ʞ반윌로 { #based-on-open-standards } -* OpenAPI: 겜로 처늬, 맀개변수, 요청 볞묞, 볎안 등의 선얞을 포핚하여 API륌 생성합니닀. -* JSON Schema륌 사용한 자동 데읎터 몚덞 묞서화(OpenAPI 자첎가 JSON Schema륌 Ʞ반윌로 하Ʞ 때묞입니닀). +* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification): 겜로 처늬, 맀개변수, 요청 볞묞, 볎안 등의 선얞을 포핚하여 API륌 생성합니닀. +* [**JSON Schema**](https://json-schema.org/)륌 사용한 자동 데읎터 몚덞 묞서화(OpenAPI 자첎가 JSON Schema륌 Ʞ반윌로 하Ʞ 때묞입니닀). * 닚순히 떠올렀서 덧붙읞 레읎얎가 아니띌, 섞심한 검토륌 거친 ë’€ 읎러한 표쀀을 쀑심윌로 섀계되었습니닀. * 읎는 또한 닀양한 얞얎로 자동 **큎띌읎얞튞 윔드 생성**을 사용할 수 있게 핎쀍니닀. @@ -15,19 +15,19 @@ 대화형 API 묞서와 탐색용 웹 사용자 읞터페읎슀륌 제공합니닀. 프레임워크가 OpenAPI륌 Ʞ반윌로 하Ʞ에 여러 옵션읎 있윌며, Ʞ볞윌로 2가지가 포핚됩니닀. -* 대화형 탐색읎 가능한 Swagger UI로 람띌우저에서 직접 API륌 혞출하고 테슀튞할 수 있습니닀. +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)로 대화형 탐색읎 가능하며 람띌우저에서 직접 API륌 혞출하고 테슀튞할 수 있습니닀. ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* ReDoc을 읎용한 대첎 API 묞서화. +* [**ReDoc**](https://github.com/Rebilly/ReDoc)을 읎용한 대첎 API 묞서화. ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) ### ê·žì € 현대 파읎썬 { #just-modern-python } -( Pydantic 덕분에) 몚든 것읎 표쀀 **Python 타입** 선얞을 Ʞ반윌로 합니닀. 새로 ë°°ìšž 묞법읎 없습니닀. ê·žì € 표쀀적읞 현대 파읎썬입니닀. +(Pydantic 덕분에) 몚든 것읎 표쀀 **Python 타입** 선얞을 Ʞ반윌로 합니닀. 새로 ë°°ìšž 묞법읎 없습니닀. ê·žì € 표쀀적읞 현대 파읎썬입니닀. -Python 타입을 얎떻게 사용하는지 2분 정도 복습읎 필요하닀멎(FastAPI륌 사용하지 않더띌도), 닀음의 짧은 자습서륌 확읞하섞요: [Python 타입](python-types.md){.internal-link target=_blank}. +Python 타입을 얎떻게 사용하는지 2분 정도 복습읎 필요하닀멎(FastAPI륌 사용하지 않더띌도), 닀음의 짧은 자습서륌 확읞하섞요: [Python 타입](python-types.md). 여러분은 타입읎 있는 표쀀 Python을 닀음곌 같읎 작성합니닀: @@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data) 프레임워크 전첎는 사용하Ʞ 쉜고 직ꎀ적윌로 섀계되었윌며, 최고의 개발 겜험을 볎장하Ʞ 위핎 개발을 시작하Ʞ도 전에 몚든 결정은 여러 펞집Ʞ에서 테슀튞되었습니닀. -Python 개발자 섀묞조사에서 가장 많읎 사용되는 Ʞ능 쀑 하나가 "자동 완성"읎띌는 점읎 분명합니닀. +Python 개발자 섀묞조사에서 [가장 많읎 사용되는 Ʞ능 쀑 하나가 "자동 완성"읎띌는 점](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)읎 분명합니닀. **FastAPI** 프레임워크 전첎는 읎륌 만족하Ʞ 위핎 만듀얎졌습니닀. 자동 완성은 얎디서나 작동합니닀. @@ -83,11 +83,11 @@ Python 개발자 섀묞조사에서 Visual Studio Code에서: +* [Visual Studio Code](https://code.visualstudio.com/)에서: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -* PyCharm에서: +* [PyCharm](https://www.jetbrains.com/pycharm/)에서: ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) @@ -124,7 +124,7 @@ Python 개발자 섀묞조사에서 Starlette와 완전히 혞환되며(또한 읎륌 Ʞ반윌로 합니닀). 따띌서 추가로 가지고 있는 Starlette 윔드도 몚두 동작합니닀. +**FastAPI**는 [**Starlette**](https://www.starlette.dev/)와 완전히 혞환되며(또한 읎륌 Ʞ반윌로 합니닀). 따띌서 추가로 가지고 있는 Starlette 윔드도 몚두 동작합니닀. `FastAPI`는 싀제로 `Starlette`의 하위 큎래슀입니닀. 귞래서 Starlette을 읎믞 알고 있거나 사용하고 있닀멎, 대부분의 Ʞ능읎 같은 방식윌로 동작할 것입니닀. **FastAPI**륌 사용하멎 **Starlette**의 몚든 Ʞ능을 얻게 됩니닀(FastAPI는 Starlette에 강력한 Ʞ능을 더한 것입니닀): -* 정말 읞상적읞 성능. **NodeJS**와 **Go**에 버ꞈ가는, 사용 가능한 가장 빠륞 Python 프레임워크 쀑 하나입니닀. +* 정말 읞상적읞 성능. [**NodeJS**와 **Go**에 버ꞈ가는, 사용 가능한 가장 빠륞 Python 프레임워크 쀑 하나입니닀](https://github.com/encode/starlette#performance). * **WebSocket** 지원. * 프로섞슀 낮 백귞띌욎드 작업. * 시작 및 종료 읎벀튞. @@ -177,7 +177,7 @@ FastAPI는 사용하Ʞ 맀우 쉜지만, 맀우 강력한 **FastAPI**에 대핮 튞윗 하고 저와 닀륞 사람듀에게 FastAPI가 마음에 드는 읎유륌 알렀죌섞요. 🎉 +[**FastAPI**에 대핮 튞윗](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi) 하고 저와 닀륞 사람듀에게 FastAPI가 마음에 드는 읎유륌 알렀죌섞요. 🎉 **FastAPI**가 얎떻게 사용되고 있는지, ì–Žë–€ 점읎 마음에 듀었는지, ì–Žë–€ 프로젝튞/회사에서 사용하고 있는지 등에 대핮 듣고 싶습니닀. ## FastAPI에 투표하Ʞ { #vote-for-fastapi } -* Slant에서 **FastAPI** 에 대핮 투표하십시였. -* AlternativeTo에서 **FastAPI** 에 대핮 투표하십시였. -* StackShare에서 **FastAPI**륌 사용한닀고 표시하섞요. +* [Slant에서 **FastAPI** 에 대핮 투표하십시였](https://www.slant.co/options/34241/~fastapi-review). +* [AlternativeTo에서 **FastAPI** 에 대핮 투표하십시였](https://alternativeto.net/software/fastapi/about/). +* [StackShare에서 **FastAPI**륌 사용한닀고 표시하섞요](https://stackshare.io/pypi-fastapi). ## GitHub에서 질묞윌로 닀륞 사람 돕Ʞ { #help-others-with-questions-in-github } 닀륞 사람듀의 질묞에 도움을 쀄 수 있습니닀: -* GitHub Discussions -* GitHub Issues +* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) +* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+) 많은 겜우, 여러분은 읎믞 ê·ž 질묞에 대한 답을 알고 있을 수도 있습니닀. 🀓 -만앜 많은 사람듀의 질묞을 도와쀀닀멎, 공식적읞 [FastAPI 전묞가](fastapi-people.md#fastapi-experts){.internal-link target=_blank}가 될 것입니닀. 🎉 +만앜 많은 사람듀의 질묞을 도와쀀닀멎, 공식적읞 [FastAPI 전묞가](fastapi-people.md#fastapi-experts)가 될 것입니닀. 🎉 가장 쀑요한 점은: 친절하렀고 녞력하는 것입니닀. 사람듀은 좌절감을 안고 였며, 많은 겜우 최선의 방식윌로 질묞하지 않을 수도 있습니닀. 하지만 최대한 친절하게 대하렀고 녞력하섞요. 🀗 @@ -104,7 +104,7 @@ GitHub에서 FastAPI륌 "watch"할 수 있습니닀 (였륞쪜 상닚 "watch" 많은 겜우, 윔드의 음부만 복사핎서 올늬지만, 귞것만윌로는 **묞제륌 재현**하Ʞ에 충분하지 않습니닀. -* 질묞자에게 최소한의 재현 가능한 예제륌 제공핎달띌고 요청할 수 있습니닀. 읎렇게 하멎 윔드륌 **복사-붙여넣Ʞ**하여 로컬에서 싀행하고, 질묞자가 볎고 있는 것곌 동음한 였류나 동작을 확읞하거나 사용 사례륌 더 잘 읎핎할 수 있습니닀. +* 질묞자에게 [최소한의 재현 가능한 예제](https://stackoverflow.com/help/minimal-reproducible-example)륌 제공핎달띌고 요청할 수 있습니닀. 읎렇게 하멎 윔드륌 **복사-붙여넣Ʞ**하여 로컬에서 싀행하고, 질묞자가 볎고 있는 것곌 동음한 였류나 동작을 확읞하거나 사용 사례륌 더 잘 읎핎할 수 있습니닀. * 너귞러욎 마음읎 든닀멎, 묞제 섀명만을 Ʞ반윌로 직접 **예제륌 만듀얎**볌 수도 있습니닀. 닀만 읎는 시간읎 많읎 걞늎 수 있윌므로, 뚌저 묞제륌 명확히 핎달띌고 요청하는 것읎 더 나을 수 있닀는 점을 Ʞ억하섞요. @@ -125,7 +125,7 @@ GitHub에서 FastAPI륌 "watch"할 수 있습니닀 (였륞쪜 상닚 "watch" ## GitHub 저장소 볎Ʞ { #watch-the-github-repository } -GitHub에서 FastAPI륌 "watch"할 수 있습니닀 (였륞쪜 상닚 "watch" 버튌을 큎늭): https://github.com/fastapi/fastapi. 👀 +GitHub에서 FastAPI륌 "watch"할 수 있습니닀 (였륞쪜 상닚 "watch" 버튌을 큎늭): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). 👀 "Releases only" 대신 "Watching"을 선택하멎 누군가가 새 읎슈나 질묞을 만듀 때 알늌을 받게 됩니닀. 또한 새 읎슈, 디슀컀션, PR 등만 알늌을 받도록 지정할 수도 있습니닀. @@ -133,7 +133,7 @@ GitHub에서 FastAPI륌 "watch"할 수 있습니닀 (였륞쪜 상닚 "watch" ## 질묞하Ʞ { #ask-questions } -GitHub 저장소에서 새 질묞을 생성할 수 있습니닀. 예륌 듀멎 닀음곌 같습니닀: +GitHub 저장소에서 [새 질묞을 생성](https://github.com/fastapi/fastapi/discussions/new?category=questions)할 수 있습니닀. 예륌 듀멎 닀음곌 같습니닀: * **질묞**을 하거나 **묞제**에 대핮 질묞합니닀. * 새로욎 **Ʞ능**을 제안 합니닀. @@ -196,12 +196,12 @@ Pull request륌 늬뷰할 때 고렀핎알 할 사항곌 방법은 닀음곌 같 ## Pull Request 만듀Ʞ { #create-a-pull-request } -Pull Requests륌 읎용하여 소슀 윔드에 [êž°ì—¬](contributing.md){.internal-link target=_blank}할 수 있습니닀. 예륌 듀멎 닀음곌 같습니닀: +Pull Requests륌 읎용하여 소슀 윔드에 [êž°ì—¬](contributing.md)할 수 있습니닀. 예륌 듀멎 닀음곌 같습니닀: * 묞서에서 발견한 였타륌 수정할 때. -* FastAPI에 대한 Ꞁ, 비디였, 팟캐슀튞륌 작성했거나 발견했닀멎 읎 파음을 펞집하여 공유할 때. +* FastAPI에 대한 Ꞁ, 비디였, 팟캐슀튞륌 작성했거나 발견했닀멎 [읎 파음을 펞집](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)하여 공유할 때. * 핎당 섹션의 시작 부분에 링크륌 추가핎알 합니닀. -* 여러분의 얞얎로 [묞서 번역에](contributing.md#translations){.internal-link target=_blank} 도움을 쀄 때. +* 여러분의 얞얎로 [묞서 번역에](contributing.md#translations) 도움을 쀄 때. * 닀륞 사람읎 작성한 번역을 검토하는 것도 도욞 수 있습니닀. * 새로욎 묞서 섹션을 제안할 때. * Ʞ졎 읎슈/버귞륌 수정할 때. @@ -218,8 +218,8 @@ Pull Requests륌 읎용하여 소슀 윔드에 [êž°ì—¬](contributing.md){.intern 지ꞈ 할 수 있는 죌요 작업은: -* [GitHub에서 질묞윌로 닀륞 사람 돕Ʞ](#help-others-with-questions-in-github){.internal-link target=_blank} (위의 섹션을 찞조하섞요). -* [Pull Request 늬뷰하Ʞ](#review-pull-requests){.internal-link target=_blank} (위의 섹션을 찞조하섞요). +* [GitHub에서 질묞윌로 닀륞 사람 돕Ʞ](#help-others-with-questions-in-github) (위의 섹션을 찞조하섞요). +* [Pull Request 늬뷰하Ʞ](#review-pull-requests) (위의 섹션을 찞조하섞요). 읎 두 작업읎 **가장 많은 시간을 소몚**합니닀. 읎것읎 FastAPI륌 유지 ꎀ늬하는 죌요 작업입니닀. @@ -227,11 +227,11 @@ Pull Requests륌 읎용하여 소슀 윔드에 [êž°ì—¬](contributing.md){.intern ## 채팅에 찞여하Ʞ { #join-the-chat } -👥 Discord 채팅 서버 👥 에 찞여핎서 FastAPI 컀뮀니티의 닀륞 사람듀곌 얎욞늬섞요. +👥 [Discord 채팅 서버](https://discord.gg/VQjSZaeJmf) 👥 에 찞여핎서 FastAPI 컀뮀니티의 닀륞 사람듀곌 얎욞늬섞요. /// tip | 팁 -질묞은 GitHub Discussions에서 하섞요. [FastAPI Experts](fastapi-people.md#fastapi-experts){.internal-link target=_blank}로부터 도움을 받을 가능성읎 훚씬 높습니닀. +질묞은 [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions)에서 하섞요. [FastAPI Experts](fastapi-people.md#fastapi-experts)로부터 도움을 받을 가능성읎 훚씬 높습니닀. 채팅은 닀륞 음반적읞 대화륌 위핎서만 사용하섞요. @@ -243,13 +243,13 @@ Pull Requests륌 읎용하여 소슀 윔드에 [êž°ì—¬](contributing.md){.intern GitHub에서는 템플늿읎 올바륞 질묞을 작성하도록 안낎하여 더 쉜게 좋은 답변을 얻거나, 질묞하Ʞ 전에 슀슀로 묞제륌 핎결할 수도 있습니닀. 귞늬고 GitHub에서는 시간읎 조ꞈ 걞늬더띌도 제가 항상 몚든 것에 답하도록 볎장할 수 있습니닀. 채팅 시슀템에서는 제가 개읞적윌로 귞렇게 할 수 없습니닀. 😅 -채팅 시슀템에서의 대화 또한 GitHub만큌 쉜게 검색할 수 없Ʞ 때묞에, 질묞곌 답변읎 대화 속에서 사띌질 수 있습니닀. 귞늬고 GitHub에 있는 것만 [FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}가 되는 것윌로 읞정되므로, GitHub에서 더 많은 ꎀ심을 받게 될 가능성읎 큜니닀. +채팅 시슀템에서의 대화 또한 GitHub만큌 쉜게 검색할 수 없Ʞ 때묞에, 질묞곌 답변읎 대화 속에서 사띌질 수 있습니닀. 귞늬고 GitHub에 있는 것만 [FastAPI Expert](fastapi-people.md#fastapi-experts)가 되는 것윌로 읞정되므로, GitHub에서 더 많은 ꎀ심을 받게 될 가능성읎 큜니닀. 반멎, 채팅 시슀템에는 수천 명의 사용자가 있윌므로, 거의 항상 대화 상대륌 찟을 가능성읎 높습니닀. 😄 ## 개발자 슀폰서 되Ʞ { #sponsor-the-author } -여러분의 **제품/회사**가 **FastAPI**에 의졎하거나 ꎀ렚되얎 있고, FastAPI 사용자륌 대상윌로 알늬고 싶닀멎 GitHub sponsors륌 통핎 개발자(저)륌 슀폰서할 수 있습니닀. 티얎에 따띌 묞서에 배지 같은 추가 혜택을 받을 수도 있습니닀. 🎁 +여러분의 **제품/회사**가 **FastAPI**에 의졎하거나 ꎀ렚되얎 있고, FastAPI 사용자륌 대상윌로 알늬고 싶닀멎 [GitHub sponsors](https://github.com/sponsors/tiangolo)륌 통핎 개발자(저)륌 슀폰서할 수 있습니닀. 티얎에 따띌 묞서에 배지 같은 추가 혜택을 받을 수도 있습니닀. 🎁 --- diff --git a/docs/ko/docs/history-design-future.md b/docs/ko/docs/history-design-future.md index d972001215..524eea59a4 100644 --- a/docs/ko/docs/history-design-future.md +++ b/docs/ko/docs/history-design-future.md @@ -1,6 +1,6 @@ # 역사, 디자읞 귞늬고 믞래 { #history-design-and-future } -얌마 전, 한 **FastAPI** 사용자가 읎렇게 묌었습니닀: +얌마 전, [한 **FastAPI** 사용자가 읎렇게 묌었습니닀](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920): > 읎 프로젝튞의 역사는 묎엇읞가요? 몇 죌 만에 아묎 데서도 갑자Ʞ 나타나 엄청나게 좋아진 것처럌 볎읎넀요 [...] @@ -14,7 +14,7 @@ **FastAPI**의 역사는 상당 부분 ê·ž 읎전에 있던 도구듀의 역사입니닀. -[대안](alternatives.md){.internal-link target=_blank} 섹션에서 얞꞉된 것처럌: +[대안](alternatives.md) 섹션에서 얞꞉된 것처럌:
@@ -44,7 +44,7 @@ 가장 읞Ʞ 있는 Python 펞집Ʞ듀: PyCharm, VS Code, Jedi êž°ë°˜ 펞집Ʞ에서 여러 아읎디얎륌 테슀튞했습니닀. -앜 80%의 사용자륌 포핚하는 최귌 Python Developer Survey에 따륎멎 귞렇습니닀. +앜 80%의 사용자륌 포핚하는 최귌 [Python Developer Survey](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)에 따륎멎 귞렇습니닀. 슉, **FastAPI**는 Python 개발자의 80%가 사용하는 펞집Ʞ듀로 특별히 테슀튞되었습니닀. 귞늬고 대부분의 닀륞 펞집Ʞ도 유사하게 동작하는 겜향읎 있윌므로, ê·ž 몚든 읎점은 사싀상 몚든 펞집Ʞ에서 동작핎알 합니닀. @@ -54,15 +54,15 @@ ## 필요조걎 { #requirements } -여러 대안을 테슀튞한 후, 장점 때묞에 **Pydantic**을 사용하Ʞ로 결정했습니닀. +여러 대안을 테슀튞한 후, 장점 때묞에 [**Pydantic**](https://docs.pydantic.dev/)을 사용하Ʞ로 결정했습니닀. ê·ž 후, JSON Schema륌 완전히 쀀수하도록 하고, 제앜 조걎 선얞을 정의하는 닀양한 방식을 지원하며, 여러 펞집Ʞ에서의 테슀튞륌 바탕윌로 펞집Ʞ 지원(타입 검사, 자동 완성)을 개선하Ʞ 위핎 Ʞ여했습니닀. -개발 곌정에서, 또 닀륞 핵심 필요조걎읞 **Starlette**에도 Ʞ여했습니닀. +개발 곌정에서, 또 닀륞 핵심 필요조걎읞 [**Starlette**](https://www.starlette.dev/)에도 Ʞ여했습니닀. ## 개발 { #development } -**FastAPI** 자첎륌 만듀Ʞ 시작했을 때쯀에는, 대부분의 조각듀읎 읎믞 ê°–ì¶°ì ž 있었고, 디자읞은 정의되얎 있었윌며, 필요조걎곌 도구는 쀀비되얎 있었고, 표쀀곌 명섞에 대한 지식도 명확하고 최신 상태였습니닀. +**FastAPI** 자첎륌 만듀Ʞ 시작했을 때쯀에는, 대부분의 조각듀읎 읎믞 ê°–ì¶°ì ž 있었고, 디자읞은 정의되얎 있었며, 필요조걎곌 도구는 쀀비되얎 있었고, 표쀀곌 명섞에 대한 지식도 명확하고 최신 상태였습니닀. ## 믞래 { #future } @@ -76,4 +76,4 @@ **FastAPI**의 믞래는 밝습니닀. -귞늬고 [여러분의 도움](help-fastapi.md){.internal-link target=_blank}은 큰 힘읎 됩니닀. +귞늬고 [여러분의 도움](help-fastapi.md)은 큰 힘읎 됩니닀. diff --git a/docs/ko/docs/how-to/authentication-error-status-code.md b/docs/ko/docs/how-to/authentication-error-status-code.md index e039c073e9..c82ed0de22 100644 --- a/docs/ko/docs/how-to/authentication-error-status-code.md +++ b/docs/ko/docs/how-to/authentication-error-status-code.md @@ -2,7 +2,7 @@ FastAPI 버전 `0.122.0` 읎전에는, 통합 볎안 유틞늬티가 읞슝 싀팚 후 큎띌읎얞튞에 였류륌 반환할 때 HTTP 상태 윔드 `403 Forbidden`을 사용했습니닀. -FastAPI 버전 `0.122.0`부터는 더 적절한 HTTP 상태 윔드 `401 Unauthorized`륌 사용하며, HTTP 명섞읞 RFC 7235, RFC 9110륌 따띌 응답에 합늬적읞 `WWW-Authenticate` 헀더륌 반환합니닀. +FastAPI 버전 `0.122.0`부터는 더 적절한 HTTP 상태 윔드 `401 Unauthorized`륌 사용하며, HTTP 명섞읞 [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)륌 따띌 응답에 합늬적읞 `WWW-Authenticate` 헀더륌 반환합니닀. 하지만 ì–Žë–€ 읎유로든 큎띌읎얞튞가 읎전 동작에 의졎하고 있닀멎, 볎안 큎래슀에서 `make_not_authenticated_error` 메서드륌 였버띌읎드하여 읎전 동작윌로 되돌멮 수 있습니닀. diff --git a/docs/ko/docs/how-to/conditional-openapi.md b/docs/ko/docs/how-to/conditional-openapi.md index 3a87bf010b..b1617b1e83 100644 --- a/docs/ko/docs/how-to/conditional-openapi.md +++ b/docs/ko/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ 윔드에 볎안 결핚읎 있닀멎, ê·ž 결핚은 여전히 졎재할 것입니닀. -묞서륌 숚Ʞ는 것은 API와 상혞작용하는 방법을 읎핎하Ʞ 얎렵게 만듀며, 프로덕션에서 디버깅을 더 얎렵게 만듀 수 있습니닀. 읎는 닚순히 Security through obscurity의 한 형태로 간죌될 수 있습니닀. +묞서륌 숚Ʞ는 것은 API와 상혞작용하는 방법을 읎핎하Ʞ 얎렵게 만듀며, 프로덕션에서 디버깅을 더 얎렵게 만듀 수 있습니닀. 읎는 닚순히 [은폐륌 통한 볎안](https://en.wikipedia.org/wiki/Security_through_obscurity)의 한 형태로 간죌될 수 있습니닀. API륌 볎혞하고 싶닀멎, 예륌 듀얎 닀음곌 같은 더 나은 방법듀읎 있습니닀: diff --git a/docs/ko/docs/how-to/configure-swagger-ui.md b/docs/ko/docs/how-to/configure-swagger-ui.md index b518fd8f72..8322266f5b 100644 --- a/docs/ko/docs/how-to/configure-swagger-ui.md +++ b/docs/ko/docs/how-to/configure-swagger-ui.md @@ -1,6 +1,6 @@ # Swagger UI 구성 { #configure-swagger-ui } -추가적읞 Swagger UI 맀개변수륌 구성할 수 있습니닀. +추가적읞 [Swagger UI 맀개변수](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)륌 구성할 수 있습니닀. 구성을 하렀멎, `FastAPI()` 앱 객첎륌 생성할 때 또는 `get_swagger_ui_html()` 핚수에 `swagger_ui_parameters` 읞수륌 전달하십시였. @@ -50,7 +50,7 @@ FastAPI는 대부분의 사용 사례에 적합한 몇 가지 Ʞ볞 구성 ë§€ ## Ʞ타 Swagger UI 맀개변수 { #other-swagger-ui-parameters } -사용할 수 있는 닀륞 몚든 구성 옵션을 확읞하렀멎, Swagger UI 맀개변수에 대한 공식 Swagger UI 맀개변수 묞서륌 찞조하십시였. +사용할 수 있는 닀륞 몚든 구성 옵션을 확읞하렀멎, 공식 [Swagger UI 맀개변수 묞서](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)륌 찞조하십시였. ## JavaScript 전용 섀정 { #javascript-only-settings } diff --git a/docs/ko/docs/how-to/custom-docs-ui-assets.md b/docs/ko/docs/how-to/custom-docs-ui-assets.md index 7eb4b3cfdb..265eaca047 100644 --- a/docs/ko/docs/how-to/custom-docs-ui-assets.md +++ b/docs/ko/docs/how-to/custom-docs-ui-assets.md @@ -54,7 +54,7 @@ Swagger UI가 읎 곌정을 백귞띌욎드에서 처늬핎 죌지만, 읎륌 ### 테슀튞하Ʞ { #test-it } -읎제 http://127.0.0.1:8000/docs에서 묞서에 접속한 ë’€ 페읎지륌 새로고칚하멎, 새 CDN에서 에셋을 불러였는 것을 확읞할 수 있습니닀. +읎제 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)에서 묞서에 접속한 ë’€ 페읎지륌 새로고칚하멎, 새 CDN에서 에셋을 불러였는 것을 확읞할 수 있습니닀. ## 묞서용 JavaScript와 CSS 자첎 혞슀팅하Ʞ { #self-hosting-javascript-and-css-for-docs } @@ -93,12 +93,12 @@ JavaScript와 CSS륌 자첎 혞슀팅하는 것은 예륌 듀얎, 였프띌읞 **Swagger UI**는 닀음 파음을 사용합니닀: -* `swagger-ui-bundle.js` -* `swagger-ui.css` +* [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js) +* [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css) **ReDoc**은 닀음 파음을 사용합니닀: -* `redoc.standalone.js` +* [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js) 읎후 파음 구조는 닀음곌 같을 수 있습니닀: @@ -122,7 +122,7 @@ JavaScript와 CSS륌 자첎 혞슀팅하는 것은 예륌 듀얎, 였프띌읞 ### 정적 파음 테슀튞하Ʞ { #test-the-static-files } -애플늬쌀읎션을 시작하고 http://127.0.0.1:8000/static/redoc.standalone.js로 읎동하섞요. +애플늬쌀읎션을 시작하고 [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)로 읎동하섞요. **ReDoc**용 맀우 ꞎ JavaScript 파음읎 볎음 것입니닀. @@ -180,6 +180,6 @@ Swagger UI가 읎 곌정을 백귞띌욎드에서 처늬핎 죌지만, 읎륌 ### 정적 파음 UI 테슀튞하Ʞ { #test-static-files-ui } -읎제 WiFi 연결을 끊고 http://127.0.0.1:8000/docs에서 묞서에 접속한 ë’€ 페읎지륌 새로고칚핎 볎섞요. +읎제 WiFi 연결을 끊고 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)에서 묞서에 접속한 ë’€ 페읎지륌 새로고칚핎 볎섞요. 읞터넷읎 없얎도 API 묞서륌 볎고, API와 상혞작용할 수 있을 것입니닀. diff --git a/docs/ko/docs/how-to/custom-request-and-route.md b/docs/ko/docs/how-to/custom-request-and-route.md index 335193bb35..99138a7370 100644 --- a/docs/ko/docs/how-to/custom-request-and-route.md +++ b/docs/ko/docs/how-to/custom-request-and-route.md @@ -18,7 +18,7 @@ 사용 사례에는 닀음읎 포핚됩니닀: -* JSON읎 아닌 요청 바디륌 JSON윌로 변환하Ʞ(예: `msgpack`). +* JSON읎 아닌 요청 바디륌 JSON윌로 변환하Ʞ(예: [`msgpack`](https://msgpack.org/index.html)). * gzip윌로 압축된 요청 바디 압축 핎제하Ʞ. * 몚든 요청 바디륌 자동윌로 로깅하Ʞ. @@ -32,7 +32,7 @@ /// tip | 팁 -읎 예시는 동작 방식 시연을 위한 장난감 예제입니닀. Gzip 지원읎 필요하닀멎 제공되는 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}륌 사용할 수 있습니닀. +읎 예시는 동작 방식 시연을 위한 장난감 예제입니닀. Gzip 지원읎 필요하닀멎 제공되는 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)륌 사용할 수 있습니닀. /// @@ -66,7 +66,7 @@ 귞늬고 읎 두 가지, `scope`와 `receive`가 새로욎 `Request` 읞슀턎슀륌 만드는 데 필요한 것듀입니닀. -`Request`에 대핮 더 알아볎렀멎 Starlette의 Requests 묞서륌 확읞하섞요. +`Request`에 대핮 더 알아볎렀멎 [Starlette의 Requests 묞서](https://www.starlette.dev/requests/)륌 확읞하섞요. /// @@ -82,7 +82,7 @@ /// tip | 팁 -같은 묞제륌 핎결하렀멎 `RequestValidationError`에 대한 컀슀텀 핞듀러에서 `body`륌 사용하는 펞읎 아마 훚씬 더 쉜습니닀([였류 처늬하Ʞ](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}). +같은 묞제륌 핎결하렀멎 `RequestValidationError`에 대한 컀슀텀 핞듀러에서 `body`륌 사용하는 펞읎 아마 훚씬 더 쉜습니닀([였류 처늬하Ʞ](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)). 하지만 읎 예시도 여전히 유횚하며, 낎부 컎포넌튞와 상혞작용하는 방법을 볎여쀍니닀. diff --git a/docs/ko/docs/how-to/extending-openapi.md b/docs/ko/docs/how-to/extending-openapi.md index 0589e479bf..992243dbe5 100644 --- a/docs/ko/docs/how-to/extending-openapi.md +++ b/docs/ko/docs/how-to/extending-openapi.md @@ -37,7 +37,7 @@ 위 정볎륌 바탕윌로, 동음한 유틞늬티 핚수륌 사용핎 OpenAPI 슀킀마륌 생성하고 필요한 각 부분을 덮얎쓞 수 있습니닀. -예륌 듀얎, 컀슀텀 로고륌 포핚하Ʞ 위한 ReDoc의 OpenAPI 확장을 추가핎 볎겠습니닀. +예륌 듀얎, [컀슀텀 로고륌 포핚하Ʞ 위한 ReDoc의 OpenAPI 확장](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)을 추가핎 볎겠습니닀. ### 음반적읞 **FastAPI** { #normal-fastapi } @@ -75,6 +75,6 @@ ### 확읞하Ʞ { #check-it } -http://127.0.0.1:8000/redoc로 읎동하멎 컀슀텀 로고(읎 예시에서는 **FastAPI** 로고)륌 사용하는 것을 확읞할 수 있습니닀: +[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)로 읎동하멎 컀슀텀 로고(읎 예시에서는 **FastAPI** 로고)륌 사용하는 것을 확읞할 수 있습니닀: diff --git a/docs/ko/docs/how-to/general.md b/docs/ko/docs/how-to/general.md index a18dc68a21..28f9535bc7 100644 --- a/docs/ko/docs/how-to/general.md +++ b/docs/ko/docs/how-to/general.md @@ -4,36 +4,40 @@ ## 데읎터 필터링 - 볎안 { #filter-data-security } -반환하멎 안 되는 데읎터륌 곌도하게 반환하지 않도록 하렀멎, [튜토늬얌 - 응답 몚덞 - 반환 타입](../tutorial/response-model.md){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +반환하멎 안 되는 데읎터륌 곌도하게 반환하지 않도록 하렀멎, [튜토늬얌 - 응답 몚덞 - 반환 타입](../tutorial/response-model.md) 묞서륌 읜얎볎섞요. + +## 응답 성능 최적화 - 응답 몚덞 - 반환 타입 { #optimize-response-performance-response-model-return-type } + +JSON 데읎터륌 반환할 때 성능을 최적화하렀멎 반환 타입 또는 응답 몚덞을 사용하섞요. 귞러멎 Pydantic읎 Python을 거치지 않고 Rust 잡에서 JSON 직렬화륌 처늬합니닀. 자섞한 낎용은 [튜토늬얌 - 응답 몚덞 - 반환 타입](../tutorial/response-model.md) 묞서륌 찞고하섞요. ## 묞서화 태귞 - OpenAPI { #documentation-tags-openapi } -*겜로 처늬*에 태귞륌 추가하고, 묞서 UI에서 읎륌 귞룹화하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 태귞](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +*겜로 처늬*에 태귞륌 추가하고, 묞서 UI에서 읎륌 귞룹화하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 태귞](../tutorial/path-operation-configuration.md#tags) 묞서륌 읜얎볎섞요. ## 묞서화 요앜 및 섀명 - OpenAPI { #documentation-summary-and-description-openapi } -*겜로 처늬*에 요앜곌 섀명을 추가하고, 묞서 UI에 표시하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 요앜 및 섀명](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +*겜로 처늬*에 요앜곌 섀명을 추가하고, 묞서 UI에 표시하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 요앜 및 섀명](../tutorial/path-operation-configuration.md#summary-and-description) 묞서륌 읜얎볎섞요. ## 묞서화 응답 섀명 - OpenAPI { #documentation-response-description-openapi } -묞서 UI에 표시되는 응답의 섀명을 정의하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 응답 섀명](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +묞서 UI에 표시되는 응답의 섀명을 정의하렀멎 [튜토늬얌 - 겜로 처늬 구성 - 응답 섀명](../tutorial/path-operation-configuration.md#response-description) 묞서륌 읜얎볎섞요. ## 묞서화 *겜로 처늬* 지원 쀑닚하Ʞ - OpenAPI { #documentation-deprecate-a-path-operation-openapi } -*겜로 처늬*륌 지원 쀑닚(deprecate)윌로 표시하고, 묞서 UI에 볎여죌렀멎 [튜토늬얌 - 겜로 처늬 구성 - 지원 쀑닚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +*겜로 처늬*륌 지원 쀑닚(deprecate)윌로 표시하고, 묞서 UI에 볎여죌렀멎 [튜토늬얌 - 겜로 처늬 구성 - 지원 쀑닚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) 묞서륌 읜얎볎섞요. ## ì–Žë–€ 데읎터든 JSON 혞환윌로 변환하Ʞ { #convert-any-data-to-json-compatible } -ì–Žë–€ 데읎터든 JSON 혾환 형식윌로 변환하렀멎 [튜토늬얌 - JSON 혾환 읞윔더](../tutorial/encoder.md){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +ì–Žë–€ 데읎터든 JSON 혾환 형식윌로 변환하렀멎 [튜토늬얌 - JSON 혾환 읞윔더](../tutorial/encoder.md) 묞서륌 읜얎볎섞요. ## OpenAPI 메타데읎터 - 묞서 { #openapi-metadata-docs } -띌읎선슀, 버전, 연띜처 등의 정볎륌 포핚핎 OpenAPI 슀킀마에 메타데읎터륌 추가하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +띌읎선슀, 버전, 연띜처 등의 정볎륌 포핚핎 OpenAPI 슀킀마에 메타데읎터륌 추가하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md) 묞서륌 읜얎볎섞요. ## OpenAPI 사용자 정의 URL { #openapi-custom-url } -OpenAPI URL을 컀슀터마읎슈(또는 제거)하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +OpenAPI URL을 컀슀터마읎슈(또는 제거)하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md#openapi-url) 묞서륌 읜얎볎섞요. ## OpenAPI 묞서 URL { #openapi-docs-urls } -자동윌로 생성되는 묞서 사용자 읞터페읎슀에서 사용하는 URL을 업데읎튞하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} 묞서륌 읜얎볎섞요. +자동윌로 생성되는 묞서 사용자 읞터페읎슀에서 사용하는 URL을 업데읎튞하렀멎 [튜토늬얌 - 메타데읎터와 묞서 URL](../tutorial/metadata.md#docs-urls) 묞서륌 읜얎볎섞요. diff --git a/docs/ko/docs/how-to/graphql.md b/docs/ko/docs/how-to/graphql.md index a960e6d8b2..c4353d57d3 100644 --- a/docs/ko/docs/how-to/graphql.md +++ b/docs/ko/docs/how-to/graphql.md @@ -18,18 +18,18 @@ 닀음은 **ASGI** 지원읎 있는 **GraphQL** 띌읎람러늬듀입니닀. **FastAPI**와 핚께 사용할 수 있습니닀: -* Strawberry 🍓 - * FastAPI용 묞서 제공 -* Ariadne - * FastAPI용 묞서 제공 -* Tartiflette - * ASGI 통합을 제공하Ʞ 위핎 Tartiflette ASGI 사용 -* Graphene - * starlette-graphene3 사용 +* [Strawberry](https://strawberry.rocks/) 🍓 + * [FastAPI용 묞서](https://strawberry.rocks/docs/integrations/fastapi) 제공 +* [Ariadne](https://ariadnegraphql.org/) + * [FastAPI용 묞서](https://ariadnegraphql.org/docs/fastapi-integration) 제공 +* [Tartiflette](https://tartiflette.io/) + * ASGI 통합을 제공하Ʞ 위핎 [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) 사용 +* [Graphene](https://graphene-python.org/) + * [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) 사용 ## Strawberry로 GraphQL 사용하Ʞ { #graphql-with-strawberry } -**GraphQL**로 작업핎알 하거나 작업하고 싶닀멎, **Strawberry**륌 **권장**합니닀. **FastAPI**의 섀계와 가장 가깝고, 몚든 것읎 **type annotations**에 Ʞ반핎 있Ʞ 때묞입니닀. +**GraphQL**로 작업핎알 하거나 작업하고 싶닀멎, [**Strawberry**](https://strawberry.rocks/)륌 **권장**합니닀. **FastAPI**의 섀계와 가장 가깝고, 몚든 것읎 **type annotations**에 Ʞ반핎 있Ʞ 때묞입니닀. 사용 사례에 따띌 닀륞 띌읎람러늬륌 선혞할 수도 있지만, 제게 묻는닀멎 아마 **Strawberry**륌 뚌저 시도핎 볎띌고 제안할 것입니닀. @@ -37,24 +37,24 @@ {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *} -Strawberry 묞서에서 Strawberry에 대핮 더 알아볌 수 있습니닀. +[Strawberry 묞서](https://strawberry.rocks/)에서 Strawberry에 대핮 더 알아볌 수 있습니닀. -또한 FastAPI에서 Strawberry 사용에 대한 묞서도 확읞핎 볎섞요. +또한 [FastAPI에서 Strawberry 사용](https://strawberry.rocks/docs/integrations/fastapi)에 대한 묞서도 확읞핎 볎섞요. ## Starlette의 예전 `GraphQLApp` { #older-graphqlapp-from-starlette } -읎전 버전의 Starlette에는 Graphene곌 통합하Ʞ 위한 `GraphQLApp` 큎래슀가 포핚되얎 있었습니닀. +읎전 버전의 Starlette에는 [Graphene](https://graphene-python.org/)곌 통합하Ʞ 위한 `GraphQLApp` 큎래슀가 포핚되얎 있었습니닀. -읎것은 Starlette에서 deprecated 되었지만, 읎륌 사용하던 윔드가 있닀멎 같은 사용 사례륌 닀룚고 **거의 동음한 읞터페읎슀**륌 가진 starlette-graphene3로 쉜게 **마읎귞레읎션**할 수 있습니닀. +읎것은 Starlette에서 deprecated 되었지만, 읎륌 사용하던 윔드가 있닀멎 같은 사용 사례륌 닀룚고 **거의 동음한 읞터페읎슀**륌 가진 [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)로 쉜게 **마읎귞레읎션**할 수 있습니닀. /// tip | 팁 -GraphQL읎 필요하닀멎, 컀슀텀 큎래슀와 타입 대신 type annotations에 Ʞ반한 Strawberry륌 여전히 확읞핎 볎시Ꞟ 권장합니닀. +GraphQL읎 필요하닀멎, 컀슀텀 큎래슀와 타입 대신 type annotations에 Ʞ반한 [Strawberry](https://strawberry.rocks/)륌 여전히 확읞핎 볎시Ꞟ 권장합니닀. /// ## 더 알아볎Ʞ { #learn-more } -공식 GraphQL 묞서에서 **GraphQL**에 대핮 더 알아볌 수 있습니닀. +[공식 GraphQL 묞서](https://graphql.org/)에서 **GraphQL**에 대핮 더 알아볌 수 있습니닀. 또한 위에서 섀명한 각 띌읎람러늬에 대핎서도 핎당 링크에서 더 자섞히 읜얎볌 수 있습니닀. diff --git a/docs/ko/docs/how-to/index.md b/docs/ko/docs/how-to/index.md index 9321c488bd..f80f9f3586 100644 --- a/docs/ko/docs/how-to/index.md +++ b/docs/ko/docs/how-to/index.md @@ -8,6 +8,6 @@ /// tip | 팁 -**FastAPI륌 구조적윌로 학습**하고 싶닀멎(권장), 대신 [튜토늬얌 - 사용자 가읎드](../tutorial/index.md){.internal-link target=_blank}륌 장별로 읜얎볎섞요. +**FastAPI륌 구조적윌로 학습**하고 싶닀멎(권장), 대신 [튜토늬얌 - 사용자 가읎드](../tutorial/index.md)륌 장별로 읜얎볎섞요. /// diff --git a/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md index 5dd40cbdc2..d47f0bc415 100644 --- a/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md +++ b/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md @@ -10,7 +10,7 @@ FastAPI 0.126.0 버전에서는 Pydantic v1 지원을 쀑닚했지만, `pydantic /// warning | 겜고 -Pydantic 팀은 **Python 3.14**부터 최신 Python 버전에서 Pydantic v1 지원을 쀑닚했습니닀. +Pydantic 팀은 최신 Python 버전에서 Pydantic v1 지원을 쀑닚했윌며, 시작 버전은 **Python 3.14**입니닀. 여Ʞ에는 `pydantic.v1`도 포핚되며, Python 3.14 읎상에서는 더 읎상 지원되지 않습니닀. @@ -22,7 +22,7 @@ Pydantic v1을 사용하는 였래된 FastAPI 앱읎 있닀멎, 여Ʞ서는 읎 ## 공식 가읎드 { #official-guide } -Pydantic에는 v1에서 v2로의 공식 마읎귞레읎션 가읎드가 있습니닀. +Pydantic에는 v1에서 v2로의 공식 [마읎귞레읎션 가읎드](https://docs.pydantic.dev/latest/migration/)가 있습니닀. 여Ʞ에는 묎엇읎 바뀌었는지, 검슝읎 읎제 얎떻게 더 정확하고 엄격핎졌는지, 가능한 죌의사항 등도 포핚되얎 있습니닀. @@ -30,7 +30,7 @@ Pydantic에는 v1에서 v2로의 공식 `bump-pydantic`륌 사용할 수 있습니닀. +같은 Pydantic 팀읎 제공하는 [`bump-pydantic`](https://github.com/pydantic/bump-pydantic)륌 사용할 수 있습니닀. 읎 도구는 변겜핎알 하는 윔드의 대부분을 자동윌로 바꟞는 데 도움을 쀍니닀. diff --git a/docs/ko/docs/how-to/testing-database.md b/docs/ko/docs/how-to/testing-database.md index 2d7798d707..fe0bec809c 100644 --- a/docs/ko/docs/how-to/testing-database.md +++ b/docs/ko/docs/how-to/testing-database.md @@ -1,7 +1,7 @@ # 데읎터베읎슀 테슀튞하Ʞ { #testing-a-database } -데읎터베읎슀, SQL, SQLModel에 대핎서는 SQLModel 묞서에서 학습할 수 있습니닀. 🀓 +데읎터베읎슀, SQL, SQLModel에 대핎서는 [SQLModel 묞서](https://sqlmodel.tiangolo.com/)에서 학습할 수 있습니닀. 🀓 -FastAPI에서 SQLModel을 사용하는 방법에 대한 믞니 튜토늬얌도 있습니닀. ✹ +[FastAPI에서 SQLModel을 사용하는 방법에 대한 믞니 튜토늬얌](https://sqlmodel.tiangolo.com/tutorial/fastapi/)도 있습니닀. ✹ -핎당 튜토늬얌에는 SQL 데읎터베읎슀 테슀튞에 대한 섹션도 포핚되얎 있습니닀. 😎 +핎당 튜토늬얌에는 [SQL 데읎터베읎슀 테슀튞](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)에 대한 섹션도 포핚되얎 있습니닀. 😎 diff --git a/docs/ko/docs/index.md b/docs/ko/docs/index.md index d2e08be16f..91d27fcee9 100644 --- a/docs/ko/docs/index.md +++ b/docs/ko/docs/index.md @@ -11,25 +11,25 @@ FastAPI 프레임워크, 고성능, 간펞한 학습, 빠륞 윔드 작성, 쀀비된 프로덕션

- + Test - + Coverage - + Package version - + Supported Python versions

--- -**묞서**: https://fastapi.tiangolo.com +**묞서**: [https://fastapi.tiangolo.com/ko](https://fastapi.tiangolo.com/ko) -**소슀 윔드**: https://github.com/fastapi/fastapi +**소슀 윔드**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- @@ -44,7 +44,7 @@ FastAPI는 현대적읎고, 빠륎며(고성능), 파읎썬 표쀀 타입 힌튾 * **쉬움**: 쉜게 사용하고 배우도록 섀계. 적은 묞서 읜Ʞ 시간. * **짧음**: 윔드 쀑복 최소화. 각 맀개변수 선얞의 여러 Ʞ능. 적은 버귞. * **견고핚**: 쀀비된 프로덕션 용 윔드륌 얻윌십시였. 자동 대화형 묞서와 핚께. -* **표쀀 êž°ë°˜**: API에 대한 (완전히 혾환되는) 개방형 표쀀 êž°ë°˜: OpenAPI (읎전에 Swagger로 알렀졌던) 및 JSON Schema. +* **표쀀 êž°ë°˜**: API에 대한 (완전히 혾환되는) 개방형 표쀀 êž°ë°˜: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (읎전에 Swagger로 알렀졌던) 및 [JSON Schema](https://json-schema.org/). * 낎부 개발팀의 프로덕션 애플늬쌀읎션을 빌드한 테슀튞에 귌거한 잡정 @@ -55,51 +55,51 @@ FastAPI는 현대적읎고, 빠륎며(고성능), 파읎썬 표쀀 타입 힌튾 ### 킀슀톀 슀폰서 { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} - + {% endfor -%} ### 곚드 및 싀버 슀폰서 { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} - + {% endfor -%} {%- for sponsor in sponsors.silver -%} - + {% endfor %} -닀륞 슀폰서 +[닀륞 슀폰서](https://fastapi.tiangolo.com/ko/fastapi-people/#sponsors) ## 의견듀 { #opinions } "_[...] 저는 요슘 **FastAPI**륌 많읎 사용하고 있습니닀. [...] 사싀 우늬 팀의 **마읎크로소프튞 ML 서비슀** 전부륌 바꿀 계획입니닀. 귞쀑 음부는 핵심 **Windows**와 몇몇의 **Office** 제품듀읎 통합되고 있습니닀._" -
Kabir Khan - 마읎크로소프튞 (ref)
+
Kabir Khan - 마읎크로소프튞 (ref)
--- "_**FastAPI** 띌읎람러늬륌 채택하여 **예잡**을 얻Ʞ 위핎 쿌늬륌 싀행 할 수 있는 **REST** 서버륌 생성했습니닀. [Ludwig을 위핎]_" -
Piero Molino, Yaroslav Dudin 귞늬고 Sai Sumanth Miryala - 우버 (ref)
+
Piero Molino, Yaroslav Dudin 귞늬고 Sai Sumanth Miryala - 우버 (ref)
--- "_**Netflix**는 우늬의 였픈 소슀 배포판읞 **위Ʞ ꎀ늬** 였쌀슀튞레읎션 프레임워크륌 발표할 수 있얎 Ʞ쁩니닀: 바로 **Dispatch**입니닀! [**FastAPI**로 빌드]_" -
Kevin Glisson, Marc Vilanova, Forest Monsen - 넷플늭슀 (ref)
+
Kevin Glisson, Marc Vilanova, Forest Monsen - 넷플늭슀 (ref)
--- "_**FastAPI**가 너묎 좋아서 구늄 위륌 걷는듯 합니닀. 정말 슐겁습니닀!_" -
Brian Okken - Python Bytes 팟캐슀튞 혞슀튞 (ref)
+
Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast host (ref)
--- "_솔직히, 당신읎 만든 것은 맀우 견고하고 섞렚되얎 볎입니닀. 여러 멎에서 **Hug**가 읎렇게 되었윌멎 합니닀 - 귞걞 만든 누군가륌 볎는 것은 많은 영감을 쀍니닀._" -
Timothy Crosley - Hug 제작자 (ref)
+
Timothy Crosley - [Hug](https://github.com/hugapi/hug) 제작자 (ref)
--- @@ -107,27 +107,27 @@ FastAPI는 현대적읎고, 빠륎며(고성능), 파읎썬 표쀀 타입 힌튾 "_우늬 **API**륌 **FastAPI**로 바꿚습니닀 [...] 아마 여러분도 좋아하싀 것입니닀 [...]_" -
Ines Montani - Matthew Honnibal - Explosion AI 섀늜자 - spaCy 제작자 (ref) - (ref)
+
Ines Montani - Matthew Honnibal - [Explosion AI](https://explosion.ai) 섀늜자 - [spaCy](https://spacy.io) 제작자 (ref) - (ref)
--- "_프로덕션 Python API륌 만듀고자 한닀멎, 저는 **FastAPI**륌 강력히 추천합니닀. **아늄답게 섀계**되었고, **사용읎 간닚**하며, **확장성읎 맀우 뛰얎나**ê³ , 우늬의 API 우선 개발 전략에서 **핵심 구성 요소**가 되었윌며 Virtual TAC Engineer 같은 많은 자동화와 서비슀륌 읎끌고 있습니닀._" -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (ref)
--- ## FastAPI 믞니 닀큐멘터늬 { #fastapi-mini-documentary } -2025년 말에 공개된 FastAPI 믞니 닀큐멘터늬가 있습니닀. 옚띌읞에서 시청할 수 있습니닀: +2025년 말에 공개된 [FastAPI 믞니 닀큐멘터늬](https://www.youtube.com/watch?v=mpR8ngthqiE)가 있습니닀. 옚띌읞에서 시청할 수 있습니닀: -FastAPI Mini Documentary +FastAPI Mini Documentary ## **Typer**, CLI륌 위한 FastAPI { #typer-the-fastapi-of-clis } - + -웹 API 대신 터믞널에서 사용할 CLI 앱을 만듀고 있닀멎, **Typer**륌 확읞핎 볎십시였. +웹 API 대신 터믞널에서 사용할 CLI 앱을 만듀고 있닀멎, [**Typer**](https://typer.tiangolo.com/)륌 확읞핎 볎십시였. **Typer**는 FastAPI의 동생입니닀. 귞늬고 **CLI륌 위한 FastAPI**가 되Ʞ 위핎 생게습니닀. ⌚ 🚀 @@ -135,12 +135,12 @@ FastAPI는 현대적읎고, 빠륎며(고성능), 파읎썬 표쀀 타입 힌튾 FastAPI는 거읞듀의 얎깚 위에 서 있습니닀: -* 웹 부분을 위한 Starlette. -* 데읎터 부분을 위한 Pydantic. +* [Starlette](https://www.starlette.dev/) — 웹 부분을 닎당합니닀. +* [Pydantic](https://docs.pydantic.dev/) — 데읎터 부분을 닎당합니닀. ## 섀치 { #installation } -가상 환겜을 생성하고 활성화한 닀음 FastAPI륌 섀치하섞요: +[가상 환겜](https://fastapi.tiangolo.com/ko/virtual-environments/)을 생성하고 활성화한 닀음 FastAPI륌 섀치하섞요:
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **Note**: -잘 몚륎겠닀멎, 묞서에서 `async`와 `await`에 ꎀ한 _"꞉하섞요?"_ 섹션을 확읞핎 볎십시였. +잘 몚륎겠닀멎, ["꞉하섞요?"](https://fastapi.tiangolo.com/ko/async/#in-a-hurry) 섹션을 확읞핎 볎십시였. @@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.
-fastapi dev main.py 명령에 ꎀ하여... +fastapi dev 명령에 ꎀ하여... -`fastapi dev` 명령은 `main.py` 파음을 읜고, ê·ž 안의 **FastAPI** 앱을 감지한 닀음, Uvicorn을 사용핎 서버륌 시작합니닀. +`fastapi dev` 명령은 여러분의 `main.py` 파음을 자동윌로 읜고, ê·ž 안의 **FastAPI** 앱을 감지한 닀음, [Uvicorn](https://www.uvicorn.dev)을 사용핎 서버륌 시작합니닀. Ʞ볞적윌로 `fastapi dev`는 로컬 개발을 위핎 auto-reload가 활성화된 상태로 시작됩니닀. -자섞한 낎용은 FastAPI CLI 묞서에서 확읞할 수 있습니닀. +자섞한 낎용은 [FastAPI CLI 묞서](https://fastapi.tiangolo.com/ko/fastapi-cli/)에서 확읞할 수 있습니닀.
### 확읞하Ʞ { #check-it } -람띌우저로 http://127.0.0.1:8000/items/5?q=somequery륌 엎얎볎십시였. +람띌우저로 [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)륌 엎얎볎십시였. 아래의 JSON 응답을 볌 수 있습니닀: @@ -264,17 +264,17 @@ INFO: Application startup complete. ### 대화형 API 묞서 { #interactive-api-docs } -읎제 http://127.0.0.1:8000/docs로 가볎십시였. +읎제 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)로 가볎십시였. -자동 대화형 API 묞서륌 볌 수 있습니닀 (Swagger UI 제공): +자동 대화형 API 묞서륌 볌 수 있습니닀 ([Swagger UI](https://github.com/swagger-api/swagger-ui) 제공): ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 대안 API 묞서 { #alternative-api-docs } -귞늬고 읎제 http://127.0.0.1:8000/redoc로 가뎅시닀. +귞늬고 읎제 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)로 가뎅시닀. -닀륞 자동 묞서륌 볌 수 있습니닀(ReDoc 제공): +닀륞 자동 묞서륌 볌 수 있습니닀([ReDoc](https://github.com/Rebilly/ReDoc) 제공): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item): ### 대화형 API 묞서 업귞레읎드 { #interactive-api-docs-upgrade } -읎제 http://127.0.0.1:8000/docs로 읎동합니닀. +읎제 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)로 읎동합니닀. * 대화형 API 묞서는 새 볞묞을 포핚핎 자동윌로 업데읎튞됩니닀: @@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item): ### 대안 API 묞서 업귞레읎드 { #alternative-api-docs-upgrade } -귞늬고 읎제, http://127.0.0.1:8000/redoc로 읎동합니닀. +귞늬고 읎제, [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)로 읎동합니닀. * 대안 묞서 역시 새 쿌늬 맀개변수와 볞묞을 반영합니닀: @@ -442,7 +442,7 @@ item: Item * 강력하고 사용하Ʞ 쉬욎 **의졎성 죌입** 시슀템. * **OAuth2** 지원을 포핚한 **JWT tokens** 및 **HTTP Basic**을 갖는 볎안곌 읞슝. * (Pydantic 덕분에) **깊은 쀑첩 JSON 몚덞**을 선얞하는데 더 진볎한 (하지만 마찬가지로 쉬욎) Ʞ술. -* Strawberry 및 Ʞ타 띌읎람러늬와의 **GraphQL** 통합. +* [Strawberry](https://strawberry.rocks) 및 Ʞ타 띌읎람러늬와의 **GraphQL** 통합. * (Starlette 덕분에) 많은 추가 Ʞ능: * **웹 소쌓** * HTTPX 및 `pytest`에 Ʞ반한 극히 쉬욎 테슀튞 @@ -452,24 +452,10 @@ item: Item ### 앱 배포하Ʞ(선택 사항) { #deploy-your-app-optional } -선택적윌로 FastAPI 앱을 FastAPI Cloud에 배포할 수 있습니닀. 아직읎띌멎 대Ʞ자 명닚에 등록핎 볎섞요. 🚀 +선택적윌로 FastAPI 앱을 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니닀. 아직읎띌멎 대Ʞ자 명닚에 등록핎 볎섞요. 🚀 읎믞 **FastAPI Cloud** 계정읎 있닀멎(대Ʞ자 명닚에서 쎈대핎 드렞습니닀 😉), 한 번의 명령윌로 애플늬쌀읎션을 배포할 수 있습니닀. -배포하Ʞ 전에, 로귞읞되얎 있는지 확읞하섞요: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -귞런 닀음 앱을 배포하섞요: -
```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### FastAPI Cloud 소개 { #about-fastapi-cloud } -**FastAPI Cloud**는 **FastAPI** 뒀에 있는 동음한 작성자와 팀읎 만듀었습니닀. +**[FastAPI Cloud](https://fastapicloud.com)**는 **FastAPI** 뒀에 있는 동음한 작성자와 팀읎 만듀었습니닀. 최소한의 녞력윌로 API륌 **빌드**, **배포**, **ì ‘ê·Œ**하는 곌정을 간소화합니닀. @@ -504,9 +490,9 @@ FastAPI는 였픈 소슀읎며 표쀀을 Ʞ반윌로 합니닀. 선택한 ì–Ž ## 성능 { #performance } -독늜된 TechEmpower 벀치마크에서 Uvicorn에서 작동하는 FastAPI 애플늬쌀읎션읎 사용 가능한 가장 빠륞 Python 프레임워크 쀑 하나로 Starlette와 Uvicorn(FastAPI에서 낎부적윌로 사용)에만 밑돌고 있습니닀. (*) +독늜된 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/ko/benchmarks/) 섹션을 볎십시였. ## 의졎성 { #dependencies } @@ -514,23 +500,23 @@ FastAPI는 Pydantic곌 Starlette에 의졎합니닀. ### `standard` 의졎성 { #standard-dependencies } -FastAPI륌 `pip install "fastapi[standard]"`로 섀치하멎 `standard` 귞룹의 선택적 의졎성읎 핚께 섀치됩니닀. +`pip install "fastapi[standard]"`로 FastAPI륌 섀치하멎 `standard` 귞룹의 선택적 의졎성읎 핚께 섀치됩니닀. Pydantic읎 사용하는: -* email-validator - 읎메음 유횚성 검사. +* [`email-validator`](https://github.com/JoshData/python-email-validator) - 읎메음 유횚성 검사. Starlette읎 사용하는: -* httpx - `TestClient`륌 사용하렀멎 필요. -* jinja2 - Ʞ볞 템플늿 섀정을 사용하렀멎 필요. -* python-multipart - `request.form()`곌 핚께 form "파싱" 지원을 원하멎 필요. +* [`httpx`](https://www.python-httpx.org) - `TestClient`륌 사용하렀멎 필요. +* [`jinja2`](https://jinja.palletsprojects.com) - Ʞ볞 템플늿 섀정을 사용하렀멎 필요. +* [`python-multipart`](https://github.com/Kludex/python-multipart) - `request.form()`곌 핚께 form "파싱" 지원을 원하멎 필요. FastAPI가 사용하는: -* uvicorn - 애플늬쌀읎션을 로드하고 제공하는 서버륌 위한 것입니닀. 여Ʞ에는 고성능 서빙에 필요한 음부 의졎성(예: `uvloop`)읎 포핚된 `uvicorn[standard]`가 포핚됩니닀. +* [`uvicorn`](https://www.uvicorn.dev) - 애플늬쌀읎션을 로드하고 제공하는 서버륌 위한 것입니닀. 여Ʞ에는 고성능 서빙에 필요한 음부 의졎성(예: `uvloop`)읎 포핚된 `uvicorn[standard]`가 포핚됩니닀. * `fastapi-cli[standard]` - `fastapi` 명령을 제공하Ʞ 위한 것입니닀. - * 여Ʞ에는 FastAPI 애플늬쌀읎션을 FastAPI Cloud에 배포할 수 있게 핎죌는 `fastapi-cloud-cli`가 포핚됩니닀. + * 여Ʞ에는 [FastAPI Cloud](https://fastapicloud.com)에 FastAPI 애플늬쌀읎션을 배포할 수 있게 핎죌는 `fastapi-cloud-cli`가 포핚됩니닀. ### `standard` 의졎성 없읎 { #without-standard-dependencies } @@ -546,13 +532,13 @@ FastAPI가 사용하는: 추가 선택적 Pydantic 의졎성: -* pydantic-settings - 섀정 ꎀ늬륌 위한 것입니닀. -* pydantic-extra-types - 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 - `ORJSONResponse`륌 사용하렀멎 필요. -* ujson - `UJSONResponse`륌 사용하렀멎 필요. +* [`orjson`](https://github.com/ijl/orjson) - `ORJSONResponse`륌 사용하렀멎 필요. +* [`ujson`](https://github.com/esnme/ultrajson) - `UJSONResponse`륌 사용하렀멎 필요. ## 띌읎섌슀 { #license } diff --git a/docs/ko/docs/project-generation.md b/docs/ko/docs/project-generation.md index e3120e6f80..774b03a190 100644 --- a/docs/ko/docs/project-generation.md +++ b/docs/ko/docs/project-generation.md @@ -4,7 +4,7 @@ 많은 쎈Ʞ 섀정, 볎안, 데읎터베읎슀 및 음부 API 엔드포읞튞가 읎믞 쀀비되얎 있윌므로, 여러분은 읎 템플늿을 시작하는 데 사용할 수 있습니닀. -GitHub 저장소: Full Stack FastAPI 템플늿 +GitHub 저장소: [Full Stack FastAPI 템플늿](https://github.com/tiangolo/full-stack-fastapi-template) ## Full Stack FastAPI 템플늿 - Ʞ술 슀택곌 Ʞ능듀 { #full-stack-fastapi-template-technology-stack-and-features } diff --git a/docs/ko/docs/python-types.md b/docs/ko/docs/python-types.md index d7d9021ed3..12890f2832 100644 --- a/docs/ko/docs/python-types.md +++ b/docs/ko/docs/python-types.md @@ -271,7 +271,7 @@ def some_function(data: Any): ## Pydantic 몚덞 { #pydantic-models } -Pydantic은 데읎터 검슝을 수행하는 파읎썬 띌읎람러늬입니닀. +[Pydantic](https://docs.pydantic.dev/)은 데읎터 검슝을 수행하는 파읎썬 띌읎람러늬입니닀. 속성을 가진 큎래슀 형태로 데읎터의 "몚양(shape)"을 선얞합니닀. @@ -287,13 +287,13 @@ Pydantic 공식 묞서의 예시: /// info | 정볎 -Pydantic에 대핮 더 알아볎렀멎 묞서륌 확읞하섞요. +Pydantic에 대핮 더 알아볎렀멎 [묞서륌 확읞하섞요](https://docs.pydantic.dev/). /// **FastAPI**는 몚두 Pydantic에 Ʞ반을 두고 있습니닀. -읎 몚든 것은 [자습서 - 사용자 안낎서](tutorial/index.md){.internal-link target=_blank}에서 싀제로 많읎 볎게 될 것입니닀. +읎 몚든 것은 [자습서 - 사용자 안낎서](tutorial/index.md)에서 싀제로 많읎 볎게 될 것입니닀. ## 메타데읎터 애너테읎션읎 있는 타입 힌튾 { #type-hints-with-metadata-annotations } @@ -339,12 +339,12 @@ Pydantic 공식 묞서의 예시: * OpenAPI륌 사용핎 API륌 **묞서화**: * 자동 상혞작용 묞서 UI에서 사용됩니닀. -읎 몚든 것읎 닀소 추상적윌로 듀늎 수도 있습니닀. 걱정하지 마섞요. [자습서 - 사용자 안낎서](tutorial/index.md){.internal-link target=_blank}에서 싀제로 확읞하게 될 것입니닀. +읎 몚든 것읎 닀소 추상적윌로 듀늎 수도 있습니닀. 걱정하지 마섞요. [자습서 - 사용자 안낎서](tutorial/index.md)에서 싀제로 확읞하게 될 것입니닀. 가장 쀑요한 점은 표쀀 파읎썬 타입을 한 곳에서 사용핚윌로썚(더 많은 큎래슀, 데윔레읎터 등을 추가하는 대신) **FastAPI**가 여러분을 위핎 많은 음을 핎쀀닀는 사싀입니닀. /// info | 정볎 -자습서륌 몚두 끝낎고 타입에 대핮 더 알아볎Ʞ 위핎 닀시 돌아왔닀멎, 좋은 자료로 `mypy`의 "cheat sheet"가 있습니닀. +자습서륌 몚두 끝낎고 타입에 대핮 더 알아볎Ʞ 위핎 닀시 돌아왔닀멎, 좋은 자료로 [`mypy`의 "cheat sheet"](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)가 있습니닀. /// diff --git a/docs/ko/docs/tutorial/background-tasks.md b/docs/ko/docs/tutorial/background-tasks.md index f23902e11f..1f042829c0 100644 --- a/docs/ko/docs/tutorial/background-tasks.md +++ b/docs/ko/docs/tutorial/background-tasks.md @@ -63,7 +63,7 @@ FastAPI에서는 응답을 반환한 *후에* 싀행할 백귞띌욎드 작업 ## Ʞ술적 섞부사항 { #technical-details } -`BackgroundTasks` 큎래슀는 `starlette.background`에서 직접 가젞옵니닀. +`BackgroundTasks` 큎래슀는 [`starlette.background`](https://www.starlette.dev/background/)에서 직접 가젞옵니닀. FastAPI에 직접 임포튞/포핚되얎 있윌므로 `fastapi`에서 임포튞할 수 있고, 싀수로 `starlette.background`에서 대안읞 `BackgroundTask`(끝에 `s`가 없음)륌 임포튞하는 것을 플할 수 있습니닀. @@ -71,15 +71,15 @@ FastAPI에 직접 임포튞/포핚되얎 있윌므로 `fastapi`에서 임포튞 FastAPI에서 `BackgroundTask`만 닚독윌로 사용하는 것도 가능하지만, 윔드에서 객첎륌 생성하고 읎륌 포핚하는 Starlette `Response`륌 반환핎알 합니닀. -더 자섞한 낎용은 Starlette의 Background Tasks 공식 묞서에서 확읞할 수 있습니닀. +더 자섞한 낎용은 [Starlette의 Background Tasks 공식 묞서](https://www.starlette.dev/background/)에서 확읞할 수 있습니닀. ## 죌의사항 { #caveat } -묎거욎 백귞띌욎드 계산을 수행핎알 하고, 반드시 동음한 프로섞슀에서 싀행할 필요가 없닀멎(예: 메몚늬, 변수 등을 공유할 필요가 없음) Celery 같은 더 큰 도구륌 사용하는 것읎 도움읎 될 수 있습니닀. +묎거욎 백귞띌욎드 계산을 수행핎알 하고, 반드시 동음한 프로섞슀에서 싀행할 필요가 없닀멎(예: 메몚늬, 변수 등을 공유할 필요가 없음) [Celery](https://docs.celeryq.dev) 같은 더 큰 도구륌 사용하는 것읎 도움읎 될 수 있습니닀. 읎듀은 RabbitMQ나 Redis 같은 메시지/작업 큐 ꎀ늬자 등 더 복잡한 섀정을 필요로 하는 겜향읎 있지만, 여러 프로섞슀에서, 특히 여러 서버에서 백귞띌욎드 작업을 싀행할 수 있습니닀. -하지만 동음한 **FastAPI** 앱의 변수와 객첎에 접귌핎알 하거나(또는 읎메음 알늌 전송처럌) 작은 백귞띌욎드 작업을 수행핎알 한닀멎, `BackgroundTasks`륌 간닚히 사용하멎 됩니닀. +하지만 동음한 **FastAPI** 앱의 변수와 객첎에 접귌핎알 하거나, 작은 백귞띌욎드 작업(예: 읎메음 알늌 전송)을 수행핎알 한닀멎, `BackgroundTasks`륌 간닚히 사용하멎 됩니닀. ## 요앜 { #recap } diff --git a/docs/ko/docs/tutorial/bigger-applications.md b/docs/ko/docs/tutorial/bigger-applications.md index 1b9d17e49a..5b93dbb20b 100644 --- a/docs/ko/docs/tutorial/bigger-applications.md +++ b/docs/ko/docs/tutorial/bigger-applications.md @@ -123,7 +123,7 @@ from app.routers import items 읎 예시륌 닚순화하Ʞ 위핎 임의로 만든 헀더륌 사용하고 있습니닀. -하지만 싀제 상황에서는 통합된 [Security 유틞늬티](security/index.md){.internal-link target=_blank}륌 사용하는 것읎 더 좋은 결곌륌 얻을 수 있습니닀. +하지만 싀제 상황에서는 통합된 [Security 유틞늬티](security/index.md)륌 사용하는 것읎 더 좋은 결곌륌 얻을 수 있습니닀. /// @@ -169,7 +169,7 @@ async def read_item(item_id: str): /// tip | 팁 -[*path operation decorator의 dependencies*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}와 마찬가지로, *path operation function*에 ì–Žë–€ 값도 전달되지 않습니닀. +[*path operation decorator의 dependencies*](dependencies/dependencies-in-path-operation-decorators.md)와 마찬가지로, *path operation function*에 ì–Žë–€ 값도 전달되지 않습니닀. /// @@ -185,8 +185,8 @@ async def read_item(item_id: str): * 몚두 믞늬 정의된 `responses`륌 포핚합니닀. * 읎 몚든 *path operations*는 싀행되Ʞ 전에 `dependencies` 목록읎 평가/싀행됩니닀. * 특정 *path operation*에 dependencies륌 추가로 선얞하멎 **귞것듀도 싀행됩니닀**. - * router dependencies가 뚌저 싀행되고, ê·ž 닀음에 [decorator의 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, 귞늬고 음반 파띌믞터 dependencies가 싀행됩니닀. - * [`scopes`가 있는 `Security` dependencies](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}도 추가할 수 있습니닀. + * router dependencies가 뚌저 싀행되고, ê·ž 닀음에 [decorator의 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), 귞늬고 음반 파띌믞터 dependencies가 싀행됩니닀. + * [`scopes`가 있는 `Security` dependencies](../advanced/security/oauth2-scopes.md)도 추가할 수 있습니닀. /// tip | 팁 @@ -303,7 +303,7 @@ from ...dependencies import get_token_header 평소처럌 `FastAPI` 큎래슀륌 import하고 생성합니닀. -또한 각 `APIRouter`의 dependencies와 결합될 [global dependencies](dependencies/global-dependencies.md){.internal-link target=_blank}도 ì„ ì–ží•  수 있습니닀: +또한 각 `APIRouter`의 dependencies와 결합될 [global dependencies](dependencies/global-dependencies.md)도 ì„ ì–ží•  수 있습니닀: {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ from .routers import items, users from app.routers import items, users ``` -Python Packages와 Modules에 대핮 더 알아볎렀멎 Modules에 대한 Python 공식 묞서륌 읜얎볎섞요. +Python Packages와 Modules에 대핮 더 알아볎렀멎 [Modules에 대한 Python 공식 묞서](https://docs.python.org/3/tutorial/modules.html)륌 읜얎볎섞요. /// @@ -465,6 +465,37 @@ router륌 포핚(include)할 때 성능을 걱정할 필요는 없습니닀. /// +## `pyproject.toml`에서 `entrypoint` 구성하Ʞ { #configure-the-entrypoint-in-pyproject-toml } + +FastAPI `app` 객첎가 `app/main.py`에 있윌므로 `pyproject.toml` 파음에서 `entrypoint`륌 닀음곌 같읎 구성할 수 있습니닀: + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +읎는 닀음곌 같읎 import하는 것곌 동음합니닀: + +```python +from app.main import app +``` + +읎렇게 하멎 `fastapi` 명령얎가 여러분의 앱읎 얎디에 있는지 알 수 있습니닀. + +/// Note | ì°žê³  + +명령얎에 겜로륌 직접 전달할 수도 있습니닀: + +```console +$ fastapi dev app/main.py +``` + +하지만 `fastapi` 명령얎륌 싀행할 때마닀 올바륞 겜로륌 Ʞ억핎 전달핎알 합니닀. + +또한 [VS Code 확장](../editor-support.md)읎나 [FastAPI Cloud](https://fastapicloud.com) 같은 닀륞 도구듀읎 읎륌 ì°Ÿì§€ 못할 수도 있윌므로, `pyproject.toml`의 `entrypoint`륌 사용하는 것을 권장합니닀. + +/// + ## 자동 API 묞서 확읞하Ʞ { #check-the-automatic-api-docs } 읎제 앱을 싀행하섞요: @@ -472,14 +503,14 @@ router륌 포핚(include)할 때 성능을 걱정할 필요는 없습니닀.
```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-귞늬고 http://127.0.0.1:8000/docs에서 묞서륌 여섞요. +귞늬고 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)에서 묞서륌 여섞요. 올바륞 겜로(및 prefix)와 올바륞 태귞륌 사용핎, 몚든 submodule의 겜로륌 포핚한 자동 API 묞서륌 볌 수 있습니닀: diff --git a/docs/ko/docs/tutorial/body-nested-models.md b/docs/ko/docs/tutorial/body-nested-models.md index 33f0f71e95..bbb95cf00b 100644 --- a/docs/ko/docs/tutorial/body-nested-models.md +++ b/docs/ko/docs/tutorial/body-nested-models.md @@ -96,7 +96,7 @@ Pydantic 몚덞의 각 얎튞늬뷰튞는 타입을 갖습니닀. `str`, `int`, `float` 등곌 같은 음반적읞 닚음 타입곌는 별개로, `str`을 상속하는 더 복잡한 닚음 타입을 사용할 수 있습니닀. -사용할 수 있는 몚든 옵션을 볎렀멎 Pydantic의 Type Overview륌 확읞하섞요. 닀음 장에서 몇 가지 예제륌 볌 수 있습니닀. +사용할 수 있는 몚든 옵션을 볎렀멎 [Pydantic의 Type Overview](https://docs.pydantic.dev/latest/concepts/types/)륌 확읞하섞요. 닀음 장에서 몇 가지 예제륌 볌 수 있습니닀. 예륌 듀얎 `Image` 몚덞에는 `url` 필드가 있윌므로, 읎륌 `str` 대신 Pydantic의 `HttpUrl` 읞슀턎슀로 ì„ ì–ží•  수 있습니닀: diff --git a/docs/ko/docs/tutorial/body-updates.md b/docs/ko/docs/tutorial/body-updates.md index 3719e1ffab..f9ea061a6e 100644 --- a/docs/ko/docs/tutorial/body-updates.md +++ b/docs/ko/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## `PUT`윌로 교첎 업데읎튞하Ʞ { #update-replacing-with-put } -항목을 업데읎튞하렀멎 HTTP `PUT` 작업을 사용할 수 있습니닀. +항목을 업데읎튞하렀멎 [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) 작업을 사용할 수 있습니닀. `jsonable_encoder`륌 사용핎 입력 데읎터륌 JSON윌로 저장할 수 있는 데읎터로 변환할 수 있습니닀(예: NoSQL 데읎터베읎슀 사용 시). 예륌 듀얎 `datetime`을 `str`로 변환하는 겜우입니닀. @@ -28,7 +28,7 @@ ## `PATCH`로 부분 업데읎튞하Ʞ { #partial-updates-with-patch } -HTTP `PATCH` 작업을 사용핎 데읎터륌 *부분적윌로* 업데읎튞할 수도 있습니닀. +[HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) 작업을 사용핎 데읎터륌 *부분적윌로* 업데읎튞할 수도 있습니닀. 읎는 업데읎튞하렀는 데읎터만 볎낎고, 나뚞지는 귞대로 두는 것을 의믞합니닀. @@ -95,6 +95,6 @@ 따띌서 몚든 속성을 생략할 수 있는 부분 업데읎튞륌 받윌렀멎, 몚든 속성읎 optional로 표시된(Ʞ볞값을 가지거나 `None`을 Ʞ볞값윌로 가지는) 몚덞읎 필요합니닀. -**업데읎튞**륌 위한 “몚든 값읎 optional읞” 몚덞곌, **생성**을 위한 “필수 값읎 있는” 몚덞을 구분하렀멎 [추가 몚덞](extra-models.md){.internal-link target=_blank}에 섀명된 아읎디얎륌 사용할 수 있습니닀. +**업데읎튞**륌 위한 “몚든 값읎 optional읞” 몚덞곌, **생성**을 위한 “필수 값읎 있는” 몚덞을 구분하렀멎 [추가 몚덞](extra-models.md)에 섀명된 아읎디얎륌 사용할 수 있습니닀. /// diff --git a/docs/ko/docs/tutorial/body.md b/docs/ko/docs/tutorial/body.md index b282d1cc92..d124b4bef0 100644 --- a/docs/ko/docs/tutorial/body.md +++ b/docs/ko/docs/tutorial/body.md @@ -6,7 +6,7 @@ 여러분의 API는 대부분의 겜우 **응답** 볞묞을 볎낎알 합니닀. 하지만 큎띌읎얞튞는 항상 **요청 볞묞**을 볎낌 필요는 없고, 때로는 (쿌늬 맀개변수와 핚께) ì–Žë–€ 겜로만 요청하고 볞묞은 볎낎지 않을 수도 있습니닀. -**요청** 볞묞을 선얞하Ʞ 위핎서 몚든 강력핚곌 읎점을 갖춘 Pydantic 몚덞을 사용합니닀. +**요청** 볞묞을 선얞하Ʞ 위핎서 몚든 강력핚곌 읎점을 갖춘 [Pydantic](https://docs.pydantic.dev/) 몚덞을 사용합니닀. /// info | 정볎 @@ -73,7 +73,7 @@ * 만앜 데읎터가 유횚하지 않닀멎, 정확히 ì–Žë–€ 것읎 귞늬고 얎디에서 데읎터가 잘 못 되었는지 지시하는 친절하고 명료한 에러륌 반환할 것입니닀. * 맀개변수 `item`에 포핚된 수신 데읎터륌 제공합니닀. * 핚수 낎에서 맀개변수륌 `Item` 타입윌로 선얞했Ʞ 때묞에, 몚든 얎튞늬뷰튞와 귞에 대한 타입에 대한 펞집Ʞ 지원(완성 등)을 또한 받을 수 있습니닀. -* 여러분의 몚덞을 위한 JSON Schema 정의륌 생성합니닀. 여러분의 프로젝튞에 적합하닀멎 여러분읎 사용하고 싶은 ê³³ 얎디에서나 사용할 수 있습니닀. +* 여러분의 몚덞을 위한 [JSON Schema](https://json-schema.org) 정의륌 생성합니닀. 여러분의 프로젝튞에 적합하닀멎 여러분읎 사용하고 싶은 ê³³ 얎디에서나 사용할 수 있습니닀. * 읎러한 슀킀마는, 생성된 OpenAPI 슀킀마 음부가 될 것읎며, 자동 묞서화 UIs에 사용됩니닀. ## 자동 묞서화 { #automatic-docs } @@ -102,15 +102,15 @@ 읎륌 지원하Ʞ 위핎 Pydantic 자첎에서 몇몇 변겜점읎 있었습니닀. -읎전 슀크늰샷은 Visual Studio Code륌 찍은 것입니닀. +읎전 슀크늰샷은 [Visual Studio Code](https://code.visualstudio.com)로 찍은 것입니닀. -하지만 똑같은 펞집Ʞ 지원을 PyCharm와 대부분의 닀륞 파읎썬 펞집Ʞ에서도 받을 수 있습니닀: +하지만 똑같은 펞집Ʞ 지원을 [PyCharm](https://www.jetbrains.com/pycharm/)와 대부분의 닀륞 파읎썬 펞집Ʞ에서도 받을 수 있습니닀: /// tip | 팁 -만앜 PyCharm륌 펞집Ʞ로 사용한닀멎, Pydantic PyCharm Plugin을 사용할 수 있습니닀. +만앜 [PyCharm](https://www.jetbrains.com/pycharm/)륌 펞집Ʞ로 사용한닀멎, [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/)을 사용할 수 있습니닀. 닀음 사항을 포핚핎 Pydantic 몚덞에 대한 펞집Ʞ 지원을 향상시킵니닀: @@ -163,4 +163,4 @@ FastAPI는 `q`의 값읎 필요없음을 Ʞ볞 값 `= None` 때묞에 알게 ## Pydantic없읎 { #without-pydantic } -만앜 Pydantic 몚덞을 사용하고 싶지 않닀멎, **Body** 맀개변수륌 사용할 수도 있습니닀. [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} 묞서륌 확읞하섞요. +만앜 Pydantic 몚덞을 사용하고 싶지 않닀멎, **Body** 맀개변수륌 사용할 수도 있습니닀. [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body) 묞서륌 확읞하섞요. diff --git a/docs/ko/docs/tutorial/cors.md b/docs/ko/docs/tutorial/cors.md index f78e1c0707..08d0221d3d 100644 --- a/docs/ko/docs/tutorial/cors.md +++ b/docs/ko/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS (교찚-출처 늬소슀 공유) { #cors-cross-origin-resource-sharing } -CORS 또는 "Cross-Origin Resource Sharing"란, 람띌우저에서 싀행되는 프론튞엔드에 백엔드와 통신하는 JavaScript 윔드가 있고, 백엔드가 프론튞엔드와 닀륞 "출처(origin)"에 있는 상황을 의믞합니닀. +[CORS 또는 "Cross-Origin Resource Sharing"](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)란, 람띌우저에서 싀행되는 프론튞엔드에 백엔드와 통신하는 JavaScript 윔드가 있고, 백엔드가 프론튞엔드와 닀륞 "출처(origin)"에 있는 상황을 의믞합니닀. ## 출처 { #origin } @@ -56,10 +56,10 @@ * `allow_origins` - 교찚-출처 요청을 볎낌 수 있도록 허용핎알 하는 출처의 늬슀튞입니닀. 예: `['https://example.org', 'https://www.example.org']`. 몚든 출처륌 허용하렀멎 `['*']`륌 사용할 수 있습니닀. * `allow_origin_regex` - 교찚-출처 요청을 볎낌 수 있도록 허용핎알 하는 출처와 맀칭할 정규표현식 묞자엎입니닀. 예: `'https://.*\.example\.org'`. * `allow_methods` - 교찚-출처 요청에 허용되얎알 하는 HTTP 메서드의 늬슀튞입니닀. Ʞ볞값은 `['GET']`입니닀. 몚든 표쀀 메서드륌 허용하렀멎 `['*']`륌 사용할 수 있습니닀. -* `allow_headers` - 교찚-출처 요청에 대핮 지원되얎알 하는 HTTP 요청 헀더의 늬슀튞입니닀. Ʞ볞값은 `[]`입니닀. 몚든 헀더륌 허용하렀멎 `['*']`륌 사용할 수 있습니닀. `Accept`, `Accept-Language`, `Content-Language`, `Content-Type` 헀더는 닚순 CORS 요청에 대핮 항상 허용됩니닀. +* `allow_headers` - 교찚-출처 요청에 대핮 지원되얎알 하는 HTTP 요청 헀더의 늬슀튞입니닀. Ʞ볞값은 `[]`입니닀. 몚든 헀더륌 허용하렀멎 `['*']`륌 사용할 수 있습니닀. `Accept`, `Accept-Language`, `Content-Language`, `Content-Type` 헀더는 [닚순 CORS 요청](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)에 대핮 항상 허용됩니닀. * `allow_credentials` - 교찚-출처 요청에 대핮 쿠킀륌 지원핎알 핚을 나타냅니닀. Ʞ볞값은 `False`입니닀. - `allow_credentials`가 `True`로 섀정된 겜우 `allow_origins`, `allow_methods`, `allow_headers` 쀑 얎느 것도 `['*']`로 섀정할 수 없습니닀. 몚두 명시적윌로 지정되얎알 합니닀. + `allow_credentials`가 `True`로 섀정된 겜우 `allow_origins`, `allow_methods`, `allow_headers` 쀑 얎느 것도 `['*']`로 섀정할 수 없습니닀. 몚두 [명시적윌로 지정](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)되얎알 합니닀. * `expose_headers` - 람띌우저에서 ì ‘ê·Œ 가능핎알 하는 몚든 응답 헀더륌 나타냅니닀. Ʞ볞값은 `[]`입니닀. * `max_age` - 람띌우저가 CORS 응답을 캐시하는 최대 시간을 쎈 닚위로 섀정합니닀. Ʞ볞값은 `600`입니닀. @@ -78,7 +78,7 @@ ## 더 많은 정볎 { #more-info } -CORS에 대한 더 많은 정볎는 Mozilla CORS 묞서륌 찞고하섞요. +CORS에 대한 더 많은 정볎는 [Mozilla CORS 묞서](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)륌 찞고하섞요. /// note | Ʞ술 섞부사항 diff --git a/docs/ko/docs/tutorial/debugging.md b/docs/ko/docs/tutorial/debugging.md index c27b68bc1c..145ffb24bc 100644 --- a/docs/ko/docs/tutorial/debugging.md +++ b/docs/ko/docs/tutorial/debugging.md @@ -74,7 +74,7 @@ from myapp import app /// info | 정볎 -자섞한 낎용은 공식 Python 묞서륌 확읞하섞요. +자섞한 낎용은 [공식 Python 묞서](https://docs.python.org/3/library/__main__.html)륌 확읞하섞요. /// diff --git a/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index d269e7e774..880a47157f 100644 --- a/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -32,7 +32,7 @@ 읎 예시에서 `X-Key`와 `X-Token`읎띌는 컀슀텀 헀더륌 만듀얎 사용했습니닀. -귞러나 싀제로 볎안을 구현할 때는 통합된 [볎안 유틞늬티 (닀음 챕터)](../security/index.md){.internal-link target=_blank}륌 사용하는 것읎 더 많은 읎점을 얻을 수 있습니닀. +귞러나 싀제로 볎안을 구현할 때는 통합된 [볎안 유틞늬티 (닀음 챕터)](../security/index.md)륌 사용하는 것읎 더 많은 읎점을 얻을 수 있습니닀. /// @@ -62,7 +62,7 @@ ## *겜로 처늬* 몚음에 대한 의졎성 { #dependencies-for-a-group-of-path-operations } -나쀑에 여러 파음을 가지고 있을 수 있는 더 큰 애플늬쌀읎션을 구조화하는 법([더 큰 애플늬쌀읎션 - 여러 파음듀](../../tutorial/bigger-applications.md){.internal-link target=_blank})을 읜을 때, *겜로 처늬* 몚음에 대한 닚음 `dependencies` 맀개변수륌 선얞하는 법에 대핎서 배우게 될 것입니닀. +나쀑에 여러 파음을 가지고 있을 수 있는 더 큰 애플늬쌀읎션을 구조화하는 법([더 큰 애플늬쌀읎션 - 여러 파음듀](../../tutorial/bigger-applications.md))을 읜을 때, *겜로 처늬* 몚음에 대한 닚음 `dependencies` 맀개변수륌 선얞하는 법에 대핎서 배우게 될 것입니닀. ## 전역 의졎성 { #global-dependencies } diff --git a/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md index 7b50fd438b..56f690f593 100644 --- a/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md @@ -4,7 +4,7 @@ FastAPI는 `@contextlib.contextmanager` 또는 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 또는 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 는 **FastAPI**의 의졎성윌로 사용할 수 있습니닀. @@ -39,7 +39,7 @@ yield된 값은 *겜로 처늬* 및 닀륞 의졎성듀에 죌입되는 값 입 {* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *} -/// tip | 팁 +/// tip `async` 핚수와 음반 핚수 몚두 사용할 수 있습니닀. @@ -87,7 +87,7 @@ yield된 값은 *겜로 처늬* 및 닀륞 의졎성듀에 죌입되는 값 입 /// note | Ʞ술 섞부사항 -파읎썬의 Context Managers 덕분에 읎 Ʞ능읎 작동합니닀. +파읎썬의 [Context Managers](https://docs.python.org/3/library/contextlib.html) 덕분에 읎 Ʞ능읎 작동합니닀. **FastAPI**는 읎륌 낎부적윌로 사용하여 읎륌 달성합니닀. @@ -101,7 +101,7 @@ yield된 값은 *겜로 처늬* 및 닀륞 의졎성듀에 죌입되는 값 입 예륌 듀얎, `HTTPException` 같은 닀륞 예왞륌 발생시킬 수 있습니닀. -/// tip | 팁 +/// tip 읎는 닀소 고꞉ Ʞ술읎며, 대부분의 겜우 싀제로는 필요하지 않을 것입니닀. 예륌 듀얎, *겜로 처늬 핚수* 등 나뚞지 애플늬쌀읎션 윔드 낎부에서 예왞 (`HTTPException` 포핚)륌 발생시킬 수 있Ʞ 때묞입니닀. @@ -111,7 +111,7 @@ yield된 값은 *겜로 처늬* 및 닀륞 의졎성듀에 죌입되는 값 입 {* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *} -예왞륌 잡고 귞에 Ʞ반핎 사용자 정의 응답을 생성하렀멎, [사용자 정의 예왞 처늬Ʞ](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}륌 생성하섞요. +예왞륌 잡고 귞에 Ʞ반핎 사용자 정의 응답을 생성하렀멎, [사용자 정의 예왞 처늬Ʞ](../handling-errors.md#install-custom-exception-handlers)륌 생성하섞요. ## `yield`와 `except`륌 사용하는 의졎성 { #dependencies-with-yield-and-except } @@ -170,7 +170,7 @@ participant tasks as Background tasks end ``` -/// info | 정볎 +/// info 큎띌읎얞튞에는 **하나의 응답**만 전송됩니닀. 읎는 였류 응답 쀑 하나음 수도 있고, *겜로 처늬*에서 생성된 응답음 수도 있습니닀. @@ -178,7 +178,7 @@ participant tasks as Background tasks /// -/// tip | 팁 +/// tip *겜로 처늬 핚수*의 윔드에서 ì–Žë–€ 예왞륌 발생시킀멎 `HTTPException`을 포핚핎 `yield`륌 사용하는 의졎성윌로 전달됩니닀. 대부분의 겜우 핎당 예왞(또는 새 예왞)륌 `yield`륌 사용하는 의졎성에서 닀시 발생시쌜, 제대로 처늬되도록 핎알 합니닀. @@ -233,14 +233,14 @@ participant operation as Path Operation `yield`륌 사용하는 의졎성은 시간읎 지나멎서 서로 닀륞 사용 사례륌 닀룚고 음부 묞제륌 수정하Ʞ 위핎 발전핎 왔습니닀. -FastAPI의 여러 버전에서 묎엇읎 바뀌었는지 볎고 싶닀멎, 고꞉ 가읎드의 [고꞉ 의졎성 - `yield`, `HTTPException`, `except` 및 백귞띌욎드 작업을 사용하는 의졎성](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks){.internal-link target=_blank}에서 더 자섞히 읜을 수 있습니닀. +FastAPI의 여러 버전에서 묎엇읎 바뀌었는지 볎고 싶닀멎, 고꞉ 가읎드의 [고꞉ 의졎성 - `yield`, `HTTPException`, `except` 및 백귞띌욎드 작업을 사용하는 의졎성](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks)에서 더 자섞히 읜을 수 있습니닀. ## 컚텍슀튞 ꎀ늬자 { #context-managers } ### "컚텍슀튞 ꎀ늬자"란 { #what-are-context-managers } "컚텍슀튞 ꎀ늬자"는 Python에서 `with` 묞에서 사용할 수 있는 몚든 객첎륌 의믞합니닀. -예륌 듀얎, `with`륌 사용하여 파음을 읜을 수 있습니닀: +예륌 듀얎, [with륌 사용핎 파음을 읜을 수 있습니닀](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files): ```Python with open("./somefile.txt") as f: @@ -256,7 +256,7 @@ with open("./somefile.txt") as f: ### `yield`륌 사용하는 의졎성에서 컚텍슀튞 ꎀ늬자 사용하Ʞ { #using-context-managers-in-dependencies-with-yield } -/// warning | 겜고 +/// warning 읎것은 얎느 정도 "고꞉" 개념입니닀. @@ -264,19 +264,19 @@ with open("./somefile.txt") as f: /// -Python에서는 닀음을 통핎 컚텍슀튞 ꎀ늬자륌 생성할 수 있습니닀. 두 가지 메서드가 있는 큎래슀륌 생성합니닀: `__enter__()` and `__exit__()`. +Python에서는 [두 가지 메서드: `__enter__()`와 `__exit__()`가 있는 큎래슀륌 생성하여](https://docs.python.org/3/reference/datamodel.html#context-managers) 컚텍슀튞 ꎀ늬자륌 만듀 수 있습니닀. **FastAPI**의 `yield`가 있는 의졎성 낎에서 `with` 또는 `async with`묞을 사용하여 읎듀을 활용할 수 있습니닀: {* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *} -/// tip | 팁 +/// tip 컚텍슀튞 ꎀ늬자륌 생성하는 또 닀륞 방법은 닀음곌 같습니닀: -* `@contextlib.contextmanager` 또는 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 또는 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 읎듀은 닚음 `yield`가 있는 핚수륌 ꟞믞는 데 사용합니닀. diff --git a/docs/ko/docs/tutorial/dependencies/global-dependencies.md b/docs/ko/docs/tutorial/dependencies/global-dependencies.md index 8b000a3a43..6d4c43eb6c 100644 --- a/docs/ko/docs/tutorial/dependencies/global-dependencies.md +++ b/docs/ko/docs/tutorial/dependencies/global-dependencies.md @@ -2,14 +2,14 @@ 몇몇 유형의 애플늬쌀읎션에서는 애플늬쌀읎션 전첎에 의졎성을 추가하고 싶을 수 있습니닀. -[*겜로 처늬 데윔레읎터*에 `dependencies` 추가하Ʞ](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}와 유사한 방법윌로 `FastAPI` 애플늬쌀읎션에 귞것듀을 추가할 수 있습니닀. +[*겜로 처늬 데윔레읎터*에 `dependencies` 추가하Ʞ](dependencies-in-path-operation-decorators.md)와 유사한 방법윌로 `FastAPI` 애플늬쌀읎션에 귞것듀을 추가할 수 있습니닀. 귞런 겜우에, 애플늬쌀읎션의 몚든 *겜로 처늬*에 적용될 것입니닀: {* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *} -귞늬고 [*겜로 처늬 데윔레읎터*에 `dependencies` 추가하Ʞ](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 섹션의 몚든 아읎디얎는 여전히 적용되지만, 읎 겜우에는 앱의 몚든 *겜로 처늬*에 적용됩니닀. +귞늬고 [*겜로 처늬 데윔레읎터*에 `dependencies` 추가하Ʞ](dependencies-in-path-operation-decorators.md) 섹션의 몚든 아읎디얎는 여전히 적용되지만, 읎 겜우에는 애플늬쌀읎션의 몚든 *겜로 처늬*에 적용됩니닀. ## *겜로 처늬* 귞룹에 대한 의졎성 { #dependencies-for-groups-of-path-operations } -나쀑에 여러 파음을 포핚할 수도 있는 더 큰 애플늬쌀읎션을 구조화하는 법([더 큰 애플늬쌀읎션 - 여러 파음듀](../../tutorial/bigger-applications.md){.internal-link target=_blank})을 읜을 때, *겜로 처늬* 귞룹에 대한 닚음 `dependencies` 맀개변수륌 선얞하는 법을 배우게 될 것입니닀. +나쀑에 여러 파음을 포핚할 수도 있는 더 큰 애플늬쌀읎션을 구조화하는 법([더 큰 애플늬쌀읎션 - 여러 파음듀](../../tutorial/bigger-applications.md))을 읜을 때, *겜로 처늬* 귞룹에 대한 닚음 `dependencies` 맀개변수륌 선얞하는 법을 배우게 될 것입니닀. diff --git a/docs/ko/docs/tutorial/dependencies/index.md b/docs/ko/docs/tutorial/dependencies/index.md index f7d8d5982c..4b540b779e 100644 --- a/docs/ko/docs/tutorial/dependencies/index.md +++ b/docs/ko/docs/tutorial/dependencies/index.md @@ -57,7 +57,7 @@ FastAPI는 0.95.0 버전부터 `Annotated`에 대한 지원을 (귞늬고 읎륌 옛날 버전을 가지고 있는 겜우, `Annotated`륌 사용하렀 하멎 에러륌 맞읎하게 될 것입니닀. -`Annotated`륌 사용하Ʞ 전에 최소 0.95.1로 [FastAPI 버전 업귞레읎드](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 확싀하게 하섞요. +`Annotated`륌 사용하Ʞ 전에 최소 0.95.1로 [FastAPI 버전 업귞레읎드](../../deployment/versions.md#upgrading-the-fastapi-versions)륌 확싀하게 하섞요. /// @@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)] /// note | ì°žê³  -잘 몚륎시겠닀멎, [Async: *"In a hurry?"*](../../async.md#in-a-hurry){.internal-link target=_blank} 묞서에서 `async`와 `await`에 대핮 확읞할 수 있습니닀. +잘 몚륎시겠닀멎, [Async: *"In a hurry?"*](../../async.md#in-a-hurry) 묞서에서 `async`와 `await`에 대핮 확읞할 수 있습니닀. /// diff --git a/docs/ko/docs/tutorial/encoder.md b/docs/ko/docs/tutorial/encoder.md index d820f6e44d..9ed7a13cd8 100644 --- a/docs/ko/docs/tutorial/encoder.md +++ b/docs/ko/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ JSON 혾환 가능 데읎터만 수신하는 `fake_db` 데읎터베읎슀가 졎 예륌 듀멎, `datetime` 객첎는 JSON곌 혞환되지 않윌므로 읎 데읎터베읎슀는 읎륌 받지 않습니닀. -따띌서 `datetime` 객첎는 ISO 형식의 데읎터륌 포핚하는 `str`로 변환되얎알 합니닀. +따띌서 `datetime` 객첎는 [ISO 형식](https://en.wikipedia.org/wiki/ISO_8601)의 데읎터륌 포핚하는 `str`로 변환되얎알 합니닀. 같은 방식윌로 읎 데읎터베읎슀는 Pydantic 몚덞(속성읎 있는 객첎)을 받지 않고, `dict`만을 받습니닀. @@ -24,7 +24,7 @@ Pydantic 몚덞 같은 객첎륌 받고 JSON 혾환 가능한 버전을 반환 읎 예시에서는 Pydantic 몚덞을 `dict`로, `datetime`을 `str`로 변환합니닀. -읎렇게 혞출한 결곌는 파읎썬 표쀀읞 `json.dumps()`로 읞윔딩할 수 있습니닀. +읎렇게 혞출한 결곌는 파읎썬 표쀀읞 [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)로 읞윔딩할 수 있습니닀. JSON 형식(묞자엎)의 데읎터가 듀얎있는 큰 `str`을 반환하지 않습니닀. JSON곌 몚두 혾환되는 값곌 하위 값읎 있는 파읎썬 표쀀 데읎터 구조(예: `dict`)륌 반환합니닀. diff --git a/docs/ko/docs/tutorial/extra-data-types.md b/docs/ko/docs/tutorial/extra-data-types.md index 4a51e92861..da62a39927 100644 --- a/docs/ko/docs/tutorial/extra-data-types.md +++ b/docs/ko/docs/tutorial/extra-data-types.md @@ -36,7 +36,7 @@ * `datetime.timedelta`: * 파읎썬의 `datetime.timedelta`. * 요청곌 응답에서 전첎 쎈(seconds)의 `float`로 표현됩니닀. - * Pydantic은 "ISO 8601 time diff encoding"윌로 표현하는 것 또한 허용합니닀. 더 많은 정볎는 묞서륌 확읞하섞요. + * Pydantic은 "ISO 8601 time diff encoding"윌로 표현하는 것 또한 허용합니닀. [더 많은 정볎는 묞서륌 확읞하섞요](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers). * `frozenset`: * 요청곌 응답에서 `set`와 동음하게 췚꞉됩니닀: * 요청 시, 늬슀튞륌 읜얎 쀑복을 제거하고 `set`로 변환합니닀. @@ -49,7 +49,7 @@ * `Decimal`: * 표쀀 파읎썬의 `Decimal`. * 요청곌 응답에서 `float`와 동음하게 닀뀄집니닀. -* 여Ʞ에서 몚든 유횚한 Pydantic 데읎터 자료형을 확읞할 수 있습니닀: Pydantic 데읎터 자료형. +* 여Ʞ에서 몚든 유횚한 Pydantic 데읎터 자료형을 확읞할 수 있습니닀: [Pydantic 데읎터 자료형](https://docs.pydantic.dev/latest/usage/types/types/). ## 예시 { #example } diff --git a/docs/ko/docs/tutorial/extra-models.md b/docs/ko/docs/tutorial/extra-models.md index 70d7f8bffc..157549f92f 100644 --- a/docs/ko/docs/tutorial/extra-models.md +++ b/docs/ko/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ 절대 사용자의 비밀번혞륌 평묞윌로 저장하지 마섞요. 항상 읎후에 검슝 가능한 "안전한 핎시(secure hash)"로 저장하섞요. -만앜 읎게 묎엇읞지 몚륎겠닀멎, [볎안 장](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}에서 "password hash"가 묎엇읞지 ë°°ìšž 수 있습니닀. +만앜 읎게 묎엇읞지 몚륎겠닀멎, [볎안 장](security/simple-oauth2.md#password-hashing)에서 "password hash"가 묎엇읞지 ë°°ìšž 수 있습니닀. /// @@ -162,11 +162,11 @@ UserInDB( OpenAPI에서는 읎륌 `anyOf`로 정의합니닀. -읎륌 위핎 표쀀 Python 타입 힌튞읞 `typing.Union`을 사용할 수 있습니닀: +읎륌 위핎 표쀀 Python 타입 힌튞읞 [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)을 사용할 수 있습니닀: /// note -`Union`을 정의할 때는 더 구첎적읞 타입을 뚌저 포핚하고, 덜 구첎적읞 타입을 ê·ž 뒀에 나엎핎알 합니닀. 아래 예제에서는 `Union[PlaneItem, CarItem]`에서 더 구첎적읞 `PlaneItem`읎 `CarItem`볎닀 앞에 위치합니닀. +[`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions)을 정의할 때는 더 구첎적읞 타입을 뚌저 포핚하고, 덜 구첎적읞 타입을 ê·ž 뒀에 나엎핎알 합니닀. 아래 예제에서는 `Union[PlaneItem, CarItem]`에서 더 구첎적읞 `PlaneItem`읎 `CarItem`볎닀 앞에 위치합니닀. /// diff --git a/docs/ko/docs/tutorial/first-steps.md b/docs/ko/docs/tutorial/first-steps.md index e3d372ba42..cc3d6c6182 100644 --- a/docs/ko/docs/tutorial/first-steps.md +++ b/docs/ko/docs/tutorial/first-steps.md @@ -11,7 +11,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 확읞하Ʞ { #check-it } -람띌우저로 http://127.0.0.1:8000륌 여섞요. +람띌우저로 [http://127.0.0.1:8000](http://127.0.0.1:8000)륌 여섞요. 아래와 같은 JSON 응답을 볌 수 있습니닀: @@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 대화형 API 묞서 { #interactive-api-docs } -읎제 http://127.0.0.1:8000/docs로 가뎅니닀. +읎제 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)로 가뎅니닀. -자동 대화형 API 묞서륌 볌 수 있습니닀 (Swagger UI 제공): +자동 대화형 API 묞서륌 볌 수 있습니닀 ([Swagger UI](https://github.com/swagger-api/swagger-ui) 제공): ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 대안 API 묞서 { #alternative-api-docs } -귞늬고 읎제, http://127.0.0.1:8000/redoc로 가뎅니닀. +귞늬고 읎제, [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)로 가뎅니닀. -대안 자동 묞서륌 볌 수 있습니닀 (ReDoc 제공): +대안 자동 묞서륌 볌 수 있습니닀 ([ReDoc](https://github.com/Rebilly/ReDoc) 제공): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) #### API "슀킀마" { #api-schema } -OpenAPI는 API의 슀킀마륌 얎떻게 정의하는지 지시하는 규격입니닀. +읎 겜우, [OpenAPI](https://github.com/OAI/OpenAPI-Specification)는 여러분의 API 슀킀마륌 얎떻게 정의하는지 지시하는 규격입니닀. 읎 슀킀마 정의는 API 겜로, 가능한 맀개변수 등을 포핚합니닀. @@ -110,7 +110,7 @@ OpenAPI는 여러분의 API에 대한 API 슀킀마륌 정의합니닀. 또한 가공되지 않은 OpenAPI 슀킀마가 얎떻게 생게는지 궁ꞈ하닀멎, FastAPI는 자동윌로 여러분의 몚든 API에 대한 섀명곌 핚께 JSON (슀킀마)륌 생성합니닀. -여Ʞ에서 직접 볌 수 있습니닀: http://127.0.0.1:8000/openapi.json. +여Ʞ에서 직접 볌 수 있습니닀: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json). 닀음곌 같읎 시작하는 JSON을 확읞할 수 있습니닀: @@ -143,9 +143,58 @@ OpenAPI 슀킀마는 포핚된 두 개의 대화형 묞서 시슀템을 제공 API와 통신하는 큎띌읎얞튞(프론튞엔드, 몚바음, IoT 애플늬쌀읎션 등)륌 위핎 윔드륌 자동윌로 생성하는 데도 사용할 수 있습니닀. +### `pyproject.toml`에 앱 `entrypoint` 구성하Ʞ { #configure-the-app-entrypoint-in-pyproject-toml } + +닀음곌 같읎 `pyproject.toml` 파음에서 앱읎 위치한 곳을 구성할 수 있습니닀: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +핎당 `entrypoint`는 `fastapi` 명령얎에 닀음곌 같읎 앱을 임포튞하띌고 알렀쀍니닀: + +```python +from main import app +``` + +윔드 구조가 닀음곌 같닀멎: + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +귞럌 `entrypoint`륌 닀음곌 같읎 섀정합니닀: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +읎는 닀음곌 동음합니닀: + +```python +from backend.main import app +``` + +### `fastapi dev`에 겜로 지정하Ʞ { #fastapi-dev-with-path } + +`fastapi dev` 명령얎에 파음 겜로륌 전달할 수도 있윌며, 귞러멎 사용할 FastAPI app 객첎륌 추정합니닀: + +```console +$ fastapi dev main.py +``` + +하지만 맀번 `fastapi` 명령얎륌 혞출할 때마닀 올바륞 겜로륌 전달핎알 합니닀. + +또한 닀륞 도구듀, 예륌 듀얎 [VS Code 확장](../editor-support.md)읎나 [FastAPI Cloud](https://fastapicloud.com)가 읎륌 ì°Ÿì§€ 못할 수 있윌므로, `pyproject.toml`의 `entrypoint`륌 사용하는 것을 권장합니닀. + ### 앱 배포하Ʞ(선택 사항) { #deploy-your-app-optional } -선택적윌로 FastAPI 앱을 FastAPI Cloud에 배포할 수 있습니닀. 아직 대Ʞ자 명닚에 등록하지 않았닀멎, 등록하러 가섞요. 🚀 +선택적윌로 FastAPI 앱을 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니닀. 아직 대Ʞ자 명닚에 등록하지 않았닀멎, 등록하러 가섞요. 🚀 읎믞 **FastAPI Cloud** 계정읎 있닀멎(대Ʞ자 명닚에서 쎈대핎 드렞습니닀 😉), 한 번의 명령윌로 애플늬쌀읎션을 배포할 수 있습니닀. @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI`는 `Starlette`륌 직접 상속하는 큎래슀입니닀. -`FastAPI`로 Starlette의 몚든 Ʞ능을 사용할 수 있습니닀. +`FastAPI`로 [Starlette](https://www.starlette.dev/)의 몚든 Ʞ능을 사용할 수 있습니닀. /// @@ -336,7 +385,7 @@ URL "`/`"에 대한 `GET` 작동을 사용하는 요청을 받을 때마닀 **Fa /// note | ì°žê³  -찚읎점을 몚륎겠닀멎 [Async: *"바쁘신 겜우"*](../async.md#in-a-hurry){.internal-link target=_blank}륌 확읞하섞요. +찚읎점을 몚륎겠닀멎 [Async: *"바쁘신 겜우"*](../async.md#in-a-hurry)륌 확읞하섞요. /// @@ -352,11 +401,11 @@ JSON윌로 자동 변환되는 객첎듀곌 몚덞듀(ORM 등을 포핚핎서) ### 6 닚계: 배포하Ʞ { #step-6-deploy-it } -한 번의 명령윌로 **FastAPI Cloud**에 앱을 배포합니닀: `fastapi deploy`. 🎉 +한 번의 명령윌로 **[FastAPI Cloud](https://fastapicloud.com)**에 앱을 배포합니닀: `fastapi deploy`. 🎉 #### FastAPI Cloud 소개 { #about-fastapi-cloud } -**FastAPI Cloud**는 **FastAPI** 뒀에 있는 동음한 작성자와 팀읎 만듀었습니닀. +**[FastAPI Cloud](https://fastapicloud.com)**는 **FastAPI** 뒀에 있는 동음한 작성자와 팀읎 만듀었습니닀. 최소한의 녞력윌로 API륌 **빌드**, **배포**, **ì ‘ê·Œ**하는 곌정을 간소화합니닀. diff --git a/docs/ko/docs/tutorial/handling-errors.md b/docs/ko/docs/tutorial/handling-errors.md index 115c322363..efee108ef1 100644 --- a/docs/ko/docs/tutorial/handling-errors.md +++ b/docs/ko/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ HTTP 였류에 컀슀텀 헀더륌 추가할 수 있윌멎 유용한 상황읎 ## 컀슀텀 예왞 핞듀러 섀치하Ʞ { #install-custom-exception-handlers } -Starlette의 동음한 예왞 유틞늬티륌 사용핎 컀슀텀 예왞 핞듀러륌 추가할 수 있습니닀. +[Starlette의 동음한 예왞 유틞늬티](https://www.starlette.dev/exceptions/)륌 사용핎 컀슀텀 예왞 핞듀러륌 추가할 수 있습니닀. 여러분(또는 사용하는 띌읎람러늬)읎 `raise`할 수 있는 컀슀텀 예왞 `UnicornException`읎 있닀고 가정핎 뎅시닀. diff --git a/docs/ko/docs/tutorial/index.md b/docs/ko/docs/tutorial/index.md index c44aac2d4d..7f8c374725 100644 --- a/docs/ko/docs/tutorial/index.md +++ b/docs/ko/docs/tutorial/index.md @@ -15,7 +15,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -62,7 +62,7 @@ $ fastapi dev @@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | ì°žê³  -`pip install "fastapi[standard]"`로 섀치하멎 `fastapi-cloud-cli`륌 포핚한 몇 가지 Ʞ볞 선택적 standard 의졎성읎 핚께 섀치되며, 읎륌 사용핎 FastAPI Cloud에 배포할 수 있습니닀. +`pip install "fastapi[standard]"`로 섀치하멎 `fastapi-cloud-cli`륌 포핚한 몇 가지 Ʞ볞 선택적 standard 의졎성읎 핚께 섀치되며, 읎륌 사용핎 [FastAPI Cloud](https://fastapicloud.com)에 배포할 수 있습니닀. 읎러한 선택적 의졎성읎 필요 없닀멎 `pip install fastapi`로 대신 섀치할 수 있습니닀. @@ -84,6 +84,12 @@ standard 의졎성은 섀치하되 `fastapi-cloud-cli` 없읎 섀치하렀멎 `p /// +/// tip | 팁 + +FastAPI는 VS Code(및 Cursor)용 [공식 확장 프로귞랚](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)읎 있습니닀. 겜로 처늬 탐색Ʞ, 겜로 처늬 검색, 테슀튞에서의 CodeLens 탐색(테슀튞에서 정의로 바로 읎동), FastAPI Cloud 배포와 로귞 등 많은 Ʞ능을 에디터에서 바로 제공합니닀. + +/// + ## 고꞉ 사용자 안낎서 { #advanced-user-guide } 읎 **자습서 - 사용자 안낎서**륌 읜은 뒀에 나쀑에 읜을 수 있는 **고꞉ 사용자 안낎서**도 있습니닀. diff --git a/docs/ko/docs/tutorial/metadata.md b/docs/ko/docs/tutorial/metadata.md index 2107ea90a7..9220dc2b47 100644 --- a/docs/ko/docs/tutorial/metadata.md +++ b/docs/ko/docs/tutorial/metadata.md @@ -14,7 +14,7 @@ OpenAPI 명섞 및 자동화된 API 묞서 UI에 사용되는 닀음 필드륌 | `version` | `string` | API의 버전입니닀. OpenAPI의 버전읎 아닌, 여러분의 애플늬쌀읎션의 버전을 나타냅니닀. 예: `2.5.0`. | | `terms_of_service` | `str` | API 읎용 앜ꎀ의 URL입니닀. 제공하는 겜우 URL 형식읎얎알 합니닀. | | `contact` | `dict` | 녞출된 API에 대한 연띜처 정볎입니닀. 여러 필드륌 포핚할 수 있습니닀.
contact 필드
맀개변수타입섀명
namestr연띜처 읞묌/조직의 식별명입니닀.
urlstr연띜처 정볎가 닎ꞎ URL입니닀. URL 형식읎얎알 합니닀.
emailstr연띜처 읞묌/조직의 읎메음 죌소입니닀. 읎메음 죌소 형식읎얎알 합니닀.
| -| `license_info` | `dict` | 녞출된 API의 띌읎선슀 정볎입니닀. 여러 필드륌 포핚할 수 있습니닀.
license_info 필드
맀개변수타입섀명
namestr필수 (license_info가 섀정된 겜우). API에 사용된 띌읎선슀 읎늄입니닀.
identifierstrAPI에 대한 SPDX 띌읎선슀 표현입니닀. identifier 필드는 url 필드와 상혞 배타적입니닀. OpenAPI 3.1.0, FastAPI 0.99.0부터 사용 가능.
urlstrAPI에 사용된 띌읎선슀의 URL입니닀. URL 형식읎얎알 합니닀.
| +| `license_info` | `dict` | 녞출된 API의 띌읎선슀 정볎입니닀. 여러 필드륌 포핚할 수 있습니닀.
license_info 필드
맀개변수타입섀명
namestr필수 (license_info가 섀정된 겜우). API에 사용된 띌읎선슀 읎늄입니닀.
identifierstrAPI에 대한 [SPDX](https://spdx.org/licenses/) 띌읎선슀 표현입니닀. identifier 필드는 url 필드와 상혞 배타적입니닀. OpenAPI 3.1.0, FastAPI 0.99.0부터 사용 가능.
urlstrAPI에 사용된 띌읎선슀의 URL입니닀. URL 형식읎얎알 합니닀.
| 닀음곌 같읎 섀정할 수 있습니닀: @@ -40,7 +40,7 @@ OpenAPI 3.1.0 및 FastAPI 0.99.0부터 `license_info`에 `url` 대신 `identifie ## 태귞에 대한 메타데읎터 { #metadata-for-tags } -`openapi_tags` 맀개변수륌 사용하여 겜로 처늬을 귞룹화하는 데 사용되는 여러 태귞에 추가 메타데읎터륌 추가할 수도 있습니닀. +`openapi_tags` 맀개변수륌 사용하여 겜로 처늬륌 귞룹화하는 데 사용되는 여러 태귞에 추가 메타데읎터륌 추가할 수도 있습니닀. 늬슀튞는 각 태귞에 대핮 하나의 딕셔너늬륌 포핚합니닀. @@ -76,7 +76,7 @@ OpenAPI 3.1.0 및 FastAPI 0.99.0부터 `license_info`에 `url` 대신 `identifie /// info | 정볎 -태귞에 대한 자섞한 낎용은 [겜로 처늬 구성](path-operation-configuration.md#tags){.internal-link target=_blank}에서 읜얎볎섞요. +태귞에 대한 자섞한 낎용은 [겜로 처늬 구성](path-operation-configuration.md#tags)에서 읜얎볎섞요. /// diff --git a/docs/ko/docs/tutorial/middleware.md b/docs/ko/docs/tutorial/middleware.md index 6c4f33fd98..b459f6434e 100644 --- a/docs/ko/docs/tutorial/middleware.md +++ b/docs/ko/docs/tutorial/middleware.md @@ -1,10 +1,10 @@ # 믞듀웚얎 { #middleware } -믞듀웚얎륌 **FastAPI** 응용 프로귞랚에 추가할 수 있습니닀. +믞듀웚얎륌 **FastAPI** 애플늬쌀읎션에 추가할 수 있습니닀. "믞듀웚얎"는 특정 *겜로 처늬*에 의핎 처늬되Ʞ 전, 몚든 **요청**에 대핎서 동작하는 핚수입니닀. 또한 몚든 **응답**읎 반환되Ʞ 전에도 동음하게 동작합니닀. -* 믞듀웚얎는 응용 프로귞랚윌로 였는 각 **요청**을 가젞옵니닀. +* 믞듀웚얎는 애플늬쌀읎션윌로 였는 각 **요청**을 가젞옵니닀. * 귞런 닀음 핎당 **요청**에 대핮 묎얞가륌 하거나 필요한 윔드륌 싀행할 수 있습니닀. * 귞런 닀음 **요청**을 나뚞지 애플늬쌀읎션(ì–Žë–€ *겜로 처늬*가)을 통핎 처늬되도록 전달합니닀. * 귞런 닀음 애플늬쌀읎션(ì–Žë–€ *겜로 처늬*가)읎 생성한 **응답**을 가젞옵니닀. @@ -15,7 +15,7 @@ `yield`륌 사용하는 의졎성읎 있닀멎, exit 윔드는 믞듀웚얎 *후에* 싀행됩니닀. -백귞띌욎드 작업(뒀에서 볎게 될 [백귞띌욎드 작업](background-tasks.md){.internal-link target=_blank} 섹션에서 닀룹니닀)읎 있닀멎, 몚든 믞듀웚얎 *후에* 싀행됩니닀. +백귞띌욎드 작업(뒀에서 볎게 될 [백귞띌욎드 작업](background-tasks.md) 섹션에서 닀룹니닀)읎 있닀멎, 몚든 믞듀웚얎 *후에* 싀행됩니닀. /// @@ -35,9 +35,9 @@ /// tip | 팁 -사용자 정의 독점 헀더는 `X-` 접두사륌 사용하여 추가할 수 있닀는 점을 Ʞ억하섞요. +사용자 정의 독점 헀더는 [`X-` 접두사륌 사용](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)하여 추가할 수 있닀는 점을 Ʞ억하섞요. -하지만 람띌우저에서 큎띌읎얞튞가 볌 수 있게 하렀는 사용자 정의 헀더가 있닀멎, Starlette의 CORS 묞서에 묞서화된 `expose_headers` 맀개변수륌 사용핎 CORS 섀정([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank})에 추가핎알 합니닀. +하지만 람띌우저에서 큎띌읎얞튞가 볌 수 있게 하렀는 사용자 정의 헀더가 있닀멎, [CORS (Cross-Origin Resource Sharing)](cors.md) 섀정에 [Starlette의 CORS 묞서](https://www.starlette.dev/middleware/#corsmiddleware)에 묞서화된 `expose_headers` 맀개변수륌 사용핎 추가핎알 합니닀. /// @@ -61,7 +61,7 @@ /// tip | 팁 -여Ʞ서는 읎러한 사용 사례에서 더 정확할 수 있Ʞ 때묞에 `time.time()` 대신 `time.perf_counter()`륌 사용합니닀. 🀓 +여Ʞ서는 읎러한 사용 사례에서 더 정확할 수 있Ʞ 때묞에 `time.time()` 대신 [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter)륌 사용합니닀. 🀓 /// @@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB) ## 닀륞 믞듀웚얎 { #other-middlewares } -닀륞 믞듀웚얎에 대한 더 많은 정볎는 나쀑에 [숙렚된 사용자 안낎서: 향상된 믞듀웚얎](../advanced/middleware.md){.internal-link target=_blank}에서 확읞할 수 있습니닀. +닀륞 믞듀웚얎에 대한 더 많은 정볎는 나쀑에 [숙렚된 사용자 안낎서: 향상된 믞듀웚얎](../advanced/middleware.md)에서 확읞할 수 있습니닀. 닀음 섹션에서 믞듀웚얎로 CORS륌 처늬하는 방법을 볎게 될 것입니닀. diff --git a/docs/ko/docs/tutorial/path-operation-configuration.md b/docs/ko/docs/tutorial/path-operation-configuration.md index 0d6a0d4229..ebdf6f918f 100644 --- a/docs/ko/docs/tutorial/path-operation-configuration.md +++ b/docs/ko/docs/tutorial/path-operation-configuration.md @@ -58,7 +58,7 @@ 섀명은 볎통 Ꞟ얎지고 여러 쀄에 걞쳐있Ʞ 때묞에, *겜로 처늬* 섀명을 핚수 독슀튞링에 ì„ ì–ží•  수 있윌며, **FastAPI**는 귞곳에서 읎륌 읜습니닀. -독슀튞링에는 Markdown을 작성할 수 있윌며, (독슀튞링의 듀여쓰Ʞ륌 고렀하여) 올바륎게 핎석되고 표시됩니닀. +독슀튞링에는 [Markdown](https://en.wikipedia.org/wiki/Markdown)을 작성할 수 있윌며, (독슀튞링의 듀여쓰Ʞ륌 고렀하여) 올바륎게 핎석되고 표시됩니닀. {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *} diff --git a/docs/ko/docs/tutorial/path-params-numeric-validations.md b/docs/ko/docs/tutorial/path-params-numeric-validations.md index 51f9fe2c14..2ff56c46e7 100644 --- a/docs/ko/docs/tutorial/path-params-numeric-validations.md +++ b/docs/ko/docs/tutorial/path-params-numeric-validations.md @@ -14,7 +14,7 @@ FastAPI는 0.95.0 버전에서 `Annotated` 지원을 추가했고(귞늬고 읎 더 였래된 버전읎 있닀멎 `Annotated`륌 사용하렀고 할 때 였류가 발생합니닀. -`Annotated`륌 사용하Ʞ 전에 최소 0.95.1까지 [FastAPI 버전 업귞레읎드](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 ꌭ 하섞요. +`Annotated`륌 사용하Ʞ 전에 최소 0.95.1까지 [FastAPI 버전 업귞레읎드](../deployment/versions.md#upgrading-the-fastapi-versions)륌 ꌭ 하섞요. /// @@ -81,7 +81,7 @@ FastAPI는 0.95.0 버전에서 `Annotated` 지원을 추가했고(귞늬고 읎 핚수의 첫 번짞 맀개변수로 `*`륌 전달하섞요. -파읎썬은 `*`윌로 아묎것도 하지 않지만, 뒀따륎는 몚든 맀개변수는 킀워드 읞자(í‚€-값 쌍)로 혞출되얎알 핚을 알게 됩니닀. 읎는 kwargs로도 알렀젞 있습니닀. Ʞ볞값읎 없더띌도 마찬가지입니닀. +파읎썬은 `*`윌로 아묎것도 하지 않지만, 뒀따륎는 몚든 맀개변수는 킀워드 읞자(í‚€-값 쌍)로 혞출되얎알 핚을 알게 됩니닀. 읎는 kwargs로도 알렀젞 있습니닀. Ʞ볞값읎 없더띌도 마찬가지입니닀. {* ../../docs_src/path_params_numeric_validations/tutorial003_py310.py hl[7] *} @@ -112,17 +112,17 @@ FastAPI는 0.95.0 버전에서 `Annotated` 지원을 추가했고(귞늬고 읎 숫자 검슝은 `float` 값에도 동작합니닀. -여Ʞ에서 gt륌, ge뿐만 아니띌 ì„ ì–ží•  수 있닀는 점읎 쀑요핎집니닀. 예륌 듀얎 값읎 `1`볎닀 작더띌도, 반드시 `0`볎닀 컀알 한닀고 요구할 수 있습니닀. +여Ʞ에서 gt륌, ge뿐만 아니띌 ì„ ì–ží•  수 있닀는 점읎 쀑요핎집니닀. 예륌 듀얎 값읎 `1`볎닀 작더띌도, 반드시 `0`볎닀 컀알 한닀고 요구할 수 있습니닀. 슉, `0.5`는 유횚한 값입니닀. 귞러나 `0.0` 또는 `0`은 귞렇지 않습니닀. -lt 역시 마찬가지입니닀. +lt 역시 마찬가지입니닀. {* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *} ## 요앜 { #recap } -`Query`, `Path`(아직 볎지 못한 닀륞 것듀도)륌 사용하멎 [쿌늬 맀개변수와 묞자엎 검슝](query-params-str-validations.md){.internal-link target=_blank}에서와 마찬가지로 메타데읎터와 묞자엎 검슝을 ì„ ì–ží•  수 있습니닀. +`Query`, `Path`(아직 볎지 못한 닀륞 것듀도)륌 사용하멎 [쿌늬 맀개변수와 묞자엎 검슝](query-params-str-validations.md)에서와 마찬가지로 메타데읎터와 묞자엎 검슝을 ì„ ì–ží•  수 있습니닀. 귞늬고 숫자 검슝 또한 ì„ ì–ží•  수 있습니닀: diff --git a/docs/ko/docs/tutorial/path-params.md b/docs/ko/docs/tutorial/path-params.md index c6e973709a..c6ea6b7c16 100644 --- a/docs/ko/docs/tutorial/path-params.md +++ b/docs/ko/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ 겜로 맀개변수 `item_id`의 값은 핚수의 `item_id` 읞자로 전달됩니닀. -귞래서 읎 예제륌 싀행하고 http://127.0.0.1:8000/items/foo로 읎동하멎, 닀음 응답을 볌 수 있습니닀: +귞래서 읎 예제륌 싀행하고 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)로 읎동하멎, 닀음 응답을 볌 수 있습니닀: ```JSON {"item_id":"foo"} @@ -28,7 +28,7 @@ ## 데읎터 변환 { #data-conversion } -읎 예제륌 싀행하고 http://127.0.0.1:8000/items/3을 엎멎, 닀음 응답을 볌 수 있습니닀: +읎 예제륌 싀행하고 [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)을 엎멎, 닀음 응답을 볌 수 있습니닀: ```JSON {"item_id":3} @@ -44,7 +44,7 @@ ## 데읎터 검슝 { #data-validation } -하지만 람띌우저에서 http://127.0.0.1:8000/items/foo로 읎동하멎, 닀음곌 같은 HTTP 였류륌 볌 수 있습니닀: +하지만 람띌우저에서 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)로 읎동하멎, 닀음곌 같은 HTTP 였류륌 볌 수 있습니닀: ```JSON { @@ -64,7 +64,7 @@ 겜로 맀개변수 `item_id`가 `int`가 아닌 `"foo"` 값을 가졌Ʞ 때묞입니닀. -`int` 대신 `float`을 제공하멎(예: http://127.0.0.1:8000/items/4.2) 동음한 였류가 나타납니닀. +`int` 대신 `float`을 제공하멎(예: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)) 동음한 였류가 나타납니닀. /// check | 확읞 @@ -78,7 +78,7 @@ ## 묞서화 { #documentation } -귞늬고 람띌우저에서 http://127.0.0.1:8000/docs륌 엎멎, 닀음곌 같읎 자동 대화식 API 묞서륌 볌 수 있습니닀: +귞늬고 람띌우저에서 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)륌 엎멎, 닀음곌 같읎 자동 대화식 API 묞서륌 볌 수 있습니닀: @@ -92,9 +92,9 @@ ## 표쀀 Ʞ반의 읎점, 대첎 묞서 { #standards-based-benefits-alternative-documentation } -귞늬고 생성된 슀킀마는 OpenAPI 표쀀에서 나옚 것읎Ʞ 때묞에 혾환되는 도구가 많읎 있습니닀. +귞늬고 생성된 슀킀마는 [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) 표쀀에서 나옚 것읎Ʞ 때묞에 혾환되는 도구가 많읎 있습니닀. -읎 덕분에 **FastAPI** 자첎에서 http://127.0.0.1:8000/redoc로 접속할 수 있는 (ReDoc을 사용하는) 대첎 API 묞서륌 제공합니닀: +읎 덕분에 **FastAPI** 자첎에서 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)로 접속할 수 있는 (ReDoc을 사용하는) 대첎 API 묞서륌 제공합니닀: @@ -102,7 +102,7 @@ ## Pydantic { #pydantic } -몚든 데읎터 검슝은 Pydantic에 의핎 낎부적윌로 수행되므로 읎로 읞한 읎점을 몚두 얻을 수 있습니닀. 여러분은 ꎀ늬륌 잘 받고 있음을 느낄 수 있습니닀. +몚든 데읎터 검슝은 [Pydantic](https://docs.pydantic.dev/)에 의핎 낎부적윌로 수행되므로 읎로 읞한 읎점을 몚두 얻을 수 있습니닀. 여러분은 ꎀ늬륌 잘 받고 있음을 느낄 수 있습니닀. `str`, `float`, `bool`, 귞늬고 닀륞 여러 복잡한 데읎터 타입 선얞을 할 수 있습니닀. @@ -130,7 +130,7 @@ ## 사전정의 값 { #predefined-values } -만앜 *겜로 맀개변수*륌 받는 *겜로 처늬*가 있지만, 가능한 유횚한 *겜로 맀개변수* 값듀을 믞늬 정의하고 싶닀멎 파읎썬 표쀀 `Enum`을 사용할 수 있습니닀. +만앜 *겜로 맀개변수*륌 받는 *겜로 처늬*가 있지만, 가능한 유횚한 *겜로 맀개변수* 값듀을 믞늬 정의하고 싶닀멎 파읎썬 표쀀 `Enum`을 사용할 수 있습니닀. ### `Enum` 큎래슀 생성 { #create-an-enum-class } @@ -150,7 +150,7 @@ ### *겜로 맀개변수* ì„ ì–ž { #declare-a-path-parameter } -생성한 엎거형 큎래슀(`ModelName`)륌 사용하는 타입 얎녞테읎션윌로 *겜로 맀개변수*륌 만듭니닀: +생성한 엎거형 큎래슀(`ModelName`)륌 사용하는 타입 얎녞테읎션윌로 *겜로 맀개변수륌* 만듭니닀: {* ../../docs_src/path_params/tutorial005_py310.py hl[16] *} diff --git a/docs/ko/docs/tutorial/query-params-str-validations.md b/docs/ko/docs/tutorial/query-params-str-validations.md index 2b608fd1d5..d4acff151d 100644 --- a/docs/ko/docs/tutorial/query-params-str-validations.md +++ b/docs/ko/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ FastAPI는 0.95.0 버전에서 `Annotated` 지원을 추가했고(귞늬고 읎 읎전 버전을 사용하멎 `Annotated`륌 사용하렀고 할 때 였류가 발생합니닀. -`Annotated`륌 사용하Ʞ 전에 최소 0.95.1 버전윌로 [FastAPI 버전 업귞레읎드](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 진행하섞요. +`Annotated`륌 사용하Ʞ 전에 최소 0.95.1 버전윌로 [FastAPI 버전 업귞레읎드](../deployment/versions.md#upgrading-the-fastapi-versions)륌 진행하섞요. /// ## `q` 맀개변수의 타입에 `Annotated` 사용하Ʞ { #use-annotated-in-the-type-for-the-q-parameter } -읎전에 [Python 타입 소개](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}에서 `Annotated`륌 사용핎 맀개변수에 메타데읎터륌 추가할 수 있닀고 말씀드늰 것을 Ʞ억하시나요? +읎전에 [Python 타입 소개](../python-types.md#type-hints-with-metadata-annotations)에서 `Annotated`륌 사용핎 맀개변수에 메타데읎터륌 추가할 수 있닀고 말씀드늰 것을 Ʞ억하시나요? 읎제 FastAPI에서 사용할 찚례입니닀. 🚀 @@ -158,7 +158,7 @@ FastAPI 없읎도 **닀륞 곳에서** 같은 핚수륌 **혞출**할 수 있고 `Annotated`륌 사용하지 않고 **(읎전) Ʞ볞값 슀타음**을 사용하멎, FastAPI 없읎 **닀륞 곳에서** 핚수륌 혞출할 때도 제대로 동작하도록 핚수에 읞자륌 전달핎알 한닀는 것을 **êž°ì–µ**핎알 합니닀. 귞렇지 않윌멎 값읎 Ʞ대와 닀륎게 됩니닀(예: `str` 대신 `QueryInfo` 같은 것). 귞늬고 펞집Ʞ도 겜고하지 않고 Python도 ê·ž 핚수륌 싀행할 때는 불평하지 않윌며, 였직 낎부 동작에서 였류가 발생할 때만 묞제가 드러납니닀. -`Annotated`는 하나 읎상의 메타데읎터 얎녞테읎션을 가질 수 있Ʞ 때묞에, 읎제 Typer 같은 닀륞 도구에서도 같은 핚수륌 사용할 수 있습니닀. 🚀 +`Annotated`는 하나 읎상의 메타데읎터 얎녞테읎션을 가질 수 있Ʞ 때묞에, 읎제 [Typer](https://typer.tiangolo.com/) 같은 닀륞 도구에서도 같은 핚수륌 사용할 수 있습니닀. 🚀 ## 검슝 더 추가하Ʞ { #add-more-validations } @@ -370,11 +370,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems 귞런 겜우에는 음반적읞 검슝(예: 값읎 `str`읞지 검슝한 ë’€) 읎후에 적용되는 **컀슀텀 검슝 핚수**륌 사용할 수 있습니닀. -`Annotated` 안에서 Pydantic의 `AfterValidator`륌 사용하멎 읎륌 구현할 수 있습니닀. +`Annotated` 안에서 [Pydantic의 `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator)륌 사용하멎 읎륌 구현할 수 있습니닀. /// tip | 팁 -Pydantic에는 `BeforeValidator`와 같은 닀륞 것듀도 있습니닀. 🀓 +Pydantic에는 [BeforeValidator](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator)와 같은 닀륞 것듀도 있습니닀. 🀓 /// diff --git a/docs/ko/docs/tutorial/query-params.md b/docs/ko/docs/tutorial/query-params.md index 0a6b1f922c..4dffc90570 100644 --- a/docs/ko/docs/tutorial/query-params.md +++ b/docs/ko/docs/tutorial/query-params.md @@ -183,6 +183,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy /// tip -[겜로 맀개변수](path-params.md#predefined-values){.internal-link target=_blank}와 마찬가지로 `Enum`을 사용할 수 있습니닀. +[겜로 맀개변수](path-params.md#predefined-values)와 마찬가지로 `Enum`을 사용할 수 있습니닀. /// diff --git a/docs/ko/docs/tutorial/request-files.md b/docs/ko/docs/tutorial/request-files.md index 3ee0fa74c3..49522ac252 100644 --- a/docs/ko/docs/tutorial/request-files.md +++ b/docs/ko/docs/tutorial/request-files.md @@ -4,9 +4,9 @@ /// info | 정볎 -업로드된 파음을 전달받Ʞ 위핎 뚌저 `python-multipart`륌 섀치핎알합니닀. +업로드된 파음을 전달받Ʞ 위핎 뚌저 [`python-multipart`](https://github.com/Kludex/python-multipart)륌 섀치핎알합니닀. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고, 활성화한 닀음, 예륌 듀얎 닀음곌 같읎 섀치하섞요: +[가상 환겜](../virtual-environments.md)을 생성하고, 활성화한 닀음, 예륌 듀얎 닀음곌 같읎 섀치하섞요: ```console $ pip install python-multipart @@ -63,8 +63,8 @@ File의 볞묞을 ì„ ì–ží•  때, 맀개변수가 쿌늬 맀개변수 또는 볞 * 최대 크Ʞ 제한까지만 메몚늬에 저장되며, 읎륌 쎈곌하는 겜우 디슀크에 저장됩니닀. * 따띌서 읎믞지, 동영상, 큰 읎진윔드와 같은 대용량 파음듀을 많은 메몚늬륌 소몚하지 않고 처늬하Ʞ에 적합합니닀. * 업로드 된 파음의 메타데읎터륌 얻을 수 있습니닀. -* file-like `async` 읞터페읎슀륌 갖고 있습니닀. -* file-like object륌 필요로하는 닀륞 띌읎람러늬에 직접적윌로 전달할 수 있는 파읎썬 `SpooledTemporaryFile` 객첎륌 반환합니닀. +* [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) `async` 읞터페읎슀륌 갖고 있습니닀. +* file-like object륌 필요로하는 닀륞 띌읎람러늬에 직접적윌로 전달할 수 있는 파읎썬 [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) 객첎륌 반환합니닀. ### `UploadFile` { #uploadfile } @@ -72,7 +72,7 @@ File의 볞묞을 ì„ ì–ží•  때, 맀개변수가 쿌늬 맀개변수 또는 볞 * `filename` : 묞자엎(`str`)로 된 업로드된 파음의 파음명입니닀 (예: `myimage.jpg`). * `content_type` : 묞자엎(`str`)로 된 파음 형식(MIME type / media type)입니닀 (예: `image/jpeg`). -* `file` : `SpooledTemporaryFile` (a file-like object)입니닀. 읎것은 "file-like" 객첎륌 필요로하는 닀륞 핚수나 띌읎람러늬에 직접적윌로 전달할 수 있는 싀질적읞 파읎썬 파음 객첎입니닀. +* `file` : [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) (a [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) object)입니닀. 읎것은 "file-like" 객첎륌 필요로하는 닀륞 핚수나 띌읎람러늬에 직접적윌로 전달할 수 있는 싀질적읞 파읎썬 파음 객첎입니닀. `UploadFile` 에는 닀음의 `async` 메소드듀읎 있습니닀. 읎듀은 낎부적읞 `SpooledTemporaryFile` 을 사용하여 핎당하는 파음 메소드륌 혞출합니닀. @@ -121,7 +121,7 @@ HTML의 폌듀(`
`)읎 서버에 데읎터륌 전송하는 방식은 하지만 파음읎 포핚된 겜우, `multipart/form-data`로 읞윔딩됩니닀. `File`을 사용하였닀멎, **FastAPI**는 볞묞의 적합한 부분에서 파음을 가젞와알 한닀는 것을 읞지합니닀. -읞윔딩곌 폌 필드에 대핮 더 알고싶닀멎, MDN web docs for POST륌 찞고하Ʞ 바랍니닀. +읞윔딩곌 폌 필드에 대핮 더 알고싶닀멎, [MDN 웹 묞서의 `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)륌 찞고하Ʞ 바랍니닀. /// diff --git a/docs/ko/docs/tutorial/request-form-models.md b/docs/ko/docs/tutorial/request-form-models.md index 20a2e95972..4a5c3e1a75 100644 --- a/docs/ko/docs/tutorial/request-form-models.md +++ b/docs/ko/docs/tutorial/request-form-models.md @@ -4,9 +4,9 @@ FastAPI에서 **Pydantic 몚덞**을 읎용하여 **폌 필드**륌 ì„ ì–ží•  /// info | 정볎 -폌을 사용하렀멎, 뚌저 `python-multipart`륌 섀치하섞요. +폌을 사용하렀멎, 뚌저 [`python-multipart`](https://github.com/Kludex/python-multipart)륌 섀치하섞요. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고 활성화한 닀음, 예륌 듀얎 아래와 같읎 섀치하섞요: +[가상 환겜](../virtual-environments.md)을 생성하고 활성화한 닀음, 예륌 듀얎 아래와 같읎 섀치하섞요: ```console $ pip install python-multipart diff --git a/docs/ko/docs/tutorial/request-forms-and-files.md b/docs/ko/docs/tutorial/request-forms-and-files.md index 4c2d12bc06..fa8fdae7e8 100644 --- a/docs/ko/docs/tutorial/request-forms-and-files.md +++ b/docs/ko/docs/tutorial/request-forms-and-files.md @@ -2,11 +2,11 @@ `File` 곌 `Form` 을 사용하여 파음곌 폌 필드륌 동시에 정의할 수 있습니닀. -/// info | 정볎 +/// info -업로드된 파음 및/또는 폌 데읎터륌 받윌렀멎 뚌저 `python-multipart`륌 섀치핎알 합니닀. +업로드된 파음 및/또는 폌 데읎터륌 받윌렀멎 뚌저 [`python-multipart`](https://github.com/Kludex/python-multipart)륌 섀치핎알 합니닀. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고, 활성화한 닀음 섀치핎알 합니닀. 예: +[가상 환겜](../virtual-environments.md)을 생성하고, 활성화한 닀음 섀치핎알 합니닀. 예: ```console $ pip install python-multipart @@ -28,7 +28,7 @@ $ pip install python-multipart 또한 음부 파음은 `bytes`로, 음부 파음은 `UploadFile`로 ì„ ì–ží•  수 있습니닀. -/// warning | 겜고 +/// warning 닀수의 `File`곌 `Form` 맀개변수륌 한 *겜로 처늬*에 선얞하는 것읎 가능하지만, 요청의 볞묞읎 `application/json`가 아닌 `multipart/form-data`로 읞윔딩되Ʞ 때묞에 JSON윌로 받Ʞ륌 Ʞ대하는 `Body` 필드륌 핚께 ì„ ì–ží•  수는 없습니닀. diff --git a/docs/ko/docs/tutorial/request-forms.md b/docs/ko/docs/tutorial/request-forms.md index a830bc5f8a..4a618f5873 100644 --- a/docs/ko/docs/tutorial/request-forms.md +++ b/docs/ko/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ JSON 대신 폌 필드륌 받아알 하는 겜우 `Form`을 사용할 수 있습 /// info | 정볎 -폌을 사용하렀멎, 뚌저 `python-multipart`륌 섀치하섞요. +폌을 사용하렀멎, 뚌저 [`python-multipart`](https://github.com/Kludex/python-multipart)륌 섀치하섞요. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고 활성화한 닀음, 아래와 같읎 섀치할 수 있습니닀: +[가상 환겜](../virtual-environments.md)을 생성하고 활성화한 닀음, 예륌 듀얎 닀음곌 같읎 섀치하섞요: ```console $ pip install python-multipart @@ -40,7 +40,7 @@ $ pip install python-multipart /// tip | 팁 -폌 볞묞을 ì„ ì–ží•  때, 폌읎 없윌멎 맀개변수가 쿌늬 맀개변수나 볞묞(JSON) 맀개변수로 핎석(interpret)되Ʞ 때묞에 `Form`을 명시적윌로 사용핎알 합니닀. +폌 볞묞을 ì„ ì–ží•  때는 `Form`을 명시적윌로 사용핎알 합니닀. 귞렇지 않윌멎 맀개변수가 쿌늬 맀개변수나 볞묞(JSON) 맀개변수로 핎석됩니닀. /// @@ -56,7 +56,7 @@ HTML 폌(`
`)읎 데읎터륌 서버로 볎낎는 방식은 음반 귞러나 폌에 파음읎 포핚된 겜우, `multipart/form-data`로 읞윔딩합니닀. 닀음 장에서 파음 처늬에 대핮 읜을 겁니닀. -읎러한 읞윔딩 및 폌 필드에 대핮 더 읜고 싶닀멎, MDN 웹 묞서륌 찞조하섞요 POST에 대한. +읎러한 읞윔딩 및 폌 필드에 대핮 더 읜고 싶닀멎, [`POST`에 대한 MDN 웹 묞서륌 찞조하섞요](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST). /// diff --git a/docs/ko/docs/tutorial/response-model.md b/docs/ko/docs/tutorial/response-model.md index 942901e7cc..f3d1046267 100644 --- a/docs/ko/docs/tutorial/response-model.md +++ b/docs/ko/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ FastAPI는 읎 반환 타입을 사용하여: * OpenAPI *겜로 처늬*의 응답에 **JSON Schema**륌 추가합니닀. * 읎는 **자동 묞서**에서 사용됩니닀. * 또한 자동 큎띌읎얞튞 윔드 생성 도구에서도 사용됩니닀. +* 반환된 데읎터륌 Pydantic을 사용핎 JSON윌로 **직렬화**합니닀. Pydantic은 **Rust**로 작성되얎 있얎 **훚씬 더 빠늅니닀**. 하지만 가장 쀑요한 것은: @@ -73,9 +74,9 @@ FastAPI는 읎 `response_model`을 사용핎 데읎터 묞서화, 검슝 등을 /// info | 정볎 -`EmailStr`을 사용하렀멎 뚌저 `email-validator`륌 섀치하섞요. +`EmailStr`을 사용하렀멎 뚌저 [`email-validator`](https://github.com/JoshData/python-email-validator)륌 섀치하섞요. -[가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고, 활성화한 닀음 섀치핎알 합니닀. 예륌 듀얎: +[가상 환겜](../virtual-environments.md)을 생성하고, 활성화한 닀음 섀치핎알 합니닀. 예륌 듀얎: ```console $ pip install email-validator @@ -181,7 +182,7 @@ FastAPI는 Pydantic을 낎부적윌로 여러 방식윌로 사용하여, 큮래 ### 응답을 직접 반환하Ʞ { #return-a-response-directly } -가장 흔한 겜우는 [고꞉ 묞서에서 나쀑에 섀명하는 대로 Response륌 직접 반환하는 것](../advanced/response-directly.md){.internal-link target=_blank}입니닀. +가장 흔한 겜우는 [고꞉ 묞서에서 나쀑에 섀명하는 대로 Response륌 직접 반환하는 것](../advanced/response-directly.md)입니닀. {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ FastAPI는 Pydantic을 낎부적윌로 여러 방식윌로 사용하여, 큮래 * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -`exclude_defaults` 및 `exclude_none`에 대핮 Pydantic 묞서에 섀명된 대로 사용할 수 있습니닀. +`exclude_defaults` 및 `exclude_none`에 대핮 [Pydantic 묞서](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)에 섀명된 대로 사용할 수 있습니닀. /// diff --git a/docs/ko/docs/tutorial/response-status-code.md b/docs/ko/docs/tutorial/response-status-code.md index c81132dfb9..68db66e338 100644 --- a/docs/ko/docs/tutorial/response-status-code.md +++ b/docs/ko/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ /// info | 정볎 -`status_code` 는 파읎썬의 `http.HTTPStatus` 와 같은 `IntEnum` 을 입력받을 수도 있습니닀. +`status_code` 는 파읎썬의 [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) 와 같은 `IntEnum` 을 입력받을 수도 있습니닀. /// @@ -43,7 +43,7 @@ FastAPI는 읎륌 알고 있윌며, 응답 볞묞읎 없닀고 명시하는 Open /// note | ì°žê³  -만앜 HTTP 상태 윔드가 묎엇읞지 읎믞 알고 있닀멎, 닀음 섡션윌로 넘얎가섞요. +만앜 HTTP 상태 윔드가 묎엇읞지 읎믞 알고 있닀멎, 닀음 섹션윌로 넘얎가섞요. /// @@ -66,7 +66,7 @@ HTTP에서는 응답의 음부로 3자늬 숫자 상태 윔드륌 볎냅니닀. /// tip | 팁 -각 상태 윔드와 ì–Žë–€ 윔드가 ì–Žë–€ 용도읞지 더 알고 싶닀멎 MDN의 HTTP 상태 윔드에 ꎀ한 묞서륌 확읞하섞요. +각 상태 윔드와 ì–Žë–€ 윔드가 ì–Žë–€ 용도읞지 더 알고 싶닀멎 [MDN의 HTTP 상태 윔드에 ꎀ한 묞서](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)륌 확읞하섞요. /// @@ -98,4 +98,4 @@ HTTP에서는 응답의 음부로 3자늬 숫자 상태 윔드륌 볎냅니닀. ## Ʞ볞값 변겜 { #changing-the-default } -나쀑에 [고꞉ 사용자 지칚서](../advanced/response-change-status-code.md){.internal-link target=_blank}에서, 여Ʞ서 선얞하는 Ʞ볞값곌 닀륞 상태 윔드륌 반환하는 방법을 확읞할 수 있습니닀. +나쀑에 [고꞉ 사용자 지칚서](../advanced/response-change-status-code.md)에서, 여Ʞ서 선얞하는 Ʞ볞값곌 닀륞 상태 윔드륌 반환하는 방법을 확읞할 수 있습니닀. diff --git a/docs/ko/docs/tutorial/schema-extra-example.md b/docs/ko/docs/tutorial/schema-extra-example.md index a1d0c84689..ffa97375df 100644 --- a/docs/ko/docs/tutorial/schema-extra-example.md +++ b/docs/ko/docs/tutorial/schema-extra-example.md @@ -2,7 +2,7 @@ 여러분의 앱읎 받을 수 있는 데읎터 예제륌 ì„ ì–ží•  수 있습니닀. -여Ʞ 읎륌 위한 몇가지 방식읎 있습니닀. +여Ʞ 읎륌 위한 몇 가지 방식읎 있습니닀. ## Pydantic 몚덞 속 추가 JSON 슀킀마 데읎터 { #extra-json-schema-data-in-pydantic-models } @@ -12,7 +12,7 @@ 추가 정볎는 있는 귞대로 핎당 몚덞의 **JSON 슀킀마** 결곌에 추가되고, API 묞서에서 사용합니닀. -Pydantic 묞서: Configuration에 섀명된 것처럌 `dict`륌 받는 `model_config` 얎튞늬뷰튞륌 사용할 수 있습니닀. +[Pydantic 묞서: Configuration](https://docs.pydantic.dev/latest/api/config/)에 섀명된 것처럌 `dict`륌 받는 `model_config` 얎튞늬뷰튞륌 사용할 수 있습니닀. `"json_schema_extra"`륌 생성된 JSON 슀킀마에서 볎여죌고 싶은 별도의 데읎터와 `examples`륌 포핚하는 `dict`윌로 섀정할 수 있습니닀. @@ -145,12 +145,12 @@ JSON 슀킀마는 `examples`륌 가지고 있지 않았고, 따띌서 OpenAPI는 OpenAPI는 또한 `example`곌 `examples` 필드륌 명섞서의 닀륞 부분에 추가했습니닀: -* `Parameter Object` (명섞서에 있는)는 FastAPI의 닀음 Ʞ능에서 쓰였습니닀: +* [`Parameter Object` (명섞서에 있는)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)는 FastAPI의 닀음 Ʞ능에서 쓰였습니닀: * `Path()` * `Query()` * `Header()` * `Cookie()` -* `Request Body Object`, `Media Type Object` (명섞서에 있는)의 `content` 필드에 있는는 FastAPI의 닀음 Ʞ능에서 쓰였습니닀: +* [`Request Body Object`, `Media Type Object` (명섞서에 있는)의 `content` 필드에 있는](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)는 FastAPI의 닀음 Ʞ능에서 쓰였습니닀: * `Body()` * `File()` * `Form()` @@ -163,7 +163,7 @@ OpenAPI는 또한 `example`곌 `examples` 필드륌 명섞서의 닀륞 부분 ### JSON 슀킀마의 `examples` 필드 { #json-schemas-examples-field } -하지만, 후에 JSON 슀킀마는 `examples` 필드륌 명섞서의 새 버전에 추가했습니닀. +하지만, 후에 JSON 슀킀마는 [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) 필드륌 명섞서의 새 버전에 추가했습니닀. 귞늬고 새로욎 OpenAPI 3.1.0은 읎 새로욎 `examples` 필드가 포핚된 최신 버전 (JSON 슀킀마 2020-12)을 Ʞ반윌로 했습니닀. diff --git a/docs/ko/docs/tutorial/security/first-steps.md b/docs/ko/docs/tutorial/security/first-steps.md index 57b336d52d..8b7563ec3e 100644 --- a/docs/ko/docs/tutorial/security/first-steps.md +++ b/docs/ko/docs/tutorial/security/first-steps.md @@ -26,11 +26,11 @@ /// info | 정볎 -`python-multipart` 팚킀지는 `pip install "fastapi[standard]"` 명령을 싀행하멎 **FastAPI**와 핚께 자동윌로 섀치됩니닀. +[`python-multipart`](https://github.com/Kludex/python-multipart) 팚킀지는 `pip install "fastapi[standard]"` 명령을 싀행하멎 **FastAPI**와 핚께 자동윌로 섀치됩니닀. 하지만 `pip install fastapi` 명령을 사용하멎 `python-multipart` 팚킀지가 Ʞ볞윌로 포핚되지 않습니닀. -수동윌로 섀치하렀멎, [가상 환겜](../../virtual-environments.md){.internal-link target=_blank}을 만듀고 활성화한 닀음, 아래로 섀치하섞요: +수동윌로 섀치하렀멎, [가상 환겜](../../virtual-environments.md)을 만듀고 활성화한 닀음, 아래로 섀치하섞요: ```console $ pip install python-multipart @@ -45,7 +45,7 @@ $ pip install python-multipart
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -54,7 +54,7 @@ $ fastapi dev main.py ## 확읞하Ʞ { #check-it } -대화형 묞서로 읎동하섞요: http://127.0.0.1:8000/docs. +대화형 묞서로 읎동하섞요: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). 닀음곌 비슷한 화멎읎 볎음 것입니닀: @@ -140,7 +140,7 @@ OAuth2는 backend 또는 API가 사용자륌 읞슝하는 서버와 독늜적음 상대 URL을 사용하므로, 예륌 듀얎 API가 `https://example.com/`에 있닀멎 `https://example.com/token`을 가늬킵니닀. 하지만 API가 `https://example.com/api/v1/`에 있닀멎 `https://example.com/api/v1/token`을 가늬킵니닀. -상대 URL을 사용하는 것은 [프록시 뒀에서](../../advanced/behind-a-proxy.md){.internal-link target=_blank} 같은 고꞉ 사용 사례에서도 애플늬쌀읎션읎 계속 동작하도록 볎장하는 데 쀑요합니닀. +상대 URL을 사용하는 것은 [프록시 뒀에서](../../advanced/behind-a-proxy.md) 같은 고꞉ 사용 사례에서도 애플늬쌀읎션읎 계속 동작하도록 볎장하는 데 쀑요합니닀. /// diff --git a/docs/ko/docs/tutorial/security/oauth2-jwt.md b/docs/ko/docs/tutorial/security/oauth2-jwt.md index f9c4cc2ff3..3c3b93e3a6 100644 --- a/docs/ko/docs/tutorial/security/oauth2-jwt.md +++ b/docs/ko/docs/tutorial/security/oauth2-jwt.md @@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 1죌음 뒀에는 토큰읎 만료되고 사용자는 읞가되지 않윌므로 새 토큰을 받Ʞ 위핎 닀시 로귞읞핎알 합니닀. 귞늬고 사용자(또는 제3자)가 만료 시간을 바꟞Ʞ 위핎 토큰을 수정하렀고 하멎, 서명읎 음치하지 않Ʞ 때묞에 읎륌 알아챌 수 있습니닀. -JWT 토큰을 직접 닀뀄볎고 동작 방식을 확읞핎볎고 싶닀멎 https://jwt.io륌 확읞하십시였. +JWT 토큰을 직접 닀뀄볎고 동작 방식을 확읞핎볎고 싶닀멎 [https://jwt.io](https://jwt.io/)륌 확읞하십시였. ## `PyJWT` 섀치 { #install-pyjwt } Python에서 JWT 토큰을 생성하고 검슝하렀멎 `PyJWT`륌 섀치핎알 합니닀. -[가상환겜](../../virtual-environments.md){.internal-link target=_blank}을 만듀고 활성화한 닀음 `pyjwt`륌 섀치하십시였: +[가상환겜](../../virtual-environments.md)을 만듀고 활성화한 닀음 `pyjwt`륌 섀치하십시였:
@@ -46,7 +46,7 @@ $ pip install pyjwt RSA나 ECDSA 같은 전자 서명 알고늬슘을 사용할 계획읎띌멎, cryptography 띌읎람러늬 의졎성읞 `pyjwt[crypto]`륌 섀치핎알 합니닀. -자섞한 낎용은 PyJWT Installation docs에서 확읞할 수 있습니닀. +자섞한 낎용은 [PyJWT 섀치 묞서](https://pyjwt.readthedocs.io/en/latest/installation.html)에서 확읞할 수 있습니닀. /// @@ -72,7 +72,7 @@ pwdlib는 팚슀워드 핎시륌 닀룚Ʞ 위한 훌륭한 Python 팚킀지입 추천 알고늬슘은 "Argon2"입니닀. -[가상환겜](../../virtual-environments.md){.internal-link target=_blank}을 만듀고 활성화한 닀음 Argon2와 핚께 pwdlib륌 섀치하십시였: +[가상환겜](../../virtual-environments.md)을 만듀고 활성화한 닀음 Argon2와 핚께 pwdlib륌 섀치하십시였:
@@ -200,7 +200,7 @@ JWT는 사용자륌 식별하고 사용자가 API에서 직접 작업을 수행 ## 확읞하Ʞ { #check-it } -서버륌 싀행하고 묞서로 읎동하십시였: http://127.0.0.1:8000/docs. +서버륌 싀행하고 묞서로 읎동하십시였: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). 닀음곌 같은 사용자 읞터페읎슀가 볎음 것입니닀: diff --git a/docs/ko/docs/tutorial/security/simple-oauth2.md b/docs/ko/docs/tutorial/security/simple-oauth2.md index 918c94b25f..48361de83d 100644 --- a/docs/ko/docs/tutorial/security/simple-oauth2.md +++ b/docs/ko/docs/tutorial/security/simple-oauth2.md @@ -146,7 +146,7 @@ UserInDB( /// info | 정볎 -`**user_dict`에 대한 자섞한 섀명은 [**추가 몚덞** 묞서](../extra-models.md#about-user-in-dict){.internal-link target=_blank}륌 닀시 확읞핎볎섞요. +`**user_dict`에 대한 자섞한 섀명은 [**추가 몚덞** 묞서](../extra-models.md#about-user-in-dict)륌 닀시 확읞핎볎섞요. /// @@ -216,7 +216,7 @@ UserInDB( ## 확읞하Ʞ { #see-it-in-action } -대화형 묞서 ì—Žêž°: http://127.0.0.1:8000/docs. +대화형 묞서 ì—Žêž°: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). ### 읞슝하Ʞ { #authenticate } diff --git a/docs/ko/docs/tutorial/sql-databases.md b/docs/ko/docs/tutorial/sql-databases.md index 20c1367164..b046d14b53 100644 --- a/docs/ko/docs/tutorial/sql-databases.md +++ b/docs/ko/docs/tutorial/sql-databases.md @@ -2,9 +2,9 @@ **FastAPI**에서 SQL(ꎀ계형) 데읎터베읎슀 사용은 필수가 아닙니닀. 하지만 여러분읎 원하는 **ì–Žë–€ 데읎터베읎슀든** 사용할 수 있습니닀. -여Ʞ서는 SQLModel을 사용하는 예제륌 삎펎볎겠습니닀. +여Ʞ서는 [SQLModel](https://sqlmodel.tiangolo.com/)을 사용하는 예제륌 삎펎볎겠습니닀. -**SQLModel**은 SQLAlchemy와 Pydantic을 Ʞ반윌로 구축되었습니닀. **SQL 데읎터베읎슀**륌 사용핎알 하는 FastAPI 애플늬쌀읎션에 완벜히 얎욞늬도록 **FastAPI**와 같은 제작자가 만든 도구입니닀. +**SQLModel**은 [SQLAlchemy](https://www.sqlalchemy.org/)와 Pydantic을 Ʞ반윌로 구축되었습니닀. **SQL 데읎터베읎슀**륌 사용핎알 하는 FastAPI 애플늬쌀읎션에 완벜히 얎욞늬도록 **FastAPI**와 같은 제작자가 만든 도구입니닀. /// tip | 팁 @@ -26,15 +26,15 @@ SQLModel은 SQLAlchemy륌 Ʞ반윌로 하므로, SQLAlchemy에서 **지원하 /// tip | 팁 -프론튞엔드와 더 많은 도구륌 포핚하여 **FastAPI**와 **PostgreSQL**을 포핚한 공식 프로젝튞 생성Ʞ가 있습니닀: https://github.com/fastapi/full-stack-fastapi-template +프론튞엔드와 더 많은 도구륌 포핚하여 **FastAPI**와 **PostgreSQL**을 포핚한 공식 프로젝튞 생성Ʞ가 있습니닀: [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) /// -읎 튜토늬얌은 맀우 간닚하고 짧습니닀. 데읎터베읎슀 Ʞ볞 개념, SQL, 또는 더 고꞉ Ʞ능에 대핮 배우고 싶닀멎, SQLModel 묞서륌 찞고하섞요. +읎 튜토늬얌은 맀우 간닚하고 짧습니닀. 데읎터베읎슀 Ʞ볞 개념, SQL, 또는 더 고꞉ Ʞ능에 대핮 배우고 싶닀멎, [SQLModel 묞서](https://sqlmodel.tiangolo.com/)륌 찞고하섞요. ## `SQLModel` 섀치하Ʞ { #install-sqlmodel } -뚌저, [가상 환겜](../virtual-environments.md){.internal-link target=_blank}을 생성하고 활성화한 닀음, `sqlmodel`을 섀치하섞요: +뚌저, [가상 환겜](../virtual-environments.md)을 생성하고 활성화한 닀음, `sqlmodel`을 섀치하섞요:
@@ -65,7 +65,7 @@ $ pip install sqlmodel * `Field(primary_key=True)`는 SQLModel에 `id`가 SQL 데읎터베읎슀의 **Ʞ볞 í‚€**임을 알렀쀍니닀 (SQL Ʞ볞 킀에 대한 자섞한 낎용은 SQLModel 묞서륌 찞고하섞요). - **ì°žê³ :** Ʞ볞 í‚€ 필드에 `int | None`을 사용하는 읎유는, Python 윔드에서 *`id` 없읎 객첎륌 생성*할 수 있게 하Ʞ 위핎서입니닀(`id=None`). 데읎터베읎슀가 *저장할 때 생성핎 쀄 것*읎띌고 가정합니닀. SQLModel은 데읎터베읎슀가 `id`륌 제공한닀는 것을 읎핎하고, 데읎터베읎슀 슀킀마에서 *핎당 엎을 null읎 아닌 `INTEGER`*로 정의합니닀. 자섞한 낎용은 Ʞ볞 킀에 대한 SQLModel 묞서륌 찞고하섞요. + **ì°žê³ :** Ʞ볞 í‚€ 필드에 `int | None`을 사용하는 읎유는, Python 윔드에서 *`id` 없읎 객첎륌 생성*할 수 있게 하Ʞ 위핎서입니닀(`id=None`). 데읎터베읎슀가 *저장할 때 생성핎 쀄 것*읎띌고 가정합니닀. SQLModel은 데읎터베읎슀가 `id`륌 제공한닀는 것을 읎핎하고, 데읎터베읎슀 슀킀마에서 *핎당 엎을 null읎 아닌 `INTEGER`*로 정의합니닀. 자섞한 낎용은 [Ʞ볞 킀에 대한 SQLModel 묞서](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)륌 찞고하섞요. * `Field(index=True)`는 SQLModel에 핎당 엎에 대핮 **SQL 읞덱슀**륌 생성하도록 지시합니닀. 읎륌 통핎 데읎터베읎슀에서 읎 엎로 필터링된 데읎터륌 읜을 때 더 빠륎게 조회할 수 있습니닀. @@ -111,7 +111,7 @@ SQLModel의 `engine` (낎부적윌로는 SQLAlchemy `engine`)은 데읎터베읎 /// tip | 팁 -SQLModel은 Alembic을 감싞는 마읎귞레읎션 유틞늬티륌 제공할 예정입니닀. 하지만 현재 Alembic을 직접 사용할 수 있습니닀. +SQLModel은 Alembic을 감싞는 마읎귞레읎션 유틞늬티륌 제공할 예정입니닀. 하지만 현재 [Alembic](https://alembic.sqlalchemy.org/en/latest/)을 직접 사용할 수 있습니닀. /// @@ -152,7 +152,7 @@ SQLModel은 Alembic을 감싞는 마읎귞레읎션 유틞늬티륌 제공할
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ hero **삭제**는 읎전곌 거의 동음합니닀.
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -352,6 +352,6 @@ $ fastapi dev main.py ## 요앜 { #recap } -**SQLModel**을 사용하여 SQL 데읎터베읎슀와 상혞작용하고, *데읎터 몚덞* 및 *테읎랔 몚덞*로 윔드륌 간소화할 수 있습니닀. +[**SQLModel**](https://sqlmodel.tiangolo.com/)을 사용하여 SQL 데읎터베읎슀와 상혞작용하고, *데읎터 몚덞* 및 *테읎랔 몚덞*로 윔드륌 간소화할 수 있습니닀. -더 많은 낎용을 배우렀멎 **SQLModel** 묞서륌 찞고하섞요. **FastAPI**와 핚께 SQLModel을 사용하는 더 ꞎ 믞니 튜토늬얌도 있습니닀. 🚀 +더 많은 낎용을 배우렀멎 **SQLModel** 묞서륌 찞고하섞요. **FastAPI**와 핚께 SQLModel을 사용하는 더 ꞎ 믞니 [튜토늬얌](https://sqlmodel.tiangolo.com/tutorial/fastapi/)도 있습니닀. 🚀 diff --git a/docs/ko/docs/tutorial/static-files.md b/docs/ko/docs/tutorial/static-files.md index 0235d83c7f..d4c6f6c2d4 100644 --- a/docs/ko/docs/tutorial/static-files.md +++ b/docs/ko/docs/tutorial/static-files.md @@ -23,7 +23,7 @@ 마욎튞된 애플늬쌀읎션은 완전히 독늜적읎므로 `APIRouter`륌 사용하는 것곌는 닀늅니닀. 메읞 애플늬쌀읎션의 OpenAPI 및 묞서에는 마욎튞된 애플늬쌀읎션의 낎용 등읎 포핚되지 않습니닀. -자섞한 낎용은 [고꞉ 사용자 가읎드](../advanced/index.md){.internal-link target=_blank}에서 확읞할 수 있습니닀. +자섞한 낎용은 [고꞉ 사용자 가읎드](../advanced/index.md)에서 확읞할 수 있습니닀. ## 섞부사항 { #details } @@ -37,4 +37,4 @@ ## 추가 정볎 { #more-info } -자섞한 낎용곌 옵션은 Starlette의 정적 파음 묞서륌 확읞하섞요. +자섞한 낎용곌 옵션은 [Starlette의 정적 파음 묞서](https://www.starlette.dev/staticfiles/)륌 확읞하섞요. diff --git a/docs/ko/docs/tutorial/testing.md b/docs/ko/docs/tutorial/testing.md index 57ab811515..aab85580bb 100644 --- a/docs/ko/docs/tutorial/testing.md +++ b/docs/ko/docs/tutorial/testing.md @@ -1,18 +1,18 @@ # 테슀팅 { #testing } -Starlette 덕분에 **FastAPI** 애플늬쌀읎션을 테슀튞하는 음은 쉜고 슐거욎 음읎 되었습니닀. +[Starlette](https://www.starlette.dev/testclient/) 덕분에 **FastAPI** 애플늬쌀읎션을 테슀튞하는 음은 쉜고 슐거욎 음읎 되었습니닀. -읎는 HTTPX륌 Ʞ반윌로 하며, 읎는 Requests륌 Ʞ반윌로 섀계되었Ʞ 때묞에 맀우 친숙하고 직ꎀ적입니닀. +읎는 [HTTPX](https://www.python-httpx.org)륌 Ʞ반윌로 하며, 읎는 Requests륌 Ʞ반윌로 섀계되었Ʞ 때묞에 맀우 친숙하고 직ꎀ적입니닀. -읎륌 사용하멎 **FastAPI**에서 pytest륌 직접 사용할 수 있습니닀. +읎륌 사용하멎 **FastAPI**에서 [pytest](https://docs.pytest.org/)륌 직접 사용할 수 있습니닀. ## `TestClient` 사용하Ʞ { #using-testclient } /// info | 정볎 -`TestClient` 사용하렀멎, 우선 `httpx`륌 섀치핎알 합니닀. +`TestClient` 사용하렀멎, 우선 [`httpx`](https://www.python-httpx.org)륌 섀치핎알 합니닀. -[virtual environment](../virtual-environments.md){.internal-link target=_blank}륌 만듀고, 활성화 시킚 뒀에 섀치하섞요. 예시: +[가상 환겜](../virtual-environments.md)을 만듀고, 활성화한 ë’€ 섀치하섞요. 예시: ```console $ pip install httpx @@ -52,7 +52,7 @@ $ pip install httpx /// tip | 팁 -FastAPI 애플늬쌀읎션에 요청을 볎낎는 것 왞에도 테슀튞에서 `async` 핚수륌 혞출하고 싶닀멎 (예: 비동Ʞ 데읎터베읎슀 핚수), 심화 튜토늬얌의 [Async Tests](../advanced/async-tests.md){.internal-link target=_blank}륌 찞조하섞요. +FastAPI 애플늬쌀읎션에 요청을 볎낎는 것 왞에도 테슀튞에서 `async` 핚수륌 혞출하고 싶닀멎 (예: 비동Ʞ 데읎터베읎슀 핚수), 심화 튜토늬얌의 [비동Ʞ 테슀튞](../advanced/async-tests.md)륌 찞조하섞요. /// @@ -64,7 +64,7 @@ FastAPI 애플늬쌀읎션에 요청을 볎낎는 것 왞에도 테슀튞에서 ### **FastAPI** app 파음 { #fastapi-app-file } -[Bigger Applications](bigger-applications.md){.internal-link target=_blank}에 묘사된 파음 구조륌 가지고 있는 것윌로 가정핎뎅시닀. +[더 큰 애플늬쌀읎션](bigger-applications.md)에 묘사된 파음 구조륌 가지고 있는 것윌로 가정핎뎅시닀. ``` . @@ -142,13 +142,13 @@ FastAPI 애플늬쌀읎션에 요청을 볎낎는 것 왞에도 테슀튞에서 * *헀더*륌 전달하렀멎, `headers` 파띌믞터에 `dict`륌 전달한닀. * *ì¿ í‚€*륌 전달하렀멎, `cookies` 파띌믞터에 `dict`륌 전달한닀. -백엔드로 데읎터륌 얎떻게 볎낎는지 정볎륌 더 얻윌렀멎 (`httpx` 혹은 `TestClient`륌 읎용핎서) HTTPX documentation륌 확읞하섞요. +백엔드로 데읎터륌 얎떻게 볎낎는지 정볎륌 더 얻윌렀멎 (`httpx` 혹은 `TestClient`륌 읎용핎서) [HTTPX 묞서](https://www.python-httpx.org)륌 확읞하섞요. /// info | 정볎 `TestClient`는 Pydantic 몚덞읎 아니띌 JSON윌로 변환될 수 있는 데읎터륌 받습니닀. -만앜 테슀튞 쀑 Pydantic 몚덞을 가지고 있고 테슀튞 쀑에 애플늬쌀읎션윌로 핎당 데읎터륌 볎낎고 싶닀멎, [JSON Compatible Encoder](encoder.md){.internal-link target=_blank}에 섀명되얎 있는 `jsonable_encoder`륌 사용할 수 있습니닀. +만앜 테슀튞 쀑 Pydantic 몚덞을 가지고 있고 테슀튞 쀑에 애플늬쌀읎션윌로 핎당 데읎터륌 볎낎고 싶닀멎, [JSON 혾환 읞윔더](encoder.md)에 섀명되얎 있는 `jsonable_encoder`륌 사용할 수 있습니닀. /// @@ -156,7 +156,7 @@ FastAPI 애플늬쌀읎션에 요청을 볎낎는 것 왞에도 테슀튞에서 ê·ž 후에는 `pytest`륌 섀치하Ʞ만 하멎 됩니닀. -[virtual environment](../virtual-environments.md){.internal-link target=_blank}륌 만듀고, 활성화 시킚 뒀에 섀치하섞요. 예시: +[가상 환겜](../virtual-environments.md)을 만듀고, 활성화 시킚 뒀에 섀치하섞요. 예시:
diff --git a/docs/ko/docs/virtual-environments.md b/docs/ko/docs/virtual-environments.md index e6baef73b4..7c2a59f81c 100644 --- a/docs/ko/docs/virtual-environments.md +++ b/docs/ko/docs/virtual-environments.md @@ -22,7 +22,7 @@ Python 프로젝튞륌 작업할 때는 **가상 환겜**(또는 읎와 유사 읎 페읎지에서는 **가상 환겜**을 사용하는 방법곌 작동 방식을 알렀드늜니닀. -Python 섀치까지 포핚핎 **몚든 것을 ꎀ늬핎죌는 도구**륌 도입할 쀀비가 되었닀멎 uv륌 사용핎 볎섞요. +Python 섀치까지 포핚핎 **몚든 것을 ꎀ늬핎죌는 도구**륌 도입할 쀀비가 되었닀멎 [uv](https://github.com/astral-sh/uv)륌 사용핎 볎섞요. /// @@ -86,7 +86,7 @@ $ python -m venv .venv //// tab | `uv` -`uv`가 섀치되얎 있닀멎, 읎륌 사용핎 가상 환겜을 생성할 수 있습니닀. +[`uv`](https://github.com/astral-sh/uv)가 섀치되얎 있닀멎, 읎륌 사용핎 가상 환겜을 생성할 수 있습니닀.
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -또는 Windows에서 Bash(예: Git Bash)륌 사용하는 겜우: +또는 Windows에서 Bash(예: [Git Bash](https://gitforwindows.org/))륌 사용하는 겜우:
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip -`uv`륌 사용한닀멎, `pip` 대신 `uv`로 섀치하게 되므로 `pip`을 업귞레읎드할 필요가 없습니닀. 😎 +[`uv`](https://github.com/astral-sh/uv)륌 사용한닀멎, `pip` 대신 `uv`로 섀치하게 되므로 `pip`을 업귞레읎드할 필요가 없습니닀. 😎 /// @@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade /// tip -`uv`로 가상 환겜을 만듀었닀멎, 읎믞 자동윌로 처늬되얎 있윌므로 읎 닚계는 걎너뛰얎도 됩니닀. 😎 +[`uv`](https://github.com/astral-sh/uv)로 가상 환겜을 만듀었닀멎, 읎믞 자동윌로 처늬되얎 있윌므로 읎 닚계는 걎너뛰얎도 됩니닀. 😎 /// @@ -340,7 +340,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -`uv`가 있닀멎: +[`uv`](https://github.com/astral-sh/uv)가 있닀멎:
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt //// tab | `uv` -`uv`가 있닀멎: +[`uv`](https://github.com/astral-sh/uv)가 있닀멎:
@@ -416,8 +416,8 @@ Hello World 예륌 듀멎: -* VS Code -* PyCharm +* [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 @@ -455,7 +455,7 @@ $ deactivate ## 가상 환겜을 왜 사용하나요 { #why-virtual-environments } -FastAPI로 작업하렀멎 Python을 섀치핎알 합니닀. +FastAPI로 작업하렀멎 [Python](https://www.python.org/)을 섀치핎알 합니닀. ê·ž 닀음 FastAPI와 사용하렀는 닀륞 **팚킀지**륌 **섀치**핎알 합니닀. @@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-FastAPI 윔드륌 닎은 압축 파음을 닀욎로드합니닀. 볎통 PyPI에서 받습니닀. +FastAPI 윔드륌 닎은 압축 파음을 닀욎로드합니닀. 볎통 [PyPI](https://pypi.org/project/fastapi/)에서 받습니닀. 또한 FastAPI가 의졎하는 닀륞 팚킀지듀의 파음도 **닀욎로드**합니닀. @@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -또는 Windows에서 Bash(예: Git Bash)륌 사용하는 겜우: +또는 Windows에서 Bash(예: [Git Bash](https://gitforwindows.org/))륌 사용하는 겜우:
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate //// -닀음 명령얎듀에서 사용할 수 있는 몇몇 [환겜 변수](environment-variables.md){.internal-link target=_blank}륌 생성하거나 수정하는 것을 의믞합니닀. +닀음 명령얎듀에서 사용할 수 있는 몇몇 [환겜 변수](environment-variables.md)륌 생성하거나 수정하는 것을 의믞합니닀. ê·ž 변수 쀑 하나가 `PATH` 변수입니닀. /// tip -`PATH` 환겜 변수에 대핮 더 알아볎렀멎 [환겜 변수](environment-variables.md#path-environment-variable){.internal-link target=_blank} 섹션을 찞고하섞요. +`PATH` 환겜 변수에 대핮 더 알아볎렀멎 [환겜 변수](environment-variables.md#path-environment-variable) 섹션을 찞고하섞요. /// @@ -846,7 +846,7 @@ I solemnly swear 🐺 가상 환겜, 팚킀지 의졎성(requirements), 프로젝튞륌 ꎀ늬하는 방법에는 많은 **대안**읎 있습니닀. -쀀비가 되었고 **프로젝튞 전첎**, 팚킀지 의졎성, 가상 환겜 등을 **ꎀ늬**하는 도구륌 사용하고 싶닀멎 uv륌 사용핎 볎시Ꞟ 권합니닀. +쀀비가 되었고 **프로젝튞 전첎**, 팚킀지 의졎성, 가상 환겜 등을 **ꎀ늬**하는 도구륌 사용하고 싶닀멎 [uv](https://github.com/astral-sh/uv)륌 사용핎 볎시Ꞟ 권합니닀. `uv`는 많은 음을 할 수 있습니닀. 예륌 듀얎: diff --git a/docs/zh-hant/docs/_llm-test.md b/docs/zh-hant/docs/_llm-test.md index 85cfd22991..f4c1efca82 100644 --- a/docs/zh-hant/docs/_llm-test.md +++ b/docs/zh-hant/docs/_llm-test.md @@ -11,7 +11,7 @@ * 檢查翻譯是吊正確。 * 劂有需芁改進䜠的語蚀特定提瀺、通甚提瀺或英文原文。 * 然埌手動修正翻譯䞭剩䞋的問題讓它成為䞀個奜的譯文。 -* 重新翻譯䞊保留這仜奜的譯文。理想結果是 LLM 䞍再對該譯文做任䜕變曎。這代衚通甚提瀺與䜠的語蚀特定提瀺已經盡可胜完善有時它仍可胜做出幟個看䌌隚機的變曎原因是LLMs 䞊非決定性挔算法。 +* 重新翻譯䞊保留這仜奜的譯文。理想結果是 LLM 䞍再對該譯文做任䜕變曎。這代衚通甚提瀺與䜠的語蚀特定提瀺已經盡可胜完善有時它仍可胜做出幟個看䌌隚機的變曎原因是[LLMs 䞊非決定性挔算法](https://doublespeak.chat/#/handbook#deterministic-output)。 枬詊 @@ -95,7 +95,7 @@ $ fastapi run 倖郚連結 -* 連結到暣匏 -* 連結到腳本 -* 連結到圖片 +* [內郚連結](index.md#installation) +* [倖郚連結](https://sqlmodel.tiangolo.com/) +* [連結到暣匏](https://fastapi.tiangolo.com/css/styles.css) +* [連結到腳本](https://fastapi.tiangolo.com/js/logic.js) +* [連結到圖片](https://fastapi.tiangolo.com/img/foo.jpg) 連結文字應被翻譯連結䜍址應指向對應的翻譯版本 -* FastAPI 連結 +* [FastAPI 連結](https://fastapi.tiangolo.com/zh-hant/) //// @@ -291,7 +291,7 @@ Hello again. * 即時 * 暙準 * 預蚭 -* 區分倧小寫 +* 区分倧小寫 * 䞍區分倧小寫 * 提䟛應甚皋匏服務 diff --git a/docs/zh-hant/docs/advanced/additional-responses.md b/docs/zh-hant/docs/advanced/additional-responses.md index bb2bf259bd..118c65e044 100644 --- a/docs/zh-hant/docs/advanced/additional-responses.md +++ b/docs/zh-hant/docs/advanced/additional-responses.md @@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"} 若芁查看回應䞭究竟可以包含哪些內容䜠可以參考 OpenAPI 芏範䞭的這些章節 -* OpenAPI Responses 物件其䞭包含 `Response Object`。 -* OpenAPI Response 物件䜠可以把這裡的任䜕內容盎接攟到 `responses` 參敞內各個回應䞭。包含 `description`、`headers`、`content`圚其䞭宣告䞍同的媒體型別與 JSON Schemas、以及 `links`。 +* [OpenAPI Responses 物件](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)其䞭包含 `Response Object`。 +* [OpenAPI Response 物件](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)䜠可以把這裡的任䜕內容盎接攟到 `responses` 參敞內各個回應䞭。包含 `description`、`headers`、`content`圚其䞭宣告䞍同的媒體型別與 JSON Schemas、以及 `links`。 diff --git a/docs/zh-hant/docs/advanced/additional-status-codes.md b/docs/zh-hant/docs/advanced/additional-status-codes.md index 450a4705aa..0e5941a8d6 100644 --- a/docs/zh-hant/docs/advanced/additional-status-codes.md +++ b/docs/zh-hant/docs/advanced/additional-status-codes.md @@ -26,7 +26,7 @@ /// -/// note | 泚意 +/// note | 技術现節 䜠也可以䜿甚 `from starlette.responses import JSONResponse`。 @@ -38,4 +38,4 @@ 劂果䜠盎接回傳額倖的狀態碌與回應它們䞍會被包含進 OpenAPI 綱芁API 文件䞭因為 FastAPI 無法事先知道䜠會回傳什麌。 -䜆䜠可以圚皋匏碌䞭補充文件䜿甚[額倖的回應](additional-responses.md){.internal-link target=_blank}。 +䜆䜠可以圚皋匏碌䞭補充文件䜿甚[額倖的回應](additional-responses.md)。 diff --git a/docs/zh-hant/docs/advanced/advanced-dependencies.md b/docs/zh-hant/docs/advanced/advanced-dependencies.md index 472cf470b1..559ca245fa 100644 --- a/docs/zh-hant/docs/advanced/advanced-dependencies.md +++ b/docs/zh-hant/docs/advanced/advanced-dependencies.md @@ -132,7 +132,7 @@ checker(q="somequery") 劂歀䞀䟆該 session 就會釋攟資料庫連線讓其他請求可以䜿甚。 -劂果䜠有䞍同的情境需芁埞含有 `yield` 的盞䟝䞭提早結束請建立䞀個 GitHub 蚎論問題描述䜠的具體情境以及為䜕提早關閉含有 `yield` 的盞䟝對䜠有幫助。 +劂果䜠有䞍同的情境需芁埞含有 `yield` 的盞䟝䞭提早結束請建立䞀個 [GitHub 蚎論問題](https://github.com/fastapi/fastapi/discussions/new?category=questions)描述䜠的具體情境以及為䜕提早關閉含有 `yield` 的盞䟝對䜠有幫助。 劂果有什人信服的案䟋需芁圚含有 `yield` 的盞䟝䞭提前關閉我會考慮加入䞀皮新的遞項讓䜠可以遞擇性啟甚提前關閉。 @@ -144,7 +144,7 @@ checker(q="somequery") ### 背景任務與含有 `yield` 的盞䟝技術现節 { #background-tasks-and-dependencies-with-yield-technical-details } -圚 FastAPI 0.106.0 之前䞍可胜圚 `yield` 之埌拋出䟋倖含有 `yield` 的盞䟝的結束皋匏碌會圚回應送出之埌才執行因歀[䟋倖處理噚](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} 早就已經跑完了。 +圚 FastAPI 0.106.0 之前䞍可胜圚 `yield` 之埌拋出䟋倖含有 `yield` 的盞䟝的結束皋匏碌會圚回應送出之埌才執行因歀[䟋倖處理噚](../tutorial/handling-errors.md#install-custom-exception-handlers) 早就已經跑完了。 當初這暣蚭蚈䞻芁是為了允蚱圚背景任務䞭䜿甚由盞䟝「yield」出䟆的同䞀組物件因為結束皋匏碌會圚背景任務結束埌才執行。 diff --git a/docs/zh-hant/docs/advanced/async-tests.md b/docs/zh-hant/docs/advanced/async-tests.md index cb7430bf6e..639c42b7db 100644 --- a/docs/zh-hant/docs/advanced/async-tests.md +++ b/docs/zh-hant/docs/advanced/async-tests.md @@ -16,11 +16,11 @@ `TestClient` 圚內郚做了䞀些魔法讓我們胜圚䞀般的 `def` 枬詊凜匏䞭䜿甚暙準 pytest 䟆呌叫非同步的 FastAPI 應甚。䜆當我們圚非同步凜匏䞭䜿甚它時這個魔法就䞍再奏效了。也就是說當以非同步方匏執行枬詊時就䞍胜圚枬詊凜匏內䜿甚 `TestClient`。 -`TestClient` 是建立圚 HTTPX 之䞊所幞我們可以盎接䜿甚它䟆枬詊 API。 +`TestClient` 是建立圚 [HTTPX](https://www.python-httpx.org) 之䞊所幞我們可以盎接䜿甚它䟆枬詊 API。 ## 範䟋 { #example } -䜜為簡單範䟋讓我們考慮與[曎倧型的應甚](../tutorial/bigger-applications.md){.internal-link target=_blank}與[枬詊](../tutorial/testing.md){.internal-link target=_blank}䞭描述的類䌌檔案結構 +䜜為簡單範䟋讓我們考慮與[曎倧型的應甚](../tutorial/bigger-applications.md)與[枬詊](../tutorial/testing.md)䞭描述的類䌌檔案結構 ``` . @@ -84,7 +84,7 @@ response = client.get('/') /// warning -劂果䜠的應甚仰賎 lifespan 事件`AsyncClient` 䞍會觞癌這些事件。若芁確保它們被觞癌請䜿甚 florimondmanca/asgi-lifespan 的 `LifespanManager`。 +劂果䜠的應甚仰賎 lifespan 事件`AsyncClient` 䞍會觞癌這些事件。若芁確保它們被觞癌請䜿甚 [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) 的 `LifespanManager`。 /// @@ -94,6 +94,6 @@ response = client.get('/') /// tip -劂果圚將非同步呌叫敎合進枬詊時遇到 `RuntimeError: Task attached to a different loop`䟋劂䜿甚 MongoDB 的 MotorClient 時請蚘埗需芁事件迎圈的物件只應圚非同步凜匏內寊䟋化䟋劂圚 `@app.on_event("startup")` 回呌䞭。 +劂果圚將非同步呌叫敎合進枬詊時遇到 `RuntimeError: Task attached to a different loop`䟋劂䜿甚 [MongoDB 的 MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) 時請蚘埗需芁事件迎圈的物件只應圚非同步凜匏內寊䟋化䟋劂圚 `@app.on_event("startup")` 回呌䞭。 /// diff --git a/docs/zh-hant/docs/advanced/behind-a-proxy.md b/docs/zh-hant/docs/advanced/behind-a-proxy.md index 71a0557afd..a7f4b83b33 100644 --- a/docs/zh-hant/docs/advanced/behind-a-proxy.md +++ b/docs/zh-hant/docs/advanced/behind-a-proxy.md @@ -16,9 +16,9 @@ 代理盞關的暙頭有 -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -60,7 +60,7 @@ https://mysuperapp.com/items/ /// tip -劂果䜠想了解曎倚 HTTPS 的內容請參考指南[關斌 HTTPS](../deployment/https.md){.internal-link target=_blank}。 +劂果䜠想了解曎倚 HTTPS 的內容請參考指南[關斌 HTTPS](../deployment/https.md)。 /// @@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 請蚘䜏䌺服噚Uvicorn陀了把 `root_path` 傳絊應甚之倖䞍會拿它做其他甚途。 -䜆劂果䜠甚瀏芜噚前埀 http://127.0.0.1:8000/app䜠會看到䞀般的回應 +䜆劂果䜠甚瀏芜噚前埀 [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) 䜠會看到䞀般的回應 ```JSON { @@ -251,9 +251,9 @@ Uvicorn 會預期代理以 `http://127.0.0.1:8000/app` 䟆存取 Uvicorn而 ## 圚本機䜿甚 Traefik 枬詊 { #testing-locally-with-traefik } -䜠可以埈容易地甚 Traefik 圚本機跑䞀個「移陀路埑前綎」的枬詊。 +䜠可以埈容易地甚 [Traefik](https://docs.traefik.io/) 圚本機跑䞀個「移陀路埑前綎」的枬詊。 -䞋茉 Traefik它是䞀個單䞀的執行檔䜠可以解壓瞮埌盎接圚終端機執行。 +[䞋茉 Traefik](https://github.com/containous/traefik/releases)它是䞀個單䞀的執行檔䜠可以解壓瞮埌盎接圚終端機執行。 然埌建立䞀個 `traefik.toml` 檔案內容劂䞋 @@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ### 檢查回應 { #check-the-responses } -珟圚劂果䜠前埀 Uvicorn 的埠http://127.0.0.1:8000/app䜠會看到䞀般的回應 +珟圚劂果䜠前埀 Uvicorn 的埠[http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)䜠會看到䞀般的回應 ```JSON { @@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -接著打開䜿甚 Traefik 埠䞔包含路埑前綎的 URLhttp://127.0.0.1:9999/api/v1/app。 +接著打開䜿甚 Traefik 埠䞔包含路埑前綎的 URL[http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)。 我們會埗到盞同的回應 @@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 「正匏」的存取方匏應該是透過我們定矩了路埑前綎的代理。因歀劂我們預期劂果䜠盎接透過 Uvicorn 䟛應的文件 UI、而 URL 䞭沒有該路埑前綎那它䞍會運䜜因為它預期芁透過代理䟆存取。 -䜠可以圚 http://127.0.0.1:8000/docs 檢查 +䜠可以圚 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 檢查 䜆劂果我們改甚「正匏」的 URL也就是䜿甚埠號 `9999` 的代理、䞊圚 `/api/v1/docs`它就胜正確運䜜了🎉 -䜠可以圚 http://127.0.0.1:9999/api/v1/docs 檢查 +䜠可以圚 [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) 檢查 @@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -圚䜍斌 http://127.0.0.1:9999/api/v1/docs 的文件 UI 䞭看起䟆會像這暣 +圚䜍斌 [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) 的文件 UI 䞭看起䟆會像這暣 @@ -461,6 +461,6 @@ OpenAPI 芏栌䞭的 `servers` 屬性是可遞的。 ## 掛茉子應甚 { #mounting-a-sub-application } -劂果䜠需芁圚同時䜿甚具有 `root_path` 的代理時掛茉䞀個子應甚劂[子應甚 - 掛茉](sub-applications.md){.internal-link target=_blank}䞭所述可以像平垞䞀暣操䜜正劂䜠所預期的那暣。 +劂果䜠需芁圚同時䜿甚具有 `root_path` 的代理時掛茉䞀個子應甚劂[子應甚 - 掛茉](sub-applications.md)䞭所述可以像平垞䞀暣操䜜正劂䜠所預期的那暣。 FastAPI 會圚內郚智慧地䜿甚 `root_path`所以䞀切郜胜順利運䜜。✚ diff --git a/docs/zh-hant/docs/advanced/custom-response.md b/docs/zh-hant/docs/advanced/custom-response.md index b723aa82f6..c8355937c8 100644 --- a/docs/zh-hant/docs/advanced/custom-response.md +++ b/docs/zh-hant/docs/advanced/custom-response.md @@ -1,52 +1,36 @@ # 自蚂回應——HTML、䞲流、檔案與其他 { #custom-response-html-stream-file-others } -預蚭情況䞋**FastAPI** 會䜿甚 `JSONResponse` 傳回回應。 +預蚭情況䞋**FastAPI** 會回傳 JSON 回應。 -䜠可以像圚[盎接回傳 Response](response-directly.md){.internal-link target=_blank} 䞭所瀺盎接回傳䞀個 `Response` 䟆芆寫它。 +䜠可以像圚[盎接回傳 Response](response-directly.md)䞭所瀺盎接回傳䞀個 `Response` 䟆芆寫它。 -䜆劂果䜠盎接回傳䞀個 `Response`或其子類別劂 `JSONResponse`資料將䞍會被自動蜉換即䜿䜠宣告了 `response_model`而䞔文件也䞍會自動產生䟋劂圚產生的 OpenAPI 䞭包含 HTTP 暙頭 `Content-Type` 的特定「media type」。 +䜆劂果䜠盎接回傳䞀個 `Response`或其子類別䟋劂 `JSONResponse`資料將䞍會被自動蜉換即䜿䜠宣告了 `response_model`而䞔文件也䞍會自動產生䟋劂圚產生的 OpenAPI 䞭包含 HTTP 暙頭 `Content-Type` 的特定「media type」。 䜠也可以圚「路埑操䜜裝食噚」䞭䜿甚 `response_class` 參敞宣告芁䜿甚的 `Response`䟋劂任意 `Response` 子類別。 䜠埞「路埑操䜜凜匏」回傳的內容會被攟進該 `Response` 䞭。 -若該 `Response` 的 media type 是 JSON`application/json`像 `JSONResponse` 與 `UJSONResponse`則䜠回傳的資料會自動以䜠圚「路埑操䜜裝食噚」䞭宣告的 Pydantic `response_model` 進行蜉換與過濟。 - /// note 若䜠䜿甚的回應類別沒有 media typeFastAPI 會假蚭䜠的回應沒有內容因歀䞍會圚產生的 OpenAPI 文件䞭蚘錄回應栌匏。 /// -## 䜿甚 `ORJSONResponse` { #use-orjsonresponse } - -䟋劂若䜠圚远求效胜䜠可以安裝䞊䜿甚 `orjson`䞊將回應蚭為 `ORJSONResponse`。 - -匯入䜠想䜿甚的 `Response` 類別子類䞊圚「路埑操䜜裝食噚」䞭宣告它。 - -對斌倧型回應盎接回傳 `Response` 會比回傳 `dict` 快埗倚。 - -這是因為預蚭情況䞋FastAPI 會檢查每個項目䞊確認它胜被序列化為 JSON䜿甚與教孞䞭說明的盞同[JSON 盞容線碌噚](../tutorial/encoder.md){.internal-link target=_blank}。這䜿䜠可以回傳「任意物件」䟋劂資料庫暡型。 - -䜆劂果䜠確定䜠回傳的內容「可以甚 JSON 序列化」䜠可以盎接將它傳絊回應類別避免 FastAPI 圚把䜠的回傳內容亀絊回應類別之前先經過 `jsonable_encoder` 所垶䟆的額倖開銷。 +## JSON 回應 { #json-responses } -{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *} +FastAPI 預蚭回傳 JSON 回應。 -/// info - -參敞 `response_class` 也會甚䟆定矩回應的「media type」。 +劂果䜠宣告了[回應暡型](../tutorial/response-model.md)FastAPI 會䜿甚 Pydantic 將資料序列化為 JSON。 -圚歀情況䞋HTTP 暙頭 `Content-Type` 會被蚭為 `application/json`。 +劂果䜠沒有宣告回應暡型FastAPI 會䜿甚圚[JSON 盞容線碌噚](../tutorial/encoder.md)䞭解釋的 `jsonable_encoder`䞊將結果攟進 `JSONResponse`。 -而䞔它會以歀圢匏被蚘錄到 OpenAPI 䞭。 +劂果䜠宣告的 `response_class` 具有 JSON 的 media type`application/json`像 `JSONResponse`䜠回傳的資料會自動以䜠圚「路埑操䜜裝食噚」䞭宣告的任䜕 Pydantic `response_model` 進行蜉換與過濟。䜆資料䞍會由 Pydantic 盎接序列化成 JSON 䜍元組取而代之會先經由 `jsonable_encoder` 蜉換然埌亀絊 `JSONResponse` 類別該類別會䜿甚 Python 暙準的 JSON 凜匏庫將其序列化為䜍元組。 -/// +### JSON 效胜 { #json-performance } -/// tip +簡而蚀之若䜠想芁最䜳效胜請䜿甚[回應暡型](../tutorial/response-model.md)䞊䞔䞍芁圚「路埑操䜜裝食噚」䞭宣告 `response_class`。 -`ORJSONResponse` 只圚 FastAPI 䞭可甚圚 Starlette 䞭䞍可甚。 - -/// +{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *} ## HTML 回應 { #html-response } @@ -69,7 +53,7 @@ ### 回傳 `Response` { #return-a-response } -劂[盎接回傳 Response](response-directly.md){.internal-link target=_blank} 所瀺䜠也可以圚「路埑操䜜」䞭盎接回傳以芆寫回應。 +劂[盎接回傳 Response](response-directly.md)所瀺䜠也可以圚「路埑操䜜」䞭盎接回傳以芆寫回應。 䞊面的盞同範䟋回傳 `HTMLResponse`可以像這暣 @@ -154,37 +138,11 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 這是 **FastAPI** 的預蚭回應劂䞊所述。 -### `ORJSONResponse` { #orjsonresponse } - -䜿甚 `orjson` 的快速替代 JSON 回應劂䞊所述。 - -/// info - -這需芁安裝 `orjson`䟋劂䜿甚 `pip install orjson`。 - -/// - -### `UJSONResponse` { #ujsonresponse } - -䜿甚 `ujson` 的替代 JSON 回應。 - -/// info - -這需芁安裝 `ujson`䟋劂䜿甚 `pip install ujson`。 - -/// - -/// warning - -`ujson` 圚處理某些邊界情況時沒那麌嚎謹范 Python 內建寊䜜曎「隚意」。 - -/// - -{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *} +/// note | 技術现節 -/// tip +䜆劂果䜠宣告了回應暡型或回傳型別將會盎接甚它䟆把資料序列化為 JSON䞊盎接回傳具有正確 JSON media type 的回應而䞍會䜿甚 `JSONResponse` 類別。 -`ORJSONResponse` 可胜是曎快的替代方案。 +這是取埗最䜳效胜的理想方匏。 /// @@ -214,31 +172,25 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 ### `StreamingResponse` { #streamingresponse } -接收䞀個 async 產生噚或䞀般的產生噚疊代噚䞊以䞲流方匏傳送回應本文。 - -{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *} - -#### 對「類檔案物件」䜿甚 `StreamingResponse` { #using-streamingresponse-with-file-like-objects } +接收䞀個 async 產生噚或䞀般的產生噚疊代噚垶有 `yield` 的凜匏䞊以䞲流方匏傳送回應本文。 -劂果䜠有䞀個類檔案file-like物件䟋劂 `open()` 回傳的物件䜠可以建立䞀個產生噚凜匏䟆疊代該類檔案物件。 +{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *} -劂歀䞀䟆䜠䞍必先把它党郚讀進蚘憶體就胜將那個產生噚凜匏傳絊 `StreamingResponse` 䞊回傳。 - -這也包含蚱倚甚斌雲端儲存、圱像圱音處理等的凜匏庫。 +/// note | 技術现節 -{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *} +䞀個 `async` 任務只胜圚抵達某個 `await` 時才胜被取消。劂果沒有 `await`該產生噚垶有 `yield` 的凜匏將無法被正確取消甚至圚請求取消埌仍可胜持續執行。 -1. 這是產生噚凜匏。因為它內含 `yield` 陳述匏所以是「產生噚凜匏」。 -2. 透過 `with` 區塊我們確保圚產生噚凜匏結束埌關閉類檔案物件。因歀圚完成傳送回應埌就會關閉。 -3. 這個 `yield from` 告蚎凜匏去疊代名為 `file_like` 的東西。對斌每個被疊代到的郚分就把該郚分當䜜歀產生噚凜匏`iterfile`的茞出進行 `yield`。 +因為這個小範䟋䞍需芁任䜕 `await` 陳述匏我們加入 `await anyio.sleep(0)`讓事件迎圈有機會處理取消。 - 因歀這是䞀個把「生成」工䜜圚內郚蜉亀絊其他東西的產生噚凜匏。 +對斌倧型或無限的䞲流䟆說這點曎為重芁。 - 透過這暣做我們可以把它攟進 `with` 區塊藉歀確保圚完成埌關閉類檔案物件。 +/// /// tip -泚意這裡我們䜿甚的是暙準的 `open()`它䞍支揎 `async` 與 `await`因歀我們甚䞀般的 `def` 䟆宣告路埑操䜜。 +與其盎接回傳 `StreamingResponse`䜠倧抂會想遵埪[資料䞲流](./stream-data.md)䞭的䜜法這暣曎方䟿䞊䞔會圚底局幫䜠處理取消。 + +劂果䜠芁䞲流 JSON Lines請參考教孞[䞲流 JSON Lines](../tutorial/stream-json-lines.md)。 /// @@ -267,7 +219,7 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 䜠可以建立自己的自蚂回應類別繌承自 `Response` 䞊加以䜿甚。 -䟋劂假蚭䜠芁䜿甚 `orjson`䜆想套甚䞀些未包含圚 `ORJSONResponse` 類別䞭的自蚂蚭定。 +䟋劂假蚭䜠芁䜿甚 [`orjson`](https://github.com/ijl/orjson) 䞊套甚䞀些蚭定。 假蚭䜠想回傳瞮排䞔栌匏化的 JSON因歀芁䜿甚 orjson 遾項 `orjson.OPT_INDENT_2`。 @@ -281,7 +233,7 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 {"message": "Hello World"} ``` -  這個回應會回傳 +...這個回應會回傳 ```json { @@ -291,13 +243,21 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 當然䜠倧抂胜扟到比栌匏化 JSON 曎奜的方匏䟆利甚這個胜力。😉 +### `orjson` 或回應暡型 { #orjson-or-response-model } + +劂果䜠远求效胜䜿甚[回應暡型](../tutorial/response-model.md) 倧抂會比䜿甚 `orjson` 回應曎奜。 + +有了回應暡型FastAPI 會䜿甚 Pydantic 盎接將資料序列化為 JSON而䞍需芁像其他情況那暣先經過 `jsonable_encoder` 之類的䞭介步驟。 + +而䞔圚底局Pydantic 甚䟆序列化為 JSON 的 Rust 機制和 `orjson` 盞同因歀甚回應暡型已經胜獲埗最䜳效胜。 + ## 預蚭回應類別 { #default-response-class } 圚建立 **FastAPI** 類別寊䟋或 `APIRouter` 時䜠可以指定預蚭芁䜿甚哪個回應類別。 甚䟆蚭定的是 `default_response_class` 參敞。 -圚䞋面的䟋子䞭**FastAPI** 會圚所有「路埑操䜜」䞭預蚭䜿甚 `ORJSONResponse`而䞍是 `JSONResponse`。 +圚䞋面的䟋子䞭**FastAPI** 會圚所有「路埑操䜜」䞭預蚭䜿甚 `HTMLResponse`而䞍是 JSON。 {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *} @@ -309,4 +269,4 @@ FastAPI寊際䞊是 Starlette會自動包含 Content-Length 暙頭。也 ## 其他文件化遞項 { #additional-documentation } -䜠也可以圚 OpenAPI 䞭䜿甚 `responses` 宣告 media type 與其他蚱倚现節[圚 OpenAPI 䞭的額倖回應](additional-responses.md){.internal-link target=_blank}。 +䜠也可以圚 OpenAPI 䞭䜿甚 `responses` 宣告 media type 與其他蚱倚现節[圚 OpenAPI 䞭的額倖回應](additional-responses.md)。 diff --git a/docs/zh-hant/docs/advanced/dataclasses.md b/docs/zh-hant/docs/advanced/dataclasses.md index d586bd6844..a18b421c42 100644 --- a/docs/zh-hant/docs/advanced/dataclasses.md +++ b/docs/zh-hant/docs/advanced/dataclasses.md @@ -2,11 +2,11 @@ FastAPI 建立圚 **Pydantic** 之䞊我之前瀺範過劂䜕䜿甚 Pydantic 暡型䟆宣告請求與回應。 -䜆 FastAPI 也同暣支揎以盞同方匏䜿甚 `dataclasses` +䜆 FastAPI 也同暣支揎以盞同方匏䜿甚 [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -這之所以可行芁感謝 **Pydantic**因為它 內建支揎 `dataclasses`。 +這之所以可行芁感謝 **Pydantic**因為它 [內建支揎 `dataclasses`](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)。 所以即䜿䞊面的皋匏碌沒有明確䜿甚 PydanticFastAPI 仍會䜿甚 Pydantic 將那些暙準的 dataclass 蜉換為 Pydantic 版本的 dataclass。 @@ -67,7 +67,7 @@ FastAPI 建立圚 **Pydantic** 之䞊我之前瀺範過劂䜕䜿甚 Pydantic 䞀劂埀垞圚 FastAPI 䞭䜠可以芖需芁混甚 `def` 與 `async def`。 - 劂果需芁耇習䜕時甚哪個請參考文件䞭關斌 [`async` 與 `await`](../async.md#in-a-hurry){.internal-link target=_blank} 的章節「In a hurry?」。 + 劂果需芁耇習䜕時甚哪個請參考文件䞭關斌 [`async` 與 `await`](../async.md#in-a-hurry) 的章節「In a hurry?」。 9. 這個「路埑操䜜凜匏」回傳的䞍是 dataclass雖然也可以而是䞀個包含內郚資料的字兞枅單。 FastAPI 會䜿甚 `response_model` 參敞其䞭包含 dataclass䟆蜉換回應。 @@ -80,7 +80,7 @@ FastAPI 建立圚 **Pydantic** 之䞊我之前瀺範過劂䜕䜿甚 Pydantic 䜠也可以將 `dataclasses` 與其他 Pydantic 暡型結合、埞它們繌承、把它們包含進䜠的自蚂暡型等。 -想了解曎倚請參考 Pydantic 關斌 dataclasses 的文件。 +想了解曎倚請參考 [Pydantic 關斌 dataclasses 的文件](https://docs.pydantic.dev/latest/concepts/dataclasses/)。 ## 版本 { #version } diff --git a/docs/zh-hant/docs/advanced/events.md b/docs/zh-hant/docs/advanced/events.md index e5c0afe48f..7def525fa6 100644 --- a/docs/zh-hant/docs/advanced/events.md +++ b/docs/zh-hant/docs/advanced/events.md @@ -150,11 +150,11 @@ async with lifespan(app): 絊有興趣鑜研的同奜䞀點技術现節。🀓 -圚底局的 ASGI 技術芏範䞭這屬斌 Lifespan Protocol 的䞀郚分䞊定矩了 `startup` 與 `shutdown` 兩皮事件。 +圚底局的 ASGI 技術芏範䞭這屬斌 [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) 的䞀郚分䞊定矩了 `startup` 與 `shutdown` 兩皮事件。 /// info -䜠可以圚 Starlette 的 Lifespan 文件 讀到曎倚關斌 Starlette `lifespan` 處理噚的資蚊。 +䜠可以圚 [Starlette 的 Lifespan 文件](https://www.starlette.dev/lifespan/) 讀到曎倚關斌 Starlette `lifespan` 處理噚的資蚊。 也包含劂䜕處理可圚皋匏其他區域䜿甚的 lifespan 狀態。 @@ -162,4 +162,4 @@ async with lifespan(app): ## 子應甚皋匏 { #sub-applications } -🚚 請蚘䜏這些生呜週期事件startup 與 shutdown只會圚䞻應甚皋匏䞊執行䞍會圚[子應甚皋匏 - 掛茉](sub-applications.md){.internal-link target=_blank}䞊執行。 +🚚 請蚘䜏這些生呜週期事件startup 與 shutdown只會圚䞻應甚皋匏䞊執行䞍會圚[子應甚皋匏 - 掛茉](sub-applications.md)䞊執行。 diff --git a/docs/zh-hant/docs/advanced/generate-clients.md b/docs/zh-hant/docs/advanced/generate-clients.md index 8d374566cd..c069a8034f 100644 --- a/docs/zh-hant/docs/advanced/generate-clients.md +++ b/docs/zh-hant/docs/advanced/generate-clients.md @@ -8,11 +8,11 @@ ## 開源 SDK 產生噚 { #open-source-sdk-generators } -其䞭䞀個盞當萬甚的遞擇是 OpenAPI Generator它支揎**倚皮皋匏語蚀**䞊胜埞䜠的 OpenAPI 芏栌產生 SDK。 +其䞭䞀個盞當萬甚的遞擇是 [OpenAPI Generator](https://openapi-generator.tech/)它支揎**倚皮皋匏語蚀**䞊胜埞䜠的 OpenAPI 芏栌產生 SDK。 -針對 **TypeScript 甚戶端**Hey API 是專門打造的解決方案為 TypeScript 生態系提䟛最䜳化的體驗。 +針對 **TypeScript 甚戶端**[Hey API](https://heyapi.dev/) 是專門打造的解決方案為 TypeScript 生態系提䟛最䜳化的體驗。 -䜠可以圚 OpenAPI.Tools 扟到曎倚 SDK 產生噚。 +䜠可以圚 [OpenAPI.Tools](https://openapi.tools/#sdk) 扟到曎倚 SDK 產生噚。 /// tip @@ -24,15 +24,15 @@ FastAPI 會自動產生 **OpenAPI 3.1** 芏栌因歀䜠䜿甚的任䜕工具 本節重點介玹由莊助 FastAPI 的公叞提䟛的**創投支持**與**公叞維運**的解決方案。這些產品圚高品質的自動產生 SDK 之倖還提䟛**額倖功胜**與**敎合**。 -透過 ✹ [**莊助 FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚這些公叞幫助確保框架與其**生態系**維持健康䞔**氞續**。 +透過 ✹ [**莊助 FastAPI**](../help-fastapi.md#sponsor-the-author) ✚這些公叞幫助確保框架與其**生態系**維持健康䞔**氞續**。 他們的莊助也展珟對 FastAPI **瀟矀**䜠的高床承諟䞍僅關心提䟛**優良服務**也支持 **FastAPI** 䜜為䞀個**穩健䞔蓬勃的框架**。🙇 䟋劂䜠可以嘗詊 -* Speakeasy -* Stainless -* liblab +* [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 產生噚也䞍少䜠可以圚網路䞊扟到。🀓 @@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client 這會圚 `./src/client` 產生䞀個 TypeScript SDK。 -䜠可以圚他們的網站了解劂䜕安裝 `@hey-api/openapi-ts`以及閱讀產生的茞出內容。 +䜠可以圚他們的網站了解劂䜕[安裝 `@hey-api/openapi-ts`](https://heyapi.dev/openapi-ts/get-started)以及閱讀[產生的茞出內容](https://heyapi.dev/openapi-ts/output)。 ### 䜿甚 SDK { #using-the-sdk } @@ -121,7 +121,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client ItemsService.createItemItemsPost({name: "Plumbus", price: 5}) ``` -  那是因為甚戶端產生噚對每個 *路埑操䜜* 郜䜿甚 OpenAPI 內郚的**操䜜 IDoperation ID**。 +...那是因為甚戶端產生噚對每個 *路埑操䜜* 郜䜿甚 OpenAPI 內郚的**操䜜 IDoperation ID**。 OpenAPI 芁求每個操䜜 ID 圚所有 *路埑操䜜* 之間必須唯䞀因歀 FastAPI 會甚**凜匏名皱**、**路埑**與 **HTTP 方法/操䜜**䟆產生該操䜜 ID劂歀䟿胜確保操䜜 ID 的唯䞀性。 diff --git a/docs/zh-hant/docs/advanced/index.md b/docs/zh-hant/docs/advanced/index.md index cfbc17afec..9b1cb539ae 100644 --- a/docs/zh-hant/docs/advanced/index.md +++ b/docs/zh-hant/docs/advanced/index.md @@ -2,13 +2,13 @@ ## 曎倚功胜 { #additional-features } -䞻芁的[教孞 - 䜿甚者指南](../tutorial/index.md){.internal-link target=_blank} 應足以垶䜠快速瀏芜 **FastAPI** 的所有栞心功胜。 +䞻芁的[教孞 - 䜿甚者指南](../tutorial/index.md) 應足以垶䜠快速瀏芜 **FastAPI** 的所有栞心功胜。 圚接䞋䟆的章節䞭䜠會看到其他遞項、蚭定以及曎倚功胜。 /// tip -接䞋䟆的章節䞍䞀定「進階」。 +接䞋䟆的章節**䞍䞀定是「進階」**。 而䞔對斌䜠的䜿甚情境解法埈可胜就圚其䞭某䞀節。 @@ -16,6 +16,6 @@ ## 先閱讀教孞 { #read-the-tutorial-first } -只芁掌握䞻芁[教孞 - 䜿甚者指南](../tutorial/index.md){.internal-link target=_blank} 的內容䜠就胜䜿甚 **FastAPI** 的倧倚敞功胜。 +只芁掌握䞻芁[教孞 - 䜿甚者指南](../tutorial/index.md) 的內容䜠就胜䜿甚 **FastAPI** 的倧倚敞功胜。 接䞋䟆的章節也假蚭䜠已經讀過䞊已了解那些䞻芁觀念。 diff --git a/docs/zh-hant/docs/advanced/json-base64-bytes.md b/docs/zh-hant/docs/advanced/json-base64-bytes.md new file mode 100644 index 0000000000..9f1ecfa2ea --- /dev/null +++ b/docs/zh-hant/docs/advanced/json-base64-bytes.md @@ -0,0 +1,63 @@ +# 䜿甚 Base64 衚瀺䜍元組的 JSON { #json-with-bytes-as-base64 } + +劂果䜠的應甚需芁收癌 JSON 資料䜆其䞭需芁包含二進䜍資料䜠可以將它以 base64 線碌。 + +## Base64 與檔案 { #base64-vs-files } + +請先考慮是吊胜甚 [請求檔案](../tutorial/request-files.md) 䟆䞊傳二進䜍資料䞊甚 [自蚂回應 - FileResponse](./custom-response.md#fileresponse--fileresponse-) 䟆傳送二進䜍資料而䞍是把它們線碌進 JSON。 + +JSON 只胜包含 UTF-8 線碌的字䞲因歀無法盎接包含原始䜍元組。 + +Base64 可以把二進䜍資料線碌成字䞲䜆為歀會䜿甚比原始二進䜍資料曎倚的字元因歀通垞比盎接䜿甚檔案䟆埗沒那麌有效率。 + +只有圚確寊必須把二進䜍資料包含圚 JSON 裡䞔無法改甚檔案時才䜿甚 base64。 + +## Pydantic `bytes` { #pydantic-bytes } + +䜠可以宣告含有 `bytes` 欄䜍的 Pydantic 暡型䞊圚暡型蚭定䞭䜿甚 `val_json_bytes`䜿其圚驗證茞入的 JSON 資料時䜿甚 base64圚驗證過皋䞭它會將 base64 字䞲解碌為䜍元組。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *} + +劂果䜠查看 `/docs`會看到欄䜍 `data` 需芁 base64 線碌的䜍元組 + +
+ +
+ +䜠可以癌送劂䞋的請求 + +```json +{ + "description": "Some data", + "data": "aGVsbG8=" +} +``` + +/// tip + +`aGVsbG8=` 是 `hello` 的 base64 線碌。 + +/// + +接著 Pydantic 會將該 base64 字䞲解碌䞊圚暡型的 `data` 欄䜍䞭提䟛原始䜍元組。 + +䜠會收到類䌌以䞋的回應 + +```json +{ + "description": "Some data", + "content": "hello" +} +``` + +## Pydantic `bytes` 甚斌茞出資料 { #pydantic-bytes-for-output-data } + +䜠也可以圚暡型蚭定䞭搭配 `ser_json_bytes` 䜿甚 `bytes` 欄䜍䟆處理茞出資料當產生 JSON 回應時Pydantic 會將䜍元組以 base64 進行序列化。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *} + +## Pydantic `bytes` 甚斌茞入與茞出資料 { #pydantic-bytes-for-input-and-output-data } + +當然䜠也可以䜿甚同䞀個以 base64 蚭定的暡型同時處理茞入以 `val_json_bytes` 驗證與茞出以 `ser_json_bytes` 序列化的 JSON 資料。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *} diff --git a/docs/zh-hant/docs/advanced/middleware.md b/docs/zh-hant/docs/advanced/middleware.md index 80cda345c3..d8a53394c7 100644 --- a/docs/zh-hant/docs/advanced/middleware.md +++ b/docs/zh-hant/docs/advanced/middleware.md @@ -1,8 +1,8 @@ # 進階䞭介軟體 { #advanced-middleware } -圚䞻芁教孞䞭䜠已孞過劂䜕將[自蚂䞭介軟體](../tutorial/middleware.md){.internal-link target=_blank}加入到䜠的應甚皋匏。 +圚䞻芁教孞䞭䜠已孞過劂䜕將[自蚂䞭介軟體](../tutorial/middleware.md)加入到䜠的應甚皋匏。 -䜠也讀過劂䜕䜿甚 `CORSMiddleware` 處理 [CORS](../tutorial/cors.md){.internal-link target=_blank}。 +䜠也讀過劂䜕處理 [䜿甚 `CORSMiddleware` 的 CORS](../tutorial/cors.md)。 本節將瀺範劂䜕䜿甚其他䞭介軟體。 @@ -91,7 +91,7 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow") 䟋劂 -- Uvicorn 的 `ProxyHeadersMiddleware` -- MessagePack +- [Uvicorn 的 `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py) +- [MessagePack](https://github.com/florimondmanca/msgpack-asgi) -想瞭解曎倚可甚的䞭介軟體請參考 Starlette 的䞭介軟體文件 與 ASGI 粟遞枅單。 +想瞭解曎倚可甚的䞭介軟體請參考 [Starlette 的䞭介軟體文件](https://www.starlette.dev/middleware/) 與 [ASGI 粟遞枅單](https://github.com/florimondmanca/awesome-asgi)。 diff --git a/docs/zh-hant/docs/advanced/openapi-callbacks.md b/docs/zh-hant/docs/advanced/openapi-callbacks.md index b1a16be249..3b01f42016 100644 --- a/docs/zh-hant/docs/advanced/openapi-callbacks.md +++ b/docs/zh-hant/docs/advanced/openapi-callbacks.md @@ -35,7 +35,7 @@ /// tip -`callback_url` 查詢參敞䜿甚的是 Pydantic 的 Url 型別。 +`callback_url` 查詢參敞䜿甚的是 Pydantic 的 [Url](https://docs.pydantic.dev/latest/api/networks/) 型別。 /// @@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 寊際的回呌就是䞀個 HTTP 請求。 -當䜠自己寊䜜回呌時可以䜿甚像是 HTTPX 或 Requests。 +當䜠自己寊䜜回呌時可以䜿甚像是 [HTTPX](https://www.python-httpx.org) 或 [Requests](https://requests.readthedocs.io/)。 /// @@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 和䞀般「路埑操䜜」盞比有兩個䞻芁差異 * 䞍需芁任䜕寊際皋匏碌因為䜠的應甚氞遠䞍會呌叫這段皋匏。它只甚䟆文件化「倖郚 API」。因歀凜匏可以只有 `pass`。 -* 「路埑」可以包含䞀個 OpenAPI 3 衚達匏芋䞋文可䜿甚參敞與原始送到「䜠的 API」的請求䞭的郚分欄䜍。 +* 「路埑」可以包含䞀個 [OpenAPI 3 衚達匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)芋䞋文可䜿甚參敞與原始送到「䜠的 API」的請求䞭的郚分欄䜍。 ### 回呌路埑衚達匏 { #the-callback-path-expression } -回呌的「路埑」可以包含䞀個 OpenAPI 3 衚達匏胜匕甚原本送到「䜠的 API」的請求䞭的郚分內容。 +回呌的「路埑」可以包含䞀個 [OpenAPI 3 衚達匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)胜匕甚原本送到「䜠的 API」的請求䞭的郚分內容。 圚這個䟋子䞭它是䞀個 `str` @@ -179,7 +179,7 @@ https://www.external.org/events/invoices/2expen51ve ### 檢查文件 { #check-the-docs } -珟圚䜠可以啟動應甚䞊前埀 http://127.0.0.1:8000/docs。 +珟圚䜠可以啟動應甚䞊前埀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠會圚文件䞭看到䜠的「路埑操䜜」包含䞀個「Callbacks」區塊顯瀺「倖郚 API」應該長什麌暣子 diff --git a/docs/zh-hant/docs/advanced/openapi-webhooks.md b/docs/zh-hant/docs/advanced/openapi-webhooks.md index ef52c3884f..18206c447b 100644 --- a/docs/zh-hant/docs/advanced/openapi-webhooks.md +++ b/docs/zh-hant/docs/advanced/openapi-webhooks.md @@ -48,7 +48,7 @@ Webhook 功胜自 OpenAPI 3.1.0 起提䟛FastAPI `0.99.0` 以䞊版本支揎 ### 查看文件 { #check-the-docs } -珟圚䜠可以啟動應甚然埌前埀 http://127.0.0.1:8000/docs。 +珟圚䜠可以啟動應甚然埌前埀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠會圚文件䞭看到䞀般的路埑操䜜及倖還有䞀些 webhook diff --git a/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md b/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md index 4f25eb9878..f1607a1da5 100644 --- a/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md @@ -60,7 +60,7 @@ 䜠也可以宣告額倖的回應及其暡型、狀態碌等。 -文件䞭有完敎章節說明請芋 [OpenAPI 䞭的額倖回應](additional-responses.md){.internal-link target=_blank}。 +文件䞭有完敎章節說明請芋 [OpenAPI 䞭的額倖回應](additional-responses.md)。 ## OpenAPI 額倖資蚊 { #openapi-extra } @@ -68,7 +68,7 @@ /// note | 技術现節 -圚 OpenAPI 芏栌䞭這皱為 Operation 物件。 +圚 OpenAPI 芏栌䞭這皱為 [Operation 物件](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)。 /// @@ -82,7 +82,7 @@ 這是䞀個范䜎階的擎充介面。 -劂果䜠只需芁宣告額倖回應曎方䟿的方匏是䜿甚 [OpenAPI 䞭的額倖回應](additional-responses.md){.internal-link target=_blank}。 +劂果䜠只需芁宣告額倖回應曎方䟿的方匏是䜿甚 [OpenAPI 䞭的額倖回應](additional-responses.md)。 /// diff --git a/docs/zh-hant/docs/advanced/response-change-status-code.md b/docs/zh-hant/docs/advanced/response-change-status-code.md index 4b8d459ca2..31b688512e 100644 --- a/docs/zh-hant/docs/advanced/response-change-status-code.md +++ b/docs/zh-hant/docs/advanced/response-change-status-code.md @@ -1,6 +1,6 @@ # 回應 - 變曎狀態碌 { #response-change-status-code } -䜠可胜已經讀過可以蚭定預蚭的[回應狀態碌](../tutorial/response-status-code.md){.internal-link target=_blank}。 +䜠可胜已經讀過可以蚭定預蚭的[回應狀態碌](../tutorial/response-status-code.md)。 䜆有些情況䜠需芁回傳與預蚭䞍同的狀態碌。 @@ -26,6 +26,6 @@ 若䜠宣告了 `response_model`它仍會被甚䟆過濟䞊蜉換䜠回傳的物件。 -FastAPI 會䜿甚那個「*暫時的*」回應䟆取埗狀態碌以及 Cookies 和暙頭䞊將它們攟入最終回應䞭最終回應包含䜠回傳的倌䞔會被任䜕 `response_model` 過濟。 +**FastAPI** 會䜿甚那個「*暫時的*」回應䟆取埗狀態碌以及 Cookies 和暙頭䞊將它們攟入最終回應䞭最終回應包含䜠回傳的倌䞔會被任䜕 `response_model` 過濟。 䜠也可以圚盞䟝性dependencies䞭宣告 `Response` 參敞䞊圚其䞭蚭定狀態碌。䜆請泚意最埌被蚭定的倌會生效。 diff --git a/docs/zh-hant/docs/advanced/response-cookies.md b/docs/zh-hant/docs/advanced/response-cookies.md index b7225d571c..2ba14c3f6f 100644 --- a/docs/zh-hant/docs/advanced/response-cookies.md +++ b/docs/zh-hant/docs/advanced/response-cookies.md @@ -20,7 +20,7 @@ FastAPI 會䜿甚那個暫時的 `Response` 取出 Cookie以及暙頭與狀 當䜠圚皋匏碌䞭盎接回傳 `Response` 時也可以建立 Cookie。 -芁這麌做䜠可以䟝照 [盎接回傳 Response](response-directly.md){.internal-link target=_blank} 䞭的說明建立䞀個回應。 +芁這麌做䜠可以䟝照 [盎接回傳 Response](response-directly.md) 䞭的說明建立䞀個回應。 接著圚其䞭蚭定 Cookie然埌回傳它 @@ -48,4 +48,4 @@ FastAPI 會䜿甚那個暫時的 `Response` 取出 Cookie以及暙頭與狀 /// -想查看所有可甚的參敞與遞項請參閱 Starlette 文件。 +想查看所有可甚的參敞與遞項請參閱 [Starlette 文件](https://www.starlette.dev/responses/#set-cookie)。 diff --git a/docs/zh-hant/docs/advanced/response-directly.md b/docs/zh-hant/docs/advanced/response-directly.md index 5603548934..16face2612 100644 --- a/docs/zh-hant/docs/advanced/response-directly.md +++ b/docs/zh-hant/docs/advanced/response-directly.md @@ -2,19 +2,23 @@ 當䜠建立䞀個 **FastAPI** 的路埑操䜜 (path operation) 時通垞可以埞䞭回傳任䜕資料`dict`、`list`、Pydantic 暡型、資料庫暡型等。 -預蚭情況䞋**FastAPI** 會䜿甚圚[JSON 盞容線碌噚](../tutorial/encoder.md){.internal-link target=_blank}䞭說明的 `jsonable_encoder`自動將回傳倌蜉為 JSON。 +劂果䜠宣告了 [回應暡型](../tutorial/response-model.md)FastAPI 會甚 Pydantic 將資料序列化為 JSON。 -然埌圚幕埌它會把這些與 JSON 盞容的資料䟋劂 `dict`攟進 `JSONResponse`甚䟆把回應傳回絊甚戶端。 +劂果䜠沒有宣告回應暡型FastAPI 會䜿甚圚[JSON 盞容線碌噚](../tutorial/encoder.md)䞭說明的 `jsonable_encoder`䞊把它攟進 `JSONResponse`。 䜆䜠也可以盎接埞路埑操䜜回傳 `JSONResponse`。 -䟋劂當䜠需芁回傳自蚂的 headers 或 cookies 時就埈有甚。 +/// tip + +通垞䜿甚 [回應暡型](../tutorial/response-model.md) 會有曎奜的效胜因為那暣會圚 Rust 端䜿甚 Pydantic 䟆序列化資料而䞍是盎接回傳 `JSONResponse`。 + +/// ## 回傳 `Response` { #return-a-response } 其寊䜠可以回傳任䜕 `Response`或其任䜕子類別。 -/// tip +/// info `JSONResponse` 本身就是 `Response` 的子類別。 @@ -26,6 +30,8 @@ 這絊了䜠埈倧的圈性。䜠可以回傳任䜕資料型別、芆寫任䜕資料宣告或驗證等。 +同時也垶䟆了埈倧的責任。䜠必須確保䜠回傳的資料是正確的、栌匏正確、可被序列化等。 + ## 圚 `Response` 䞭䜿甚 `jsonable_encoder` { #using-the-jsonable-encoder-in-a-response } 因為 **FastAPI** 䞍會對䜠回傳的 `Response` 做任䜕曎動䜠需芁自行確保它的內容已經準備奜。 @@ -50,16 +56,28 @@ 珟圚䟆看看劂䜕甚它䟆回傳自蚂回應。 -假蚭䜠想芁回傳䞀個 XML 回應。 +假蚭䜠想芁回傳䞀個 [XML](https://en.wikipedia.org/wiki/XML) 回應。 䜠可以把 XML 內容攟進䞀個字䞲把它攟進 `Response`然埌回傳它 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} +## 回應暡型劂䜕運䜜 { #how-a-response-model-works } + +當䜠圚路埑操䜜䞭宣告 [回應暡型 - 回傳型別](../tutorial/response-model.md) 時**FastAPI** 會甚 Pydantic 將資料序列化為 JSON。 + +{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} + +由斌這會圚 Rust 端癌生效胜會比甚䞀般的 Python 與 `JSONResponse` 類別䟆完成奜埗倚。 + +當䜿甚 `response_model` 或回傳型別時FastAPI 䞍會䜿甚 `jsonable_encoder` 䟆蜉換資料那會范慢也䞍會䜿甚 `JSONResponse` 類別。 + +盞反地它會取甚甚回應暡型或回傳型別透過 Pydantic 產生的 JSON 䜍元組䞊盎接回傳具備正確 JSON 媒體型別`application/json`的 `Response`。 + ## 泚意事項 { #notes } 當䜠盎接回傳 `Response` 時其資料䞍會自動被驗證、蜉換序列化或文件化。 -䜆䜠仍然可以䟝照[圚 OpenAPI 䞭的額倖回應](additional-responses.md){.internal-link target=_blank}䞭的說明進行文件化。 +䜆䜠仍然可以䟝照[圚 OpenAPI 䞭的額倖回應](additional-responses.md)䞭的說明進行文件化。 圚埌續章節䞭䜠會看到劂䜕圚仍保有自動資料蜉換、文件化等的同時䜿甚宣告這些自蚂的 `Response`。 diff --git a/docs/zh-hant/docs/advanced/response-headers.md b/docs/zh-hant/docs/advanced/response-headers.md index 6e32ca1b39..4f7494a8b3 100644 --- a/docs/zh-hant/docs/advanced/response-headers.md +++ b/docs/zh-hant/docs/advanced/response-headers.md @@ -20,7 +20,7 @@ FastAPI 會䜿甚那個暫時性的回應䟆擷取暙頭還有 Cookie 與狀 當䜠盎接回傳 `Response` 時也胜加入暙頭。 -䟝照[盎接回傳 Response](response-directly.md){.internal-link target=_blank}䞭的說明建立回應䞊把暙頭䜜為額倖參敞傳入 +䟝照[盎接回傳 Response](response-directly.md)䞭的說明建立回應䞊把暙頭䜜為額倖參敞傳入 {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *} @@ -36,6 +36,6 @@ FastAPI 會䜿甚那個暫時性的回應䟆擷取暙頭還有 Cookie 與狀 ## 自蚂暙頭 { #custom-headers } -請蚘䜏專有的自蚂暙頭可以䜿甚 `X-` 前綎䟆新增。 +請蚘䜏專有的自蚂暙頭可以[䜿甚 `X-` 前綎](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)䟆新增。 -䜆劂果䜠有自蚂暙頭䞊垌望瀏芜噚端的客戶端胜看芋它們䜠需芁把這些暙頭加入到 CORS 蚭定䞭詳芋 [CORS跚䟆源資源共甚](../tutorial/cors.md){.internal-link target=_blank}䜿甚圚Starlette 的 CORS 文件䞭蚘茉的 `expose_headers` 參敞。 +䜆劂果䜠有自蚂暙頭䞊垌望瀏芜噚端的客戶端胜看芋它們䜠需芁把這些暙頭加入到 CORS 蚭定䞭詳芋 [CORS跚䟆源資源共甚](../tutorial/cors.md)䜿甚圚[Starlette 的 CORS 文件](https://www.starlette.dev/middleware/#corsmiddleware)䞭蚘茉的 `expose_headers` 參敞。 diff --git a/docs/zh-hant/docs/advanced/security/http-basic-auth.md b/docs/zh-hant/docs/advanced/security/http-basic-auth.md index ea3d528292..817cf166b9 100644 --- a/docs/zh-hant/docs/advanced/security/http-basic-auth.md +++ b/docs/zh-hant/docs/advanced/security/http-basic-auth.md @@ -32,7 +32,7 @@ 䜿甚䞀個䟝賎䟆檢查䜿甚者名皱與密碌是吊正確。 -為歀䜿甚 Python 暙準暡組 `secrets` 䟆比對䜿甚者名皱與密碌。 +為歀䜿甚 Python 暙準暡組 [`secrets`](https://docs.python.org/3/library/secrets.html) 䟆比對䜿甚者名皱與密碌。 `secrets.compare_digest()` 需芁接收 `bytes`或是只包含 ASCII 字元英文字笊的 `str`。這衚瀺它無法處理像 `á` 這暣的字元䟋劂 `Sebastián`。 diff --git a/docs/zh-hant/docs/advanced/security/index.md b/docs/zh-hant/docs/advanced/security/index.md index 9a4cfbbfd6..9ddf356756 100644 --- a/docs/zh-hant/docs/advanced/security/index.md +++ b/docs/zh-hant/docs/advanced/security/index.md @@ -2,11 +2,11 @@ ## 額倖功胜 { #additional-features } -陀了[教孞 - 䜿甚者指南安党性](../../tutorial/security/index.md){.internal-link target=_blank}䞭涵蓋的內容倖還有䞀些甚䟆處理安党性的額倖功胜。 +陀了[教孞 - 䜿甚者指南安党性](../../tutorial/security/index.md)䞭涵蓋的內容倖還有䞀些甚䟆處理安党性的額倖功胜。 /// tip -以䞋各節䞍䞀定是「進階」內容。 +以䞋各節**䞍䞀定是「進階」**內容。 而䞔䜠的情境埈可胜可以圚其䞭扟到解決方案。 @@ -14,6 +14,6 @@ ## 請先閱讀教孞 { #read-the-tutorial-first } -以䞋各節假蚭䜠已閱讀䞻芁的[教孞 - 䜿甚者指南安党性](../../tutorial/security/index.md){.internal-link target=_blank}。 +以䞋各節假蚭䜠已閱讀䞻芁的[教孞 - 䜿甚者指南安党性](../../tutorial/security/index.md)。 它們郜建立圚盞同的抂念之䞊䜆提䟛䞀些額倖的功胜。 diff --git a/docs/zh-hant/docs/advanced/security/oauth2-scopes.md b/docs/zh-hant/docs/advanced/security/oauth2-scopes.md index 029572d433..05088be7ed 100644 --- a/docs/zh-hant/docs/advanced/security/oauth2-scopes.md +++ b/docs/zh-hant/docs/advanced/security/oauth2-scopes.md @@ -60,7 +60,7 @@ OAuth2 芏栌將「scopes」定矩為以空癜分隔的䞀䞲字䞲列衚。 ## 党局抂觀 { #global-view } -先快速看看盞對斌䞻教孞「䜿甚密碌與雜湊、Bearer 與 JWT token 的 OAuth2」的差異[OAuth2 with Password (and hashing), Bearer with JWT tokens](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank}。珟圚加入了 OAuth2 scopes +先快速看看盞對斌䞻教孞「䜿甚密碌與雜湊、Bearer 與 JWT token 的 OAuth2」的差異[OAuth2 with Password (and hashing), Bearer with JWT tokens](../../tutorial/security/oauth2-jwt.md)。珟圚加入了 OAuth2 scopes {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *} @@ -271,4 +271,4 @@ FastAPI 圚 `fastapi.security.oauth2` 䞭提䟛了所有這些 OAuth2 驗證流 ## 圚裝食噚 `dependencies` 䞭䜿甚 `Security` { #security-in-decorator-dependencies } -就像䜠可以圚裝食噚的 `dependencies` 參敞䞭定矩䞀個 `Depends` 的 `list` 䞀暣詳芋[路埑操䜜裝食噚䞭的盞䟝性](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}䜠也可以圚那裡䜿甚垶有 `scopes` 的 `Security`。 +就像䜠可以圚裝食噚的 `dependencies` 參敞䞭定矩䞀個 `Depends` 的 `list` 䞀暣詳芋[路埑操䜜裝食噚䞭的盞䟝性](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)䜠也可以圚那裡䜿甚垶有 `scopes` 的 `Security`。 diff --git a/docs/zh-hant/docs/advanced/settings.md b/docs/zh-hant/docs/advanced/settings.md index 1ee5ad7cc2..9892f8f000 100644 --- a/docs/zh-hant/docs/advanced/settings.md +++ b/docs/zh-hant/docs/advanced/settings.md @@ -8,7 +8,7 @@ /// tip -若想了解環境變敞䜠可以閱讀[環境變敞](../environment-variables.md){.internal-link target=_blank}。 +若想了解環境變敞䜠可以閱讀[環境變敞](../environment-variables.md)。 /// @@ -20,11 +20,11 @@ ## Pydantic `Settings` { #pydantic-settings } -幞奜Pydantic 提䟛了埈奜的工具可甚䟆處理由環境變敞而䟆的蚭定Pydantic蚭定管理。 +幞奜Pydantic 提䟛了埈奜的工具可甚䟆處理由環境變敞而䟆的蚭定[Pydantic蚭定管理](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)。 ### 安裝 `pydantic-settings` { #install-pydantic-settings } -銖先請先建立䜠的[虛擬環境](../virtual-environments.md){.internal-link target=_blank}啟甚它然埌安裝 `pydantic-settings` 套件 +銖先請先建立䜠的[虛擬環境](../virtual-environments.md)啟甚它然埌安裝 `pydantic-settings` 套件
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p ## 圚及䞀個暡組䞭的蚭定 { #settings-in-another-module } -䜠也可以把這些蚭定攟圚及䞀個暡組檔案䞭就像圚[曎倧的應甚皋匏 - 倚個檔案](../tutorial/bigger-applications.md){.internal-link target=_blank}所瀺。 +䜠也可以把這些蚭定攟圚及䞀個暡組檔案䞭就像圚[曎倧的應甚皋匏 - 倚個檔案](../tutorial/bigger-applications.md)所瀺。 䟋劂䜠可以有䞀個 `config.py` 檔案劂䞋 @@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// tip -䜠也需芁䞀個 `__init__.py` 檔案詳芋[曎倧的應甚皋匏 - 倚個檔案](../tutorial/bigger-applications.md){.internal-link target=_blank}。 +䜠也需芁䞀個 `__init__.py` 檔案詳芋[曎倧的應甚皋匏 - 倚個檔案](../tutorial/bigger-applications.md)。 /// @@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// -Pydantic 透過倖郚凜匏庫支揎讀取這類型的檔案。䜠可以閱讀曎倚Pydantic SettingsDotenv (.env) 支揎。 +Pydantic 透過倖郚凜匏庫支揎讀取這類型的檔案。䜠可以閱讀曎倚[Pydantic SettingsDotenv (.env) 支揎](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support)。 /// tip @@ -197,7 +197,7 @@ APP_NAME="ChimichangApp" /// tip -`model_config` 屬性僅甚斌 Pydantic 的蚭定。䜠可以閱讀曎倚Pydantic抂念蚭定。 +`model_config` 屬性僅甚斌 Pydantic 的蚭定。䜠可以閱讀曎倚[Pydantic抂念蚭定](https://docs.pydantic.dev/latest/concepts/config/)。 /// @@ -291,7 +291,7 @@ participant execute as Execute function 劂歀䞀䟆它的行為幟乎就像党域變敞。䜆因為它䜿甚盞䟝凜匏因歀我們可以圚枬詊時茕鬆將其芆寫。 -`@lru_cache` 是 `functools` 的䞀郚分而 `functools` 是 Python 暙準皋匏庫的䞀郚分。䜠可以圚Python 文件䞭閱讀 `@lru_cache` 以了解曎倚。 +`@lru_cache` 是 `functools` 的䞀郚分而 `functools` 是 Python 暙準皋匏庫的䞀郚分。䜠可以圚[Python 文件䞭閱讀 `@lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache) 以了解曎倚。 ## 回顧 { #recap } diff --git a/docs/zh-hant/docs/advanced/stream-data.md b/docs/zh-hant/docs/advanced/stream-data.md new file mode 100644 index 0000000000..0f55ae6516 --- /dev/null +++ b/docs/zh-hant/docs/advanced/stream-data.md @@ -0,0 +1,117 @@ +# 䞲流資料 { #stream-data } + +劂果䜠芁䞲流可甚 JSON 結構化的資料應該[䞲流 JSON Lines](../tutorial/stream-json-lines.md)。 + +䜆劂果䜠想䞲流玔二進䜍資料或字䞲以䞋是做法。 + +/// info + +已圚 FastAPI 0.134.0 新增。 + +/// + +## 䜿甚情境 { #use-cases } + +當䜠想䞲流玔字䞲時可以甚這個機制䟋劂盎接蜉癌䟆自 AI LLM 服務的茞出。 + +䜠也可以甚它䟆䞲流倧型二進䜍檔案邊讀邊將每個區塊chunk䞲流出去而䞍必䞀次把敎個檔案茉入蚘憶體。 + +䜠也可以甚同暣方匏䞲流芖蚊或音蚊甚至可以圚處理的同時即時產生䞊傳送。 + +## 䜿甚 `yield` 的 `StreamingResponse` { #a-streamingresponse-with-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 } + +䜠也可以䜿甚䞀般的 `def` 凜匏沒有 `async`䞊以盞同方匏䜿甚 `yield`。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[26:29] hl[27] *} + +### 䞍需芁型別蚻解 { #no-annotation } + +對斌䞲流二進䜍資料其寊䞍需芁宣告回傳型別蚻解。 + +由斌 FastAPI 䞍會詊圖甚 Pydantic 將資料蜉成 JSON或以其他方匏序列化圚這皮情況䞋型別蚻解僅䟛線茯噚與工具䜿甚FastAPI 䞊䞍會甚到它。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *} + +這也意味著䜿甚 `StreamingResponse` 時䜠擁有自由與責任需䟝需求自行產生䞊線碌芁傳送的䜍元組資料與型別蚻解無關。 🀓 + +### 䞲流䜍元組 { #stream-bytes } + +䞀個䞻芁甚䟋是䞲流 `bytes` 而非字䞲當然可以這麌做。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[44:47] hl[47] *} + +## 自蚂 `PNGStreamingResponse` { #a-custom-pngstreamingresponse } + +圚䞊述範䟋䞭雖然䞲流了資料䜍元組䜆回應沒有 `Content-Type` 暙頭因歀甚戶端䞍知道接收到的是哪皮資料型別。 + +䜠可以建立 `StreamingResponse` 的自蚂子類別將 `Content-Type` 暙頭蚭定為䜠芁䞲流的資料型別。 + +䟋劂䜠可以建立 `PNGStreamingResponse`透過 `media_type` 屬性把 `Content-Type` 蚭為 `image/png` + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *} + +接著圚路埑操䜜凜匏䞭甚 `response_class=PNGStreamingResponse` 䜿甚這個新類別 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *} + +### 暡擬檔案 { #simulate-a-file } + +歀範䟋䞭我們甚 `io.BytesIO` 暡擬檔案。它是只存圚斌蚘憶體䞭的類檔案物件䜆提䟛盞同的介面。 + +䟋劂我們可以像讀取䞀般檔案䞀暣透過迭代䟆消耗其內容。 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[1:27] hl[3,12:13,25] *} + +/// note | 技術现節 + +及倖兩個變敞 `image_base64` 與 `binary_image`分別是先將圱像以 Base64 線碌接著蜉成䜍元組最埌再傳絊 `io.BytesIO`。 + +這只是為了讓範䟋胜攟圚同䞀個檔案䞭方䟿䜠盎接耇補䞊執行。 🥚 + +/// + +䜿甚 `with` 區塊可確保圚產生噚凜匏包含 `yield` 的凜匏完成埌關閉該類檔案物件也就是圚送完回應之埌。 + +圚這個範䟋䞭因為是存圚蚘憶體的假檔案`io.BytesIO`圱響䞍倧䜆若是寊際檔案務必圚處理完成埌關閉檔案。 + +### 檔案與 Async { #files-and-async } + +倚敞情況䞋類檔案物件預蚭䞍盞容斌 async/await。 + +䟋劂它們沒有 `await file.read()`也䞍支揎 `async for chunk in file`。 + +而䞔圚蚱倚情況䞋讀取它們會是阻塞操䜜可胜阻塞事件迎圈因為資料是埞磁碟或網路讀取。 + +/// info + +䞊面的範䟋其寊是䟋倖因為 `io.BytesIO` 物件已圚蚘憶體䞭讀取䞍會阻塞任䜕東西。 + +䜆圚倚敞情況䞋讀取檔案或類檔案物件會造成阻塞。 + +/// + +為了避免阻塞事件迎圈䜠可以將路埑操䜜凜匏宣告為䞀般的 `def`而非 `async def`這暣 FastAPI 會圚 threadpool worker 䞊執行它避免阻塞䞻事件迎圈。 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *} + +/// tip + +劂果䜠需芁圚 async 凜匏內呌叫阻塞皋匏碌或圚阻塞凜匏䞭呌叫 async 凜匏䜠可以䜿甚 [Asyncer](https://asyncer.tiangolo.com)它是 FastAPI 的姊効凜匏庫。 + +/// + +### `yield from` { #yield-from } + +當䜠圚迭代某個物件劂類檔案物件䞊對每個項目䜿甚 `yield` 時也可以甚 `yield from` 盎接逐項產出省略 `for` 迎圈。 + +這䞍是 FastAPI 特有的功胜而是 Python 語法䞍過這招埈寊甚。 😎 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[37:40] hl[40] *} diff --git a/docs/zh-hant/docs/advanced/strict-content-type.md b/docs/zh-hant/docs/advanced/strict-content-type.md new file mode 100644 index 0000000000..9d2ffb8430 --- /dev/null +++ b/docs/zh-hant/docs/advanced/strict-content-type.md @@ -0,0 +1,88 @@ +# 嚎栌的 Content-Type 檢查 { #strict-content-type-checking } + +預蚭情況䞋FastAPI 會對 JSON 請求䞻體䜿甚嚎栌的 `Content-Type` 暙頭檢查。也就是說JSON 請求必須包含有效的 `Content-Type` 暙頭䟋劂 `application/json`請求䞻體body才胜被解析為 JSON。 + +## CSRF 颚險 { #csrf-risk } + +這個預蚭行為圚某個非垞特定的情境䞋胜對䞀類跚站請求停造CSRF, Cross-Site Request Forgery攻擊提䟛保護。 + +這類攻擊利甚了瀏芜噚圚以䞋情況䞋允蚱腳本癌送請求而䞍進行任䜕 CORS 預檢preflight檢查的事寊 + +- 沒有 `Content-Type` 暙頭䟋劂以 `fetch()` 䞊䜿甚 `Blob` 䜜為 body +- 䞔沒有送出任䜕身分驗證憑證 + +這皮攻擊䞻芁與以䞋情境盞關 + +- 應甚圚本機䟋劂 `localhost`或內郚網路䞭執行 +- 䞊䞔應甚沒有任䜕身分驗證假蚭同䞀個網路䞭的任䜕請求郜可被信任 + +## 攻擊範䟋 { #example-attack } + +假蚭䜠打造了䞀個圚本機執行 AI 代理AI agent的方法。 + +它提䟛䞀個 API + +``` +http://localhost:8000/v1/agents/multivac +``` + +同時也有䞀個前端 + +``` +http://localhost:8000 +``` + +/// tip | 提瀺 + +請泚意兩者的䞻機host盞同。 + +/// + +接著䜠可以透過前端讓 AI 代理代䜠執行動䜜。 + +由斌它圚本機執行、而非公開的網際網路䞊䜠決定䞍蚭定任䜕身分驗證只信任對本機網路的存取。 + +然埌䜠的某䜍䜿甚者可胜安裝䞊圚本機執行它。 + +接著他可胜打開䞀個惡意網站䟋劂 + +``` +https://evilhackers.example.com +``` + +該惡意網站會䜿甚 `fetch()` 䞊以 `Blob` 䜜為 body向本機的 API 癌送請求 + +``` +http://localhost:8000/v1/agents/multivac +``` + +即䜿惡意網站與本機應甚的䞻機䞍同瀏芜噚也䞍會觞癌 CORS 預檢請求因為 + +- 它圚未經任䜕身分驗證的情況䞋執行䞍需芁送出任䜕憑證。 +- 由斌猺少 `Content-Type` 暙頭瀏芜噚認為它䞊未傳送 JSON。 + +接著惡意網站就胜讓本機的 AI 代理替䜿甚者向前老闆癌飆傳蚊... 或做曎糟的事。😅 + +## 公開的網際網路 { #open-internet } + +劂果䜠的應甚郚眲圚公開的網際網路䞊䜠䞍會「信任網路」而允蚱任䜕人圚未經身分驗證的情況䞋癌送具權限的請求。 + +攻擊者可以盎接執行腳本向䜠的 API 癌送請求無需透過瀏芜噚互動因歀䜠倚半已經對任䜕具權限的端點做了防護。 + +圚這皮情況䞋這皮攻擊颚險䞍適甚斌䜠。 + +歀颚險與攻擊䞻芁與應甚只圚本機或內郚網路䞊執行䞔「僅䟝賎歀為保護」的情境盞關。 + +## 允蚱沒有 Content-Type 的請求 { #allowing-requests-without-content-type } + +若䜠需芁支揎未送出 `Content-Type` 暙頭的客戶端可以將 `strict_content_type=False` 以停甚嚎栌檢查 + +{* ../../docs_src/strict_content_type/tutorial001_py310.py hl[4] *} + +啟甚歀蚭定埌猺少 `Content-Type` 暙頭的請求會將其䞻體解析為 JSON這與舊版 FastAPI 的行為盞同。 + +/// info | 資蚊 + +歀行為與蚭定新增斌 FastAPI 0.132.0。 + +/// diff --git a/docs/zh-hant/docs/advanced/sub-applications.md b/docs/zh-hant/docs/advanced/sub-applications.md index 773bc4b886..7199e6d629 100644 --- a/docs/zh-hant/docs/advanced/sub-applications.md +++ b/docs/zh-hant/docs/advanced/sub-applications.md @@ -30,25 +30,25 @@ ### 檢查自動 API 文件 { #check-the-automatic-api-docs } -珟圚甚䜠的檔案執行 `fastapi` 指什 +珟圚執行 `fastapi` 指什
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-然埌開啟䜍斌 http://127.0.0.1:8000/docs 的文件。 +然埌開啟䜍斌 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 的文件。 䜠會看到䞻應甚的自動 API 文件只包含它自己的*路埑操䜜* -接著開啟子應甚皋匏的文件http://127.0.0.1:8000/subapi/docs。 +接著開啟子應甚皋匏的文件[http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)。 䜠會看到子應甚皋匏的自動 API 文件只包含它自己的*路埑操䜜*而䞔郜圚正確的子路埑前綎 `/subapi` 之䞋 @@ -64,4 +64,4 @@ $ fastapi dev main.py 而䞔子應甚皋匏也胜再掛茉自己的子應甚皋匏䞀切郜胜正確運䜜因為 FastAPI 會自動處理所有這些 `root_path`。 -䜠可以圚[圚代理䌺服噚之埌](behind-a-proxy.md){.internal-link target=_blank}䞀節䞭進䞀步了解 `root_path` 與劂䜕顯匏䜿甚它。 +䜠可以圚[圚代理䌺服噚之埌](behind-a-proxy.md)䞀節䞭進䞀步了解 `root_path` 與劂䜕顯匏䜿甚它。 diff --git a/docs/zh-hant/docs/advanced/templates.md b/docs/zh-hant/docs/advanced/templates.md index ffc7599ae2..6e622d5a77 100644 --- a/docs/zh-hant/docs/advanced/templates.md +++ b/docs/zh-hant/docs/advanced/templates.md @@ -8,7 +8,7 @@ ## 安裝盞䟝套件 { #install-dependencies } -請先建立䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}、啟甚它然埌安裝 `jinja2` +請先建立䞀個[虛擬環境](../virtual-environments.md)、啟甚它然埌安裝 `jinja2`
@@ -123,4 +123,4 @@ Item ID: 42 ## 曎倚现節 { #more-details } -想了解曎倚现節包含劂䜕枬詊暡板請參考 Starlette 的暡板說明文件。 +想了解曎倚现節包含劂䜕枬詊暡板請參考 [Starlette 的暡板說明文件](https://www.starlette.dev/templates/)。 diff --git a/docs/zh-hant/docs/advanced/testing-websockets.md b/docs/zh-hant/docs/advanced/testing-websockets.md index 7348e60fdf..caedc11dbd 100644 --- a/docs/zh-hant/docs/advanced/testing-websockets.md +++ b/docs/zh-hant/docs/advanced/testing-websockets.md @@ -8,6 +8,6 @@ /// note | 泚意 -想了解曎倚請參考 Starlette 的 枬詊 WebSocket 文件。 +想了解曎倚請參考 Starlette 的[枬詊 WebSocket](https://www.starlette.dev/testclient/#testing-websocket-sessions)文件。 /// diff --git a/docs/zh-hant/docs/advanced/using-request-directly.md b/docs/zh-hant/docs/advanced/using-request-directly.md index f1dae9bf29..2c355982de 100644 --- a/docs/zh-hant/docs/advanced/using-request-directly.md +++ b/docs/zh-hant/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ ## 關斌 `Request` 物件的现節 { #details-about-the-request-object } -由斌 FastAPI 底局其寊是 Starlette再加䞊䞀局工具因歀圚需芁時䜠可以盎接䜿甚 Starlette 的 `Request` 物件。 +由斌 FastAPI 底局其寊是 Starlette再加䞊䞀局工具因歀圚需芁時䜠可以盎接䜿甚 Starlette 的 [`Request`](https://www.starlette.dev/requests/) 物件。 同時也代衚劂果䜠盎接埞 `Request` 物件取埗資料䟋劂讀取 bodyFastAPI 䞍會替它做驗證、蜉換或文件化透過 OpenAPI 為自動化的 API 介面產生文件。 @@ -45,7 +45,7 @@ ## `Request` 文件 { #request-documentation } -䜠可以圚 Starlette 官方文件站點䞭的 `Request` 物件 了解曎倚现節。 +䜠可以圚 [Starlette 官方文件站點䞭的 `Request` 物件](https://www.starlette.dev/requests/) 了解曎倚现節。 /// note | 技術现節 diff --git a/docs/zh-hant/docs/advanced/websockets.md b/docs/zh-hant/docs/advanced/websockets.md index 22e3fdcb9e..57f51bcfbe 100644 --- a/docs/zh-hant/docs/advanced/websockets.md +++ b/docs/zh-hant/docs/advanced/websockets.md @@ -1,10 +1,10 @@ # WebSockets { #websockets } -䜠可以圚 **FastAPI** 䞭䜿甚 WebSockets。 +䜠可以圚 **FastAPI** 䞭䜿甚 [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)。 ## 安裝 `websockets` { #install-websockets } -請先建立[虛擬環境](../virtual-environments.md){.internal-link target=_blank}、啟甚它然埌安裝 `websockets`䞀個讓䜠曎容易䜿甚「WebSocket」通蚊協定的 Python 套件 +請先建立[虛擬環境](../virtual-environments.md)、啟甚它然埌安裝 `websockets`䞀個讓䜠曎容易䜿甚「WebSocket」通蚊協定的 Python 套件
@@ -69,14 +69,14 @@ $ pip install websockets
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-圚瀏芜噚開啟 http://127.0.0.1:8000。 +圚瀏芜噚開啟 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 䜠會看到䞀個像這暣的簡單頁面 @@ -115,25 +115,25 @@ $ fastapi dev main.py 因為這是 WebSocket拋出 `HTTPException` 䞊沒有意矩因歀我們改為拋出 `WebSocketException`。 -䜠可以䜿甚芏範䞭定矩的有效關閉代碌之䞀。 +䜠可以䜿甚芏範䞭定矩的[有效關閉代碌](https://tools.ietf.org/html/rfc6455#section-7.4.1)之䞀。 /// ### 甚䟝賎詊甚 WebSocket { #try-the-websockets-with-dependencies } -劂果䜠的檔案名為 `main.py`甚以䞋指什執行應甚 +執行䜠的應甚
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-圚瀏芜噚開啟 http://127.0.0.1:8000。 +圚瀏芜噚開啟 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 圚那裡䜠可以蚭定 @@ -174,7 +174,7 @@ Client #1596980209979 left the chat 䜆請泚意因為所有狀態郜圚蚘憶體䞭的單䞀 list 裡管理它只會圚該皋序執行期間生效䞔僅適甚斌單䞀皋序。 -劂果䜠需芁䞀個容易與 FastAPI 敎合、䜆曎健壯䞔可由 Redis、PostgreSQL 等埌端支揎的方案請參考 encode/broadcaster。 +劂果䜠需芁䞀個容易與 FastAPI 敎合、䜆曎健壯䞔可由 Redis、PostgreSQL 等埌端支揎的方案請參考 [encode/broadcaster](https://github.com/encode/broadcaster)。 /// @@ -182,5 +182,5 @@ Client #1596980209979 left the chat 想了解曎倚遞項請參考 Starlette 的文件 -* `WebSocket` 類別。 -* 以類別為基瀎的 WebSocket 處理。 +* [`WebSocket` 類別](https://www.starlette.dev/websockets/)。 +* [以類別為基瀎的 WebSocket 處理](https://www.starlette.dev/endpoints/#websocketendpoint)。 diff --git a/docs/zh-hant/docs/advanced/wsgi.md b/docs/zh-hant/docs/advanced/wsgi.md index 9d03b56924..c1baff34ed 100644 --- a/docs/zh-hant/docs/advanced/wsgi.md +++ b/docs/zh-hant/docs/advanced/wsgi.md @@ -1,6 +1,6 @@ # 包含 WSGIFlask、Django 等 { #including-wsgi-flask-django-others } -䜠可以像圚 [子應甚皋匏 - 掛茉](sub-applications.md){.internal-link target=_blank}、[圚 Proxy 埌方](behind-a-proxy.md){.internal-link target=_blank} 䞭所芋那暣掛茉 WSGI 應甚。 +䜠可以像圚 [子應甚皋匏 - 掛茉](sub-applications.md)、[圚 Proxy 埌方](behind-a-proxy.md) 䞭所芋那暣掛茉 WSGI 應甚。 為歀䜠可以䜿甚 `WSGIMiddleware` 䟆包䜏䜠的 WSGI 應甚䟋劂 Flask、Django 等。 @@ -36,13 +36,13 @@ 其逘則由 **FastAPI** 處理。 -劂果䜠啟動它䞊前埀 http://localhost:8000/v1/䜠會看到䟆自 Flask 的回應 +劂果䜠啟動它䞊前埀 [http://localhost:8000/v1/](http://localhost:8000/v1/)䜠會看到䟆自 Flask 的回應 ```txt Hello, World from Flask! ``` -劂果䜠前埀 http://localhost:8000/v2䜠會看到䟆自 FastAPI 的回應 +劂果䜠前埀 [http://localhost:8000/v2](http://localhost:8000/v2)䜠會看到䟆自 FastAPI 的回應 ```JSON { diff --git a/docs/zh-hant/docs/alternatives.md b/docs/zh-hant/docs/alternatives.md index 340c47d8ba..ee99faf99f 100644 --- a/docs/zh-hant/docs/alternatives.md +++ b/docs/zh-hant/docs/alternatives.md @@ -14,7 +14,7 @@ ## 先前的工具 { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } 它是最受歡迎䞔廣受信任的 Python 框架。像 Instagram 等系統就是甚它打造的。 @@ -22,7 +22,7 @@ 它䞀開始是為圚埌端產生 HTML 而蚭蚈而非為了建立提䟛珟代前端劂 React、Vue.js、Angular或其他系統劂 IoT 裝眮䜿甚的 API。 -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST framework 的目暙是成為䞀套圚 Django 之䞊構建 Web API 的圈性工具組以匷化其 API 胜力。 @@ -30,7 +30,7 @@ Django REST framework 的目暙是成為䞀套圚 Django 之䞊構建 Web API 它是「自動 API 文件」的早期兞範之䞀而這正是啟癌我「尋扟」**FastAPI** 的第䞀個想法。 -/// note | 泚意 +/// note Django REST Framework 由 Tom Christie 創建。他同時也是 Starlette 與 Uvicorn 的䜜者而 **FastAPI** 就是建立圚它們之䞊。 @@ -42,7 +42,7 @@ Django REST Framework 由 Tom Christie 創建。他同時也是 Starlette 與 Uv /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask 是䞀個「埮框架」它䞍包含資料庫敎合也沒有像 Django 那暣內建蚱倚功胜。 @@ -64,7 +64,7 @@ Flask 是䞀個「埮框架」它䞍包含資料庫敎合也沒有像 Djan /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI** 其寊䞍是 **Requests** 的替代品。兩者的範疇截然䞍同。 @@ -106,7 +106,7 @@ def read_url(): /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } 我想埞 Django REST Framework 埗到的䞻芁功胜是自動 API 文件。 @@ -124,8 +124,8 @@ def read_url(): 䞊敎合基斌暙準的䜿甚者介面工具 -* Swagger UI -* ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) 遞擇這兩個是因為它們盞當受歡迎䞔穩定䜆皍加搜尋䜠會癌珟有敞十皮 OpenAPI 的替代䜿甚者介面郜胜與 **FastAPI** 䞀起䜿甚。 @@ -135,7 +135,7 @@ def read_url(): 有幟個 Flask 的 REST 框架䜆圚投入時間調查埌我癌珟蚱倚已停止維護或被棄眮䞔存圚䞀些關鍵問題䜿之䞍適甚。 -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } API 系統需芁的䞻芁功胜之䞀是資料「序列化」也就是把皋匏䞭的資料Python蜉成胜透過網路傳茞的圢匏。䟋劂將含有資料庫資料的物件蜉成 JSON 物件、把 `datetime` 物件蜉成字䞲等等。 @@ -153,7 +153,7 @@ API 需芁的及䞀個重芁功胜是資料驗證確保資料圚特定條件 /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } API 所需的及䞀項倧功胜是埞傳入請求䞭解析資料。 @@ -175,7 +175,7 @@ Webargs 由與 Marshmallow 盞同的開癌者創建。 /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } Marshmallow 與 Webargs 以倖掛提䟛驗證、解析與序列化。 @@ -205,7 +205,7 @@ APISpec 由與 Marshmallow 盞同的開癌者創建。 /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } 這是䞀個 Flask 倖掛把 Webargs、Marshmallow 與 APISpec 䞲圚䞀起。 @@ -219,11 +219,11 @@ APISpec 由與 Marshmallow 盞同的開癌者創建。 䜿甚它促成了敞個 Flask 党端full-stack產生噚。這些是我以及若干倖郚團隊至今䞻芁䜿甚的技術組合 -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [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-generation.md){.internal-link target=_blank} 的基瀎。 +而這些党端產生噚也成為了 [**FastAPI** 專案產生噚](project-generation.md) 的基瀎。 /// info @@ -237,7 +237,7 @@ Flask-apispec 由與 Marshmallow 盞同的開癌者創建。 /// -### NestJS與 Angular { #nestjs-and-angular } +### [NestJS](https://nestjs.com/)與 [Angular](https://angular.io/) { #nestjs-and-angular } 這甚至䞍是 Python。NestJS 是受 Angular 啟癌的 JavaScriptTypeScriptNodeJS 框架。 @@ -259,13 +259,13 @@ Flask-apispec 由與 Marshmallow 盞同的開癌者創建。 /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } 它是最早基斌 `asyncio` 的極高速 Python 框架之䞀䞊做埗埈像 Flask。 /// note | 技術现節 -它䜿甚 `uvloop` 取代預蚭的 Python `asyncio` 事件圈。這也是它劂歀之快的原因。 +它䜿甚 [`uvloop`](https://github.com/MagicStack/uvloop) 取代預蚭的 Python `asyncio` 事件圈。這也是它劂歀之快的原因。 它明顯啟癌了 Uvicorn 與 Starlette而圚公開的基準枬詊䞭它們目前比 Sanic 曎快。 @@ -279,7 +279,7 @@ Flask-apispec 由與 Marshmallow 盞同的開癌者創建。 /// -### Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falcon 是及䞀個高效胜 Python 框架蚭蚈䞊極簡䞊䜜為其他框架劂 Hug的基瀎。 @@ -297,7 +297,7 @@ Falcon 是及䞀個高效胜 Python 框架蚭蚈䞊極簡䞊䜜為其他 /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } 我圚 **FastAPI** 打造的早期癌珟了 Molten。它有䞀些盞當類䌌的想法 @@ -321,7 +321,7 @@ Falcon 是及䞀個高效胜 Python 框架蚭蚈䞊極簡䞊䜜為其他 /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hug 是最早䜿甚 Python 型別提瀺䟆宣告 API 參敞型別的框架之䞀。這是個埈棒的點子也啟癌了其他工具。 @@ -337,7 +337,7 @@ Hug 是最早䜿甚 Python 型別提瀺䟆宣告 API 參敞型別的框架之䞀 /// info -Hug 由 Timothy Crosley 創建他同時也是 `isort` 的䜜者䞀個自動排序 Python 匯入的奜工具。 +Hug 由 Timothy Crosley 創建他同時也是 [`isort`](https://github.com/timothycrosley/isort) 的䜜者䞀個自動排序 Python 匯入的奜工具。 /// @@ -351,7 +351,7 @@ Hug 啟癌 **FastAPI** 圚凜匏䞭宣告 `response` 參敞以蚭定暙頭與 Co /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } 圚決定打造 **FastAPI** 之前我扟到了 **APIStar** 䌺服噚。它幟乎具備我所尋扟的䞀切而䞔蚭蚈埈出色。 @@ -401,7 +401,7 @@ APIStar 由 Tom Christie 創建。他也創建了 ## **FastAPI** 所採甚的工具 { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydantic 是基斌 Python 型別提瀺定矩資料驗證、序列化與文件䜿甚 JSON Schema的凜匏庫。 @@ -417,7 +417,7 @@ Pydantic 是基斌 Python 型別提瀺定矩資料驗證、序列化與文件 /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starlette 是䞀個茕量的 ASGI 框架工具集非垞適合甚䟆建構高效胜的 asyncio 服務。 @@ -458,11 +458,11 @@ ASGI 是由 Django 栞心團隊成員正圚開癌的新「暙準」。它尚未 `FastAPI` 這個類別本身盎接繌承自 `Starlette` 類別。 -因歀凡是䜠胜甚 Starlette 做的事䜠幟乎郜胜盎接甚 **FastAPI** 完成因為它基本䞊就是加匷版的 Starlette。 +因歀凡是䜠胜甚 Starlette 做的事䜠郜胜盎接甚 **FastAPI** 完成因為它基本䞊就是加匷版的 Starlette。 /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicorn 是基斌 uvloop 與 httptools 的極速 ASGI 䌺服噚。 @@ -476,10 +476,10 @@ Uvicorn 是基斌 uvloop 與 httptools 的極速 ASGI 䌺服噚。 䜠也可以䜿甚 `--workers` 呜什列遞項取埗非同步的倚補皋䌺服噚。 -曎倚现節請芋[郚眲](deployment/index.md){.internal-link target=_blank}章節。 +曎倚现節請芋[郚眲](deployment/index.md)章節。 /// ## 效胜與速床 { #benchmarks-and-speed } -想了解、比范䞊看出 Uvicorn、Starlette 與 FastAPI 之間的差異請參考[效胜評枬](benchmarks.md){.internal-link target=_blank}。 +想了解、比范䞊看出 Uvicorn、Starlette 與 FastAPI 之間的差異請參考[效胜評枬](benchmarks.md)。 diff --git a/docs/zh-hant/docs/async.md b/docs/zh-hant/docs/async.md index a03d71815f..9a08938ca5 100644 --- a/docs/zh-hant/docs/async.md +++ b/docs/zh-hant/docs/async.md @@ -141,7 +141,7 @@ def results(): /// info -挂亮的插畫䟆自 Ketrina Thompson. 🎚 +挂亮的插畫䟆自 [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)。 🎚 /// @@ -207,7 +207,7 @@ def results(): /// info -挂亮的插畫䟆自 Ketrina Thompson. 🎚 +挂亮的插畫䟆自 [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)。 🎚 /// @@ -245,13 +245,13 @@ def results(): 這皮「等埅」 🕙 通垞以埮秒䟆衡量䜆环加起䟆最終還是花費了埈倚等埅時間。 -這就是為什麌對斌 Web API 䟆說䜿甚非同步皋匏碌 ⏞🔀⏯ 是非垞有意矩的。 +這就是為什麌對斌 Web API 䟆說䜿甚非同步皋匏碌 ⏞🔀⏯ 是非垞有意味的。 這皮類型的非同步性正是 NodeJS 成功的原因儘管 NodeJS 䞍是平行的這也是 Go 語蚀䜜為皋匏語蚀的䞀個匷倧優勢。 這與 **FastAPI** 所胜提䟛的性胜氎平盞同。 -䜠可以同時利甚䞊行性和平行性進䞀步提升效胜這比倧倚敞已枬詊的 NodeJS 框架郜曎快䞊䞔與 Go 語蚀盞當而 Go 是䞀皮曎接近 C 的線譯語蚀感謝 Starlette。 +䜠可以同時利甚䞊行性和平行性進䞀步提升效胜這比倧倚敞已枬詊的 NodeJS 框架郜曎快䞊䞔與 Go 語蚀盞當而 Go 是䞀皮曎接近 C 的線譯語蚀[感謝 Starlette](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)。 ### 䞊行比平行曎奜嗎 { #is-concurrency-better-than-parallelism } @@ -298,7 +298,7 @@ def results(): 這䞀點再加䞊 Python 是 **資料科孞**、機噚孞習尀其是深床孞習的䞻芁語蚀讓 **FastAPI** 成為資料科孞/機噚孞習 Web API 和應甚皋匏以及蚱倚其他應甚皋匏的絕䜳遞擇。 -想了解劂䜕圚生產環境䞭寊珟這皮平行性請參芋 [郚屬](deployment/index.md){.internal-link target=_blank}。 +想了解劂䜕圚生產環境䞭寊珟這皮平行性請參芋 [郚屬](deployment/index.md)。 ## `async` 和 `await` { #async-and-await } @@ -363,13 +363,13 @@ async def read_burgers(): ### 線寫自己的非同步皋匏碌 { #write-your-own-async-code } -Starlette和 **FastAPI**是基斌 AnyIO 寊䜜的這䜿埗它們與 Python 暙準凜匏庫 asyncio 和 Trio 盞容。 +Starlette和 **FastAPI**是基斌 [AnyIO](https://anyio.readthedocs.io/en/stable/) 寊䜜的這䜿埗它們與 Python 暙準凜匏庫 [asyncio](https://docs.python.org/3/library/asyncio-task.html) 和 [Trio](https://trio.readthedocs.io/en/stable/) 盞容。 -特別是䜠可以盎接䜿甚 AnyIO 䟆處理曎耇雜的䞊行䜿甚案䟋這些案䟋需芁䜠圚自己的皋匏碌䞭䜿甚曎高階的暡匏。 +特別是䜠可以盎接䜿甚 [AnyIO](https://anyio.readthedocs.io/en/stable/) 䟆處理曎耇雜的䞊行䜿甚案䟋這些案䟋需芁䜠圚自己的皋匏碌䞭䜿甚曎高階的暡匏。 -即䜿䜠䞍䜿甚 **FastAPI**䜠也可以䜿甚 AnyIO 䟆撰寫自己的非同步應甚皋匏䞊獲埗高盞容性及䞀些奜處䟋劂「結構化䞊行」。 +即䜿䜠䞍䜿甚 **FastAPI**䜠也可以䜿甚 [AnyIO](https://anyio.readthedocs.io/en/stable/) 䟆撰寫自己的非同步應甚皋匏䞊獲埗高盞容性及䞀些奜處䟋劂「結構化䞊行」。 -我及倖圚 AnyIO 之䞊做了䞀個薄封裝的凜匏庫皍埮改進型別蚻解以獲埗曎奜的**自動補党**、**即時錯誀**等。同時它也提䟛友善的介玹與教孞幫助䜠**理解**䞊撰寫**自己的非同步皋匏碌**Asyncer。當䜠需芁**將非同步皋匏碌與䞀般**阻塞/同步**皋匏碌敎合**時它特別寊甚。 +我及倖圚 AnyIO 之䞊做了䞀個薄封裝的凜匏庫皍埮改進型別蚻解以獲埗曎奜的**自動補党**、**即時錯誀**等。同時它也提䟛友善的介玹與教孞幫助䜠**理解**䞊撰寫**自己的非同步皋匏碌**[Asyncer](https://asyncer.tiangolo.com/)。當䜠需芁**將非同步皋匏碌與䞀般**阻塞/同步**皋匏碌敎合**時它特別寊甚。 ### 其他圢匏的非同步皋匏碌 { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Starlette和 **FastAPI**是基斌 Gevent。䜆這些皋匏碌芁曎難以理解、調詊和思考。 +圚范舊的 Python 版本䞭䜠可胜會䜿甚倚執行緒或 [Gevent](https://www.gevent.org/)。䜆這些皋匏碌芁曎難以理解、調詊和思考。 圚范舊的 NodeJS / 瀏芜噚 JavaScript 䞭䜠會䜿甚「回呌」這可胜會導臎“回呌地獄”。 @@ -419,15 +419,15 @@ Starlette和 **FastAPI**是基斌 I/O 的皋匏碌。 -䞍過圚這兩皮情況䞋**FastAPI** [仍然埈快](index.md#performance){.internal-link target=_blank}至少與䜠之前的框架盞當或者曎快。 +䞍過圚這兩皮情況䞋**FastAPI** [仍然埈快](index.md#performance)至少與䜠之前的框架盞當或者曎快。 ### 䟝賎項(Dependencies) { #dependencies } -同暣適甚斌[䟝賎項](tutorial/dependencies/index.md){.internal-link target=_blank}。劂果䟝賎項是䞀個暙準的 `def` 凜匏而䞍是 `async def`那麌它圚倖郚的執行緒池被運行。 +同暣適甚斌[䟝賎項](tutorial/dependencies/index.md)。劂果䟝賎項是䞀個暙準的 `def` 凜匏而䞍是 `async def`那麌它圚倖郚的執行緒池被運行。 ### 子䟝賎項 { #sub-dependencies } -䜠可以擁有倚個盞互䟝賎的䟝賎項和[子䟝賎項](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank}䜜為凜匏定矩的參敞其䞭䞀些可胜是甚 `async def` 宣告也可胜是甚 `def` 宣告。它們仍然可以正垞運䜜甚 `def` 定矩的那些將會圚倖郚的執行緒䞭呌叫䟆自執行緒池而䞍是被「等埅」。 +䜠可以擁有倚個盞互䟝賎的䟝賎項和[子䟝賎項](tutorial/dependencies/sub-dependencies.md)䜜為凜匏定矩的參敞其䞭䞀些可胜是甚 `async def` 宣告也可胜是甚 `def` 宣告。它們仍然可以正垞運䜜甚 `def` 定矩的那些將會圚倖郚的執行緒䞭呌叫䟆自執行緒池而䞍是被「等埅」。 ### 其他茔助凜匏 { #other-utility-functions } diff --git a/docs/zh-hant/docs/benchmarks.md b/docs/zh-hant/docs/benchmarks.md index c5b76700b3..2b5b3f7ee1 100644 --- a/docs/zh-hant/docs/benchmarks.md +++ b/docs/zh-hant/docs/benchmarks.md @@ -1,6 +1,6 @@ # 基準枬詊 { #benchmarks } -由第䞉方機構 TechEmpower 的基準枬詊衚明圚 Uvicorn 䞋運行的 **FastAPI** 應甚皋匏是 最快的 Python 可甚框架之䞀僅次斌 Starlette 和 Uvicorn 本身斌 FastAPI 內郚䜿甚。 +由第䞉方機構 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 內郚䜿甚。 䜆是圚查看基準埗分和對比時請泚意以䞋幟點。 diff --git a/docs/zh-hant/docs/deployment/cloud.md b/docs/zh-hant/docs/deployment/cloud.md index fffb2fcfeb..86d216ca6f 100644 --- a/docs/zh-hant/docs/deployment/cloud.md +++ b/docs/zh-hant/docs/deployment/cloud.md @@ -6,7 +6,7 @@ ## FastAPI Cloud { #fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的同䞀䜍䜜者與團隊打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的同䞀䜍䜜者與團隊打造。 它讓䜠以最少的投入簡化 **建眮**、**郚眲** 與 **存取** API 的流皋。 @@ -16,9 +16,9 @@ FastAPI Cloud 是 *FastAPI and friends* 開源專案的䞻芁莊助與資金提 ## 雲端䟛應商 - 莊助商 { #cloud-providers-sponsors } -其他䞀些雲端䟛應商也會 ✹ [**莊助 FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚。🙇 +其他䞀些雲端䟛應商也會 ✹ [**莊助 FastAPI**](../help-fastapi.md#sponsor-the-author) ✚。🙇 䜠也可以參考他們的指南䞊詊甚其服務 -* Render -* Railway +* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi) +* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi) diff --git a/docs/zh-hant/docs/deployment/concepts.md b/docs/zh-hant/docs/deployment/concepts.md index 0cca31d260..0b8677bfd3 100644 --- a/docs/zh-hant/docs/deployment/concepts.md +++ b/docs/zh-hant/docs/deployment/concepts.md @@ -25,7 +25,7 @@ ## 安党性 - HTTPS { #security-https } -圚[前䞀章關斌 HTTPS](https.md){.internal-link target=_blank} 䞭我們孞到 HTTPS 劂䜕為䜠的 API 提䟛加密。 +圚[前䞀章關斌 HTTPS](https.md) 䞭我們孞到 HTTPS 劂䜕為䜠的 API 提䟛加密。 我們也看到HTTPS 通垞由應甚䌺服噚倖郚的元件提䟛即 TLS Termination Proxy。 @@ -190,7 +190,7 @@ ### 工䜜行皋與連接埠 { #worker-processes-and-ports } -還蚘埗文件䞭[關斌 HTTPS](https.md){.internal-link target=_blank} 的說明嗎圚䞀台䌺服噚䞊䞀組 IP 與連接埠的組合只胜由「䞀個行皋」監聜 +還蚘埗文件䞭[關斌 HTTPS](https.md) 的說明嗎圚䞀台䌺服噚䞊䞀組 IP 與連接埠的組合只胜由「䞀個行皋」監聜 這裡同暣適甚。 @@ -243,7 +243,7 @@ 先別擔心這裡提到的「容噚」、Docker 或 Kubernetes 劂果珟圚還䞍倪懂。 -我會圚未䟆的章節進䞀步說明容噚映像、Docker、Kubernetes 等等[容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 +我會圚未䟆的章節進䞀步說明容噚映像、Docker、Kubernetes 等等[容噚䞭的 FastAPI - Docker](docker.md)。 /// @@ -281,7 +281,7 @@ /// tip -我會圚未䟆關斌容噚的章節提䟛曎具體的範䟋[容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 +我會圚未䟆關斌容噚的章節提䟛曎具體的範䟋[容噚䞭的 FastAPI - Docker](docker.md)。 /// diff --git a/docs/zh-hant/docs/deployment/docker.md b/docs/zh-hant/docs/deployment/docker.md index 87f4e6f9f0..03b9f2f76e 100644 --- a/docs/zh-hant/docs/deployment/docker.md +++ b/docs/zh-hant/docs/deployment/docker.md @@ -1,6 +1,6 @@ # 圚容噚䞭䜿甚 FastAPI - Docker { #fastapi-in-containers-docker } -郚眲 FastAPI 應甚時䞀個垞芋做法是建眮䞀個「Linux 容噚映像container image」。通垞䜿甚 Docker 䟆完成。之埌䜠可以甚倚皮方匏郚眲該容噚映像。 +郚眲 FastAPI 應甚時䞀個垞芋做法是建眮䞀個「Linux 容噚映像container image」。通垞䜿甚 [Docker](https://www.docker.com/) 䟆完成。之埌䜠可以甚倚皮方匏郚眲該容噚映像。 䜿甚 Linux 容噚有倚皮優點包括安党性、可重珟性、簡單性等。 @@ -60,16 +60,16 @@ Linux 容噚䜿甚與䞻機機噚、虛擬機、雲端䌺服噚等盞同 Docker 是甚䟆建立與管理容噚映像與容噚的䞻芁工具之䞀。 -也有䞀個公開的 Docker Hub內含蚱倚工具、環境、資料庫與應甚的預先補䜜「官方映像」。 +也有䞀個公開的 [Docker Hub](https://hub.docker.com/)內含蚱倚工具、環境、資料庫與應甚的預先補䜜「官方映像」。 -䟋劂有官方的 Python 映像。 +䟋劂有官方的 [Python 映像](https://hub.docker.com/_/python)。 也有蚱倚其他針對䞍同甚途的映像䟋劂資料庫 -* PostgreSQL -* MySQL -* MongoDB -* Redis 等。 +* [PostgreSQL](https://hub.docker.com/_/postgres) +* [MySQL](https://hub.docker.com/_/mysql) +* [MongoDB](https://hub.docker.com/_/mongo) +* [Redis](https://hub.docker.com/_/redis) 等。 䜿甚預補的容噚映像埈容易「組合」䞊䜿甚䞍同工具。䟋劂嘗詊䞀個新資料庫。倚敞情況䞋䜠可以䜿甚官方映像䞊僅甚環境變敞加以蚭定。 @@ -111,7 +111,7 @@ Docker 是甚䟆建立與管理容噚映像與容噚的䞻芁工具之䞀。 最垞芋的方匏是準備䞀個 `requirements.txt` 檔案逐行列出套件名皱與版本。 -當然䜠會甚與圚 [關斌 FastAPI 版本](versions.md){.internal-link target=_blank} 䞭讀到的盞同抂念䟆蚭定版本範圍。 +當然䜠會甚與圚 [關斌 FastAPI 版本](versions.md) 䞭讀到的盞同抂念䟆蚭定版本範圍。 䟋劂䜠的 `requirements.txt` 可胜像這暣 @@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] #### 䜿甚 `CMD` 的 Exec 圢匏 { #use-cmd-exec-form } -Docker 的 `CMD` 指什可以有兩皮寫法 +Docker 的 [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) 指什可以有兩皮寫法 ✅ Exec 圢匏 @@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] CMD fastapi run app/main.py --port 80 ``` -務必瞜是䜿甚 exec 圢匏以確保 FastAPI 胜倠優雅地關閉䞊觞癌 [lifespan events](../advanced/events.md){.internal-link target=_blank}。 +務必瞜是䜿甚 exec 圢匏以確保 FastAPI 胜倠優雅地關閉䞊觞癌 [lifespan events](../advanced/events.md)。 -䜠可以圚 Docker 關斌 shell 與 exec 圢匏的文件閱讀曎倚。 +䜠可以圚 [Docker 關斌 shell 與 exec 圢匏的文件](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form) 閱讀曎倚。 -䜿甚 `docker compose` 時這會特別明顯。技術现節請芋這段 Docker Compose 垞芋問題為什麌我的服務芁花 10 秒才重新建立或停止 +䜿甚 `docker compose` 時這會特別明顯。技術现節請芋這段 Docker Compose 垞芋問題[為什麌我的服務芁花 10 秒才重新建立或停止](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop) #### 目錄結構 { #directory-structure } @@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 檢查 { #check-it } -䜠應該可以透過 Docker 容噚的網址檢查䟋劂http://192.168.99.100/items/5?q=somequery 或 http://127.0.0.1/items/5?q=somequery或等效的、䜿甚䜠的 Docker 䞻機。 +䜠應該可以透過 Docker 容噚的網址檢查䟋劂[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) 或 [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)或等效的、䜿甚䜠的 Docker 䞻機。 䜠會看到類䌌這暣 @@ -362,17 +362,17 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 互動匏 API 文件 { #interactive-api-docs } -珟圚䜠可以前埀 http://192.168.99.100/docs 或 http://127.0.0.1/docs或等效的、䜿甚䜠的 Docker 䞻機。 +珟圚䜠可以前埀 [http://192.168.99.100/docs](http://192.168.99.100/docs) 或 [http://127.0.0.1/docs](http://127.0.0.1/docs)或等效的、䜿甚䜠的 Docker 䞻機。 -䜠會看到自動產生的互動匏 API 文件由 Swagger UI 提䟛 +䜠會看到自動產生的互動匏 API 文件由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ## 替代的 API 文件 { #alternative-api-docs } -䜠也可以前埀 http://192.168.99.100/redoc 或 http://127.0.0.1/redoc或等效的、䜿甚䜠的 Docker 䞻機。 +䜠也可以前埀 [http://192.168.99.100/redoc](http://192.168.99.100/redoc) 或 [http://127.0.0.1/redoc](http://127.0.0.1/redoc)或等效的、䜿甚䜠的 Docker 䞻機。 -䜠會看到及䞀皮自動產生的文件由 ReDoc 提䟛 +䜠會看到及䞀皮自動產生的文件由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ## 郚眲抂念 { #deployment-concepts } -我們甚容噚的角床再談䞀次郚分盞同的[郚眲抂念](concepts.md){.internal-link target=_blank}。 +我們甚容噚的角床再談䞀次郚分盞同的[郚眲抂念](concepts.md)。 容噚䞻芁是簡化應甚「建眮與郚眲」流皋的工具䜆它們䞍匷制特定的方匏䟆處理這些「郚眲抂念」而是有倚皮策略可遞。 @@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] 若僅聚焊斌 FastAPI 應甚的「容噚映像」以及皍埌的執行䞭「容噚」HTTPS 通垞會由及䞀個工具圚「倖郚」處理。 -它可以是及䞀個容噚䟋劂䜿甚 Traefik䟆處理「HTTPS」以及「自動」取埗「憑證」。 +它可以是及䞀個容噚䟋劂䜿甚 [Traefik](https://traefik.io/)䟆處理「HTTPS」以及「自動」取埗「憑證」。 /// tip | 提瀺 @@ -454,7 +454,7 @@ Traefik 與 Docker、Kubernetes 等敎合良奜因歀為䜠的容噚蚭定與 ## 耇本 - 行皋敞量 { #replication-number-of-processes } -劂果䜠圚有 Kubernetes、Docker Swarm Mode、Nomad或其他類䌌的分散匏容噚管理系統的「叢集」䞊運䜜那䜠倧抂會垌望圚「叢集局玚」處理「耇本」而䞍是圚每個容噚內䜿甚「行皋管理噚」䟋劂垶有 workers 的 Uvicorn。 +劂果䜠圚有 Kubernetes、Docker Swarm Mode、Nomad或其他類䌌的分散匏容噚管理系統的「叢集」䞊運䜜那䜠倧抂會垌望圚「叢集局玚」處理「耇本」而䞍是圚每個容噚內䜿甚「行皋管理噚」䟋劂垶有 workers 的 Uvicorn。 像 Kubernetes 這類的分散匏容噚管理系統通垞內建處理「容噚耇本」以及支揎進入請求的「負茉平衡」的胜力——党郚郜圚「叢集局玚」。 @@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] /// info | 資蚊 -劂果䜠䜿甚 Kubernetes這倧抂會是䞀個 Init Container。 +劂果䜠䜿甚 Kubernetes這倧抂會是䞀個 [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)。 /// @@ -570,7 +570,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] ### 基底 Docker 映像 { #base-docker-image } -曟經有䞀個官方的 FastAPI Docker 映像tiangolo/uvicorn-gunicorn-fastapi。䜆珟圚已被棄甚。⛔ +曟經有䞀個官方的 FastAPI Docker 映像[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)。䜆珟圚已被棄甚。⛔ 䜠倧抂「䞍應該」䜿甚這個基底 Docker 映像或其他類䌌的。 @@ -600,7 +600,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] ## 䜿甚 `uv` 的 Docker 映像 { #docker-image-with-uv } -劂果䜠䜿甚 uv 䟆安裝與管理專案䜠可以參考他們的 uv Docker 指南。 +劂果䜠䜿甚 [uv](https://github.com/astral-sh/uv) 䟆安裝與管理專案䜠可以參考他們的 [uv Docker 指南](https://docs.astral.sh/uv/guides/integration/docker/)。 ## 瞜結 { #recap } diff --git a/docs/zh-hant/docs/deployment/fastapicloud.md b/docs/zh-hant/docs/deployment/fastapicloud.md index 5663590d14..4b6fb86b47 100644 --- a/docs/zh-hant/docs/deployment/fastapicloud.md +++ b/docs/zh-hant/docs/deployment/fastapicloud.md @@ -1,6 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -䜠可以甚「䞀行指什」把䜠的 FastAPI 應甚皋匏郚眲到 FastAPI Cloud。劂果䜠還沒加入快去登蚘等候名單吧🚀 +䜠可以甚「䞀行指什」把䜠的 FastAPI 應甚皋匏郚眲到 [FastAPI Cloud](https://fastapicloud.com)。劂果䜠還沒加入快去登蚘等候名單吧🚀 ## 登入 { #login } @@ -40,7 +40,7 @@ Deploying to FastAPI Cloud... ## 關斌 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的䜜者與團隊打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的䜜者與團隊打造。 它以最少的心力粟簡化建立、郚眲與存取 API 的流皋。 diff --git a/docs/zh-hant/docs/deployment/https.md b/docs/zh-hant/docs/deployment/https.md index 0934b02831..ddafcb34b1 100644 --- a/docs/zh-hant/docs/deployment/https.md +++ b/docs/zh-hant/docs/deployment/https.md @@ -10,7 +10,7 @@ /// -想埞䜿甚者角床孞習 HTTPS 基瀎請參考 https://howhttps.works/。 +想埞䜿甚者角床孞習 HTTPS 基瀎請參考 [https://howhttps.works/](https://howhttps.works/)。 接著以開癌者角床談幟個關斌 HTTPS 需芁泚意的重點 @@ -28,13 +28,13 @@ * **預蚭**情況䞋這衚瀺䜠每個 IP 䜍址**只胜**䜿甚**䞀匵 HTTPS 憑證**。 * 䞍論䜠的䌺服噚倚匷或䜠圚䞊面跑的應甚倚小。 * 䞍過這是有**解法**的。 -* 圚 **TLS** 協定圚 HTTP 之前斌 TCP 局處理加密的協定䞊有個**擎充**皱為 **SNI**。 +* 圚 **TLS** 協定圚 HTTP 之前斌 TCP 局處理加密的協定䞊有個**擎充**皱為 **[SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**。 * 這個 SNI 擎充讓單䞀䌺服噚單䞀 IP 䜍址可以擁有**倚匵 HTTPS 憑證**䞊服務**倚個 HTTPS 網域應甚**。 * 芁讓它運䜜䌺服噚䞊必須有䞀個**單䞀**的元件皋匏圚**公甚 IP**䞊監聜䞔持有䌺服噚䞊的**所有 HTTPS 憑證**。 * 圚取埗安党連線**之埌**通蚊協定**仍然是 HTTP**。 * 雖然透過 **HTTP 協定**傳送䜆內容是**加密**的。 -垞芋做法是讓䌺服噚機噚、䞻機等䞊跑**䞀個皋匏HTTP 䌺服噚**䟆**管理所有 HTTPS 盞關工䜜**接收**加密的 HTTPS 請求**、將其**解密**成**箔 HTTP 請求**蜉亀絊同台䌺服噚䞊寊際運行的 HTTP 應甚本䟋為 **FastAPI** 應甚、埞應甚取埗 **HTTP 回應**、再甚合適的 **HTTPS 憑證**將其**加密**䞊以 **HTTPS** 傳回絊甚戶端。這類䌺服噚垞被皱為 **TLS 終止代理 (TLS Termination Proxy)**。 +垞芋做法是讓䌺服噚機噚、䞻機等䞊跑**䞀個皋匏HTTP 䌺服噚**䟆**管理所有 HTTPS 盞關工䜜**接收**加密的 HTTPS 請求**、將其**解密**成**箔 HTTP 請求**蜉亀絊同台䌺服噚䞊寊際運行的 HTTP 應甚本䟋為 **FastAPI** 應甚、埞應甚取埗 **HTTP 回應**、再甚合適的 **HTTPS 憑證**將其**加密**䞊以 **HTTPS** 傳回絊甚戶端。這類䌺服噚垞被皱為 **[TLS 終止代理](https://en.wikipedia.org/wiki/TLS_termination_proxy)**。 可䜜為 TLS 終止代理的遞項包括 @@ -49,7 +49,7 @@ 取埗這些憑證的流皋過去盞當繁瑣需芁蚱倚手續䞔憑證盞當昂貎。 -之埌出珟了 **Let's Encrypt**。 +之埌出珟了 **[Let's Encrypt](https://letsencrypt.org/)**。 它是 Linux Foundation 的專案胜**免費**䞔自動化地提䟛 **HTTPS 憑證**。這些憑證採甚暙準的密碌孞安党機制䞔有效期范短玄 3 個月因歀因為壜呜短**安党性其寊曎奜**。 @@ -200,9 +200,9 @@ TLS 終止代理接著會䟝照先前協商起點是 `someapp.example.com` 這些代理暙頭包括 -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -218,7 +218,7 @@ TLS 終止代理接著會䟝照先前協商起點是 `someapp.example.com` /// tip -䜠可以圚文件 [圚代理埌方 - 啟甚代理蜉癌暙頭](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} 䞭了解曎倚。 +䜠可以圚文件 [圚代理埌方 - 啟甚代理蜉癌暙頭](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) 䞭了解曎倚。 /// diff --git a/docs/zh-hant/docs/deployment/index.md b/docs/zh-hant/docs/deployment/index.md index ddf533efc9..c9d474cacb 100644 --- a/docs/zh-hant/docs/deployment/index.md +++ b/docs/zh-hant/docs/deployment/index.md @@ -16,7 +16,7 @@ 䜠可以䜿甚䞀些工具自行**郚眲䌺服噚**䜠也可以䜿甚胜為䜠完成郚分工䜜的**雲端服務**或其他可胜的遞項。 -䟋劂我們FastAPI 的團隊打造了 **FastAPI Cloud**讓將 FastAPI 應甚皋匏郚眲到雲端變埗盡可胜流暢䞊保持與䜿甚 FastAPI 開癌時盞同的開癌者體驗。 +䟋劂我們FastAPI 的團隊打造了 [**FastAPI Cloud**](https://fastapicloud.com)讓 FastAPI 應甚皋匏郚眲到雲端變埗盡可胜流暢䞊保持與䜿甚 FastAPI 開癌時盞同的開癌者體驗。 我將向䜠展瀺圚郚眲 **FastAPI** 應甚皋匏時䜠可胜應該蚘䜏的䞀些䞻芁抂念儘管其䞭倧郚分適甚斌任䜕其他類型的 Web 應甚皋匏。 diff --git a/docs/zh-hant/docs/deployment/manually.md b/docs/zh-hant/docs/deployment/manually.md index bf9f6a93f4..71e9e27c87 100644 --- a/docs/zh-hant/docs/deployment/manually.md +++ b/docs/zh-hant/docs/deployment/manually.md @@ -52,11 +52,11 @@ FastAPI 採甚建立 Python 網頁框架與䌺服噚的暙準 Uvicorn高效胜 ASGI 䌺服噚。 -* Hypercorn支揎 HTTP/2 與 Trio 等功胜的 ASGI 䌺服噚。 -* Daphne為 Django Channels 打造的 ASGI 䌺服噚。 -* Granian針對 Python 應甚的 Rust HTTP 䌺服噚。 -* NGINX UnitNGINX Unit 是茕量䞔倚功胜的網頁應甚執行環境。 +* [Uvicorn](https://www.uvicorn.dev/)高效胜 ASGI 䌺服噚。 +* [Hypercorn](https://hypercorn.readthedocs.io/)支揎 HTTP/2 與 Trio 等功胜的 ASGI 䌺服噚。 +* [Daphne](https://github.com/django/daphne)為 Django Channels 打造的 ASGI 䌺服噚。 +* [Granian](https://github.com/emmett-framework/granian)針對 Python 應甚的 Rust HTTP 䌺服噚。 +* [NGINX Unit](https://unit.nginx.org/howto/fastapi/)NGINX Unit 是茕量䞔倚功胜的網頁應甚執行環境。 ## 䌺服噚機噚與䌺服噚皋匏 { #server-machine-and-server-program } @@ -74,7 +74,7 @@ FastAPI 採甚建立 Python 網頁框架與䌺服噚的暙準 語意化版本Semantic Versioning 的慣䟋。 +這就是為什麌目前版本仍為 `0.x.x`這衚瀺每個版本郜可胜包含砎壞性變曎。這遵埪 [語意化版本Semantic Versioning](https://semver.org/) 的慣䟋。 䜠珟圚就可以甚 **FastAPI** 建眮生產環境的應甚而䞔䜠可胜已經這麌做䞀段時間了只芁確保䜠䜿甚的版本胜與其逘皋匏碌正確盞容。 @@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0 ## 可甚版本 { #available-versions } -䜠可以圚 [癌行說明](../release-notes.md){.internal-link target=_blank} 查看可甚版本䟋劂甚䟆確認目前最新版本。 +䜠可以圚 [癌行說明](../release-notes.md) 查看可甚版本䟋劂甚䟆確認目前最新版本。 ## 關斌版本 { #about-versions } @@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0 䜠應該為䜠的應甚撰寫枬詊。 -圚 **FastAPI** 䞭這埈容易感謝 Starlette請參考文件[枬詊](../tutorial/testing.md){.internal-link target=_blank} +圚 **FastAPI** 䞭這埈容易感謝 Starlette請參考文件[枬詊](../tutorial/testing.md) 有了枬詊之埌䜠就可以將 **FastAPI** 升玚到范新的版本䞊透過執行枬詊䟆確保所有皋匏碌郜胜正確運䜜。 diff --git a/docs/zh-hant/docs/editor-support.md b/docs/zh-hant/docs/editor-support.md new file mode 100644 index 0000000000..ff4d8f43db --- /dev/null +++ b/docs/zh-hant/docs/editor-support.md @@ -0,0 +1,23 @@ +# 線茯噚支揎 { #editor-support } + +官方的 [FastAPI 擎充套件](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) 透過支揎路埑操䜜path operation探玢、導芜以及 FastAPI Cloud 郚眲與即時日誌䞲流匷化䜠的 FastAPI 開癌流皋。 + +想了解曎倚關斌歀擎充套件的现節請參考其 [GitHub 儲存庫](https://github.com/fastapi/fastapi-vscode) 侭的 README。 + +## 安裝與蚭定 { #setup-and-installation } + +**FastAPI 擎充套件** 同時提䟛絊 [VS Code](https://code.visualstudio.com/) 與 [Cursor](https://www.cursor.com/)。䜠可以圚各線茯噚的擎充套件面板䞭盎接安裝搜尋「FastAPI」䞊遞擇由 **FastAPI Labs** 癌䜈的擎充套件。歀擎充套件同暣可圚瀏芜噚版線茯噚劂 [vscode.dev](https://vscode.dev) 與 [github.dev](https://github.dev)䞭䜿甚。 + +### 應甚皋匏探玢 { #application-discovery } + +預蚭情況䞋擎充套件會自動圚䜠的工䜜區䞭掃描會寊䟋化 `FastAPI()` 的檔案以癌珟 FastAPI 應甚皋匏。若自動偵枬無法因應䜠的專案結構䜠可以圚 `pyproject.toml` 的 `[tool.fastapi]` 䞭或圚 VS Code 蚭定的 `fastapi.entryPoint` 䞭䜿甚暡組暙蚘法䟋劂 `myapp.main:app`指定入口點。 + +## 功胜 { #features } + +- **Path Operation Explorer** - 顯瀺應甚皋匏䞭所有 *路埑操䜜* 的偎邊欄暹狀檢芖。點擊即可跳至任䞀路由或 router 定矩。 +- **Route Search** - 䜿甚 Ctrl + Shift + EmacOSCmd + Shift + E䟝路埑、方法或名皱進行搜尋。 +- **CodeLens Navigation** - 圚枬詊甚 client 呌叫䟋劂 `client.get('/items')`䞊方提䟛可點連結䞀鍵跳至對應的路埑操䜜讓䜠圚枬詊與寊䜜間快速切換。 +- **Deploy to FastAPI Cloud** - 䞀鍵將䜠的應甚皋匏郚眲到 [FastAPI Cloud](https://fastapicloud.com/)。 +- **Stream Application Logs** - 埞郚眲斌 FastAPI Cloud 的應甚皋匏即時䞲流日誌䞊支揎局玚篩遞與文字搜尋。 + +若䜠想熟悉歀擎充套件的功胜可開啟呜什面板Ctrl + Shift + PmacOSCmd + Shift + P遞擇 "Welcome: Open walkthrough..."然埌挑遞 "Get started with FastAPI" walkthrough。 diff --git a/docs/zh-hant/docs/environment-variables.md b/docs/zh-hant/docs/environment-variables.md index 5b684b9e6a..09264b7e26 100644 --- a/docs/zh-hant/docs/environment-variables.md +++ b/docs/zh-hant/docs/environment-variables.md @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip -第二個參敞是 `os.getenv()` 的預蚭回傳倌。 +第二個參敞是 [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) 的預蚭回傳倌。 劂果沒有提䟛預蚭倌為 `None`這裡我們提䟛 `"World"` 䜜為預蚭倌。 @@ -153,7 +153,7 @@ Hello World from Python /// tip -䜠可以圚 The Twelve-Factor App: 配眮䞭了解曎倚資蚊。 +䜠可以圚 [The Twelve-Factor App: 配眮](https://12factor.net/config) 䞭了解曎倚資蚊。 /// @@ -163,7 +163,7 @@ Hello World from Python 這意味著埞環境變敞䞭讀取的**任䜕倌**圚 Python 䞭郜將是䞀個 `str`任䜕型別蜉換或驗證郜必須圚皋匏碌䞭完成。 -䜠將圚[進階䜿甚者指南 - 蚭定和環境變敞](./advanced/settings.md){.internal-link target=_blank}䞭了解曎倚關斌䜿甚環境變敞處理**應甚皋匏蚭定**的資蚊。 +䜠將圚[進階䜿甚者指南 - 蚭定和環境變敞](./advanced/settings.md)䞭了解曎倚關斌䜿甚環境變敞處理**應甚皋匏蚭定**的資蚊。 ## `PATH` 環境變敞 { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -ç•¶å­žç¿’[虛擬環境](virtual-environments.md){.internal-link target=_blank}時這些資蚊將會埈有甚。 +ç•¶å­žç¿’[虛擬環境](virtual-environments.md)時這些資蚊將會埈有甚。 ## 結論 { #conclusion } 透過這個教孞䜠應該對**環境變敞**是什麌以及劂䜕圚 Python 䞭䜿甚它們有了基本的了解。 -䜠也可以圚 環境變敞的維基癟科條目 䞭閱讀曎倚。 +䜠也可以圚 [環境變敞的維基癟科條目](https://en.wikipedia.org/wiki/Environment_variable) 䞭閱讀曎倚。 圚蚱倚情況䞋環境變敞的甚途和適甚性可胜䞍會立刻顯珟。䜆是圚開癌過皋䞭它們會圚蚱倚䞍同的堎景䞭出珟因歀瞭解它們是非垞必芁的。 diff --git a/docs/zh-hant/docs/fastapi-cli.md b/docs/zh-hant/docs/fastapi-cli.md index 57b5ec98f2..554ef4f2df 100644 --- a/docs/zh-hant/docs/fastapi-cli.md +++ b/docs/zh-hant/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI** 是䞀個呜什列皋匏胜甚䟆運行䜠的 FastAPI 應甚皋匏、管理䜠的 FastAPI 專案等。 +**FastAPI CLI** 是䞀個呜什列皋匏䜠可以甚它䟆啟動䜠的 FastAPI 應甚皋匏、管理䜠的 FastAPI 專案等等。 -當䜠安裝 FastAPI䟋劂䜿甚 `pip install "fastapi[standard]"`它會包含䞀個叫做 `fastapi-cli` 的套件這個套件提䟛了 `fastapi` 呜什。 +當䜠安裝 FastAPI䟋劂䜿甚 `pip install "fastapi[standard]"`時會附垶䞀個可以圚終端機執行的呜什列皋匏。 -芁運行䜠的 FastAPI 應甚皋匏䟆進行開癌䜠可以䜿甚 `fastapi dev` 呜什 +芁圚開癌時運行䜠的 FastAPI 應甚皋匏䜠可以䜿甚 `fastapi dev` 指什
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -46,13 +46,66 @@ $ fastapi dev Uvicorn這是䞀個高效胜、適合生產環境的 ASGI 䌺服噚。 😎 +歀倖其他工具可胜扟䞍到它䟋劂 [VS Code 擎充套件](editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀建議圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 ## `fastapi dev` { #fastapi-dev } @@ -70,6 +123,6 @@ FastAPI CLI 接收䜠的 Python 皋匏路埑䟋劂 `main.py`䞊自動 /// tip -䜠可以圚[郚眲文件](deployment/index.md){.internal-link target=_blank}䞭了解曎倚盞關資蚊。 +䜠可以圚[郚眲文件](deployment/index.md)䞭了解曎倚盞關資蚊。 /// diff --git a/docs/zh-hant/docs/features.md b/docs/zh-hant/docs/features.md index 77c0203073..63194e2556 100644 --- a/docs/zh-hant/docs/features.md +++ b/docs/zh-hant/docs/features.md @@ -6,8 +6,8 @@ ### 建立圚開攟暙準的基瀎䞊 { #based-on-open-standards } -* 䜿甚 OpenAPI 䟆建立 API包含 路埑、操䜜、參敞、請求內文、安党性等宣告。 -* 䜿甚 JSON Schema因為 OpenAPI 本身就是基斌 JSON Schema自動生成資料暡型文件。 +* 䜿甚 [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) 䟆建立 API包含 路埑、操䜜、參敞、請求內文、安党性等宣告。 +* 䜿甚 [**JSON Schema**](https://json-schema.org/)因為 OpenAPI 本身就是基斌 JSON Schema自動生成資料暡型文件。 * 經過瞝密的研究埌圍繞這些暙準進行蚭蚈而䞍是事埌圚已有系統䞊附加的䞀局功胜。 * 這也讓我們圚倚皮語蚀䞭可以䜿甚自動**甚戶端皋匏碌生成**。 @@ -15,11 +15,11 @@ FastAPI 胜生成互動匏 API 文件和探玢性的 Web 䜿甚者介面。由斌該框架基斌 OpenAPI因歀有倚皮遞擇預蚭提䟛了兩皮。 -* Swagger UI 提䟛互動匏探玢讓䜠可以盎接埞瀏芜噚呌叫䞊枬詊䜠的 API 。 +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui) 提䟛互動匏探玢讓䜠可以盎接埞瀏芜噚呌叫䞊枬詊䜠的 API 。 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* 䜿甚 ReDoc 的替代 API 文件。 +* 䜿甚 [**ReDoc**](https://github.com/Rebilly/ReDoc) 的替代 API 文件。 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) @@ -27,7 +27,7 @@ FastAPI 胜生成互動匏 API 文件和探玢性的 Web 䜿甚者介面。由 這䞀切郜基斌暙準的 **Python 型別**宣告感謝 Pydantic。無需孞習新的語法只需䜿甚暙準的珟代 Python。 -劂果䜠需芁 2 分鐘䟆孞習劂䜕䜿甚 Python 型別即䜿䜠䞍䜿甚 FastAPI可以看看這個簡短的教孞[Python 型別](python-types.md){.internal-link target=_blank}。 +劂果䜠需芁 2 分鐘䟆孞習劂䜕䜿甚 Python 型別即䜿䜠䞍䜿甚 FastAPI可以看看這個簡短的教孞[Python 型別](python-types.md)。 劂果䜠寫垶有 Python 型別的皋匏碌 @@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data) 敎個框架的蚭蚈是為了讓䜿甚變埗簡單䞔盎觀圚開始開癌之前所有決策郜圚倚個線茯噚䞊進行了枬詊以確保提䟛最䜳的開癌體驗。 -圚最近的 Python 開癌者調查䞭我們胜看到 被䜿甚最倚的功胜是 autocompletion。 +圚最近的 Python 開癌者調查䞭我們胜看到[被䜿甚最倚的功胜是 autocompletion](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)。 敎個 **FastAPI** 框架就是基斌這䞀點任䜕地方郜可以進行自動補霊。 @@ -83,11 +83,11 @@ my_second_user: User = User(**second_user_data) 圚這裡䜠的線茯噚可胜會這暣幫助䜠 -* 圚 Visual Studio Code äž­: +* 圚 [Visual Studio Code](https://code.visualstudio.com/) äž­: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -* 圚 PyCharm äž­: +* 圚 [PyCharm](https://www.jetbrains.com/pycharm/) äž­: ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) @@ -124,13 +124,13 @@ FastAPI 已經敎合了安党性和身仜驗證的功胜䜆䞍會匷制與特 OpenAPI 䞭定矩的安党暡匏包括 * HTTP 基本認證。 -* **OAuth2**也䜿甚 **JWT tokens**。圚 [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank} 查看教孞。 +* **OAuth2**也䜿甚 **JWT tokens**。圚 [OAuth2 with JWT](tutorial/security/oauth2-jwt.md) 查看教孞。 * API 密鑰圚 * 暙頭Header * 查詢參敞 * Cookies等等。 -加䞊来自 Starlette包括 **session cookie**的所有安党特性。 +加䞊䟆自 Starlette包括 **session cookie**的所有安党特性。 所有的這些郜是可重耇䜿甚的工具和套件可以茕鬆與䜠的系統、資料儲存Data Stores、關聯匏資料庫RDBMS以及非關聯匏資料庫NoSQL等等敎合。 @@ -159,11 +159,11 @@ FastAPI 有䞀個䜿甚簡單䜆是非垞匷倧的 Pydantic。所以䜠有其他 Pydantic 皋匏碌也胜正垞工䜜。 +**FastAPI** 完党盞容䞔基斌 [**Pydantic**](https://docs.pydantic.dev/)。所以䜠有其他 Pydantic 皋匏碌也胜正垞工䜜。 盞容包括基斌 Pydantic 的倖郚凜匏庫䟋劂甚斌資料庫的 ORMs、ODMs。 diff --git a/docs/zh-hant/docs/help-fastapi.md b/docs/zh-hant/docs/help-fastapi.md index 911c566792..343e0dba3e 100644 --- a/docs/zh-hant/docs/help-fastapi.md +++ b/docs/zh-hant/docs/help-fastapi.md @@ -12,7 +12,7 @@ ## 蚂閱電子報 { #subscribe-to-the-newsletter } -䜠可以蚂閱䞍垞癌送的[**FastAPI 與倥䌎**電子報](newsletter.md){.internal-link target=_blank}隚時掌握 +䜠可以蚂閱䞍垞癌送的[**FastAPI 與倥䌎**電子報](newsletter.md)隚時掌握 * 關斌 FastAPI 與倥䌎的最新消息 🚀 * 教孞指南 📝 @@ -22,17 +22,17 @@ ## 圚 XTwitter關泚 FastAPI { #follow-fastapi-on-x-twitter } -圚 **XTwitter** 關泚 @fastapi獲取 **FastAPI** 的最新消息。🐊 +[圚 **XTwitter** 關泚 @fastapi](https://x.com/fastapi)獲取 **FastAPI** 的最新消息。🐊 ## 圚 GitHub 為 **FastAPI** 加星 { #star-fastapi-in-github } -䜠可以圚 GitHub 為 FastAPI「加星」點擊右䞊角的 star 星號按鈕https://github.com/fastapi/fastapi。⭐ +䜠可以圚 GitHub 為 FastAPI「加星」點擊右䞊角的 star 星號按鈕[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。⭐ 加䞊星暙埌其他䜿甚者會曎容易癌珟它䞊看到它已經對蚱倚人埈有幫助。 ## 远蹀 GitHub 儲存庫的癌行版 { #watch-the-github-repository-for-releases } -䜠可以圚 GitHub「watch」FastAPI點擊右䞊角的「watch」按鈕https://github.com/fastapi/fastapi。👀 +䜠可以圚 GitHub「watch」FastAPI點擊右䞊角的「watch」按鈕[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 圚那裡䜠可以遞擇「Releases only」。 @@ -40,45 +40,45 @@ ## 與䜜者連結 { #connect-with-the-author } -䜠可以與䜜者 我Sebastián Ramírez / `tiangolo` 建立連結。 +䜠可以與䜜者 [我Sebastián Ramírez / `tiangolo`](https://tiangolo.com) 建立連結。 䜠可以 -* 圚 **GitHub** 關泚我。 +* [圚 **GitHub** 關泚我](https://github.com/tiangolo)。 * 看看我建立的其他開源專案可胜對䜠有幫助。 * 關泚我以䟿知道我䜕時建立新的開源專案。 -* 圚 **XTwitter** 或 Mastodon 關泚我。 +* [圚 **XTwitter**](https://x.com/tiangolo) 或 [Mastodon](https://fosstodon.org/@tiangolo) 關泚我。 * 告蚎我䜠劂䜕䜿甚 FastAPI我埈愛聜這些。 * 接收我癌垃公告或釋出新工具時的消息。 - * 䜠也可以圚 XTwitter關泚 @fastapi及倖的垳號。 -* 圚 **LinkedIn** 關泚我。 + * 䜠也可以[圚 XTwitter關泚 @fastapi](https://x.com/fastapi)及倖的垳號。 +* [圚 **LinkedIn** 關泚我](https://www.linkedin.com/in/tiangolo/)。 * 接收我癌垃公告或釋出新工具時的消息䞍過我曎垞甚 XTwitter🀷‍♂。 -* 圚 **Dev.to** 或 **Medium** 閱讀我寫的內容或關泚我。 +* 圚 [**Dev.to**](https://dev.to/tiangolo) 或 [**Medium**](https://medium.com/@tiangolo) 閱讀我寫的內容或關泚我。 * 閱讀我的想法、文章以及我建立的工具。 * 關泚我以䟿圚我癌䜈新內容時胜第䞀時間看到。 ## 圚 XTwitter癌文談談 **FastAPI** { #tweet-about-fastapi } -癌䞀則關斌 **FastAPI** 的掚文讓我與其他人知道䜠為什麌喜歡它。🎉 +[癌䞀則關斌 **FastAPI** 的掚文](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)讓我與其他人知道䜠為什麌喜歡它。🎉 我埈暂斌聜到 **FastAPI** 是劂䜕被䜿甚、䜠喜歡它的哪些地方、圚哪個專案公叞䜿甚它等等。 ## 為 FastAPI 投祚 { #vote-for-fastapi } -* 圚 Slant 為 **FastAPI** 投祚。 -* 圚 AlternativeTo 為 **FastAPI** 投祚。 -* 圚 StackShare 衚瀺䜠䜿甚 **FastAPI**。 +* [圚 Slant 為 **FastAPI** 投祚](https://www.slant.co/options/34241/~fastapi-review)。 +* [圚 AlternativeTo 為 **FastAPI** 投祚](https://alternativeto.net/software/fastapi/about/)。 +* [圚 StackShare 衚瀺䜠䜿甚 **FastAPI**](https://stackshare.io/pypi-fastapi)。 ## 圚 GitHub 幫助他人解答問題 { #help-others-with-questions-in-github } 䜠可以嘗詊幫助他人回答以䞋地方的問題 -* GitHub Discussions -* GitHub Issues +* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) +* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+) 埈倚時候䜠可胜已經知道這些問題的解答。🀓 -劂果䜠經垞幫倧家解決問題䜠會成為官方的 [FastAPI 專家](fastapi-people.md#fastapi-experts){.internal-link target=_blank}。🎉 +劂果䜠經垞幫倧家解決問題䜠會成為官方的 [FastAPI 專家](fastapi-people.md#fastapi-experts)。🎉 請蚘埗最重芁的是盡量友善。倧家可胜垶著挫折而䟆埈倚時候提問方匏䞍倠理想䜆請盡䜠所胜保持友善。🀗 @@ -104,7 +104,7 @@ 埈倚時候他們只會貌出䞀小段皋匏碌䜆那䞍足以**重珟問題**。 -* 䜠可以請他們提䟛䞀個最小可重珟範䟋讓䜠可以**耇補貌䞊**䞊圚本機執行看到與他們盞同的錯誀或行為或曎奜地理解他們的䜿甚情境。 +* 䜠可以請他們提䟛䞀個[最小可重珟範䟋](https://stackoverflow.com/help/minimal-reproducible-example)讓䜠可以**耇補貌䞊**䞊圚本機執行看到與他們盞同的錯誀或行為或曎奜地理解他們的䜿甚情境。 * 劂果䜠有心力䜠也可以嘗詊自己**建立䞀個範䟋**僅䟝據問題描述䟆還原。䞍過請蚘埗這可胜埈耗時或蚱曎奜的是先請他們把問題說枅楚。 @@ -124,7 +124,7 @@ ## 远蹀 GitHub 儲存庫 { #watch-the-github-repository } -䜠可以圚 GitHub「watch」FastAPI點擊右䞊角的「watch」按鈕https://github.com/fastapi/fastapi。👀 +䜠可以圚 GitHub「watch」FastAPI點擊右䞊角的「watch」按鈕[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 劂果䜠遞擇「Watching」而䞍是「Releases only」當有人建立新的 issue 或問題時䜠會收到通知。䜠也可以指定只想被通知新的 issues、discussions、PR 等等。 @@ -132,7 +132,7 @@ ## 提問 { #ask-questions } -䜠可以圚 GitHub 儲存庫建立䞀個新的問題Question䟋劂甚䟆 +䜠可以圚 GitHub 儲存庫[建立䞀個新的問題Question](https://github.com/fastapi/fastapi/discussions/new?category=questions)䟋劂甚䟆 * 提出**問題**或詢問某個**疑難**。 * 建議䞀個新的**功胜**。 @@ -195,12 +195,12 @@ ## 建立 Pull Request { #create-a-pull-request } -䜠可以透過 Pull Request 䟆[貢獻](contributing.md){.internal-link target=_blank}原始碌䟋劂 +䜠可以透過 Pull Request 䟆[貢獻](contributing.md)原始碌䟋劂 * 修正文檔䞭䜠癌珟的錯字。 -* 分享䜠建立或癌珟的 FastAPI 盞關文章、圱片或 podcast方法是線茯這個檔案。 +* 分享䜠建立或癌珟的 FastAPI 盞關文章、圱片或 podcast方法是[線茯這個檔案](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)。 * 請確保把䜠的連結加到對應章節的開頭。 -* 協助把[文件翻譯](contributing.md#translations){.internal-link target=_blank}成䜠的語蚀。 +* 協助把[文件翻譯](contributing.md#translations)成䜠的語蚀。 * 䜠也可以幫忙審查他人提亀的翻譯。 * 提議新的文件章節。 * 修埩既有的 issuebug。 @@ -217,8 +217,8 @@ 䜠珟圚就胜做的䞻芁任務有 -* [圚 GitHub 幫助他人解答問題](#help-others-with-questions-in-github){.internal-link target=_blank}芋䞊方章節。 -* [審栞 Pull Request](#review-pull-requests){.internal-link target=_blank}芋䞊方章節。 +* [圚 GitHub 幫助他人解答問題](#help-others-with-questions-in-github)芋䞊方章節。 +* [審栞 Pull Request](#review-pull-requests)芋䞊方章節。 這兩件事是**最耗時**的。這也是維護 FastAPI 的䞻芁工䜜。 @@ -226,11 +226,11 @@ ## 加入聊倩宀 { #join-the-chat } -加入 👥 Discord 聊倩䌺服噚 👥與 FastAPI 瀟矀的其他人䞀起亀流。 +加入 👥 [Discord 聊倩䌺服噚](https://discord.gg/VQjSZaeJmf) 👥與 FastAPI 瀟矀的其他人䞀起亀流。 /// tip -若芁提問請到 GitHub Discussions圚那裡曎有機會獲埗[FastAPI 專家](fastapi-people.md#fastapi-experts){.internal-link target=_blank}的協助。 +若芁提問請到 [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions)圚那裡曎有機會獲埗[FastAPI 專家](fastapi-people.md#fastapi-experts)的協助。 聊倩宀請僅甚斌其他䞀般性的亀流。 @@ -242,13 +242,13 @@ 圚 GitHub 䞊暡板會匕導䜠寫出合適的提問讓䜠曎容易埗到奜的解答甚至圚提問前就自己解決問題。而䞔圚 GitHub 䞊我胜確保最終郜會回芆即䜿需芁䞀些時間。我個人無法圚聊倩系統做到這䞀點。😅 -聊倩系統䞭的對話也䞍像 GitHub 那暣容易被搜尋因歀問題與答案可胜圚對話䞭淹沒。而䞔只有 GitHub 䞊的問題與回答才會被蚈入成為[FastAPI 專家](fastapi-people.md#fastapi-experts){.internal-link target=_blank}因歀䜠圚 GitHub 䞊曎有機會獲埗關泚。 +聊倩系統䞭的對話也䞍像 GitHub 那暣容易被搜尋因歀問題與答案可胜圚對話䞭淹沒。而䞔只有 GitHub 䞊的問題與回答才會被蚈入成為[FastAPI 專家](fastapi-people.md#fastapi-experts)因歀䜠圚 GitHub 䞊曎有機會獲埗關泚。 及䞀方面聊倩宀裡有成千䞊萬的䜿甚者所以幟乎隚時郜有埈倧的機會胜扟到人聊倩。😄 ## 莊助䜜者 { #sponsor-the-author } -劂果䜠的**產品公叞**䟝賎或與 **FastAPI** 盞關䞔䜠想觞及它的䜿甚者䜠可以透過 GitHub sponsors 莊助䜜者我。䟝據䞍同玚別䜠可胜會埗到䞀些額倖犏利䟋劂圚文件䞭顯瀺埜章。🎁 +劂果䜠的**產品公叞**䟝賎或與 **FastAPI** 盞關䞔䜠想觞及它的䜿甚者䜠可以透過 [GitHub sponsors](https://github.com/sponsors/tiangolo) 莊助䜜者我。䟝據䞍同玚別䜠可胜會埗到䞀些額倖犏利䟋劂圚文件䞭顯瀺埜章。🎁 --- diff --git a/docs/zh-hant/docs/history-design-future.md b/docs/zh-hant/docs/history-design-future.md index b7f57a3636..f3c733330a 100644 --- a/docs/zh-hant/docs/history-design-future.md +++ b/docs/zh-hant/docs/history-design-future.md @@ -1,6 +1,6 @@ # 歷史、蚭蚈與未䟆 { #history-design-and-future } -䞍久之前䞀䜍 **FastAPI** 䜿甚者提問 +䞍久之前[䞀䜍 **FastAPI** 䜿甚者提問](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920) > 這個專案的歷史是什麌看起䟆它圚短短幟週內埞默默無名變埗非垞厲害 [...] @@ -14,7 +14,7 @@ **FastAPI** 的歷史圚埈倧皋床䞊也是其前身工具的歷史。 -劂圚[替代方案](alternatives.md){.internal-link target=_blank}章節所述 +劂圚[替代方案](alternatives.md)䞀節所述
@@ -44,9 +44,9 @@ 我圚最受歡迎的 Python 線茯噚䞭枬詊了倚個想法PyCharm、VS Code、基斌 Jedi 的線茯噚。 -根據最新的 Python 開癌者調查這些工具涵蓋玄 80% 的䜿甚者。 +根據最新的 [Python 開癌者調查](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)這些工具涵蓋玄 80% 的䜿甚者。 -這衚瀺 **FastAPI** 已針對 80% 的 Python 開癌者所䜿甚的線茯噚進行過專門枬詊。而由斌其他倚敞線茯噚的行為也類䌌這些優點幟乎圚所有線茯噚䞊郜胜生效。 +這衚瀺 **FastAPI** 已針對 80% 的 Python 開癌者所䜿甚的線茯噚進行過專門枬詊。而由斌其他倚敞線茯噚的行為也類䌌這些優點擎及寊際䞊幟乎所有線茯噚。 藉歀我扟到了盡可胜枛少皋匏碌重耇、圚各處提䟛自動補党、型別與錯誀檢查等的最䜳方匏。 @@ -54,11 +54,11 @@ ## 需求 { #requirements } -圚枬詊倚皮替代方案埌我決定採甚 **Pydantic**因為它的優勢。 +圚枬詊倚皮替代方案埌我決定採甚 [**Pydantic**](https://docs.pydantic.dev/)因為它的優勢。 隚埌我也對它做出貢獻䜿其完党笊合 JSON Schema、支揎以䞍同方匏定矩玄束䞊䟝據圚倚欟線茯噚䞭的枬詊結果改進線茯噚支揎型別檢查、自動補党。 -圚開癌過皋䞭我也對 **Starlette**及䞀個關鍵䟝賎做出貢獻。 +圚開癌過皋䞭我也對 [**Starlette**](https://www.starlette.dev/)及䞀個關鍵䟝賎做出貢獻。 ## 開癌 { #development } @@ -76,4 +76,4 @@ **FastAPI** 的前景非垞光明。 -也非垞感謝[䜠的幫助](help-fastapi.md){.internal-link target=_blank}。 +也非垞感謝[䜠的幫助](help-fastapi.md)。 diff --git a/docs/zh-hant/docs/how-to/authentication-error-status-code.md b/docs/zh-hant/docs/how-to/authentication-error-status-code.md index 9a8de4c910..beea430707 100644 --- a/docs/zh-hant/docs/how-to/authentication-error-status-code.md +++ b/docs/zh-hant/docs/how-to/authentication-error-status-code.md @@ -2,7 +2,7 @@ 圚 FastAPI 版本 `0.122.0` 之前當內建的安党工具圚身分驗證倱敗埌回傳錯誀絊甚戶端時會䜿甚 HTTP 狀態碌 `403 Forbidden`。 -埞 FastAPI 版本 `0.122.0` 起改為䜿甚曎合適的 HTTP 狀態碌 `401 Unauthorized`䞊圚回應䞭䟝據 HTTP 芏範加䞊合理的 `WWW-Authenticate` 暙頭參考 RFC 7235、RFC 9110。 +埞 FastAPI 版本 `0.122.0` 起改為䜿甚曎合適的 HTTP 狀態碌 `401 Unauthorized`䞊圚回應䞭䟝據 HTTP 芏範加䞊合理的 `WWW-Authenticate` 暙頭參考 [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1)、[RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)。 䜆劂果䜠的甚戶端因某些原因䟝賎斌舊行為䜠可以圚䜠的 security 類別䞭芆寫 `make_not_authenticated_error` 方法以恢埩舊的行為。 diff --git a/docs/zh-hant/docs/how-to/conditional-openapi.md b/docs/zh-hant/docs/how-to/conditional-openapi.md index 5c091e5b7b..485a7d11d7 100644 --- a/docs/zh-hant/docs/how-to/conditional-openapi.md +++ b/docs/zh-hant/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ 若䜠的皋匏碌有安党性猺陷它䟝然會存圚。 -隱藏文件只會讓他人曎難理解劂䜕與䜠的 API 互動也可胜讓䜠圚正匏環境陀錯曎困難。這通垞僅被芖為䞀皮 以隱匿求安党。 +隱藏文件只會讓他人曎難理解劂䜕與䜠的 API 互動也可胜讓䜠圚正匏環境陀錯曎困難。這通垞僅被芖為䞀皮 [以隱匿求安党](https://en.wikipedia.org/wiki/Security_through_obscurity)。 劂果䜠想保護 API有蚱倚曎奜的䜜法䟋劂 diff --git a/docs/zh-hant/docs/how-to/configure-swagger-ui.md b/docs/zh-hant/docs/how-to/configure-swagger-ui.md index e5b6d7d1e3..cbb63ef5e6 100644 --- a/docs/zh-hant/docs/how-to/configure-swagger-ui.md +++ b/docs/zh-hant/docs/how-to/configure-swagger-ui.md @@ -1,12 +1,12 @@ # 蚭定 Swagger UI { #configure-swagger-ui } -䜠可以蚭定䞀些額倖的 Swagger UI 參敞。 +䜠可以蚭定䞀些額倖的 [Swagger UI 參敞](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)。 芁蚭定它們建立 `FastAPI()` 應甚物件時或呌叫 `get_swagger_ui_html()` 凜匏時傳入參敞 `swagger_ui_parameters`。 `swagger_ui_parameters` 接受䞀個 dict內容會盎接傳絊 Swagger UI 䜜為蚭定。 -FastAPI 會把這些蚭定蜉換成 JSON以䟿與 JavaScript 盞容因為 Swagger UI 需芁的是這皮栌匏。 +FastAPI 會把這些蚭定蜉換成 **JSON**以䟿與 JavaScript 盞容因為 Swagger UI 需芁的是這皮栌匏。 ## 停甚語法醒目提瀺 { #disable-syntax-highlighting } @@ -50,11 +50,11 @@ FastAPI 內建䞀些預蚭參敞適甚斌倧倚敞情境。 ## 其他 Swagger UI 參敞 { #other-swagger-ui-parameters } -若芁查看所有可甚的蚭定請參考官方的 Swagger UI 參敞文件。 +若芁查看所有可甚的蚭定請參考官方的 [Swagger UI 參敞文件](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)。 ## 僅限 JavaScript 的蚭定 { #javascript-only-settings } -Swagger UI 也允蚱某些蚭定是僅限 JavaScript 的物件䟋劂 JavaScript 凜匏。 +Swagger UI 也允蚱某些蚭定是**僅限 JavaScript** 的物件䟋劂 JavaScript 凜匏。 FastAPI 也包含以䞋僅限 JavaScript 的 `presets` 蚭定 diff --git a/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md b/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md index 4b53945891..e690e55c96 100644 --- a/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md +++ b/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md @@ -54,7 +54,7 @@ Swagger UI 會圚背埌幫䜠處理䞍過它需芁這個「redirect」茔助 ### 枬詊 { #test-it } -珟圚䜠應該胜造蚪 http://127.0.0.1:8000/docs重新茉入頁面埌資源會埞新的 CDN 茉入。 +珟圚䜠應該胜造蚪 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)重新茉入頁面埌資源會埞新的 CDN 茉入。 ## 自行蚗管文件所需的 JavaScript 與 CSS { #self-hosting-javascript-and-css-for-docs } @@ -93,12 +93,12 @@ Swagger UI 會圚背埌幫䜠處理䞍過它需芁這個「redirect」茔助 Swagger UI 需芁以䞋檔案 -* `swagger-ui-bundle.js` -* `swagger-ui.css` +* [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js) +* [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css) 而 ReDoc 需芁以䞋檔案 -* `redoc.standalone.js` +* [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js) 之埌䜠的檔案結構可胜劂䞋 @@ -122,7 +122,7 @@ Swagger UI 需芁以䞋檔案 ### 枬詊靜態檔案 { #test-the-static-files } -啟動䜠的應甚䞊前埀 http://127.0.0.1:8000/static/redoc.standalone.js。 +啟動䜠的應甚䞊前埀 [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)。 䜠應該會看到䞀個埈長的 **ReDoc** JavaScript 檔案。 @@ -180,6 +180,6 @@ Swagger UI 會圚背埌幫䜠處理䞍過它需芁這個「redirect」茔助 ### 枬詊䜿甚靜態檔案的 UI { #test-static-files-ui } -珟圚䜠應該可以關閉 WiFi造蚪䜠的文件 http://127.0.0.1:8000/docs䞊重新茉入頁面。 +珟圚䜠應該可以關閉 WiFi造蚪䜠的文件 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)䞊重新茉入頁面。 即䜿沒有網際網路也胜看到䜠的 API 文件䞊與之互動。 diff --git a/docs/zh-hant/docs/how-to/custom-request-and-route.md b/docs/zh-hant/docs/how-to/custom-request-and-route.md index 99c3410e47..00031fcaad 100644 --- a/docs/zh-hant/docs/how-to/custom-request-and-route.md +++ b/docs/zh-hant/docs/how-to/custom-request-and-route.md @@ -18,7 +18,7 @@ 可胜的䜿甚情境包括 -* 將非 JSON 的請求本文蜉換為 JSON䟋劂 `msgpack`。 +* 將非 JSON 的請求本文蜉換為 JSON䟋劂 [`msgpack`](https://msgpack.org/index.html)。 * 解壓瞮以 gzip 壓瞮的請求本文。 * 自動蚘錄所有請求本文。 @@ -32,7 +32,7 @@ /// tip -這是䞀個瀺範甚的簡化範䟋劂果䜠需芁 Gzip 支揎可以盎接䜿甚提䟛的 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}。 +這是䞀個瀺範甚的簡化範䟋劂果䜠需芁 Gzip 支揎可以盎接䜿甚提䟛的 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)。 /// @@ -40,7 +40,7 @@ 劂果暙頭䞭沒有 `gzip`它就䞍會嘗詊解壓瞮本文。 -劂歀䞀䟆盞同的路由類別即可同時處理經 gzip 壓瞮與未壓瞮的請求. +劂歀䞀䟆盞同的路由類別即可同時處理經 gzip 壓瞮與未壓瞮的請求。 {* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[9:16] *} @@ -66,7 +66,7 @@ 而 `scope` 與 `receive` 這兩者就是建立䞀個新的 `Request` 寊䟋所需的資料。 -想了解曎倚 `Request`請參考 Starlette 的 Request 文件。 +想了解曎倚 `Request`請參考 [Starlette 的 Request 文件](https://www.starlette.dev/requests/)。 /// @@ -82,7 +82,7 @@ /// tip -芁解決盞同問題䜿甚針對 `RequestValidationError` 的自蚂處理噚䟆讀取 `body` 通垞曎簡單[處理錯誀](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}。 +芁解決盞同問題䜿甚針對 `RequestValidationError` 的自蚂處理噚䟆讀取 `body` 通垞曎簡單[處理錯誀](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)。 䜆本範䟋仍然有效䞊瀺範了劂䜕與內郚元件互動。 diff --git a/docs/zh-hant/docs/how-to/extending-openapi.md b/docs/zh-hant/docs/how-to/extending-openapi.md index c51e896f32..b5adca0f76 100644 --- a/docs/zh-hant/docs/how-to/extending-openapi.md +++ b/docs/zh-hant/docs/how-to/extending-openapi.md @@ -37,7 +37,7 @@ 基斌䞊述資蚊䜠可以甚盞同的工具凜匏䟆產生 OpenAPI 結構䞊芆寫䜠需芁客補的郚分。 -䟋劂我們芁加入 ReDoc 的 OpenAPI 擎充插入自蚂 logo。 +䟋劂我們芁加入 [ReDoc 的 OpenAPI 擎充插入自蚂 logo](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)。 ### 䞀般的 **FastAPI** { #normal-fastapi } @@ -75,6 +75,6 @@ ### 檢查看看 { #check-it } -造蚪 http://127.0.0.1:8000/redoc 埌䜠會看到自蚂的 logo歀䟋為 **FastAPI** 的 logo +造蚪 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) 埌䜠會看到自蚂的 logo歀䟋為 **FastAPI** 的 logo diff --git a/docs/zh-hant/docs/how-to/general.md b/docs/zh-hant/docs/how-to/general.md index 96a71d62dd..13d4d7d3ee 100644 --- a/docs/zh-hant/docs/how-to/general.md +++ b/docs/zh-hant/docs/how-to/general.md @@ -4,36 +4,40 @@ ## 篩遞資料 - 安党性 { #filter-data-security } -為確保䜠䞍會回傳超出應有的資料請參閱[教孞 - 回應暡型 - 回傳型別](../tutorial/response-model.md){.internal-link target=_blank}。 +為確保䜠䞍會回傳超出應有的資料請參閱[教孞 - 回應暡型 - 回傳型別](../tutorial/response-model.md)。 + +## 最䜳化回應效胜 - 回應暡型 - 回傳型別 { #optimize-response-performance-response-model-return-type } + +為了圚回傳 JSON 資料時最䜳化效胜請䜿甚回傳型別或回應暡型劂歀 Pydantic 會圚 Rust 端處理序列化為 JSON而䞍經過 Python。曎倚內容請參閱[教孞 - 回應暡型 - 回傳型別](../tutorial/response-model.md)。 ## 文件暙籀 - OpenAPI { #documentation-tags-openapi } -芁圚䜠的*路埑操䜜path operation*加入暙籀䞊圚文件 UI 䞭分組請參閱[教孞 - 路埑操䜜蚭定 - 暙籀](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank}。 +芁圚䜠的*路埑操䜜path operation*加入暙籀䞊圚文件 UI 䞭分組請參閱[教孞 - 路埑操䜜蚭定 - 暙籀](../tutorial/path-operation-configuration.md#tags)。 ## 文件摘芁與描述 - OpenAPI { #documentation-summary-and-description-openapi } -芁為䜠的*路埑操䜜*加入摘芁與描述䞊圚文件 UI 䞭顯瀺請參閱[教孞 - 路埑操䜜蚭定 - 摘芁與描述](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank}。 +芁為䜠的*路埑操䜜*加入摘芁與描述䞊圚文件 UI 䞭顯瀺請參閱[教孞 - 路埑操䜜蚭定 - 摘芁與描述](../tutorial/path-operation-configuration.md#summary-and-description)。 ## 文件回應描述 - OpenAPI { #documentation-response-description-openapi } -芁定矩圚文件 UI 䞭顯瀺的回應描述請參閱[教孞 - 路埑操䜜蚭定 - 回應描述](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank}。 +芁定矩圚文件 UI 䞭顯瀺的回應描述請參閱[教孞 - 路埑操䜜蚭定 - 回應描述](../tutorial/path-operation-configuration.md#response-description)。 ## 文件將*路埑操䜜*暙蚘為已棄甚 - OpenAPI { #documentation-deprecate-a-path-operation-openapi } -芁將*路埑操䜜*暙蚘為已棄甚䞊圚文件 UI 䞭顯瀺請參閱[教孞 - 路埑操䜜蚭定 - 棄甚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank}。 +芁將*路埑操䜜*暙蚘為已棄甚䞊圚文件 UI 䞭顯瀺請參閱[教孞 - 路埑操䜜蚭定 - 棄甚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation)。 ## 將任意資料蜉換為 JSON 盞容栌匏 { #convert-any-data-to-json-compatible } -芁將任意資料蜉換為 JSON 盞容栌匏請參閱[教孞 - JSON 盞容線碌噚](../tutorial/encoder.md){.internal-link target=_blank}。 +芁將任意資料蜉換為 JSON 盞容栌匏請參閱[教孞 - JSON 盞容線碌噚](../tutorial/encoder.md)。 ## OpenAPI 䞭繌資料 - 文件 { #openapi-metadata-docs } -芁圚䜠的 OpenAPI 綱芁䞭加入䞭繌資料包含授權、版本、聯絡方匏等請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md){.internal-link target=_blank}。 +芁圚䜠的 OpenAPI 綱芁䞭加入䞭繌資料包含授權、版本、聯絡方匏等請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md)。 ## 自蚂 OpenAPI URL { #openapi-custom-url } -芁自蚂或移陀OpenAPI 的 URL請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank}。 +芁自蚂或移陀OpenAPI 的 URL請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md#openapi-url)。 ## OpenAPI 文件 URL { #openapi-docs-urls } -芁曎新自動產生的文件䜿甚者介面所䜿甚的 URL請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}。 +芁曎新自動產生的文件䜿甚者介面所䜿甚的 URL請參閱[教孞 - 䞭繌資料與文件 URL](../tutorial/metadata.md#docs-urls)。 diff --git a/docs/zh-hant/docs/how-to/graphql.md b/docs/zh-hant/docs/how-to/graphql.md index 51933210c5..24e4d89792 100644 --- a/docs/zh-hant/docs/how-to/graphql.md +++ b/docs/zh-hant/docs/how-to/graphql.md @@ -18,18 +18,18 @@ GraphQL 解決某些非垞特定的䜿甚情境。 䞋面是支揎 ASGI 的郚分 GraphQL 凜匏庫䜠可以與 FastAPI 䞀起䜿甚 -* Strawberry 🍓 - * 提䟛 FastAPI 文件 -* Ariadne - * 提䟛 FastAPI 文件 -* Tartiflette - * 䜿甚 Tartiflette ASGI 提䟛 ASGI 敎合 -* Graphene - * 搭配 starlette-graphene3 +* [Strawberry](https://strawberry.rocks/) 🍓 + * 提䟛 [FastAPI 文件](https://strawberry.rocks/docs/integrations/fastapi) +* [Ariadne](https://ariadnegraphql.org/) + * 提䟛 [FastAPI 文件](https://ariadnegraphql.org/docs/fastapi-integration) +* [Tartiflette](https://tartiflette.io/) + * 䜿甚 [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) 提䟛 ASGI 敎合 +* [Graphene](https://graphene-python.org/) + * 搭配 [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) ## 䜿甚 Strawberry 的 GraphQL { #graphql-with-strawberry } -劂果䜠需芁或想䜿甚 GraphQLStrawberry 是掚薊的凜匏庫因為它的蚭蚈與 FastAPI 最接近党郚郜基斌型別蚻解 (type annotations)。 +劂果䜠需芁或想䜿甚 GraphQL[Strawberry](https://strawberry.rocks/) 是掚薊的凜匏庫因為它的蚭蚈與 FastAPI 最接近党郚郜基斌型別蚻解 (type annotations)。 芖䜠的䜿甚情境而定䜠可胜會偏奜其他凜匏庫䜆劂果䜠問我我倧抂會建議䜠先詊詊 Strawberry。 @@ -37,24 +37,24 @@ GraphQL 解決某些非垞特定的䜿甚情境。 {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *} -䜠可以圚 Strawberry 文件 䞭進䞀步了解 Strawberry。 +䜠可以圚 [Strawberry 文件](https://strawberry.rocks/) 䞭進䞀步了解 Strawberry。 -也可以參考關斌 Strawberry 與 FastAPI 的文件。 +也可以參考關斌 [Strawberry 與 FastAPI](https://strawberry.rocks/docs/integrations/fastapi) 的文件。 ## 䟆自 Starlette 的范舊 `GraphQLApp` { #older-graphqlapp-from-starlette } -早期版本的 Starlette 提䟛 `GraphQLApp` 類別以敎合 Graphene。 +早期版本的 Starlette 提䟛 `GraphQLApp` 類別以敎合 [Graphene](https://graphene-python.org/)。 -它已圚 Starlette 䞭被棄甚䜆劂果䜠的皋匏碌䜿甚了它可以茕鬆遷移到 starlette-graphene3涵蓋盞同的䜿甚情境䞔介面幟乎盞同。 +它已圚 Starlette 䞭被棄甚䜆劂果䜠的皋匏碌䜿甚了它可以茕鬆遷移到 [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)涵蓋盞同的䜿甚情境䞔介面幟乎盞同。 /// tip -劂果䜠需芁 GraphQL我仍建議䜠看看 Strawberry因為它基斌型別蚻解而䞍是自蚂的類別與型別。 +劂果䜠需芁 GraphQL我仍建議䜠看看 [Strawberry](https://strawberry.rocks/)因為它基斌型別蚻解而䞍是自蚂的類別與型別。 /// ## 進䞀步了解 { #learn-more } -䜠可以圚 官方 GraphQL 文件 䞭進䞀步了解 GraphQL。 +䜠可以圚 [官方 GraphQL 文件](https://graphql.org/) 䞭進䞀步了解 GraphQL。 䜠也可以透過䞊述連結閱讀各個凜匏庫的曎倚內容。 diff --git a/docs/zh-hant/docs/how-to/index.md b/docs/zh-hant/docs/how-to/index.md index 6c9a8202c0..c08bd3d663 100644 --- a/docs/zh-hant/docs/how-to/index.md +++ b/docs/zh-hant/docs/how-to/index.md @@ -8,6 +8,6 @@ /// tip -劂果䜠想芁以結構化的方匏**å­žç¿’ FastAPI**掚薊請前埀[教孞 - 䜿甚者指南](../tutorial/index.md){.internal-link target=_blank}逐章閱讀。 +劂果䜠想芁以結構化的方匏**å­žç¿’ FastAPI**掚薊請前埀[教孞 - 䜿甚者指南](../tutorial/index.md)逐章閱讀。 /// diff --git a/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md index 109e57bc81..4495e3dd70 100644 --- a/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md +++ b/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md @@ -22,7 +22,7 @@ Pydantic 團隊自 **Python 3.14** 起已停止圚最新的 Python 版本䞭 ## 官方指南 { #official-guide } -Pydantic 提䟛埞 v1 遷移到 v2 的官方遷移指南。 +Pydantic 提䟛埞 v1 遷移到 v2 的官方[遷移指南](https://docs.pydantic.dev/latest/migration/)。 其䞭包含變曎內容、驗證劂䜕曎正確䞔曎嚎栌、可胜的泚意事項等。 @@ -30,7 +30,7 @@ Pydantic 提䟛埞 v1 遷移到 v2 的官方`bump-pydantic`。 +䜠可以䜿甚 Pydantic 團隊提䟛的 [`bump-pydantic`](https://github.com/pydantic/bump-pydantic)。 這個工具會自動修改倧郚分需芁變曎的皋匏碌。 diff --git a/docs/zh-hant/docs/how-to/testing-database.md b/docs/zh-hant/docs/how-to/testing-database.md index cbaecc2389..cf1ed9d36a 100644 --- a/docs/zh-hant/docs/how-to/testing-database.md +++ b/docs/zh-hant/docs/how-to/testing-database.md @@ -1,7 +1,7 @@ # 枬詊資料庫 { #testing-a-database } -䜠可以圚 SQLModel 文件 䞭孞習關斌資料庫、SQL 與 SQLModel。 🀓 +䜠可以圚 [SQLModel 文件](https://sqlmodel.tiangolo.com/) 䞭孞習關斌資料庫、SQL 與 SQLModel。 🀓 -有䞀個迷䜠 將 SQLModel 與 FastAPI 搭配䜿甚的教孞。 ✹ +有䞀個迷䜠 [將 SQLModel 與 FastAPI 搭配䜿甚的教孞](https://sqlmodel.tiangolo.com/tutorial/fastapi/)。 ✹ -該教孞包含䞀節介玹 枬詊 SQL 資料庫。 😎 +該教孞包含䞀節介玹 [枬詊 SQL 資料庫](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)。 😎 diff --git a/docs/zh-hant/docs/index.md b/docs/zh-hant/docs/index.md index 77eba9b149..d57791bf8b 100644 --- a/docs/zh-hant/docs/index.md +++ b/docs/zh-hant/docs/index.md @@ -11,25 +11,25 @@ FastAPI 框架高效胜易斌孞習快速開癌適甚斌生產環境

- + Test - + Coverage - + Package version - + Supported Python versions

--- -**文件** https://fastapi.tiangolo.com/zh-hant +**文件** [https://fastapi.tiangolo.com/zh-hant](https://fastapi.tiangolo.com/zh-hant) -**皋匏碌** https://github.com/fastapi/fastapi +**皋匏碌** [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- @@ -44,7 +44,7 @@ FastAPI 是䞀個珟代、快速高效胜的 Web 框架甚斌以 Python * **簡單**蚭蚈䞊易斌䜿甚與孞習。曎少的讀文件時間。 * **簡朔**最小化皋匏碌重耇性。每個參敞宣告可垶䟆倚個功胜。曎少的錯誀。 * **穩健**立即獲埗可投入生產的皋匏碌䞊自動生成互動匏文件。 -* **暙準化**基斌䞔完党盞容斌API 的開攟暙準OpenAPI之前皱為 Swagger和 JSON Schema。 +* **暙準化**基斌䞔完党盞容斌API 的開攟暙準[OpenAPI](https://github.com/OAI/OpenAPI-Specification)之前皱為 Swagger和 [JSON Schema](https://json-schema.org/)。 * 基斌內郚開癌團隊圚建立生產應甚皋匏時的枬詊預䌰。 @@ -55,51 +55,51 @@ FastAPI 是䞀個珟代、快速高效胜的 Web 框架甚斌以 Python ### 基石莊助商 { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} - + {% endfor -%} ### 金玚與銀玚莊助商 { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} - + {% endfor -%} {%- for sponsor in sponsors.silver -%} - + {% endfor %} -其他莊助商 +[其他莊助商](https://fastapi.tiangolo.com/zh-hant/fastapi-people/#sponsors) ## 評價 { #opinions } "_[...] 近期倧量䜿甚 **FastAPI**。[...] 我寊際䞊打算圚我圚**埮軟**團隊的所有**機噚孞習**服務䞊䜿甚它。其䞭䞀些正圚敎合到栞心的 **Windows** 產品以及䞀些 **Office** 產品。_" -
Kabir Khan - Microsoft (ref)
+
Kabir Khan - Microsoft (ref)
--- "_我們採甚了 **FastAPI** 凜匏庫䟆啟動䞀個 **REST** 䌺服噚䟛查詢以取埗**預枬**。[for Ludwig]_" -
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
--- "_**Netflix** 埈高興宣垃我們的**危機管理**協調框架 **Dispatch** 開源[䜿甚 **FastAPI** 建構]_" -
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
--- "_我對 **FastAPI** 興奮埗䞍埗了。超奜玩_" -
Brian Okken - Python Bytes podcast 䞻持人 (ref)
+
Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast 䞻持人 (ref)
--- "_老寊說䜠們做的看起䟆非垞穩健又粟緻。埈倚方面郜正是我垌望 **Hug** 成為的暣子——看到有人把它建出䟆真的埈錓舞人心。_" -
Timothy Crosley - Hug 創䜜者 (ref)
+
Timothy Crosley - [Hug](https://github.com/hugapi/hug) 創䜜者 (ref)
--- @@ -107,27 +107,27 @@ FastAPI 是䞀個珟代、快速高效胜的 Web 框架甚斌以 Python "_我們的 **API** 已經改甚 **FastAPI** [...] 我想䜠會喜歡它 [...]_" -
Ines Montani - Matthew Honnibal - Explosion AI 創蟊人 - spaCy 創䜜者 (ref) - (ref)
+
Ines Montani - Matthew Honnibal - [Explosion AI](https://explosion.ai) 創蟊人 - [spaCy](https://spacy.io) 創䜜者 (ref) - (ref)
--- -"_劂果有人想芁建立䞀個可投入生產的 Python API我匷烈掚薊 **FastAPI**。它**蚭蚈粟矎**、**䜿甚簡單**侔**高床可擎充**已成為我們 API 優先開癌策略䞭的**關鍵組件**掚動了蚱倚自動化與服務䟋劂我們的 Virtual TAC Engineer。_" +"_劂果有人想芁打造䞀個可甚斌生產環境的 Python API我匷力掚薊 **FastAPI**。它**蚭蚈優雅**、**簡單易甚**侔**高床可擎展**已經成為我們 API first 開癌策略䞭的**關鍵元件**掚動了蚱倚自動化與服務䟋劂我們的 Virtual TAC Engineer。_" -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (ref)
--- ## FastAPI 迷䜠玀錄片 { #fastapi-mini-documentary } -圚 2025 幎底癌垃了䞀支 FastAPI 迷䜠玀錄片䜠可以圚線䞊觀看 +圚 2025 幎底癌垃了䞀支 [FastAPI 迷䜠玀錄片](https://www.youtube.com/watch?v=mpR8ngthqiE)䜠可以圚線䞊觀看 -FastAPI Mini Documentary +FastAPI Mini Documentary ## **Typer**呜什列的 FastAPI { #typer-the-fastapi-of-clis } - + -劂果䜠䞍是圚做 Web API而是芁建立䞀個圚終端機䞭䜿甚的 CLI 應甚皋匏可以看看 **Typer**。 +劂果䜠䞍是圚做 Web API而是芁建立䞀個圚終端機䞭䜿甚的 CLI 應甚皋匏可以看看 [**Typer**](https://typer.tiangolo.com/)。 **Typer** 是 FastAPI 的小老匟。他立志成為呜什列䞖界的 **FastAPI**。⌚ 🚀 @@ -135,12 +135,12 @@ FastAPI 是䞀個珟代、快速高效胜的 Web 框架甚斌以 Python FastAPI 是站圚以䞋巚人的肩膀䞊 -* Starlette 負責 Web 郚分。 -* Pydantic 負責資料郚分。 +* [Starlette](https://www.starlette.dev/) 負責 Web 郚分。 +* [Pydantic](https://docs.pydantic.dev/) 負責資料郚分。 ## 安裝 { #installation } -建立䞊啟甚䞀個虛擬環境然埌安裝 FastAPI +建立䞊啟甚䞀個[虛擬環境](https://fastapi.tiangolo.com/zh-hant/virtual-environments/)然埌安裝 FastAPI
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **泚意** -劂果䜠䞍確定請查看文件䞭 _"In a hurry?"_ 章節的 `async` 與 `await`。 +劂果䜠䞍確定請查看文件䞭 _"In a hurry?"_ 章節的[關斌文件䞭的 `async` 與 `await`](https://fastapi.tiangolo.com/zh-hant/async/#in-a-hurry)。 @@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.
-關斌指什 fastapi dev main.py... +關斌指什 fastapi dev... -指什 `fastapi dev` 會讀取䜠的 `main.py`偵枬其䞭的 **FastAPI** 應甚䞊䜿甚 Uvicorn 啟動䌺服噚。 +指什 `fastapi dev` 會讀取䜠的 `main.py`偵枬其䞭的 **FastAPI** 應甚䞊䜿甚 [Uvicorn](https://www.uvicorn.dev) 啟動䌺服噚。 預蚭情況䞋`fastapi dev` 會圚本機開癌時啟甚自動重新茉入。 -可圚 FastAPI CLI 文件䞭閱讀曎倚資蚊。 +可圚 [FastAPI CLI 文件](https://fastapi.tiangolo.com/zh-hant/fastapi-cli/)䞭閱讀曎倚資蚊。
### 檢查 { #check-it } -䜿甚瀏芜噚開啟 http://127.0.0.1:8000/items/5?q=somequery。 +䜿甚瀏芜噚開啟 [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)。 䜠將會看到以䞋 JSON 回應 @@ -264,17 +264,17 @@ INFO: Application startup complete. ### 互動匏 API 文件 { #interactive-api-docs } -接著前埀 http://127.0.0.1:8000/docs。 +接著前埀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 -䜠會看到自動生成的互動匏 API 文件由 Swagger UI 提䟛 +䜠會看到自動生成的互動匏 API 文件由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 替代 API 文件 { #alternative-api-docs } -珟圚前埀 http://127.0.0.1:8000/redoc。 +珟圚前埀 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 -䜠會看到及䞀皮自動文件由 ReDoc 提䟛 +䜠會看到及䞀皮自動文件由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item): ### 互動匏 API 文件升玚 { #interactive-api-docs-upgrade } -前埀 http://127.0.0.1:8000/docs。 +前埀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 * 互動匏 API 文件會自動曎新包含新的 body @@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item): ### 替代 API 文件升玚 { #alternative-api-docs-upgrade } -珟圚前埀 http://127.0.0.1:8000/redoc。 +珟圚前埀 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 * 替代文件也會反映新的查詢參敞與 body @@ -433,7 +433,7 @@ item: Item ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -若想看包含曎倚功胜的完敎範䟋請參考 教孞 - 䜿甚者指南。 +若想看包含曎倚功胜的完敎範䟋請參考 Tutorial - User Guide。 **劇透譊告**教孞 - 䜿甚者指南包含 @@ -442,7 +442,7 @@ item: Item * 䞀個非垞匷倧䞔易甚的 **䟝賎泚入** 系統。 * 安党與驗證包含支揎 **OAuth2** 搭配 **JWT tokens** 與 **HTTP Basic** 驗證。 * 宣告**深床巢狀 JSON 暡型**的進階䜆同暣簡單技巧感謝 Pydantic。 -* 與 Strawberry 及其他凜匏庫的 **GraphQL** 敎合。 +* 與 [Strawberry](https://strawberry.rocks) 及其他凜匏庫的 **GraphQL** 敎合。 * 蚱倚額倖功胜感謝 Starlette䟋劂 * **WebSockets** * 基斌 HTTPX 與 `pytest` 的極其簡單的枬詊 @@ -452,24 +452,10 @@ item: Item ### 郚眲䜠的應甚可遞 { #deploy-your-app-optional } -䜠也可以遞擇將 FastAPI 應甚郚眲到 FastAPI Cloud劂果䜠還沒加入去登蚘等候名單吧。🚀 +䜠也可以遞擇將 FastAPI 應甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)劂果䜠還沒加入去登蚘等候名單吧。🚀 劂果䜠已經有 **FastAPI Cloud** 垳號我們已埞等候名單邀請䜠 😉䜠可以甚䞀個指什郚眲䜠的應甚。 -郚眲前先確認䜠已登入 - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -接著郚眲䜠的應甚 -
```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### 關斌 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的同䞀䜍䜜者與團隊打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的同䞀䜍䜜者與團隊打造。 它讓䜠以最小的努力粟簡地完成 API 的**建眮**、**郚眲**與**存取**流皋。 @@ -504,9 +490,9 @@ FastAPI 是開源䞔基斌暙準。䜠可以把 FastAPI 應甚郚眲到任䜕䜠 ## 效胜 { #performance } -獚立的 TechEmpower 基準枬詊顯瀺圚 Uvicorn 䞋運行的 **FastAPI** 應甚是最快的 Python 框架之䞀僅次斌 Starlette 與 Uvicorn 本身FastAPI 內郚䜿甚它們。(*) +獚立的 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/zh-hant/benchmarks/)。 ## 䟝賎套件 { #dependencies } @@ -518,19 +504,19 @@ FastAPI 䟝賎 Pydantic 與 Starlette。 Pydantic 會䜿甚 -* email-validator - 甚斌電子郵件驗證。 +* [`email-validator`](https://github.com/JoshData/python-email-validator) - 甚斌電子郵件驗證。 Starlette 會䜿甚 -* httpx - 若芁䜿甚 `TestClient` 必須安裝。 -* jinja2 - 若芁䜿甚預蚭的暡板蚭定必須安裝。 -* python-multipart - 若芁支揎衚單 "解析"搭配 `request.form()`。 +* [`httpx`](https://www.python-httpx.org) - 若芁䜿甚 `TestClient` 必須安裝。 +* [`jinja2`](https://jinja.palletsprojects.com) - 若芁䜿甚預蚭的暡板蚭定必須安裝。 +* [`python-multipart`](https://github.com/Kludex/python-multipart) - 若芁支揎衚單 "解析"搭配 `request.form()`。 FastAPI 會䜿甚 -* uvicorn - 甚斌茉入䞊服務䜠的應甚的䌺服噚。這包含 `uvicorn[standard]`其䞭含有䞀些高效胜服務所需的䟝賎䟋劂 `uvloop`。 +* [`uvicorn`](https://www.uvicorn.dev) - 甚斌茉入䞊服務䜠的應甚的䌺服噚。這包含 `uvicorn[standard]`其䞭含有䞀些高效胜服務所需的䟝賎䟋劂 `uvloop`。 * `fastapi-cli[standard]` - 提䟛 `fastapi` 指什。 - * 其䞭包含 `fastapi-cloud-cli`可讓䜠將 FastAPI 應甚郚眲到 FastAPI Cloud。 + * 其䞭包含 `fastapi-cloud-cli`可讓䜠將 FastAPI 應甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)。 ### 䞍含 `standard` 䟝賎套件 { #without-standard-dependencies } @@ -546,13 +532,13 @@ FastAPI 會䜿甚 Pydantic 的額倖可遞䟝賎 -* pydantic-settings - 蚭定管理。 -* pydantic-extra-types - 與 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 - 若芁䜿甚 `ORJSONResponse` 必須安裝。 -* ujson - 若芁䜿甚 `UJSONResponse` 必須安裝。 +* [`orjson`](https://github.com/ijl/orjson) - 若芁䜿甚 `ORJSONResponse` 必須安裝。 +* [`ujson`](https://github.com/esnme/ultrajson) - 若芁䜿甚 `UJSONResponse` 必須安裝。 ## 授權 { #license } diff --git a/docs/zh-hant/docs/project-generation.md b/docs/zh-hant/docs/project-generation.md index 7fa92ce558..fc5c8e4655 100644 --- a/docs/zh-hant/docs/project-generation.md +++ b/docs/zh-hant/docs/project-generation.md @@ -4,7 +4,7 @@ 䜠可以䜿甚歀範本快速起步裡面已替䜠完成倧量初始蚭定、安党性、資料庫以及郚分 API 端點。 -GitHub 儲存庫党端 FastAPI 範本 +GitHub 儲存庫[党端 FastAPI 範本](https://github.com/tiangolo/full-stack-fastapi-template) ## 党端 FastAPI 範本 - 技術堆疊與功胜 { #full-stack-fastapi-template-technology-stack-and-features } diff --git a/docs/zh-hant/docs/python-types.md b/docs/zh-hant/docs/python-types.md index 4f498ab734..4193069ea7 100644 --- a/docs/zh-hant/docs/python-types.md +++ b/docs/zh-hant/docs/python-types.md @@ -269,7 +269,7 @@ def some_function(data: Any): ## Pydantic 暡型 { #pydantic-models } -Pydantic 是䞀個甚䟆做資料驗證的 Python 皋匏庫。 +[Pydantic](https://docs.pydantic.dev/) 是䞀個甚䟆做資料驗證的 Python 皋匏庫。 䜠以垶有屬性的類別䟆宣告資料的「圢狀」。 @@ -285,13 +285,13 @@ def some_function(data: Any): /// info | 資蚊 -想了解曎倚 Pydantic請查看它的文件。 +想了解曎倚 [Pydantic請查看它的文件](https://docs.pydantic.dev/)。 /// **FastAPI** 完党是以 Pydantic 為基瀎。 -䜠會圚[教孞 - 䜿甚者指南](tutorial/index.md){.internal-link target=_blank}䞭看到曎倚寊際範䟋。 +䜠會圚[教孞 - 䜿甚者指南](tutorial/index.md)䞭看到曎倚寊際範䟋。 ## 含䞭繌資料的型別提瀺 { #type-hints-with-metadata-annotations } @@ -337,12 +337,12 @@ Python 本身䞍會對這個 `Annotated` 做任䜕事。對線茯噚與其他工 * 䜿甚 OpenAPI 曞寫 API 文件 * 之埌會由自動的互動匏文件介面所䜿甚 -這些珟圚聜起䟆可胜有點抜象。別擔心。䜠會圚[教孞 - 䜿甚者指南](tutorial/index.md){.internal-link target=_blank}䞭看到它們的寊際運䜜。 +這些珟圚聜起䟆可胜有點抜象。別擔心。䜠會圚[教孞 - 䜿甚者指南](tutorial/index.md)䞭看到它們的寊際運䜜。 重點是透過圚單䞀䜍眮䜿甚暙準的 Python 型別而䞍是新增曎倚類別、裝食噚等**FastAPI** 會幫䜠完成埈倚工䜜。 /// info | 資蚊 -劂果䜠已經完敎讀完敎個教孞䞊回䟆想倚看䞀些關斌型別的內容䞀個䞍錯的資源是 `mypy` 的「小抄」。 +劂果䜠已經完敎讀完敎個教孞䞊回䟆想倚看䞀些關斌型別的內容䞀個䞍錯的資源是 [`mypy` 的「小抄」](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)。 /// diff --git a/docs/zh-hant/docs/tutorial/background-tasks.md b/docs/zh-hant/docs/tutorial/background-tasks.md index 63e4e5a160..216ec88689 100644 --- a/docs/zh-hant/docs/tutorial/background-tasks.md +++ b/docs/zh-hant/docs/tutorial/background-tasks.md @@ -61,7 +61,7 @@ ## 技術现節 { #technical-details } -類別 `BackgroundTasks` 盎接䟆自 `starlette.background`。 +類別 `BackgroundTasks` 盎接䟆自 [`starlette.background`](https://www.starlette.dev/background/)。 它被盎接匯入/包含到 FastAPI 䞭因歀䜠可以埞 `fastapi` 匯入它䞊避免䞍小心埞 `starlette.background` 匯入及䞀個同名的 `BackgroundTask`結尟沒有 s。 @@ -69,11 +69,11 @@ 圚 FastAPI 䞭仍可單獚䜿甚 `BackgroundTask`䜆䜠需芁圚皋匏碌䞭自行建立該物件䞊回傳包含它的 Starlette `Response`。 -曎倚现節請參閱 Starlette 官方的 Background Tasks 文件。 +曎倚现節請參閱 [Starlette 官方的 Background Tasks 文件](https://www.starlette.dev/background/)。 ## 泚意事項 { #caveat } -劂果䜠需芁執行繁重的背景蚈算䞔䞍䞀定芁由同䞀個行皋執行䟋劂䞍需芁共甚蚘憶體、變敞等可以考慮䜿甚曎倧型的工具䟋劂 Celery。 +劂果䜠需芁執行繁重的背景蚈算䞔䞍䞀定芁由同䞀個行皋執行䟋劂䞍需芁共甚蚘憶體、變敞等可以考慮䜿甚曎倧型的工具䟋劂 [Celery](https://docs.celeryq.dev)。 這類工具通垞需芁范耇雜的蚭定以及蚊息/工䜜䜇列管理噚劂 RabbitMQ 或 Redis䜆它們允蚱䜠圚倚個行皋甚至倚台䌺服噚䞊執行背景任務。 diff --git a/docs/zh-hant/docs/tutorial/bigger-applications.md b/docs/zh-hant/docs/tutorial/bigger-applications.md index d8b8c9bff8..a37c16c39e 100644 --- a/docs/zh-hant/docs/tutorial/bigger-applications.md +++ b/docs/zh-hant/docs/tutorial/bigger-applications.md @@ -123,7 +123,7 @@ from app.routers import items 為了簡化範䟋我們䜿甚了䞀個虛構的暙頭。 -䜆圚真寊情況䞋䜿甚內建的[安党工具](security/index.md){.internal-link target=_blank}會有曎奜的效果。 +䜆圚真寊情況䞋䜿甚內建的 [安党工具](security/index.md) 會有曎奜的效果。 /// @@ -169,7 +169,7 @@ async def read_item(item_id: str): /// tip | 提瀺 -請泚意就像圚[路埑操䜜裝食噚䞭的盞䟝性](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}䞀暣䞍會把任䜕倌傳遞絊䜠的路埑操䜜凜匏path operation function。 +請泚意就像圚[路埑操䜜裝食噚䞭的盞䟝性](dependencies/dependencies-in-path-operation-decorators.md)䞀暣䞍會把任䜕倌傳遞絊䜠的路埑操䜜凜匏path operation function。 /// @@ -185,8 +185,8 @@ async def read_item(item_id: str): * 它們郜會包含預先定矩的 `responses`。 * 這些路埑操䜜郜會圚執行前評䌰 / 執行其 `dependencies` 枅單。 * 劂果䜠也圚特定的路埑操䜜䞭宣告了盞䟝性這些盞䟝性也會被執行。 - * Router 的盞䟝性會先執行然埌是[裝食噚䞭的 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}最埌是䞀般參敞盞䟝性。 - * 䜠也可以加入垶有 `scopes` 的 [`Security` 盞䟝性](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}。 + * Router 的盞䟝性會先執行然埌是[裝食噚䞭的 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)最埌是䞀般參敞盞䟝性。 + * 䜠也可以加入垶有 `scopes` 的 [`Security` 盞䟝性](../advanced/security/oauth2-scopes.md)。 /// tip | 提瀺 @@ -303,7 +303,7 @@ from ...dependencies import get_token_header 照垞匯入䞊建立 `FastAPI` 類別。 -我們甚至可以宣告[党域盞䟝性](dependencies/global-dependencies.md){.internal-link target=_blank}它們會與各 `APIRouter` 的盞䟝性合䜵 +我們甚至可以宣告[党域盞䟝性](dependencies/global-dependencies.md)它們會與各 `APIRouter` 的盞䟝性合䜵 {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ from .routers import items, users from app.routers import items, users ``` -想了解曎倚關斌 Python 套件與暡組請閱讀官方的暡組說明文件。 +想了解曎倚關斌 Python 套件與暡組請閱讀[官方的暡組說明文件](https://docs.python.org/3/tutorial/modules.html)。 /// @@ -465,6 +465,37 @@ from .routers.users import router /// +## 圚 `pyproject.toml` 蚭定 `entrypoint` { #configure-the-entrypoint-in-pyproject-toml } + +因為䜠的 FastAPI `app` 物件䜍圚 `app/main.py`䜠可以圚 `pyproject.toml` 檔案䞭這暣蚭定 `entrypoint` + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +這等同斌這暣匯入 + +```python +from app.main import app +``` + +劂歀䞀䟆 `fastapi` 指什就會知道去哪裡扟到䜠的 app。 + +/// Note | 泚意 + +䜠也可以把路埑盎接傳絊指什䟋劂 + +```console +$ fastapi dev app/main.py +``` + +䜆䜠每次呌叫 `fastapi` 指什時郜埗蚘埗傳入正確的路埑。 + +歀倖其他工具可胜扟䞍到它䟋劂 [VS Code 擎充套件](../editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀建議圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 + +/// + ## 檢查自動產生的 API 文件 { #check-the-automatic-api-docs } 珟圚執行䜠的應甚 @@ -472,14 +503,14 @@ from .routers.users import router
```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-然埌開啟䜍斌 http://127.0.0.1:8000/docs 的文件。 +然埌開啟䜍斌 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 的文件。 䜠會看到自動產生的 API 文件包含䟆自所有子暡組的路埑䜿甚正確的路埑與前綎與正確的暙籀 diff --git a/docs/zh-hant/docs/tutorial/body-nested-models.md b/docs/zh-hant/docs/tutorial/body-nested-models.md index df4aff6972..f7b8627b4b 100644 --- a/docs/zh-hant/docs/tutorial/body-nested-models.md +++ b/docs/zh-hant/docs/tutorial/body-nested-models.md @@ -95,7 +95,7 @@ my_list: list[str] 陀了 `str`、`int`、`float` 等䞀般的單䞀型別倖䜠也可以䜿甚繌承自 `str` 的曎耇雜單䞀型別。 -若芁查看所有可甚遞項請參閱 Pydantic 的型別瞜芜。䜠會圚䞋䞀章看到䞀些範䟋。 +若芁查看所有可甚遞項請參閱 [Pydantic 的型別瞜芜](https://docs.pydantic.dev/latest/concepts/types/)。䜠會圚䞋䞀章看到䞀些範䟋。 䟋劂圚 `Image` 暡型䞭有䞀個 `url` 欄䜍我們可以將其宣告為 Pydantic 的 `HttpUrl`而䞍是 `str` diff --git a/docs/zh-hant/docs/tutorial/body-updates.md b/docs/zh-hant/docs/tutorial/body-updates.md index a309e3522c..0d48e28424 100644 --- a/docs/zh-hant/docs/tutorial/body-updates.md +++ b/docs/zh-hant/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## 䜿甚 `PUT` 取代匏曎新 { #update-replacing-with-put } -芁曎新䞀個項目䜠可以䜿甚 HTTP `PUT` 操䜜。 +芁曎新䞀個項目䜠可以䜿甚 [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) 操䜜。 䜠可以䜿甚 `jsonable_encoder` 將茞入資料蜉換為可儲存為 JSON 的資料䟋劂甚斌 NoSQL 資料庫。䟋劂把 `datetime` 蜉成 `str`。 @@ -28,7 +28,7 @@ ## 䜿甚 `PATCH` 進行郚分曎新 { #partial-updates-with-patch } -䜠也可以䜿甚 HTTP `PATCH` 操䜜䟆進行*郚分*曎新。 +䜠也可以䜿甚 [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) 操䜜䟆進行*郚分*曎新。 這衚瀺䜠只需傳送想芁曎新的資料其逘保持䞍變。 @@ -95,6 +95,6 @@ 因歀劂果䜠垌望接收可以省略所有屬性的郚分曎新䜠需芁䞀個所有屬性皆為可遞具預蚭倌或為 `None`的暡型。 -為了區分甚斌曎新党郚可遞與甚斌建立欄䜍為必填的暡型䜠可以參考 [額倖暡型](extra-models.md){.internal-link target=_blank} 䞭的做法。 +為了區分甚斌曎新党郚可遞與甚斌建立欄䜍為必填的暡型䜠可以參考 [額倖暡型](extra-models.md) 䞭的做法。 /// diff --git a/docs/zh-hant/docs/tutorial/body.md b/docs/zh-hant/docs/tutorial/body.md index bddcbbf434..08246f513b 100644 --- a/docs/zh-hant/docs/tutorial/body.md +++ b/docs/zh-hant/docs/tutorial/body.md @@ -6,7 +6,7 @@ 䜠的 API 幟乎瞜是需芁傳回**回應**本文。䜆甚戶端䞍䞀定每次郜芁送出**請求本文**有時只會請求某個路埑可胜垶䞀些查詢參敞䜆䞍會傳送本文。 -芁宣告**請求**本文䜠會䜿甚 Pydantic 暡型享受其完敎的功胜與優點。 +芁宣告**請求**本文䜠會䜿甚 [Pydantic](https://docs.pydantic.dev/) 暡型享受其完敎的功胜與優點。 /// info @@ -72,7 +72,7 @@ - 若資料無效會回傳枅楚易懂的錯誀指出哪裡、哪筆資料䞍正確。 - 把接收到的資料攟圚參敞 `item` 䞭提䟛絊䜠。 - 由斌䜠圚凜匏䞭將其宣告為 `Item` 型別䜠也會獲埗完敎的線茯噚支揎自動完成等以及所有屬性與其型別。 -- 為䜠的暡型產生 JSON Schema 定矩劂有需芁䜠也可以圚專案䞭的其他地方䜿甚。 +- 為䜠的暡型產生 [JSON Schema](https://json-schema.org) 定矩劂有需芁䜠也可以圚專案䞭的其他地方䜿甚。 - 這些 schema 會成為產生的 OpenAPI schema 的䞀郚分䞊由自動文件 UIs 䜿甚。 ## 自動文件 { #automatic-docs } @@ -101,15 +101,15 @@ 甚至為了支揎這點Pydantic 本身也做了些修改。 -前面的螢幕截圖是䜿甚 Visual Studio Code 拍的。 +前面的螢幕截圖是䜿甚 [Visual Studio Code](https://code.visualstudio.com) 拍的。 -䜆䜠圚 PyCharm 與倧倚敞其它 Python 線茯噚䞭也會埗到盞同的線茯噚支揎 +䜆䜠圚 [PyCharm](https://www.jetbrains.com/pycharm/) 與倧倚敞其它 Python 線茯噚䞭也會埗到盞同的線茯噚支揎 /// tip -劂果䜠䜿甚 PyCharm 䜜為線茯噚可以安裝 Pydantic PyCharm Plugin。 +劂果䜠䜿甚 [PyCharm](https://www.jetbrains.com/pycharm/) 䜜為線茯噚可以安裝 [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/)。 它胜增匷 Pydantic 暡型的線茯噚支揎包含 @@ -161,4 +161,4 @@ FastAPI 會因為預蚭倌 `= None` 而知道 `q` 的倌䞍是必填。 ## 䞍䜿甚 Pydantic { #without-pydantic } -若䜠䞍想䜿甚 Pydantic 暡型也可以䜿甚 **Body** 參敞。請參考[Body - 倚個參敞本文䞭的單䞀倌](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}。 +若䜠䞍想䜿甚 Pydantic 暡型也可以䜿甚 **Body** 參敞。請參考[Body - 倚個參敞本文䞭的單䞀倌](body-multiple-params.md#singular-values-in-body)。 diff --git a/docs/zh-hant/docs/tutorial/cors.md b/docs/zh-hant/docs/tutorial/cors.md index 5fa497c081..4fcf9f9418 100644 --- a/docs/zh-hant/docs/tutorial/cors.md +++ b/docs/zh-hant/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS跚䟆源資源共甚 { #cors-cross-origin-resource-sharing } -CORS 或「Cross-Origin Resource Sharing」指的是當圚瀏芜噚䞭執行的前端以 JavaScript 與埌端通蚊而埌端與前端䜍斌䞍同「䟆源origin」時的情境。 +[CORS 或「Cross-Origin Resource Sharing」](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)指的是當圚瀏芜噚䞭執行的前端以 JavaScript 與埌端通蚊而埌端與前端䜍斌䞍同「䟆源origin」時的情境。 ## 䟆源Origin { #origin } @@ -55,10 +55,10 @@ * `allow_origins` - 允蚱進行跚䟆源請求的䟆源枅單。䟋劂 `['https://example.org', 'https://www.example.org']`。䜠可以䜿甚 `['*']` 䟆允蚱任䜕䟆源。 * `allow_origin_regex` - 允蚱進行跚䟆源請求的䟆源䜿甚正芏衚瀺匏字䞲比對。䟋劂 `'https://.*\.example\.org'`。 * `allow_methods` - 允蚱跚䟆源請求的 HTTP 方法枅單。預蚭為 `['GET']`。䜠可以䜿甚 `['*']` 䟆允蚱所有暙準方法。 -* `allow_headers` - 允蚱跚䟆源請求所支揎的 HTTP 請求暙頭枅單。預蚭為 `[]`。䜠可以䜿甚 `['*']` 䟆允蚱所有暙頭。對斌簡單 CORS 請求`Accept`、`Accept-Language`、`Content-Language` 與 `Content-Type` 暙頭䞀埋被允蚱。 +* `allow_headers` - 允蚱跚䟆源請求所支揎的 HTTP 請求暙頭枅單。預蚭為 `[]`。䜠可以䜿甚 `['*']` 䟆允蚱所有暙頭。對斌[簡單 CORS 請求](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)`Accept`、`Accept-Language`、`Content-Language` 與 `Content-Type` 暙頭䞀埋被允蚱。 * `allow_credentials` - 指瀺是吊支揎跚䟆源請求的 Cookie。預蚭為 `False`。 - 當 `allow_credentials` 蚭為 `True` 時`allow_origins`、`allow_methods` 與 `allow_headers` 郜䞍胜蚭為 `['*']`。䞊述各項必須明確指定。 + 當 `allow_credentials` 蚭為 `True` 時`allow_origins`、`allow_methods` 與 `allow_headers` 郜䞍胜蚭為 `['*']`。䞊述各項必須[明確指定](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)。 * `expose_headers` - 指瀺哪些回應暙頭應該讓瀏芜噚可存取。預蚭為 `[]`。 * `max_age` - 蚭定瀏芜噚快取 CORS 回應的最長秒敞。預蚭為 `600`。 @@ -77,7 +77,7 @@ ## 曎倚資蚊 { #more-info } -想進䞀步了解 CORS請參考 Mozilla 的 CORS 文件。 +想進䞀步了解 CORS請參考 [Mozilla 的 CORS 文件](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)。 /// note | 技術现節 diff --git a/docs/zh-hant/docs/tutorial/debugging.md b/docs/zh-hant/docs/tutorial/debugging.md index cb82ee417b..1230ed6ccd 100644 --- a/docs/zh-hant/docs/tutorial/debugging.md +++ b/docs/zh-hant/docs/tutorial/debugging.md @@ -59,7 +59,7 @@ $ python myapp.py ```Python from myapp import app -# Some more code +# 其他皋匏碌 ``` 圚那皮情況䞋`myapp.py` 䞭自動建立的變敞 `__name__` 就䞍會是 `"__main__"`。 @@ -74,7 +74,7 @@ from myapp import app /// info | 說明 -想了解曎倚參考 Python 官方文件。 +想了解曎倚參考 [Python 官方文件](https://docs.python.org/3/library/__main__.html)。 /// diff --git a/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index e30c385375..bd57116245 100644 --- a/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -32,7 +32,7 @@ 圚這個範䟋䞭我們䜿甚了自蚂的虛構的暙頭 `X-Key` 與 `X-Token`。 -䜆圚寊際情況䞋當䜠寊䜜安党機制時䜿甚敎合的 [Security utilities䞋䞀章](../security/index.md){.internal-link target=_blank} 會獲埗曎倚奜處。 +䜆圚寊際情況䞋當䜠寊䜜安党機制時䜿甚敎合的 [Security utilities䞋䞀章](../security/index.md) 會獲埗曎倚奜處。 /// @@ -62,7 +62,7 @@ ## 䞀組路埑操䜜的䟝賎 { #dependencies-for-a-group-of-path-operations } -之埌圚閱讀劂䜕組織范倧的應甚皋匏[范倧型應甚皋匏——倚個檔案](../../tutorial/bigger-applications.md){.internal-link target=_blank}時䜠會孞到劂䜕為䞀組路埑操䜜宣告䞀個共同的 `dependencies` 參敞。 +之埌圚閱讀劂䜕組織范倧的應甚皋匏[范倧型應甚皋匏——倚個檔案](../../tutorial/bigger-applications.md)時䜠會孞到劂䜕為䞀組路埑操䜜宣告䞀個共同的 `dependencies` 參敞。 ## 党域䟝賎 { #global-dependencies } diff --git a/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md index 2339c6ef30..8174dca40b 100644 --- a/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md @@ -14,8 +14,8 @@ FastAPI 支揎圚完成埌執行䞀些`@contextlib.contextmanager` 或 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 或 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 郜可以䜜為 **FastAPI** 的盞䟝。 @@ -87,7 +87,7 @@ FastAPI 支揎圚完成埌執行䞀些Context Managers。 +這胜運䜜倚虧了 Python 的 [Context Managers](https://docs.python.org/3/library/contextlib.html)。 **FastAPI** 圚內郚䜿甚它們䟆達成這點。 @@ -111,7 +111,7 @@ FastAPI 支揎圚完成埌執行䞀些䜠可以甚 `with` 䟆讀取檔案 +䟋劂[䜠可以甚 `with` 䟆讀取檔案](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files) ```Python with open("./somefile.txt") as f: @@ -264,7 +264,7 @@ with open("./somefile.txt") as f: /// -圚 Python 䞭䜠可以透過建立䞀個擁有 `__enter__()` 與 `__exit__()` 兩個方法的類別䟆建立情境管理噚。 +圚 Python 䞭䜠可以透過[建立䞀個擁有 `__enter__()` 與 `__exit__()` 兩個方法的類別](https://docs.python.org/3/reference/datamodel.html#context-managers)䟆建立情境管理噚。 䜠也可以圚 **FastAPI** 的含 `yield` 盞䟝䞭斌盞䟝凜匏內䜿甚 `with` 或 `async with` 陳述匏䟆䜿甚它們 @@ -274,8 +274,8 @@ with open("./somefile.txt") as f: 建立情境管理噚的及䞀皮方匏是 -* `@contextlib.contextmanager` 或 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 或 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 甚它們裝食䞀個只包含單䞀 `yield` 的凜匏。 diff --git a/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md b/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md index 3aac1a228b..e73cf935e2 100644 --- a/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md +++ b/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md @@ -2,14 +2,14 @@ 圚某些類型的應甚皋匏䞭䜠可胜想為敎個應甚皋匏新增䟝賎。 -類䌌斌䜠可以圚[路埑操䜜path operation的裝食噚䞭新增 `dependencies`](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 的方匏䜠也可以把它們加到 `FastAPI` 應甚皋匏䞊。 +類䌌斌䜠可以圚[路埑操䜜path operation的裝食噚䞭新增 `dependencies`](dependencies-in-path-operation-decorators.md) 的方匏䜠也可以把它們加到 `FastAPI` 應甚皋匏䞊。 圚這皮情況䞋它們會套甚到應甚皋匏䞭的所有路埑操䜜 {* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *} -而䞔圚[將 `dependencies` 新增到路埑操䜜裝食噚](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 那䞀節䞭的所有抂念䟝然適甚只是這裡是套甚到敎個應甚䞭的所有路埑操䜜。 +而䞔圚[將 `dependencies` 新增到路埑操䜜裝食噚](dependencies-in-path-operation-decorators.md) 那䞀節䞭的所有抂念䟝然適甚只是這裡是套甚到敎個應甚䞭的所有路埑操䜜。 ## 路埑操䜜矀組的䟝賎 { #dependencies-for-groups-of-path-operations } -之埌圚閱讀劂䜕組織曎倧的應甚皋匏[曎倧的應甚皋匏 - 倚個檔案](../../tutorial/bigger-applications.md){.internal-link target=_blank}時可胜會有倚個檔案䜠將會孞到劂䜕為䞀組路埑操䜜宣告單䞀的 `dependencies` 參敞。 +之埌圚閱讀劂䜕組織曎倧的應甚皋匏[曎倧的應甚皋匏 - 倚個檔案](../../tutorial/bigger-applications.md)時可胜會有倚個檔案䜠將會孞到劂䜕為䞀組路埑操䜜宣告單䞀的 `dependencies` 參敞。 diff --git a/docs/zh-hant/docs/tutorial/dependencies/index.md b/docs/zh-hant/docs/tutorial/dependencies/index.md index 39c05ab056..86aea50f0a 100644 --- a/docs/zh-hant/docs/tutorial/dependencies/index.md +++ b/docs/zh-hant/docs/tutorial/dependencies/index.md @@ -55,7 +55,7 @@ FastAPI 圚 0.95.0 版新增了對 `Annotated` 的支揎䞊開始建議䜿甚 劂果䜠䜿甚范舊的版本嘗詊䜿甚 `Annotated` 時會出珟錯誀。 -圚䜿甚 `Annotated` 之前請先[升玚 FastAPI 版本](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}到至少 0.95.1。 +圚䜿甚 `Annotated` 之前請先[升玚 FastAPI 版本](../../deployment/versions.md#upgrading-the-fastapi-versions)到至少 0.95.1。 /// @@ -150,7 +150,7 @@ commons: Annotated[dict, Depends(common_parameters)] /// note | 泚意 -劂果䜠䞍熟悉請參考文件䞭的 [Async: "In a hurry?"](../../async.md#in-a-hurry){.internal-link target=_blank} 䞀節瞭解 `async` 與 `await`。 +劂果䜠䞍熟悉請參考文件䞭的 [Async: "In a hurry?"](../../async.md#in-a-hurry) 䞀節瞭解 `async` 與 `await`。 /// diff --git a/docs/zh-hant/docs/tutorial/encoder.md b/docs/zh-hant/docs/tutorial/encoder.md index 03b7db6394..9b541adce6 100644 --- a/docs/zh-hant/docs/tutorial/encoder.md +++ b/docs/zh-hant/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ 䟋劂它䞍接受 `datetime` 物件因為那與 JSON 䞍盞容。 -因歀必須將 `datetime` 物件蜉為䞀個以 ISO 栌匏 衚瀺資料的 `str`。 +因歀必須將 `datetime` 物件蜉為䞀個以 [ISO 栌匏](https://en.wikipedia.org/wiki/ISO_8601) 衚瀺資料的 `str`。 同暣地這個資料庫䞍會接受 Pydantic 暡型垶有屬性的物件只接受 `dict`。 @@ -24,7 +24,7 @@ 圚歀範䟋䞭它會把 Pydantic 暡型蜉成 `dict`䞊將 `datetime` 蜉成 `str`。 -呌叫埌的結果可以甚 Python 暙準的 `json.dumps()` 進行線碌。 +呌叫埌的結果可以甚 Python 暙準的 [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps) 進行線碌。 它䞍會回傳䞀個包含 JSON 內容的倧型 `str`字䞲。它會回傳 Python 暙準的資料結構䟋劂 `dict`其䞭的倌與子倌郜與 JSON 盞容。 diff --git a/docs/zh-hant/docs/tutorial/extra-data-types.md b/docs/zh-hant/docs/tutorial/extra-data-types.md index f516d965a4..a5573379d8 100644 --- a/docs/zh-hant/docs/tutorial/extra-data-types.md +++ b/docs/zh-hant/docs/tutorial/extra-data-types.md @@ -36,7 +36,7 @@ * `datetime.timedelta` * Python 的 `datetime.timedelta`。 * 圚請求與回應䞭會以瞜秒敞的 `float` 衚瀺。 - * Pydantic 也允蚱甚「ISO 8601 time diff encoding」䟆衚瀺詳情芋文件。 + * Pydantic 也允蚱甚「ISO 8601 time diff encoding」䟆衚瀺[詳情芋文件](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)。 * `frozenset` * 圚請求與回應䞭與 `set` 盞同處理 * 圚請求䞭會讀取䞀個 list去陀重耇䞊蜉為 `set`。 @@ -49,7 +49,7 @@ * `Decimal` * 暙準的 Python `Decimal`。 * 圚請求與回應䞭與 `float` 的處理方匏盞同。 -* 䜠可以圚歀查閱所有可甚的 Pydantic 資料型別Pydantic 資料型別。 +* 䜠可以圚歀查閱所有可甚的 Pydantic 資料型別[Pydantic 資料型別](https://docs.pydantic.dev/latest/usage/types/types/)。 ## 範䟋 { #example } diff --git a/docs/zh-hant/docs/tutorial/extra-models.md b/docs/zh-hant/docs/tutorial/extra-models.md index 8aae62f8e1..f5509f531f 100644 --- a/docs/zh-hant/docs/tutorial/extra-models.md +++ b/docs/zh-hant/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ 切勿儲存䜿甚者的明文密碌。務必只儲存可䟛驗證的「安党雜湊」。 -若䜠還䞍枅楚皍埌會圚[安党性章節](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}孞到什麌是「密碌雜湊」。 +若䜠還䞍枅楚皍埌會圚[安党性章節](security/simple-oauth2.md#password-hashing)孞到什麌是「密碌雜湊」。 /// @@ -162,11 +162,11 @@ UserInDB( 圚 OpenAPI 䞭會以 `anyOf` 定矩。 -芁達成這點䜿甚暙準的 Python 型別提瀺 `typing.Union` +芁達成這點䜿甚暙準的 Python 型別提瀺 [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) /// note -圚定矩 `Union` 時請先攟眮「曎具體」的型別再攟「范䞍具體」的型別。以䞋範䟋䞭范具體的 `PlaneItem` 眮斌 `CarItem` 之前`Union[PlaneItem, CarItem]`。 +圚定矩 [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) 時請先攟眮「曎具體」的型別再攟「范䞍具體」的型別。以䞋範䟋䞭范具體的 `PlaneItem` 眮斌 `CarItem` 之前`Union[PlaneItem, CarItem]`。 /// diff --git a/docs/zh-hant/docs/tutorial/first-steps.md b/docs/zh-hant/docs/tutorial/first-steps.md index 3aa2d39ae1..d6b1a72e32 100644 --- a/docs/zh-hant/docs/tutorial/first-steps.md +++ b/docs/zh-hant/docs/tutorial/first-steps.md @@ -11,7 +11,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 查看它 { #check-it } -圚瀏芜噚䞭打開 http://127.0.0.1:8000. +圚瀏芜噚䞭打開 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 䜠將看到劂䞋的 JSON 回應 @@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 互動匏 API 文件 { #interactive-api-docs } -珟圚前埀 http://127.0.0.1:8000/docs. +珟圚前埀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 -䜠將看到自動的互動匏 API 文件由 Swagger UI 提䟛 +䜠將看到自動的互動匏 API 文件由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 替代 API 文件 { #alternative-api-docs } -珟圚前埀 http://127.0.0.1:8000/redoc. +珟圚前埀 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 -䜠將看到及䞀皮自動文件由 ReDoc 提䟛 +䜠將看到及䞀皮自動文件由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) #### API 「schema」 { #api-schema } -圚這皮情況䞋OpenAPI 是䞀個芏範它芏定了劂䜕定矩 API 的 schema。 +圚這皮情況䞋[OpenAPI](https://github.com/OAI/OpenAPI-Specification) 是䞀個芏範它芏定了劂䜕定矩 API 的 schema。 這個 schema 定矩包含了䜠的 API 路埑、可胜接收的參敞等內容。 @@ -110,7 +110,7 @@ OpenAPI 為䜠的 API 定矩了 API 的 schema。而該 schema 會包含䜠的 A 劂果䜠奜奇原始的 OpenAPI schema 長什麌暣子FastAPI 會自動生成䞀個包含所有 API 描述的 JSONschema。 -䜠可以盎接圚 http://127.0.0.1:8000/openapi.json 查看它。 +䜠可以盎接圚 [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json) 查看它。 它會顯瀺䞀個 JSON類䌌斌 @@ -143,9 +143,58 @@ OpenAPI schema 驅動了兩個互動匏文件系統。 䜠也可以甚它自動生成皋匏碌讓甚戶端與䜠的 API 通蚊。䟋劂前端、手機或物聯網IoT應甚皋匏。 +### 圚 `pyproject.toml` 蚭定應甚的 `entrypoint` { #configure-the-app-entrypoint-in-pyproject-toml } + +䜠可以圚 `pyproject.toml` 䞭蚭定䜠的應甚䜍眮䟋劂 + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +這個 `entrypoint` 會告蚎 `fastapi` 指什應該甚䞋面的方匏匯入 app + +```python +from main import app +``` + +劂果䜠的皋匏碌結構像是 + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +那䜠應該把 `entrypoint` 蚭為 + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +這等同斌 + +```python +from backend.main import app +``` + +### 搭配路埑䜿甚 `fastapi dev` { #fastapi-dev-with-path } + +䜠也可以把檔案路埑傳絊 `fastapi dev` 指什它會自動猜枬芁䜿甚的 FastAPI app 物件 + +```console +$ fastapi dev main.py +``` + +䜆這暣每次執行 `fastapi` 指什時郜芁蚘埗傳入正確路埑。 + +歀倖其他工具可胜扟䞍到它䟋劂 [VS Code 擎充套件](../editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀建議圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 + ### 郚眲䜠的應甚皋匏可遞 { #deploy-your-app-optional } -䜠可以遞擇將䜠的 FastAPI 應甚皋匏郚眲到 FastAPI Cloud劂果還沒有去加入候補名單吧。🚀 +䜠可以遞擇將䜠的 FastAPI 應甚皋匏郚眲到 [FastAPI Cloud](https://fastapicloud.com)劂果還沒有去加入候補名單吧。🚀 劂果䜠已經有 **FastAPI Cloud** 垳號我們已埞候補名單邀請䜠 😉䜠可以甚䞀個指什郚眲䜠的應甚皋匏。 @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI` 是䞀個盎接繌承自 `Starlette` 的類別。 -䜠同暣可以透過 `FastAPI` 䟆䜿甚 Starlette 所有的功胜。 +䜠同暣可以透過 `FastAPI` 䟆䜿甚 [Starlette](https://www.starlette.dev/) 所有的功胜。 /// @@ -336,7 +385,7 @@ Python 侭的 `@something` 語法被皱為「裝食噚」。 /// note -劂果䜠䞍知道差別請查看 [Async: *"In a hurry?"*](../async.md#in-a-hurry){.internal-link target=_blank}. +劂果䜠䞍知道差別請查看 [Async: *"In a hurry?"*](../async.md#in-a-hurry)。 /// @@ -352,11 +401,11 @@ Python 侭的 `@something` 語法被皱為「裝食噚」。 ### 第六步郚眲 { #step-6-deploy-it } -甚䞀行指什將䜠的應甚皋匏郚眲到 **FastAPI Cloud**`fastapi deploy`。🎉 +甚䞀行指什將䜠的應甚皋匏郚眲到 **[FastAPI Cloud](https://fastapicloud.com)**`fastapi deploy`。🎉 #### 關斌 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的䜜者與團隊打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的䜜者與團隊打造。 它讓䜠以最小的成本完成 API 的**建眮**、**郚眲**與**存取**流皋。 diff --git a/docs/zh-hant/docs/tutorial/handling-errors.md b/docs/zh-hant/docs/tutorial/handling-errors.md index f3a7573cd5..b1ffd3e038 100644 --- a/docs/zh-hant/docs/tutorial/handling-errors.md +++ b/docs/zh-hant/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ ## 安裝自蚂䟋倖處理噚 { #install-custom-exception-handlers } -䜠可以䜿甚 Starlette 的盞同䟋倖工具 䟆加入自蚂䟋倖處理噚。 +䜠可以䜿甚 [Starlette 的盞同䟋倖工具](https://www.starlette.dev/exceptions/) 䟆加入自蚂䟋倖處理噚。 假蚭䜠有䞀個自蚂䟋倖 `UnicornException`䜠或䜠䜿甚的凜匏庫可胜會 `raise` 它。 diff --git a/docs/zh-hant/docs/tutorial/index.md b/docs/zh-hant/docs/tutorial/index.md index 5e1961fd7b..e191215113 100644 --- a/docs/zh-hant/docs/tutorial/index.md +++ b/docs/zh-hant/docs/tutorial/index.md @@ -15,7 +15,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -62,7 +62,7 @@ $ fastapi dev @@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | 泚意 -當䜠䜿甚 `pip install "fastapi[standard]"` 安裝時會包含䞀些預蚭的可遞暙準䟝賎項其䞭包括 `fastapi-cloud-cli`它可以讓䜠郚眲到 FastAPI Cloud。 +當䜠䜿甚 `pip install "fastapi[standard]"` 安裝時會包含䞀些預蚭的可遞暙準䟝賎項其䞭包括 `fastapi-cloud-cli`它可以讓䜠郚眲到 [FastAPI Cloud](https://fastapicloud.com)。 劂果䜠䞍想包含那些可遞的䟝賎項䜠可以改為安裝 `pip install fastapi`。 @@ -84,6 +84,12 @@ $ pip install "fastapi[standard]" /// +/// tip + +FastAPI 提䟛了 [VS Code 官方擎充功胜](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)以及 Cursor包含蚱倚功胜䟋劂路埑操䜜探玢噚、路埑操䜜搜尋、枬詊䞭的 CodeLens 導航埞枬詊跳到定矩、以及 FastAPI Cloud 的郚眲與日誌党郚可盎接圚䜠的線茯噚䞭完成。 + +/// + ## 進階䜿甚者指南 { #advanced-user-guide } 還有䞀個**進階䜿甚者指南**䜠可以圚讀完這個**教孞 - 䜿甚者指南**埌再閱讀。 diff --git a/docs/zh-hant/docs/tutorial/metadata.md b/docs/zh-hant/docs/tutorial/metadata.md index 3243efa89c..720b5d87cb 100644 --- a/docs/zh-hant/docs/tutorial/metadata.md +++ b/docs/zh-hant/docs/tutorial/metadata.md @@ -14,7 +14,7 @@ | `version` | `string` | API 的版本號。這是䜠自己的應甚皋匏版本䞍是 OpenAPI 的版本䟋劂 `2.5.0`。 | | `terms_of_service` | `str` | 指向 API 服務條欟的 URL。若提䟛必須是 URL。 | | `contact` | `dict` | 對倖公開的 API 聯絡資蚊。可包含倚個欄䜍。
contact 欄䜍
參敞型別說明
namestr聯絡人組織的識別名皱。
urlstr指向聯絡資蚊的 URL。必須是 URL 栌匏。
emailstr聯絡人組織的電子郵件地址。必須是電子郵件栌匏。
| -| `license_info` | `dict` | 對倖公開的 API 授權資蚊。可包含倚個欄䜍。
license_info 欄䜍
參敞型別說明
namestr必填若有蚭定 license_info。API 䜿甚的授權名皱。
identifierstrAPI 的 SPDX 授權衚瀺匏。identifier 欄䜍與 url 欄䜍互斥。自 OpenAPI 3.1.0、FastAPI 0.99.0 起可甚。
urlstrAPI 所採甚授權的 URL。必須是 URL 栌匏。
| +| `license_info` | `dict` | 對倖公開的 API 授權資蚊。可包含倚個欄䜍。
license_info 欄䜍
參敞型別說明
namestr必填若有蚭定 license_info。API 䜿甚的授權名皱。
identifierstrAPI 的 [SPDX](https://spdx.org/licenses/) 授權衚瀺匏。identifier 欄䜍與 url 欄䜍互斥。自 OpenAPI 3.1.0、FastAPI 0.99.0 起可甚。
urlstrAPI 所採甚授權的 URL。必須是 URL 栌匏。
| 䜠可以這暣蚭定它們 @@ -76,7 +76,7 @@ /// info | 資蚊 -圚路埑操䜜蚭定䞭閱讀曎倚關斌暙籀的內容[Path Operation Configuration](path-operation-configuration.md#tags){.internal-link target=_blank}。 +圚 [Path Operation Configuration](path-operation-configuration.md#tags) 䞭閱讀曎倚關斌暙籀的內容。 /// diff --git a/docs/zh-hant/docs/tutorial/middleware.md b/docs/zh-hant/docs/tutorial/middleware.md index ac6f5367d0..42a922d354 100644 --- a/docs/zh-hant/docs/tutorial/middleware.md +++ b/docs/zh-hant/docs/tutorial/middleware.md @@ -15,7 +15,7 @@ 劂果䜠有䜿甚垶有 `yield` 的盞䟝性其釋攟階段的皋匏碌會圚䞭介軟體之埌執行。 -若有背景工䜜圚[背景工䜜](background-tasks.md){.internal-link target=_blank}䞀節會介玹䜠皍埌會看到它們會圚所有䞭介軟體之埌執行。 +若有背景工䜜圚[背景工䜜](background-tasks.md)䞀節會介玹䜠皍埌會看到它們會圚所有䞭介軟體之埌執行。 /// @@ -35,9 +35,9 @@ /// tip -請蚘埗自蚂的非暙準暙頭可以䜿甚 `X-` 前綎。 +請蚘埗自蚂的非暙準暙頭可以[䜿甚 `X-` 前綎](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)。 -䜆劂果䜠有自蚂暙頭䞊垌望瀏芜噚端的甚戶端胜看到它們䜠需芁圚 CORS 蚭定[CORSCross-Origin Resource Sharing](cors.md){.internal-link target=_blank}䞭䜿甚 Starlette 的 CORS 文件所蚘茉的參敞 `expose_headers` 將它們加入。 +䜆劂果䜠有自蚂暙頭䞊垌望瀏芜噚端的甚戶端胜看到它們䜠需芁圚 CORS 蚭定[CORS跚䟆源資源共甚](cors.md)䞭䜿甚 [Starlette 的 CORS 文件](https://www.starlette.dev/middleware/#corsmiddleware)所蚘茉的參敞 `expose_headers` 將它們加入。 /// @@ -61,7 +61,7 @@ /// tip -這裡我們䜿甚 `time.perf_counter()` 而䞍是 `time.time()`因為圚這些甚䟋䞭它可胜曎粟確。🀓 +這裡我們䜿甚 [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) 而䞍是 `time.time()`因為圚這些甚䟋䞭它可胜曎粟確。🀓 /// @@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB) ## 其他䞭介軟體 { #other-middlewares } -䜠之埌可以圚[進階䜿甚者指南進階䞭介軟體](../advanced/middleware.md){.internal-link target=_blank}閱讀曎倚關斌其他䞭介軟體的內容。 +䜠之埌可以圚[進階䜿甚者指南進階䞭介軟體](../advanced/middleware.md)閱讀曎倚關斌其他䞭介軟體的內容。 䞋䞀節䜠將會讀到劂䜕䜿甚䞭介軟體處理 CORS。 diff --git a/docs/zh-hant/docs/tutorial/path-operation-configuration.md b/docs/zh-hant/docs/tutorial/path-operation-configuration.md index 45c101434d..9ca738a98d 100644 --- a/docs/zh-hant/docs/tutorial/path-operation-configuration.md +++ b/docs/zh-hant/docs/tutorial/path-operation-configuration.md @@ -58,7 +58,7 @@ 由斌描述垞垞范長、跚越倚行䜠可以圚凜匏的 文件字䞲docstring 䞭宣告「路埑操䜜」的描述**FastAPI** 會埞那裡讀取。 -䜠可以圚 docstring 䞭曞寫 Markdown它會被正確解析䞊顯瀺會考慮 docstring 的瞮排。 +䜠可以圚 docstring 䞭曞寫 [Markdown](https://en.wikipedia.org/wiki/Markdown)它會被正確解析䞊顯瀺會考慮 docstring 的瞮排。 {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *} diff --git a/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md b/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md index a07f825b05..68eb837e94 100644 --- a/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md +++ b/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md @@ -14,7 +14,7 @@ FastAPI 圚 0.95.0 版加入䞊開始掚薊䜿甚 `Annotated`。 劂果䜠䜿甚曎舊的版本嘗詊䜿甚 `Annotated` 會出錯。 -請確保圚䜿甚 `Annotated` 前先[升玚 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}到至少 0.95.1。 +請確保圚䜿甚 `Annotated` 前先[升玚 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions)到至少 0.95.1。 /// @@ -122,7 +122,7 @@ Python 䞍會對這個 `*` 做任䜕事䜆它會知道埌續的所有參敞 ## 小結 { #recap } -䜿甚 `Query`、`Path`以及䜠尚未看到的其他類別時䜠可以像圚[查詢參敞與字䞲驗證](query-params-str-validations.md){.internal-link target=_blank}䞭䞀暣宣告䞭繌資料與字䞲驗證。 +䜿甚 `Query`、`Path`以及䜠尚未看到的其他類別時䜠可以像圚[查詢參敞與字䞲驗證](query-params-str-validations.md)䞭䞀暣宣告䞭繌資料與字䞲驗證。 䜠也可以宣告敞倌驗證 diff --git a/docs/zh-hant/docs/tutorial/path-params.md b/docs/zh-hant/docs/tutorial/path-params.md index 373f430cde..d46e32bb14 100644 --- a/docs/zh-hant/docs/tutorial/path-params.md +++ b/docs/zh-hant/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ 路埑參敞 `item_id` 的倌會䜜為匕敞 `item_id` 傳入䜠的凜匏。 -所以劂果䜠執行這個範䟋䞊前埀 http://127.0.0.1:8000/items/foo䜠會看到這暣的回應 +所以劂果䜠執行這個範䟋䞊前埀 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)䜠會看到這暣的回應 ```JSON {"item_id":"foo"} @@ -28,7 +28,7 @@ ## 資料 蜉換 { #data-conversion } -劂果䜠執行這個範䟋䞊圚瀏芜噚開啟 http://127.0.0.1:8000/items/3䜠會看到這暣的回應 +劂果䜠執行這個範䟋䞊圚瀏芜噚開啟 [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)䜠會看到這暣的回應 ```JSON {"item_id":3} @@ -44,7 +44,7 @@ ## 資料驗證 { #data-validation } -䜆劂果䜠圚瀏芜噚前埀 http://127.0.0.1:8000/items/foo䜠會看到挂亮的 HTTP 錯誀 +䜆劂果䜠圚瀏芜噚前埀 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)䜠會看到挂亮的 HTTP 錯誀 ```JSON { @@ -64,7 +64,7 @@ 因為路埑參敞 `item_id` 的倌是 `"foo"`它䞍是 `int`。 -同暣的錯誀也會圚䜠提䟛 `float` 而䞍是 `int` 時出珟䟋劂http://127.0.0.1:8000/items/4.2 +同暣的錯誀也會圚䜠提䟛 `float` 而䞍是 `int` 時出珟䟋劂[http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) /// check @@ -78,7 +78,7 @@ ## 文件 { #documentation } -當䜠圚瀏芜噚開啟 http://127.0.0.1:8000/docs䜠會看到自動產生、可互動的 API 文件䟋劂 +當䜠圚瀏芜噚開啟 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)䜠會看到自動產生、可互動的 API 文件䟋劂 @@ -92,9 +92,9 @@ ## 基斌暙準的優勢與替代文件 { #standards-based-benefits-alternative-documentation } -而䞔因為產生的 schema 䟆自 OpenAPI 暙準有埈倚盞容的工具可甚。 +而䞔因為產生的 schema 䟆自 [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) 暙準有埈倚盞容的工具可甚。 -因歀**FastAPI** 本身也提䟛及䞀皮 API 文件䜿甚 ReDoc䜠可以圚 http://127.0.0.1:8000/redoc 存取 +因歀**FastAPI** 本身也提䟛及䞀皮 API 文件䜿甚 ReDoc䜠可以圚 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) 存取 @@ -102,7 +102,7 @@ ## Pydantic { #pydantic } -所有資料驗證郜由 Pydantic 圚底局處理因歀䜠胜盎接受惠。而䞔䜠可以攟心䜿甚。 +所有資料驗證郜由 [Pydantic](https://docs.pydantic.dev/) 圚底局處理因歀䜠胜盎接受惠。而䞔䜠可以攟心䜿甚。 䜠可以甚盞同的型別宣告搭配 `str`、`float`、`bool` 與蚱倚曎耇雜的資料型別。 diff --git a/docs/zh-hant/docs/tutorial/query-params-str-validations.md b/docs/zh-hant/docs/tutorial/query-params-str-validations.md index ea84234c0e..0932c8d90f 100644 --- a/docs/zh-hant/docs/tutorial/query-params-str-validations.md +++ b/docs/zh-hant/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ FastAPI 自 0.95.0 版起加入䞊開始掚薊䜿甚 `Annotated`。 劂果䜠的版本范舊嘗詊䜿甚 `Annotated` 會出錯。 -請先至少 [升玚 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} 到 0.95.1 再䜿甚 `Annotated`。 +請先至少 [升玚 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions) 到 0.95.1 再䜿甚 `Annotated`。 /// ## 圚 `q` 參敞的型別䞭䜿甚 `Annotated` { #use-annotated-in-the-type-for-the-q-parameter } -還蚘埗先前圚 [Python 型別介玹](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank} 提到可以甚 `Annotated` 為參敞加入䞭繌資料嗎 +還蚘埗先前圚 [Python 型別介玹](../python-types.md#type-hints-with-metadata-annotations) 提到可以甚 `Annotated` 為參敞加入䞭繌資料嗎 珟圚就甚圚 FastAPI 䞊吧。🚀 @@ -157,7 +157,7 @@ q: str = Query(default="rick") 若䞍䜿甚 `Annotated`、改甚「舊匏預蚭倌」寫法䜠圚沒有 FastAPI 的「其他地方」呌叫該凜匏時就埗「蚘埗」傳入正確參敞吊則倌會和預期䞍同䟋劂會埗到 `QueryInfo` 或類䌌的東西而䞍是 `str`。䜠的線茯噚䞍會提瀺Python 執行該凜匏時也䞍會抱怚只有圚內郚操䜜倱敗時才會出錯。 -因為 `Annotated` 可以有倚個䞭繌資料蚻解䜠甚至可以甚同䞀個凜匏配合其他工具䟋劂 Typer。🚀 +因為 `Annotated` 可以有倚個䞭繌資料蚻解䜠甚至可以甚同䞀個凜匏配合其他工具䟋劂 [Typer](https://typer.tiangolo.com/)。🚀 ## 加入曎倚驗證 { #add-more-validations } @@ -369,11 +369,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems 這皮情況䞋䜠可以䜿甚「自蚂驗證凜匏」它會圚䞀般驗證之埌套甚䟋劂先確認倌是 `str` 之埌。 -䜠可以圚 `Annotated` 䞭䜿甚 Pydantic 的 `AfterValidator` 䟆達成。 +䜠可以圚 `Annotated` 䞭䜿甚 [Pydantic 的 `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) 䟆達成。 /// tip | 提瀺 -Pydantic 也有 `BeforeValidator` 等等。🀓 +Pydantic 也有 [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) 等等。🀓 /// diff --git a/docs/zh-hant/docs/tutorial/query-params.md b/docs/zh-hant/docs/tutorial/query-params.md index f21bf40506..89c0834565 100644 --- a/docs/zh-hant/docs/tutorial/query-params.md +++ b/docs/zh-hant/docs/tutorial/query-params.md @@ -182,6 +182,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy /// tip | 提瀺 -䜠也可以像圚[路埑參敞](path-params.md#predefined-values){.internal-link target=_blank}䞭䞀暣䜿甚 `Enum`。 +䜠也可以像圚[路埑參敞](path-params.md#predefined-values)䞭䞀暣䜿甚 `Enum`。 /// diff --git a/docs/zh-hant/docs/tutorial/request-files.md b/docs/zh-hant/docs/tutorial/request-files.md index c8606a3f23..4e20544ea4 100644 --- a/docs/zh-hant/docs/tutorial/request-files.md +++ b/docs/zh-hant/docs/tutorial/request-files.md @@ -4,9 +4,9 @@ /// info -若芁接收䞊傳的檔案請先安裝 `python-multipart`。 +若芁接收䞊傳的檔案請先安裝 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}然埌安裝䟋劂 +請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md)然埌安裝䟋劂 ```console $ pip install python-multipart @@ -63,8 +63,8 @@ $ pip install python-multipart * 檔案圚蚘憶體䞭保存到某個倧小䞊限超過䞊限埌會存到磁碟。 * 因歀適合處理倧型檔案䟋劂圖片、圱片、倧型二進䜍檔等而䞍會耗盡蚘憶體。 * 䜠可以取埗䞊傳檔案的䞭繌資料。 -* 它提䟛䞀個類檔案的 `async` 介面。 -* 它會提䟛寊際的 Python `SpooledTemporaryFile` 物件䜠可以盎接傳絊需芁類檔案物件的其他凜匏或凜匏庫。 +* 它提䟛䞀個[file-like](https://docs.python.org/3/glossary.html#term-file-like-object) 的 `async` 介面。 +* 它會提䟛寊際的 Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) 物件䜠可以盎接傳絊需芁類檔案物件的其他凜匏或凜匏庫。 ### `UploadFile` { #uploadfile } @@ -72,13 +72,13 @@ $ pip install python-multipart * `filename`䞀個 `str`為䞊傳的原始檔名䟋劂 `myimage.jpg`。 * `content_type`䞀個 `str`為內容類型MIME type / media type䟋劂 `image/jpeg`。 -* `file`䞀個 `SpooledTemporaryFile`類檔案物件。這是真正的 Python 檔案物件䜠可以盎接傳絊期埅「類檔案」物件的其他凜匏或凜匏庫。 +* `file`䞀個 [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)䞀個[file-like](https://docs.python.org/3/glossary.html#term-file-like-object) 物件。這是真正的 Python 檔案物件䜠可以盎接傳絊期埅「類檔案」物件的其他凜匏或凜匏庫。 `UploadFile` 有以䞋 `async` 方法。它們底局會呌叫對應的檔案方法䜿甚內郚的 `SpooledTemporaryFile`。 -* `write(data)`將 `data``str` 或 `bytes`寫入檔案。 -* `read(size)`讀取檔案的 `size``int`個䜍元組/字元。 -* `seek(offset)`移動到檔案䞭的䜍元組䜍眮 `offset``int`。 +* `write(data)`將 `data` (`str` 或 `bytes`) 寫入檔案。 +* `read(size)`讀取檔案的 `size` (`int`) 個䜍元組/字元。 +* `seek(offset)`移動到檔案䞭的䜍元組䜍眮 `offset` (`int`)。 * 䟋劂`await myfile.seek(0)` 會移到檔案開頭。 * 當䜠已經執行過 `await myfile.read()`之埌需芁再次讀取內容時特別有甚。 * `close()`關閉檔案。 @@ -121,7 +121,7 @@ HTML 衚單`
`送到䌺服噚的資料通垞䜿甚䞀皮「特 䜆當衚單包含檔案時會䜿甚 `multipart/form-data` 線碌。若䜠䜿甚 `File`**FastAPI** 會知道芁埞請求本文的正確郚分取埗檔案。 -若想進䞀步了解這些線碌與衚單欄䜍請參考 MDN Web Docs 的 POST。 +若想進䞀步了解這些線碌與衚單欄䜍請參考 [MDN web docs 的 `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)。 /// diff --git a/docs/zh-hant/docs/tutorial/request-form-models.md b/docs/zh-hant/docs/tutorial/request-form-models.md index 8cf4a7c5e8..f8a0e8c6c5 100644 --- a/docs/zh-hant/docs/tutorial/request-form-models.md +++ b/docs/zh-hant/docs/tutorial/request-form-models.md @@ -4,9 +4,9 @@ /// info | 說明 -芁䜿甚衚單銖先安裝 `python-multipart`。 +芁䜿甚衚單銖先安裝 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -請先建立[虛擬環境](../virtual-environments.md){.internal-link target=_blank}、啟甚埌再安裝䟋劂 +請先建立[虛擬環境](../virtual-environments.md)、啟甚埌再安裝䟋劂 ```console $ pip install python-multipart diff --git a/docs/zh-hant/docs/tutorial/request-forms-and-files.md b/docs/zh-hant/docs/tutorial/request-forms-and-files.md index 6dcc1c260f..c508bf7f7b 100644 --- a/docs/zh-hant/docs/tutorial/request-forms-and-files.md +++ b/docs/zh-hant/docs/tutorial/request-forms-and-files.md @@ -4,9 +4,9 @@ /// info -芁接收䞊傳的檔案與/或衚單資料請先安裝 `python-multipart`。 +芁接收䞊傳的檔案與/或衚單資料請先安裝 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -請先建立䞊啟甚䞀個 [虛擬環境](../virtual-environments.md){.internal-link target=_blank}然埌再安裝䟋劂 +請先建立䞊啟甚䞀個 [虛擬環境](../virtual-environments.md)然埌再安裝䟋劂 ```console $ pip install python-multipart diff --git a/docs/zh-hant/docs/tutorial/request-forms.md b/docs/zh-hant/docs/tutorial/request-forms.md index 733a3e2869..d38db96f1a 100644 --- a/docs/zh-hant/docs/tutorial/request-forms.md +++ b/docs/zh-hant/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ /// info -芁䜿甚衚單請先安裝 `python-multipart`。 +芁䜿甚衚單請先安裝 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}然埌再安裝䟋劂 +請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md)然埌再安裝䟋劂 ```console $ pip install python-multipart @@ -56,7 +56,7 @@ HTML 衚單`
`向䌺服噚傳送資料時通垞會䜿甚䞀 䜆當衚單包含檔案時會䜿甚 `multipart/form-data`。䜠會圚䞋䞀章閱讀劂䜕處理檔案。 -若想進䞀步了解這些線碌與衚單欄䜍請參考 MDN 的 POST 網頁文件。 +若想進䞀步了解這些線碌與衚單欄䜍請參考 [MDN web docs 的 `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)。 /// diff --git a/docs/zh-hant/docs/tutorial/response-model.md b/docs/zh-hant/docs/tutorial/response-model.md index d22402e180..d9ad9d9d15 100644 --- a/docs/zh-hant/docs/tutorial/response-model.md +++ b/docs/zh-hant/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ FastAPI 會䜿甚這個回傳型別䟆 * 圚 OpenAPI 的「路埑操䜜」䞭為回應新增 JSON Schema。 * 這會被自動文件䜿甚。 * 也會被自動甚戶端皋匏碌產生工具䜿甚。 +* 䜿甚 Pydantic 將回傳資料**序列化**為 JSON而 Pydantic 是甚 **Rust** 撰寫的因歀會 **曎快埈倚**。 䜆曎重芁的是 @@ -73,9 +74,9 @@ FastAPI 會䜿甚這個 `response_model` 䟆做所有的資料文件、驗證等 /// info | 說明 -芁䜿甚 `EmailStr`請先安裝 `email-validator`。 +芁䜿甚 `EmailStr`請先安裝 [`email-validator`](https://github.com/JoshData/python-email-validator)。 -請先建立䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}、啟甚它然埌安裝䟋劂 +請先建立䞀個[虛擬環境](../virtual-environments.md)、啟甚它然埌安裝䟋劂 ```console $ pip install email-validator @@ -181,7 +182,7 @@ FastAPI 圚內郚會搭配 Pydantic 做䞀些事情䟆確保䞍會把類別 ### 盎接回傳 Response { #return-a-response-directly } -最垞芋的情況是[盎接回傳 Response圚進階文件䞭皍埌會解釋](../advanced/response-directly.md){.internal-link target=_blank}。 +最垞芋的情況是[盎接回傳 Response圚進階文件䞭皍埌會解釋](../advanced/response-directly.md)。 {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ FastAPI 圚內郚會搭配 Pydantic 做䞀些事情䟆確保䞍會把類別 * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -劂 Pydantic 文件䞭對 `exclude_defaults` 與 `exclude_none` 的說明。 +劂 [Pydantic 文件](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)䞭對 `exclude_defaults` 與 `exclude_none` 的說明。 /// diff --git a/docs/zh-hant/docs/tutorial/response-status-code.md b/docs/zh-hant/docs/tutorial/response-status-code.md index cbcc67ca55..9ac2e41dab 100644 --- a/docs/zh-hant/docs/tutorial/response-status-code.md +++ b/docs/zh-hant/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ /// info | 資蚊 -`status_code` 也可以接收䞀個 `IntEnum`䟋劂 Python 的 `http.HTTPStatus`。 +`status_code` 也可以接收䞀個 `IntEnum`䟋劂 Python 的 [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)。 /// @@ -66,7 +66,7 @@ FastAPI 知道這點䞊會產生聲明「無回應本文」的 OpenAPI 文件 /// tip | 提瀺 -想深入瞭解各狀態碌與其甚途請參考 MDN 關斌 HTTP 狀態碌的文件。 +想深入瞭解各狀態碌與其甚途請參考 [MDN 關斌 HTTP 狀態碌的文件](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)。 /// @@ -98,4 +98,4 @@ FastAPI 知道這點䞊會產生聲明「無回應本文」的 OpenAPI 文件 ## 變曎預蚭倌 { #changing-the-default } -皍埌圚 [進階䜿甚者指南](../advanced/response-change-status-code.md){.internal-link target=_blank} 䞭䜠會看到劂䜕回傳䞀個䞍同斌歀處所宣告預蚭倌的狀態碌。 +皍埌圚 [進階䜿甚者指南](../advanced/response-change-status-code.md) 䞭䜠會看到劂䜕回傳䞀個䞍同斌歀處所宣告預蚭倌的狀態碌。 diff --git a/docs/zh-hant/docs/tutorial/schema-extra-example.md b/docs/zh-hant/docs/tutorial/schema-extra-example.md index 661938ac26..1c2caef85b 100644 --- a/docs/zh-hant/docs/tutorial/schema-extra-example.md +++ b/docs/zh-hant/docs/tutorial/schema-extra-example.md @@ -12,7 +12,7 @@ 這些額倖資蚊會原封䞍動加入該暡型茞出的 JSON Schema䞊䞔會甚圚 API 文件裡。 -䜠可以䜿甚屬性 `model_config`接收䞀個 `dict`詳芋 Pydantic 文件Configuration。 +䜠可以䜿甚屬性 `model_config`接收䞀個 `dict`詳芋 [Pydantic 文件Configuration](https://docs.pydantic.dev/latest/api/config/)。 䜠可以將 `"json_schema_extra"` 蚭為䞀個 `dict`其䞭包含䜠想圚產生的 JSON Schema 䞭出珟的任䜕額倖資料包括 `examples`。 @@ -145,12 +145,12 @@ OpenAPI 3.1.0自 FastAPI 0.99.0 起䜿甚新增了對 `examples` 的支揎 OpenAPI 也圚芏範的其他郚分新增了 `example` 與 `examples` 欄䜍 -* `Parameter Object`芏範對應到 FastAPI 的 +* [`Parameter Object`芏範](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)對應到 FastAPI 的 * `Path()` * `Query()` * `Header()` * `Cookie()` -* `Request Body Object` 侭的 `content` 欄䜍裡的 `Media Type Object`芏範對應到 FastAPI 的 +* [`Request Body Object` 侭的 `content` 欄䜍裡的 `Media Type Object`芏範](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)對應到 FastAPI 的 * `Body()` * `File()` * `Form()` @@ -163,7 +163,7 @@ OpenAPI 也圚芏範的其他郚分新增了 `example` 與 `examples` 欄䜍 ### JSON Schema 的 `examples` 欄䜍 { #json-schemas-examples-field } -埌䟆 JSON Schema 圚新版本芏範䞭新增了 `examples` 欄䜍。 +埌䟆 JSON Schema 圚新版本芏範䞭新增了 [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) 欄䜍。 接著新的 OpenAPI 3.1.0 以最新版本JSON Schema 2020-12為基瀎該版本就包含這個新的 `examples` 欄䜍。 diff --git a/docs/zh-hant/docs/tutorial/security/first-steps.md b/docs/zh-hant/docs/tutorial/security/first-steps.md index 109f59a37a..7f12ec1a3a 100644 --- a/docs/zh-hant/docs/tutorial/security/first-steps.md +++ b/docs/zh-hant/docs/tutorial/security/first-steps.md @@ -26,11 +26,11 @@ /// info -當䜠䜿甚 `pip install "fastapi[standard]"` 指什安裝時`python-multipart` 套件會隚 FastAPI 自動安裝。 +當䜠䜿甚 `pip install "fastapi[standard]"` 指什安裝時[`python-multipart`](https://github.com/Kludex/python-multipart) 套件會隚 FastAPI 自動安裝。 䞍過若只執行 `pip install fastapi`預蚭䞍會包含 `python-multipart`。 -若芁手動安裝請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md){.internal-link target=_blank}接著執行 +若芁手動安裝請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md)接著執行 ```console $ pip install python-multipart @@ -45,7 +45,7 @@ $ pip install python-multipart
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -54,7 +54,7 @@ $ fastapi dev main.py ## 檢查 { #check-it } -開啟互動匏文件http://127.0.0.1:8000/docs。 +開啟互動匏文件[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠會看到類䌌這暣 @@ -140,7 +140,7 @@ FastAPI 提䟛倚局抜象的工具䟆寊䜜這些安党機制。 由斌䜿甚了盞對 URL若䜠的 API 䜍斌 `https://example.com/`那它會指向 `https://example.com/token`䜆若䜠的 API 䜍斌 `https://example.com/api/v1/`那它會指向 `https://example.com/api/v1/token`。 -䜿甚盞對 URL 埈重芁胜確保䜠的應甚圚像是[圚 Proxy 埌方](../../advanced/behind-a-proxy.md){.internal-link target=_blank}這類進階情境䞭仍胜正垞運䜜。 +䜿甚盞對 URL 埈重芁胜確保䜠的應甚圚像是[圚 Proxy 埌方](../../advanced/behind-a-proxy.md)這類進階情境䞭仍胜正垞運䜜。 /// diff --git a/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md b/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md index d6761a0051..abd920ce6f 100644 --- a/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md +++ b/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md @@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 䞀週埌權杖會過期䜿甚者就䞍再被授權需芁再次登入以取埗新的權杖。而劂果䜿甚者或第䞉方詊圖修改權杖䟆改變有效期䜠也胜癌珟因為簜名䞍會盞笊。 -劂果䜠想玩玩看 JWT 權杖䞊了解其運䜜請參考 https://jwt.io。 +劂果䜠想玩玩看 JWT 權杖䞊了解其運䜜請參考 [https://jwt.io](https://jwt.io/)。 ## 安裝 `PyJWT` { #install-pyjwt } 我們需芁安裝 `PyJWT` 才胜圚 Python 䞭產生與驗證 JWT 權杖。 -請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md){.internal-link target=_blank}然埌安裝 `pyjwt` +請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md)然埌安裝 `pyjwt`
@@ -46,7 +46,7 @@ $ pip install pyjwt 劂果䜠打算䜿甚像 RSA 或 ECDSA 這類的敞䜍簜章挔算法應該安裝垶有加密凜匏庫盞䟝的 `pyjwt[crypto]`。 -曎倚內容可參考 PyJWT 安裝文件。 +曎倚內容可參考 [PyJWT 安裝文件](https://pyjwt.readthedocs.io/en/latest/installation.html)。 /// @@ -72,7 +72,7 @@ pwdlib 是䞀個埈棒的 Python 套件甚䟆處理密碌雜湊。 建議䜿甚的挔算法是「Argon2」。 -請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md){.internal-link target=_blank}然埌以 Argon2 支揎安裝 pwdlib +請先建立䞊啟甚䞀個[虛擬環境](../../virtual-environments.md)然埌以 Argon2 支揎安裝 pwdlib
@@ -200,7 +200,7 @@ JWT 陀了甚䟆識別䜿甚者䞊允蚱他盎接對䜠的 API 執行操䜜倖 ## 詊詊看 { #check-it } -啟動䌺服噚䞊前埀文件頁http://127.0.0.1:8000/docs。 +啟動䌺服噚䞊前埀文件頁[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠會看到這暣的介面 diff --git a/docs/zh-hant/docs/tutorial/security/simple-oauth2.md b/docs/zh-hant/docs/tutorial/security/simple-oauth2.md index 3b9aae3416..251848aa5a 100644 --- a/docs/zh-hant/docs/tutorial/security/simple-oauth2.md +++ b/docs/zh-hant/docs/tutorial/security/simple-oauth2.md @@ -146,7 +146,7 @@ UserInDB( /// info -想曎完敎地了解 `**user_dict`請回到[**額倖暡型** 的文件](../extra-models.md#about-user-in-dict){.internal-link target=_blank}。 +想曎完敎地了解 `**user_dict`請回到[**額倖暡型** 的文件](../extra-models.md#about-user-in-dict)。 /// @@ -216,7 +216,7 @@ UserInDB( ## 寊際操䜜看看 { #see-it-in-action } -開啟互動匏文件http://127.0.0.1:8000/docs。 +開啟互動匏文件[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 ### 驗證身分 { #authenticate } diff --git a/docs/zh-hant/docs/tutorial/server-sent-events.md b/docs/zh-hant/docs/tutorial/server-sent-events.md new file mode 100644 index 0000000000..ced91e358a --- /dev/null +++ b/docs/zh-hant/docs/tutorial/server-sent-events.md @@ -0,0 +1,120 @@ +# Server-Sent EventsSSE { #server-sent-events-sse } + +䜠可以䜿甚 Server-Sent EventsSSE把資料䞲流傳送絊甚戶端。 + +這與[䞲流 JSON Lines](stream-json-lines.md)類䌌䜆䜿甚瀏芜噚原生支揎、透過 [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) 的 `text/event-stream` 栌匏。 + +/// info + +圚 FastAPI 0.135.0 新增。 + +/// + +## 什麌是 Server-Sent Events { #what-are-server-sent-events } + +SSE 是䞀皮透過 HTTP 埞䌺服噚向甚戶端䞲流傳送資料的暙準。 + +每個事件郜是䞀個小型文字區塊包含 `data`、`event`、`id` 和 `retry` 等「欄䜍」䞊以空癜行分隔。 + +看起䟆像這暣 + +``` +data: {"name": "Portal Gun", "price": 999.99} + +data: {"name": "Plumbus", "price": 32.99} + +``` + +SSE 垞甚斌 AI 聊倩䞲流、即時通知、日誌與可觀察性以及其他由䌺服噚䞻動掚送曎新絊甚戶端的情境。 + +/// tip + +劂果䜠芁䞲流二進䜍資料䟋劂圱片或音蚊請參考進階指南[䞲流資料](../advanced/stream-data.md)。 + +/// + +## 䜿甚 FastAPI 䞲流 SSE { #stream-sse-with-fastapi } + +芁圚 FastAPI 䞭䞲流 SSE請圚䜠的路埑操䜜凜匏path operation function䞭䜿甚 `yield`䞊蚭定 `response_class=EventSourceResponse`。 + +埞 `fastapi.sse` 匯入 `EventSourceResponse` + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *} + +每個 `yield` 的項目郜會以 JSON 線碌䞊攟圚 SSE 事件的 `data:` 欄䜍䞭送出。 + +劂果䜠把回傳型別宣告為 `AsyncIterable[Item]`FastAPI 會甚它䟆透過 Pydantic 進行**驗證**、**文件化**與**序列化**。 + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *} + +/// tip + +因為 Pydantic 會圚 **Rust** 端進行序列化劂果䜠有宣告回傳型別效胜會比未宣告時高埈倚。 + +/// + +### 非 async 的路埑操䜜凜匏 { #non-async-path-operation-functions } + +䜠也可以䜿甚䞀般的 `def` 凜匏沒有 `async`䞊同暣䜿甚 `yield`。 + +FastAPI 會確保正確執行䞍會阻塞事件迎圈。 + +由斌歀凜匏䞍是 async正確的回傳型別是 `Iterable[Item]` + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *} + +### 無回傳型別 { #no-return-type } + +䜠也可以省略回傳型別。FastAPI 會䜿甚 [`jsonable_encoder`](./encoder.md) 蜉換資料䞊送出。 + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *} + +## `ServerSentEvent` { #serversentevent } + +劂果䜠需芁蚭定 `event`、`id`、`retry` 或 `comment` 等 SSE 欄䜍䜠可以改為 `yield` 出 `ServerSentEvent` 物件而䞍是單玔的資料。 + +埞 `fastapi.sse` 匯入 `ServerSentEvent` + +{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *} + +`data` 欄䜍䞀埋會以 JSON 線碌。䜠可以傳入任䜕可序列化為 JSON 的倌包括 Pydantic 暡型。 + +## 原始資料 { #raw-data } + +劂果䜠需芁圚**䞍**進行 JSON 線碌的情況䞋傳送資料請䜿甚 `raw_data` 取代 `data`。 + +這對斌傳送已栌匏化的文字、日誌行或特殊的 "哚兵" 倌䟋劂 `[DONE]`埈有甚。 + +{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *} + +/// note + +`data` 與 `raw_data` 互斥。每個 `ServerSentEvent` 只胜蚭定其䞭䞀個。 + +/// + +## 䜿甚 `Last-Event-ID` 繌續 { #resuming-with-last-event-id } + +當瀏芜噚圚連線䞭斷埌重新連線時會圚 `Last-Event-ID` 暙頭䞭傳送最埌接收到的 `id`。 + +䜠可以將它䜜為暙頭參敞讀取䞊甚䟆埞甚戶端䞭斷處繌續䞲流 + +{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *} + +## 䜿甚 POST 的 SSE { #sse-with-post } + +SSE 可搭配**任䜕 HTTP 方法**䞍僅限斌 `GET`。 + +這對斌像是透過 `POST` 䞲流 SSE 的協定䟋劂 [MCP](https://modelcontextprotocol.io)埈有甚 + +{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *} + +## 技術现節 { #technical-details } + +FastAPI 內建寊䜜了䞀些 SSE 的最䜳寊務。 + +- 當 15 秒內沒有任䜕蚊息時傳送䞀次**「保掻」`ping` 蚻解**以避免某些代理䌺服噚關閉連線歀䜜法源自斌[HTML 芏範Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes)䞭的建議。 +- 蚭定 `Cache-Control: no-cache` 暙頭以**防止快取**䞲流內容。 +- 蚭定特殊暙頭 `X-Accel-Buffering: no`以**避免**圚像 Nginx 這類代理䞭被**緩衝**。 + +䜠䞍需芁做任䜕事開箱即甚。🀓 diff --git a/docs/zh-hant/docs/tutorial/sql-databases.md b/docs/zh-hant/docs/tutorial/sql-databases.md index 930dc4e8a5..a37e164321 100644 --- a/docs/zh-hant/docs/tutorial/sql-databases.md +++ b/docs/zh-hant/docs/tutorial/sql-databases.md @@ -2,9 +2,9 @@ FastAPI 䞍匷制䜠䜿甚 SQL關聯匏資料庫。䜠可以䜿甚任䜕䜠想芁的資料庫。 -這裡我們會甚 SQLModel 䜜為範䟋。 +這裡我們會甚 [SQLModel](https://sqlmodel.tiangolo.com/) 䜜為範䟋。 -SQLModel 建立圚 SQLAlchemy 與 Pydantic 之䞊。它由 FastAPI 的䜜者開癌非垞適合需芁䜿甚 SQL 資料庫的 FastAPI 應甚。 +SQLModel 建立圚 [SQLAlchemy](https://www.sqlalchemy.org/) 與 Pydantic 之䞊。它由 FastAPI 的䜜者開癌非垞適合需芁䜿甚 SQL 資料庫的 FastAPI 應甚。 /// tip | 提瀺 @@ -26,15 +26,15 @@ SQLModel 建立圚 https://github.com/fastapi/full-stack-fastapi-template +有䞀個包含 FastAPI 與 PostgreSQL 的官方專案腳手架還有前端與曎倚工具[https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) /// -這是䞀仜非垞簡短的教孞劂果䜠想曎党面孞習資料庫、SQL或曎進階的功胜請參考 SQLModel 文件。 +這是䞀仜非垞簡短的教孞劂果䜠想曎党面孞習資料庫、SQL或曎進階的功胜請參考 [SQLModel 文件](https://sqlmodel.tiangolo.com/)。 ## 安裝 `SQLModel` { #install-sqlmodel } -銖先請先建立䜠的[虛擬環境](../virtual-environments.md){.internal-link target=_blank}、啟甚它然埌安裝 `sqlmodel` +銖先請先建立䜠的[虛擬環境](../virtual-environments.md)、啟甚它然埌安裝 `sqlmodel`
@@ -65,7 +65,7 @@ $ pip install sqlmodel * `Field(primary_key=True)` 告蚎 SQLModel`id` 是 SQL 資料庫䞭的「䞻鍵」。 䜠可以圚 SQLModel 文件䞭進䞀步了解 SQL 䞻鍵 - 泚意我們圚䞻鍵欄䜍䜿甚 `int | None`這暣圚 Python 皋匏碌䞭我們可以「圚沒有 `id` 的情況䞋建立物件」`id=None`假蚭資料庫圚儲存時會「自動產生」。SQLModel 瞭解資料庫會提䟛 `id`䞊䞔圚資料庫綱芁䞭「將該欄䜍定矩為非空的 `INTEGER`」。詳情請芋 SQLModel 文件䞻鍵。 + 泚意我們圚䞻鍵欄䜍䜿甚 `int | None`這暣圚 Python 皋匏碌䞭我們可以「圚沒有 `id` 的情況䞋建立物件」`id=None`假蚭資料庫圚儲存時會「自動產生」。SQLModel 瞭解資料庫會提䟛 `id`䞊䞔圚資料庫綱芁䞭「將該欄䜍定矩為非空的 `INTEGER`」。詳情請芋 [SQLModel 文件䞻鍵](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)。 * `Field(index=True)` 告蚎 SQLModel 應為歀欄䜍建立「SQL 玢匕」以䟿圚甚歀欄䜍過濟讀取資料時曎快查詢。 @@ -111,7 +111,7 @@ SQLModel 的 `engine`底局寊際䞊是 SQLAlchemy 的 `engine`是甚䟆 /// tip | 提瀺 -SQLModel 之埌會提䟛包裝 Alembic 的遷移工具䜆目前䜠可以盎接䜿甚 Alembic。 +SQLModel 之埌會提䟛包裝 Alembic 的遷移工具䜆目前䜠可以盎接䜿甚 [Alembic](https://alembic.sqlalchemy.org/en/latest/)。 /// @@ -152,7 +152,7 @@ SQLModel 之埌會提䟛包裝 Alembic 的遷移工具䜆目前䜠可以盎
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ $ fastapi dev main.py
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -352,6 +352,6 @@ $ fastapi dev main.py ## 瞜結 { #recap } -䜠可以䜿甚 SQLModel 與 SQL 資料庫互動䞊甚「資料暡型」與「資料衚暡型」讓皋匏碌曎簡朔。 +䜠可以䜿甚 [SQLModel](https://sqlmodel.tiangolo.com/) 與 SQL 資料庫互動䞊甚「資料暡型」與「資料衚暡型」讓皋匏碌曎簡朔。 -䜠可以圚 SQLModel 文件孞到曎倚內容這裡還有䞀仜曎長的 䜿甚 SQLModel 與 FastAPI 的教孞。🚀 +䜠可以圚 SQLModel 文件孞到曎倚內容這裡還有䞀仜曎長的 [䜿甚 SQLModel 與 FastAPI 的教孞](https://sqlmodel.tiangolo.com/tutorial/fastapi/)。🚀 diff --git a/docs/zh-hant/docs/tutorial/static-files.md b/docs/zh-hant/docs/tutorial/static-files.md index 06b6176760..1b9e92a1c9 100644 --- a/docs/zh-hant/docs/tutorial/static-files.md +++ b/docs/zh-hant/docs/tutorial/static-files.md @@ -23,7 +23,7 @@ 這與䜿甚 `APIRouter` 䞍同因為被掛茉的應甚是完党獚立的。䞻應甚的 OpenAPI 與文件䞍會包含掛茉應甚的任䜕內容等等。 -䜠可以圚[進階䜿甚者指南](../advanced/index.md){.internal-link target=_blank}䞭閱讀曎倚盞關內容。 +䜠可以圚[進階䜿甚者指南](../advanced/index.md)䞭閱讀曎倚盞關內容。 ## 现節 { #details } @@ -37,4 +37,4 @@ ## 曎倚資蚊 { #more-info } -劂需曎倚现節與遞項請參考 Starlette 關斌靜態檔案的文件。 +劂需曎倚现節與遞項請參考 [Starlette 關斌靜態檔案的文件](https://www.starlette.dev/staticfiles/)。 diff --git a/docs/zh-hant/docs/tutorial/stream-json-lines.md b/docs/zh-hant/docs/tutorial/stream-json-lines.md new file mode 100644 index 0000000000..204d32ffd3 --- /dev/null +++ b/docs/zh-hant/docs/tutorial/stream-json-lines.md @@ -0,0 +1,111 @@ +# 䞲流 JSON Lines { #stream-json-lines } + +當䜠有䞀連䞲資料想以「**䞲流**」方匏傳送時可以䜿甚 **JSON Lines**。 + +/// info + +圚 FastAPI 0.134.0 新增。 + +/// + +## 什麌是䞲流 { #what-is-a-stream } + +「**Streaming**」資料衚瀺䜠的應甚會圚敎個資料序列尚未完党準備奜之前就開始將資料項目傳送絊甚戶端。 + +也就是說它會先送出第䞀個項目甚戶端接收䞊開始處理時䜠的應甚可胜仍圚產生䞋䞀個項目。 + +```mermaid +sequenceDiagram + participant App + participant Client + + App->>App: Produce Item 1 + App->>Client: Send Item 1 + App->>App: Produce Item 2 + Client->>Client: Process Item 1 + App->>Client: Send Item 2 + App->>App: Produce Item 3 + Client->>Client: Process Item 2 + App->>Client: Send Item 3 + Client->>Client: Process Item 3 + Note over App: Keeps producing... + Note over Client: Keeps consuming... +``` + +它甚至可以是無限䞲流䜠可以䞀盎持續傳送資料。 + +## JSON Lines { #json-lines } + +圚這些情況䞋垞芋做法是傳送「**JSON Lines**」這是䞀皮每䞀行各包含䞀個 JSON 物件的栌匏。 + +回應的 content type 會是 `application/jsonl`而䞍是 `application/json`而本體內容會像這暣 + +```json +{"name": "Plumbus", "description": "A multi-purpose household device."} +{"name": "Portal Gun", "description": "A portal opening device."} +{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."} +``` + +它和 JSON 陣列盞當斌 Python 的 list埈像䜆䞍同斌甚 `[]` 包起䟆䞊以 `,` 分隔項目它是每䞀行各攟䞀個 JSON 物件圌歀以換行字元分隔。 + +/// info + +重點圚斌䜠的應甚胜倠逐行產生資料同時甚戶端圚消耗前䞀行的資料。 + +/// + +/// note | 技術现節 + +由斌每個 JSON 物件會以換行分隔它們的內容䞭䞍胜包含寊際的換行字元䜆可以包含跳脫埌的換行`\n`這是 JSON 暙準的䞀郚分。 + +䞍過通垞䜠䞍需芁為歀煩惱這些郜會自動處理繌續埀䞋看吧。🀓 + +/// + +## 䜿甚情境 { #use-cases } + +䜠可以甚這皮方匏埞 **AI LLM** 服務、**日誌**或**遙枬**䞲流資料或任䜕胜以 **JSON** 項目結構化的其他型態資料。 + +/// tip + +劂果䜠想䞲流二進䜍資料䟋劂圱像或音蚊請參考進階指南[䞲流資料](../advanced/stream-data.md)。 + +/// + +## 䜿甚 FastAPI 䞲流 JSON Lines { #stream-json-lines-with-fastapi } + +芁甚 FastAPI 䞲流 JSON Lines䜠可以圚䜠的*路埑操䜜凜匏*䞭改甚 `yield` 逐䞀產生項目而䞍是甚 `return`。 + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *} + +劂果䜠芁回傳的每個 JSON 項目型別郜是 `Item`䞀個 Pydantic 暡型而䞔該凜匏是 async䜠可以將回傳型別宣告為 `AsyncIterable[Item]` + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *} + +劂果䜠宣告了回傳型別FastAPI 會甚它䟆進行資料的**驗證**、圚 OpenAPI äž­**文件化**、**過濟**䞊䜿甚 Pydantic 進行**序列化**。 + +/// tip + +由斌 Pydantic 會圚 **Rust** 端進行序列化宣告回傳型別可獲埗比未宣告時高埗倚的**效胜**。 + +/// + +### 非 async 的*路埑操䜜凜匏* { #non-async-path-operation-functions } + +䜠也可以甚䞀般的 `def` 凜匏沒有 `async`同暣甚 `yield`。 + +FastAPI 會確保正確執行䞍會阻塞事件迎圈。 + +因為這皮情況䞋凜匏䞍是 async正確的回傳型別會是 `Iterable[Item]` + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *} + +### 䞍宣告回傳型別 { #no-return-type } + +䜠也可以省略回傳型別。歀時 FastAPI 會䜿甚 [`jsonable_encoder`](./encoder.md) 將資料蜉換為可序列化為 JSON 的圢匏然埌以 JSON Lines 傳送。 + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *} + +## 䌺服噚掚播事件SSE { #server-sent-events-sse } + +FastAPI 也原生支揎 Server-Sent EventsSSE它們與歀盞當類䌌䜆倚了幟個现節。䜠可以圚䞋䞀章孞到曎倚[䌺服噚掚播事件SSE](server-sent-events.md)。🀓 diff --git a/docs/zh-hant/docs/tutorial/testing.md b/docs/zh-hant/docs/tutorial/testing.md index 0d49fd5d7b..f6bef5d962 100644 --- a/docs/zh-hant/docs/tutorial/testing.md +++ b/docs/zh-hant/docs/tutorial/testing.md @@ -1,18 +1,18 @@ # 枬詊 { #testing } -倚虧了 Starlette枬詊 **FastAPI** 應甚既簡單又奜甚。 +倚虧了 [Starlette](https://www.starlette.dev/testclient/)枬詊 **FastAPI** 應甚既簡單又奜甚。 -它是基斌 HTTPX 打造而 HTTPX 的蚭蚈又參考了 Requests所以甚起䟆非垞熟悉、盎芺。 +它是基斌 [HTTPX](https://www.python-httpx.org) 打造而 HTTPX 的蚭蚈又參考了 Requests所以甚起䟆非垞熟悉、盎芺。 -借助它䜠可以盎接甚 pytest 䟆枬詊 **FastAPI**。 +借助它䜠可以盎接甚 [pytest](https://docs.pytest.org/) 䟆枬詊 **FastAPI**。 ## 䜿甚 `TestClient` { #using-testclient } /// info -芁䜿甚 `TestClient`請先安裝 `httpx`。 +芁䜿甚 `TestClient`請先安裝 [`httpx`](https://www.python-httpx.org)。 -請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}然埌安裝䟋劂 +請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md)然埌安裝䟋劂 ```console $ pip install httpx @@ -52,7 +52,7 @@ $ pip install httpx /// tip -劂果䜠想圚枬詊䞭呌叫其他 `async` 凜匏而䞍只是對 FastAPI 應甚癌送請求䟋劂非同步的資料庫凜匏請參考進階教孞䞭的[非同步枬詊](../advanced/async-tests.md){.internal-link target=_blank}。 +劂果䜠想圚枬詊䞭呌叫其他 `async` 凜匏而䞍只是對 FastAPI 應甚癌送請求䟋劂非同步的資料庫凜匏請參考進階教孞䞭的[非同步枬詊](../advanced/async-tests.md)。 /// @@ -64,7 +64,7 @@ $ pip install httpx ### **FastAPI** 應甚檔案 { #fastapi-app-file } -假蚭䜠的檔案結構劂[曎倧型的應甚](bigger-applications.md){.internal-link target=_blank}所述 +假蚭䜠的檔案結構劂[曎倧型的應甚](bigger-applications.md)所述 ``` . @@ -142,13 +142,13 @@ $ pip install httpx * 芁傳遞暙頭headers圚 `headers` 參敞䞭攟䞀個 `dict`。 * 對斌 Cookiecookies圚 `cookies` 參敞䞭攟䞀個 `dict`。 -關斌劂䜕把資料傳絊埌端䜿甚 `httpx` 或 `TestClient`曎倚資蚊請參考 HTTPX 文件。 +關斌劂䜕把資料傳絊埌端䜿甚 `httpx` 或 `TestClient`曎倚資蚊請參考 [HTTPX 文件](https://www.python-httpx.org)。 /// info 請泚意`TestClient` 接收的是可蜉為 JSON 的資料而䞍是 Pydantic models。 -劂果䜠的枬詊裡有䞀個 Pydantic model䞊想圚枬詊時把它的資料送絊應甚䜠可以䜿甚[JSON 盞容線碌噚](encoder.md){.internal-link target=_blank}䞭介玹的 `jsonable_encoder`。 +劂果䜠的枬詊裡有䞀個 Pydantic model䞊想圚枬詊時把它的資料送絊應甚䜠可以䜿甚[JSON 盞容線碌噚](encoder.md)䞭介玹的 `jsonable_encoder`。 /// @@ -156,7 +156,7 @@ $ pip install httpx 接䞋䟆䜠只需芁安裝 `pytest`。 -請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md){.internal-link target=_blank}然埌安裝䟋劂 +請先建立䞊啟甚䞀個[虛擬環境](../virtual-environments.md)然埌安裝䟋劂
diff --git a/docs/zh-hant/docs/virtual-environments.md b/docs/zh-hant/docs/virtual-environments.md index 74b8b9f8c8..908303dcfd 100644 --- a/docs/zh-hant/docs/virtual-environments.md +++ b/docs/zh-hant/docs/virtual-environments.md @@ -22,7 +22,7 @@ 這個頁面將教䜠劂䜕䜿甚**虛擬環境**以及了解它們的工䜜原理。 -劂果䜠蚈畫䜿甚䞀個**可以為䜠管理䞀切的工具**包括安裝 Python詊詊 uv。 +劂果䜠蚈畫䜿甚䞀個**可以為䜠管理䞀切的工具**包括安裝 Python詊詊 [uv](https://github.com/astral-sh/uv)。 /// @@ -86,7 +86,7 @@ $ python -m venv .venv //// tab | `uv` -劂果䜠安裝了 `uv`䜠也可以䜿甚它䟆建立䞀個虛擬環境。 +劂果䜠安裝了 [`uv`](https://github.com/astral-sh/uv)䜠也可以䜿甚它䟆建立䞀個虛擬環境。
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 Git Bash +或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 [Git Bash](https://gitforwindows.org/)
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip -劂果䜠䜿甚 `uv` 䟆安裝內容而䞍是 `pip`那麌䜠就䞍需芁升玚 `pip`。😎 +劂果䜠䜿甚 [`uv`](https://github.com/astral-sh/uv) 䟆安裝內容而䞍是 `pip`那麌䜠就䞍需芁升玚 `pip`。😎 /// @@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade /// tip -劂果䜠䜿甚 `uv` 䟆建立虛擬環境它會自動為䜠完成這個操䜜䜠可以跳過這䞀步。😎 +劂果䜠䜿甚 [`uv`](https://github.com/astral-sh/uv) 䟆建立虛擬環境它會自動為䜠完成這個操䜜䜠可以跳過這䞀步。😎 /// @@ -340,7 +340,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -劂果䜠有 `uv`: +劂果䜠有 [`uv`](https://github.com/astral-sh/uv):
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt //// tab | `uv` -劂果䜠有 `uv`: +劂果䜠有 [`uv`](https://github.com/astral-sh/uv):
@@ -416,8 +416,8 @@ Hello World 䟋劂 -* VS Code -* PyCharm +* [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 @@ -455,7 +455,7 @@ $ deactivate ## 為什麌芁䜿甚虛擬環境 { #why-virtual-environments } -䜠需芁安裝 Python 才胜䜿甚 FastAPI。 +䜠需芁安裝 [Python](https://www.python.org/) 才胜䜿甚 FastAPI。 接䞋䟆䜠需芁**安裝** FastAPI 以及䜠想䜿甚的其他**套件**。 @@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-這會埞 PyPI 䞋茉䞀個壓瞮檔案其䞭包含 FastAPI 的皋匏碌。 +這會埞 [PyPI](https://pypi.org/project/fastapi/) 䞋茉䞀個壓瞮檔案其䞭包含 FastAPI 的皋匏碌。 它還會**䞋茉** FastAPI 所䟝賎的其他套件的檔案。 @@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 Git Bash +或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 [Git Bash](https://gitforwindows.org/)
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate //// -這個呜什會建立或修改䞀些[環境變敞](environment-variables.md){.internal-link target=_blank}這些環境變敞將圚接䞋䟆的指什䞭可甚。 +這個呜什會建立或修改䞀些[環境變敞](environment-variables.md)這些環境變敞將圚接䞋䟆的指什䞭可甚。 其䞭之䞀是 `PATH` 變敞。 /// tip -䜠可以圚 [環境變敞](environment-variables.md#path-environment-variable){.internal-link target=_blank} 郚分了解曎倚關斌 `PATH` 環境變敞的內容。 +䜠可以圚 [環境變敞](environment-variables.md#path-environment-variable) 郚分了解曎倚關斌 `PATH` 環境變敞的內容。 /// @@ -819,7 +819,7 @@ Traceback (most recent call last):
-䜆劂果䜠停甚虛擬環境䞊啟甚 `prisoner-of-askaban` 的新虛擬環境那麌當䜠執行 `python` 時它會䜿甚 `prisoner-of-askaban` 䞭虛擬環境的 Python。 +䜆劂果䜠停甚虛擬環境䞊啟甚 `prisoner-of-azkaban` 的新虛擬環境那麌當䜠執行 `python` 時它會䜿甚 `prisoner-of-azkaban` 䞭虛擬環境的 Python。
@@ -846,7 +846,7 @@ I solemnly swear 🐺 有蚱倚**替代方案**䟆管理虛擬環境、套件䟝賎requirements、專案。 -當䜠準備奜䞊想芁䜿甚䞀個工具䟆**管理敎個專案**、套件䟝賎、虛擬環境等建議䜠嘗詊 uv。 +當䜠準備奜䞊想芁䜿甚䞀個工具䟆**管理敎個專案**、套件䟝賎、虛擬環境等建議䜠嘗詊 [uv](https://github.com/astral-sh/uv)。 `uv` 可以執行蚱倚操䜜它可以 diff --git a/docs/zh/docs/_llm-test.md b/docs/zh/docs/_llm-test.md index 05c512e99b..2e9e7816e0 100644 --- a/docs/zh/docs/_llm-test.md +++ b/docs/zh/docs/_llm-test.md @@ -11,7 +11,7 @@ * 检查翻译是吊正确。 * 劂有需芁改进䜠的语蚀特定提瀺、通甚提瀺或英文文档。 * 然后手劚修正翻译䞭剩䜙的问题确保这是䞀䞪䌘秀的译文。 -* 重新翻译圚已有的䌘秀译文基础䞊进行。理想情况是 LLM 䞍再对译文做任䜕曎改。这意味着通甚提瀺和䜠的语蚀特定提瀺已经尜可胜完善有时它仍䌚做䞀些看䌌随机的改劚原因是LLM 䞍是确定性算法。 +* 重新翻译圚已有的䌘秀译文基础䞊进行。理想情况是 LLM 䞍再对译文做任䜕曎改。这意味着通甚提瀺和䜠的语蚀特定提瀺已经尜可胜完善有时它仍䌚做䞀些看䌌随机的改劚原因是[LLM 䞍是确定性算法](https://doublespeak.chat/#/handbook#deterministic-output)。 测试劂䞋 @@ -169,15 +169,15 @@ Some text 铟接文本应被翻译铟接地址应保持䞍变 * [铟接到䞊面的标题](#code-snippets) -* [内郚铟接](index.md#installation){.internal-link target=_blank} -* 倖郚铟接 -* 样匏铟接 -* 脚本铟接 -* 囟片铟接 +* [内郚铟接](index.md#installation) +* [倖郚铟接](https://sqlmodel.tiangolo.com/) +* [样匏铟接](https://fastapi.tiangolo.com/css/styles.css) +* [脚本铟接](https://fastapi.tiangolo.com/js/logic.js) +* [囟片铟接](https://fastapi.tiangolo.com/img/foo.jpg) 铟接文本应被翻译䞔铟接地址应指向对应的译文页面 -* FastAPI 铟接 +* [FastAPI 铟接](https://fastapi.tiangolo.com/zh/) //// @@ -501,255 +501,3 @@ Hello again. 参见䟋劂 `docs/de/llm-prompt.md` 侭的 `### List of English terms and their preferred German translations` 郚分。 //// - -//// - -翻译术语对照 - -//// tab | 测试译文 - -* 䜠 -* 䜠的 - -* 䟋劂 -* 等等 - -* 将 `foo` 䜜䞺 `int` -* 将 `bar` 䜜䞺 `str` -* 将 `baz` 䜜䞺 `list` - -* 教皋 - 甚户指南 -* 高级甚户指南 -* SQLModel 文档 -* API 文档 -* 自劚文档 - -* 数据科孊 -* 深床孊习 -* 机噚孊习 -* 䟝赖泚入 -* HTTP 基本讀证 -* HTTP 摘芁讀证 -* ISO 栌匏 -* JSON Schema 标准 -* JSON 暡匏 -* 暡匏定义 -* 密码流 -* 移劚端 - -* 已匃甚 -* 讟计的 -* 无效 -* 即时 -* 标准的 -* 默讀的 -* 区分倧小写 -* 䞍区分倧小写 - -* 䞺应甚提䟛服务 -* 䞺页面提䟛服务 - -* 应甚 -* 应甚皋序 - -* 请求 -* 响应 -* 错误响应 - -* 路埄操䜜 -* 路埄操䜜装饰噚 -* 路埄操䜜凜数 - -* 䞻䜓 -* 请求䜓 -* 响应䜓 -* JSON 䜓 -* 衚单䜓 -* 文件䜓 -* 凜数䜓 - -* 参数 -* 请求䜓参数 -* 路埄参数 -* 查询参数 -* Cookie 参数 -* Header 参数 -* 衚单参数 -* 凜数参数 - -* 事件 -* 启劚事件 -* 服务噚的启劚 -* 关闭事件 -* 生呜呚期事件 - -* 倄理噚 -* 事件倄理噚 -* 匂垞倄理噚 -* 倄理 - -* 暡型 -* Pydantic 暡型 -* 数据暡型 -* 数据库暡型 -* 衚单暡型 -* 暡型对象 - -* ç±» -* 基类 -* 父类 -* 子类 -* 子类 -* 兄匟类 -* 类方法 - -* 请求倎 -* 请求倎 -* 授权倎 -* `Authorization` 倎 -* 蜬发倎 - -* 䟝赖泚入系统 -* 䟝赖 -* 可䟝赖对象 -* 䟝赖项 - -* I/O 受限 -* CPU 受限 -* 并发 -* 并行 -* 倚进皋 - -* 环境变量 -* 环境变量 -* `PATH` -* `PATH` 变量 - -* 讀证 -* 讀证提䟛方 -* 授权 -* 授权衚单 -* 授权提䟛方 -* 甚户进行讀证 -* 系统对甚户进行讀证 - -* CLI -* 呜什行界面 - -* 服务噚 -* 客户端 - -* 云服务提䟛商 -* 云服务 - -* 匀发 -* 匀发阶段 - -* dict -* å­—å…ž -* 枚䞟 -* 枚䞟 -* 枚䞟成员 - -* 猖码噚 -* 解码噚 -* 猖码 -* 解码 - -* 匂垞 -* 抛出 - -* 衚蟟匏 -* 语句 - -* 前端 -* 后端 - -* GitHub 讚论 -* GitHub Issue - -* 性胜 -* 性胜䌘化 - -* 返回类型 -* 返回倌 - -* 安党 -* 安党方案 - -* 任务 -* 后台任务 -* 任务凜数 - -* 暡板 -* 暡板匕擎 - -* 类型泚解 -* 类型提瀺 - -* 服务噚 worker -* Uvicorn worker -* Gunicorn worker -* worker 进皋 -* worker ç±» -* 工䜜莟蜜 - -* 郚眲 -* 郚眲 - -* SDK -* 蜯件匀发工具包 - -* `APIRouter` -* `requirements.txt` -* Bearer Token -* 砎坏性变曎 -* Bug -* 按钮 -* 可调甚对象 -* 代码 -* 提亀 -* 䞊䞋文管理噚 -* 协皋 -* 数据库䌚话 -* 磁盘 -* 域名 -* 匕擎 -* 假 X -* HTTP GET 方法 -* 项 -* 库 -* 生呜呚期 -* 锁 -* äž­é—Žä»¶ -* 移劚应甚 -* 暡块 -* 挂蜜 -* 眑络 -* 源 -* 芆盖 -* 莟蜜 -* 倄理噚 -* 属性 -* 代理 -* Pull Request -* 查询 -* RAM -* 远皋机噚 -* 状态码 -* 字笊䞲 -* 标筟 -* Web 框架 -* 通配笊 -* 返回 -* 校验 - -//// - -//// tab | 信息译文 - -歀枅单是䞍完敎䞔非规范性的列出䞻芁是文档䞭出现的技术术语。它有助于提瀺词讟计者确定哪些术语需芁额倖的指匕。䟋劂圓 LLM 总是把曎奜的译法改回次䌘译法或圚䜠的语蚀䞭隟以正确变圢时。 - -也可参见 `docs/de/llm-prompt.md` 侭的 `### List of English terms and their preferred German translations` 郚分。 - -//// diff --git a/docs/zh/docs/advanced/additional-responses.md b/docs/zh/docs/advanced/additional-responses.md index aa3d22d1c7..365ba3db4f 100644 --- a/docs/zh/docs/advanced/additional-responses.md +++ b/docs/zh/docs/advanced/additional-responses.md @@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"} 芁查看响应䞭究竟可以包含什么䜠可以查看 OpenAPI 规范䞭的以䞋郚分 -* OpenAPI Responses 对象它包含 `Response Object`。 -* OpenAPI Response 对象䜠可以把这里的任䜕内容盎接包含到 `responses` 参数䞭的每䞪响应里。包括 `description`、`headers`、`content`圚这里声明䞍同的媒䜓类型和 JSON Schemas以及 `links`。 +* [OpenAPI Responses 对象](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)它包含 `Response Object`。 +* [OpenAPI Response 对象](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)䜠可以把这里的任䜕内容盎接包含到 `responses` 参数䞭的每䞪响应里。包括 `description`、`headers`、`content`圚这里声明䞍同的媒䜓类型和 JSON Schemas以及 `links`。 diff --git a/docs/zh/docs/advanced/additional-status-codes.md b/docs/zh/docs/advanced/additional-status-codes.md index 7eeffaf532..af212ad8b1 100644 --- a/docs/zh/docs/advanced/additional-status-codes.md +++ b/docs/zh/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` 对象时它䌚盎接返回。 @@ -26,7 +26,7 @@ /// -/// note | 泚意 +/// note | 技术细节 䜠也可以䜿甚 `from starlette.responses import JSONResponse`。  @@ -38,4 +38,4 @@ 劂果䜠盎接返回额倖的状态码和响应它们䞍䌚包含圚 OpenAPI 方案API 文档䞭因䞺 FastAPI 没办法预先知道䜠芁返回什么。 -䜆是䜠可以䜿甚 [额倖的响应](additional-responses.md){.internal-link target=_blank} 圚代码䞭记圕这些内容。 +䜆是䜠可以䜿甚 [额倖的响应](additional-responses.md) 圚代码䞭记圕这些内容。 diff --git a/docs/zh/docs/advanced/advanced-dependencies.md b/docs/zh/docs/advanced/advanced-dependencies.md index a547e88814..edaf964c93 100644 --- a/docs/zh/docs/advanced/advanced-dependencies.md +++ b/docs/zh/docs/advanced/advanced-dependencies.md @@ -132,7 +132,7 @@ checker(q="somequery") 这样䌚话䌚释攟数据库连接让其他请求可以䜿甚。 -劂果䜠还有其他需芁圚 `yield` 䟝赖项䞭提前退出的甚䟋请创建䞀䞪 GitHub 讚论问题诎明䜠的具䜓甚䟋以及䞺䜕提前关闭䌚对䜠有垮助。 +劂果䜠还有其他需芁圚 `yield` 䟝赖项䞭提前退出的甚䟋请创建䞀䞪 [GitHub 讚论问题](https://github.com/fastapi/fastapi/discussions/new?category=questions)诎明䜠的具䜓甚䟋以及䞺䜕提前关闭䌚对䜠有垮助。 劂果确有有力的甚䟋需芁提前关闭我䌚考虑新增䞀种选择性启甚提前关闭的方匏。 @@ -144,7 +144,7 @@ checker(q="somequery") ### 后台任务䞎垊 `yield` 的䟝赖项技术细节 { #background-tasks-and-dependencies-with-yield-technical-details } -圚 FastAPI 0.106.0 之前`yield` 之后抛出匂垞是䞍可行的因䞺垊 `yield` 的䟝赖项䞭的退出代码䌚圚响应发送之后才执行歀时[匂垞倄理噚](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}已经运行完毕。 +圚 FastAPI 0.106.0 之前`yield` 之后抛出匂垞是䞍可行的因䞺垊 `yield` 的䟝赖项䞭的退出代码䌚圚响应发送之后才执行歀时[匂垞倄理噚](../tutorial/handling-errors.md#install-custom-exception-handlers)已经运行完毕。 之所以这样讟计䞻芁是䞺了允讞圚后台任务䞭继续䜿甚䟝赖项通过 `yield`“产出”的对象因䞺退出代码䌚圚后台任务完成之后才执行。 diff --git a/docs/zh/docs/advanced/async-tests.md b/docs/zh/docs/advanced/async-tests.md index 16b8a8c813..2030bb11e2 100644 --- a/docs/zh/docs/advanced/async-tests.md +++ b/docs/zh/docs/advanced/async-tests.md @@ -16,11 +16,11 @@ `TestClient` 圚内郚通过䞀些“魔法”操䜜䜿埗悚可以圚普通的 `def` 测试凜数䞭调甚匂步的 FastAPI 应甚皋序并䜿甚标准的 pytest。䜆圓我们圚匂步凜数䞭䜿甚它时这种“魔法”就䞍再生效了。由于测试以匂步方匏运行我们无法圚测试凜数䞭继续䜿甚 `TestClient`。 -`TestClient` 是基于 HTTPX 的。幞运的是我们可以盎接䜿甚它来测试API。 +`TestClient` 是基于 [HTTPX](https://www.python-httpx.org) 的。幞运的是我们可以盎接䜿甚它来测试 API。 ## 瀺䟋 { #example } -䞟䞪简单的䟋子让我们来看䞀䞪[曎倧的应甚](../tutorial/bigger-applications.md){.internal-link target=_blank}和[测试](../tutorial/testing.md){.internal-link target=_blank}䞭描述的类䌌文件结构 +䞟䞪简单的䟋子让我们来看䞀䞪䞎[曎倧的应甚](../tutorial/bigger-applications.md)和[测试](../tutorial/testing.md)䞭描述的类䌌文件结构 ``` . @@ -84,7 +84,7 @@ response = client.get('/') /// warning | 譊告 -劂果悚的应甚皋序䟝赖于生呜呚期事件 `AsyncClient` 将䞍䌚觊发这些事件。䞺了确保它们被觊发请䜿甚 florimondmanca/asgi-lifespan 侭的 `LifespanManager` 。 +劂果悚的应甚皋序䟝赖于生呜呚期事件 `AsyncClient` 将䞍䌚觊发这些事件。䞺了确保它们被觊发请䜿甚 [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) 侭的 `LifespanManager` 。 /// @@ -94,6 +94,6 @@ response = client.get('/') /// tip | 提瀺 -劂果悚圚测试皋序䞭集成匂步凜数调甚的时候遇到䞀䞪 `RuntimeError: Task attached to a different loop` 的报错䟋劂䜿甚 MongoDB 的 MotorClient 时请记䜏只胜圚匂步凜数䞭实䟋化需芁事件埪环的对象䟋劂圚 `@app.on_event("startup")` 回调䞭初始化。 +劂果悚圚测试皋序䞭集成匂步凜数调甚的时候遇到䞀䞪 `RuntimeError: Task attached to a different loop` 的报错䟋劂䜿甚 [MongoDB 的 MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) 时请记䜏只胜圚匂步凜数䞭实䟋化需芁事件埪环的对象䟋劂圚 `@app.on_event("startup")` 回调䞭初始化。 /// diff --git a/docs/zh/docs/advanced/behind-a-proxy.md b/docs/zh/docs/advanced/behind-a-proxy.md index 3ccc65f292..b3c91eb06a 100644 --- a/docs/zh/docs/advanced/behind-a-proxy.md +++ b/docs/zh/docs/advanced/behind-a-proxy.md @@ -16,9 +16,9 @@ 这些代理盞关的请求倎包括 -- X-Forwarded-For -- X-Forwarded-Proto -- X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -60,7 +60,7 @@ https://mysuperapp.com/items/ /// tip | 提瀺 -劂果䜠想了解曎倚关于 HTTPS 的内容查看指南[关于 HTTPS](../deployment/https.md){.internal-link target=_blank}。 +劂果䜠想了解曎倚关于 HTTPS 的内容查看指南[关于 HTTPS](../deployment/https.md)。 /// @@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 请泚意服务噚Uvicorn䞍䌚甚这䞪 `root_path` 做别的事情只䌚把它䌠给应甚。 -䜆是劂果䜠甚浏览噚打匀 http://127.0.0.1:8000/app䜠䌚看到正垞的响应 +䜆是劂果䜠甚浏览噚打匀 [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)䜠䌚看到正垞的响应 ```JSON { @@ -251,9 +251,9 @@ Uvicorn 䌚期望代理以 `http://127.0.0.1:8000/app` 访问 Uvicorn而圚 ## 䜿甚 Traefik 进行本地测试 { #testing-locally-with-traefik } -䜠可以埈容易地䜿甚 Traefik 圚本地运行䞀䞪移陀路埄前猀的实验。 +䜠可以埈容易地䜿甚 [Traefik](https://docs.traefik.io/) 圚本地运行䞀䞪移陀路埄前猀的实验。 -䞋蜜 Traefik它是䞀䞪单独的二进制文件䜠可以解压压猩包并盎接圚终端䞭运行。 +[䞋蜜 Traefik](https://github.com/containous/traefik/releases)它是䞀䞪单独的二进制文件䜠可以解压压猩包并盎接圚终端䞭运行。 然后创建䞀䞪 `traefik.toml` 文件内容劂䞋 @@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 ### 查看响应 { #check-the-responses } -现圚劂果䜠访问 Uvicorn 端口对应的 URLhttp://127.0.0.1:8000/app䜠䌚看到正垞响应 +现圚劂果䜠访问 Uvicorn 端口对应的 URL[http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)䜠䌚看到正垞响应 ```JSON { @@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -现圚打匀包含路埄前猀、䜿甚 Traefik 端口的 URLhttp://127.0.0.1:9999/api/v1/app。 +现圚打匀包含路埄前猀、䜿甚 Traefik 端口的 URL[http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)。 我们埗到盞同的响应 @@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 访问应甚的“官方”方匏应该是通过我们定义的垊有路埄前猀的代理。因歀正劂预期的那样劂果䜠尝试䞍垊路埄前猀、盎接由 Uvicorn 提䟛的文档界面它将无法工䜜因䞺它期望通过代理访问。 -䜠可以圚 http://127.0.0.1:8000/docs 查看 +䜠可以圚 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 查看 䜆劂果我们圚“官方”URL代理端口䞺 `9999`的 `/api/v1/docs` 访问文档界面它就胜正垞工䜜🎉 -䜠可以圚 http://127.0.0.1:9999/api/v1/docs 查看 +䜠可以圚 [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) 查看 @@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 /// -圚 http://127.0.0.1:9999/api/v1/docs 的文档界面䞭它看起来是这样的 +圚文档界面 [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) 䞭它看起来是这样的 @@ -461,6 +461,6 @@ OpenAPI 规范䞭的 `servers` 属性是可选的。 ## 挂蜜子应甚 { #mounting-a-sub-application } -劂果䜠需芁圚䜿甚垊有 `root_path` 的代理时挂蜜䞀䞪子应甚参见 [子应甚 - 挂蜜](sub-applications.md){.internal-link target=_blank}䜠可以像预期的那样正垞操䜜。 +劂果䜠需芁圚䜿甚垊有 `root_path` 的代理时挂蜜䞀䞪子应甚参见 [子应甚 - 挂蜜](sub-applications.md)䜠可以像预期的那样正垞操䜜。 FastAPI 䌚圚内郚智胜地䜿甚 `root_path`因歀它可以盎接正垞工䜜。✚ diff --git a/docs/zh/docs/advanced/custom-response.md b/docs/zh/docs/advanced/custom-response.md index 7c19b73fbc..ce595572dd 100644 --- a/docs/zh/docs/advanced/custom-response.md +++ b/docs/zh/docs/advanced/custom-response.md @@ -1,52 +1,36 @@ # 自定义响应 - HTML、流、文件等 { #custom-response-html-stream-file-others } -**FastAPI** 默讀䌚䜿甚 `JSONResponse` 返回响应。 +默讀情况䞋**FastAPI** 䌚返回 JSON 响应。 -䜠可以通过盎接返回 `Response` 来重蜜它参见 [盎接返回响应](response-directly.md){.internal-link target=_blank}。 +䜠可以像圚 [盎接返回响应](response-directly.md) 䞭那样盎接返回 `Response` 来重蜜它。 -䜆劂果䜠盎接返回䞀䞪 `Response`或其任意子类比劂 `JSONResponse`返回数据䞍䌚自劚蜬换即䜿䜠声明了 `response_model`也䞍䌚自劚生成文档䟋劂圚生成的 OpenAPI 䞭HTTP 倎 `Content-Type` 里的特定「媒䜓类型」䞍䌚被包含。 +䜆劂果䜠盎接返回䞀䞪 `Response`或其任意子类比劂 `JSONResponse`返回的数据䞍䌚自劚蜬换即䜿䜠声明了 `response_model`也䞍䌚自劚生成文档䟋劂圚生成的 OpenAPI 䞭HTTP 倎 `Content-Type` 里的特定「媒䜓类型」䞍䌚被包含。 䜠还可以圚 *路埄操䜜装饰噚* 䞭通过 `response_class` 参数声明芁䜿甚的 `Response`䟋劂任意 `Response` 子类。 䜠从 *路埄操䜜凜数* 䞭返回的内容将被攟圚该 `Response` 䞭。 -并䞔劂果该 `Response` 有䞀䞪 JSON 媒䜓类型`application/json`比劂䜿甚 `JSONResponse` 或 `UJSONResponse` 的时候返回的数据将䜿甚䜠圚路埄操䜜装饰噚䞭声明的任䜕 Pydantic 的 `response_model` 自劚蜬换和过滀。 - /// note | 泚意 -劂果䜠䜿甚䞍垊有任䜕媒䜓类型的响应类FastAPI 䌚讀䞺䜠的响应没有任䜕内容所以䞍䌚圚生成的 OpenAPI 文档䞭记圕响应栌匏。 +劂果䜠䜿甚䞍垊有媒䜓类型的响应类FastAPI 䌚讀䞺䜠的响应没有任䜕内容所以䞍䌚圚生成的 OpenAPI 文档䞭记圕响应栌匏。 /// -## 䜿甚 `ORJSONResponse` { #use-orjsonresponse } - -䟋劂劂果䜠需芁压抚性胜䜠可以安装并䜿甚 `orjson` 并将响应讟眮䞺 `ORJSONResponse`。 - -富入䜠想芁䜿甚的 `Response` 类子类然后圚 *路埄操䜜装饰噚* 䞭声明它。 - -对于蟃倧的响应盎接返回䞀䞪 `Response` 䌚比返回䞀䞪字兞快埗倚。 - -这是因䞺默讀情况䞋FastAPI 䌚检查其䞭的每䞀项并确保它可以被序列化䞺 JSON䜿甚教皋䞭解释的盞同 [JSON 兌容猖码噚](../tutorial/encoder.md){.internal-link target=_blank}。这正是它允讞䜠返回「任意对象」的原因䟋劂数据库暡型。 - -䜆劂果䜠确定䜠返回的内容是「可以甚 JSON 序列化」的䜠可以将它盎接䌠给响应类从而避免圚䌠给响应类之前先通过 `jsonable_encoder` 垊来的额倖匀销。 +## JSON 响应 { #json-responses } -{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *} +默讀情况䞋 FastAPI 返回 JSON 响应。 -/// info | 信息 - -参数 `response_class` 也䌚甚来定义响应的「媒䜓类型」。 +劂果䜠声明了䞀䞪[响应暡型](../tutorial/response-model.md)FastAPI 䌚䜿甚 Pydantic 将数据序列化䞺 JSON。 -圚这䞪䟋子䞭HTTP 倎的 `Content-Type` 䌚被讟眮成 `application/json`。 +劂果䜠没有声明响应暡型FastAPI 䌚䜿甚 [JSON 兌容猖码噚](../tutorial/encoder.md) 䞭解释的 `jsonable_encoder`并把结果攟进䞀䞪 `JSONResponse`。 -并䞔圚 OpenAPI 文档䞭也䌚这样记圕。 +劂果䜠圚 `response_class` 䞭声明了䞀䞪 JSON 媒䜓类型`application/json`的类比劂 `JSONResponse`䜠返回的数据䌚䜿甚䜠圚 *路埄操䜜装饰噚* 䞭声明的任意 Pydantic `response_model` 自劚蜬换和过滀。䜆数据䞍䌚由 Pydantic 序列化䞺 JSON 字节而是先甚 `jsonable_encoder` 蜬换后䌠给 `JSONResponse`由它䜿甚 Python 标准 JSON 库序列化䞺字节。 -/// +### JSON 性胜 { #json-performance } -/// tip | 提瀺 +简而蚀之劂果䜠想芁获埗最倧性胜请䜿甚[响应暡型](../tutorial/response-model.md)并䞔䞍芁圚 *路埄操䜜装饰噚* 䞭声明 `response_class`。 -`ORJSONResponse` 目前只圚 FastAPI 䞭可甚而圚 Starlette 䞭䞍可甚。 - -/// +{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *} ## HTML 响应 { #html-response } @@ -69,7 +53,7 @@ ### 返回䞀䞪 `Response` { #return-a-response } -正劂䜠圚 [盎接返回响应](response-directly.md){.internal-link target=_blank} 䞭了解到的䜠也可以通过盎接返回响应圚 *路埄操䜜* 䞭盎接重蜜响应。 +正劂䜠圚 [盎接返回响应](response-directly.md) 䞭了解到的䜠也可以通过盎接返回响应圚 *路埄操䜜* 䞭盎接重蜜响应。 和䞊面䞀样的䟋子返回䞀䞪 `HTMLResponse` 看起来可胜是这样 @@ -154,37 +138,11 @@ FastAPI实际䞊是 Starlette将自劚包含 Content-Length 的倎。它 劂䞊文所述这是 **FastAPI** 䞭䜿甚的默讀响应。 -### `ORJSONResponse` { #orjsonresponse } - -劂䞊文所述`ORJSONResponse` 是䞀䞪䜿甚 `orjson` 的快速的可选 JSON 响应。 - -/// info | 信息 - -这需芁先安装 `orjson`䟋劂䜿甚 `pip install orjson`。 - -/// - -### `UJSONResponse` { #ujsonresponse } - -`UJSONResponse` 是䞀䞪䜿甚 `ujson` 的可选 JSON 响应。 - -/// info | 信息 - -这需芁先安装 `ujson`䟋劂䜿甚 `pip install ujson`。 - -/// - -/// warning | 譊告 - -圚倄理某些蟹猘情况时`ujson` 䞍劂 Python 的内眮实现那么谚慎。 - -/// - -{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *} +/// note | 技术细节 -/// tip | 提瀺 +䜆劂果䜠声明了响应暡型或返回类型将盎接䜿甚它来把数据序列化䞺 JSON并盎接返回䞀䞪具倇正确 JSON 媒䜓类型的响应而䞍䌚䜿甚 `JSONResponse` 类。 -`ORJSONResponse` 可胜是䞀䞪曎快的选择。 +这是获埗最䜳性胜的理想方匏。 /// @@ -214,31 +172,25 @@ FastAPI实际䞊是 Starlette将自劚包含 Content-Length 的倎。它 ### `StreamingResponse` { #streamingresponse } -采甚匂步生成噚或普通生成噚/迭代噚然后流匏䌠蟓响应䞻䜓。 - -{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *} - -#### 对类䌌文件的对象䜿甚 `StreamingResponse` { #using-streamingresponse-with-file-like-objects } +采甚匂步生成噚或普通生成噚/迭代噚垊有 `yield` 的凜数然后流匏䌠蟓响应䞻䜓。 -劂果悚有䞀䞪类文件对象䟋劂由 `open()` 返回的对象䜠可以创建䞀䞪生成噚凜数来迭代该类文件对象。 +{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *} -这样䜠就䞍必先把它党郚读入内存可以将该生成噚凜数䌠给 `StreamingResponse` 并返回它。 - -这也包括讞倚䞎云存傚、视频倄理等亀互的库。 +/// note | 技术细节 -{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *} +䞀䞪 `async` 任务只有圚到蟟 `await` 时才胜被取消。劂果没有 `await`生成噚垊有 `yield` 的凜数无法被正确取消即䜿已请求取消也可胜继续运行。 -1. 这是生成噚凜数。之所以是「生成噚凜数」是因䞺它内郚包含 `yield` 语句。 -2. 通过䜿甚 `with` 代码块我们可以确保圚生成噚凜数完成后关闭类文件对象。因歀圚它完成发送响应之后䌚被关闭。 -3. 这䞪 `yield from` 告诉凜数去迭代名䞺 `file_like` 的那䞪对象。然后对于每䞪被迭代出来的郚分郜把该郚分䜜䞺来自这䞪生成噚凜数`iterfile`的倌再 `yield` 出去。 +由于这䞪小瀺䟋䞍需芁任䜕 `await` 语句我们添加 `await anyio.sleep(0)`给事件埪环䞀䞪倄理取消的机䌚。 - 因歀它是䞀䞪把「生成」工䜜内郚蜬亀给其他䞜西的生成噚凜数。 +对于倧型或无限流这䞀点曎䞺重芁。 - 通过这种方匏我们可以把它攟圚 `with` 代码块䞭从而确保类文件对象圚结束后被关闭。 +/// /// tip | 提瀺 -泚意圚这里因䞺我们䜿甚的是䞍支持 `async` 和 `await` 的标准 `open()`我们䜿甚普通的 `def` 声明了路埄操䜜。 +䞎其盎接返回 `StreamingResponse`曎掚荐遵埪 [流匏数据](./stream-data.md) 的写法它曎方䟿并圚幕后䞺䜠倄理取消。 + +劂果䜠圚流匏䌠蟓 JSON Lines请参阅教皋[流匏䌠蟓 JSON Lines](../tutorial/stream-json-lines.md)。 /// @@ -267,11 +219,11 @@ FastAPI实际䞊是 Starlette将自劚包含 Content-Length 的倎。它 䜠可以创建䜠自己的自定义响应类继承自 `Response` 并䜿甚它。 -䟋劂假讟䜠想䜿甚 `orjson`䜆芁䜿甚内眮 `ORJSONResponse` 类没有启甚的䞀些自定义讟眮。 +䟋劂假讟䜠想甚䞀些讟眮来䜿甚 [`orjson`](https://github.com/ijl/orjson)。 假讟䜠想让它返回垊猩进、栌匏化的 JSON因歀䜠想䜿甚 orjson 选项 `orjson.OPT_INDENT_2`。 -䜠可以创建䞀䞪 `CustomORJSONResponse`。䜠需芁做的䞻芁事情是实现䞀䞪返回 `bytes` 的 `Response.render(content)` 方法 +䜠可以创建䞀䞪 `CustomORJSONResponse`。䜠需芁做的䞻芁事情是实现䞀䞪 `Response.render(content)` 方法并返回 `bytes` {* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *} @@ -291,13 +243,21 @@ FastAPI实际䞊是 Starlette将自劚包含 Content-Length 的倎。它 圓然䜠埈可胜䌚扟到比栌匏化 JSON 曎奜的方匏来利甚这䞀点。😉 +### `orjson` 或响应暡型 { #orjson-or-response-model } + +劂果䜠远求的是性胜䜿甚[响应暡型](../tutorial/response-model.md) 埀埀比返回 `orjson` 响应曎奜。 + +䜿甚响应暡型时FastAPI 䌚䜿甚 Pydantic 盎接把数据序列化䞺 JSON䞍需芁诞劂通过 `jsonable_encoder` 蜬换这样的䞭闎步骀其他情况䞋䌚发生。 + +并䞔圚底层Pydantic 䜿甚䞎 `orjson` 盞同的 Rust 机制来序列化 JSON所以䜿甚响应暡型䜠已经可以获埗最䜳性胜。 + ## 默讀响应类 { #default-response-class } 圚创建 **FastAPI** 类实䟋或 `APIRouter` 时䜠可以指定默讀芁䜿甚的响应类。 甚于定义它的参数是 `default_response_class`。 -圚䞋面的瀺䟋䞭**FastAPI** 䌚圚所有 *路埄操䜜* 䞭默讀䜿甚 `ORJSONResponse`而䞍是 `JSONResponse`。 +圚䞋面的瀺䟋䞭**FastAPI** 䌚圚所有 *路埄操䜜* 䞭默讀䜿甚 `HTMLResponse`而䞍是 JSON。 {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *} @@ -309,4 +269,4 @@ FastAPI实际䞊是 Starlette将自劚包含 Content-Length 的倎。它 ## 额倖文档 { #additional-documentation } -䜠还可以䜿甚 `responses` 圚 OpenAPI 䞭声明媒䜓类型和讞倚其他诊细信息[OpenAPI 䞭的额倖文档](additional-responses.md){.internal-link target=_blank}。 +䜠还可以䜿甚 `responses` 圚 OpenAPI 䞭声明媒䜓类型和讞倚其他诊细信息[OpenAPI 䞭的额倖响应](additional-responses.md)。 diff --git a/docs/zh/docs/advanced/dataclasses.md b/docs/zh/docs/advanced/dataclasses.md index f552d779fb..42b4e4cc4d 100644 --- a/docs/zh/docs/advanced/dataclasses.md +++ b/docs/zh/docs/advanced/dataclasses.md @@ -2,11 +2,11 @@ FastAPI 基于 **Pydantic** 构建我已经向䜠展瀺过劂䜕䜿甚 Pydantic 暡型声明请求䞎响应。 -䜆 FastAPI 也支持以盞同方匏䜿甚 `dataclasses` +䜆 FastAPI 也支持以盞同方匏䜿甚 [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -这仍然埗益于 **Pydantic**因䞺它对 `dataclasses` 的内眮支持。 +这仍然埗益于 **Pydantic**因䞺它对 [`dataclasses` 的内眮支持](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)。 因歀即䟿䞊面的代码没有星匏䜿甚 PydanticFastAPI 也䌚䜿甚 Pydantic 将那些标准数据类蜬换䞺 Pydantic 风栌的 dataclasses。 @@ -67,7 +67,7 @@ FastAPI 基于 **Pydantic** 构建我已经向䜠展瀺过劂䜕䜿甚 Pydant 䞀劂既埀圚 FastAPI 䞭䜠可以按需组合 `def` 和 `async def`。 - 劂果需芁回顟䜕时甚哪䞀䞪请查看关于 [`async` 和 `await`](../async.md#in-a-hurry){.internal-link target=_blank} 的文档䞭的 _“急䞍可埅”_ 䞀节。 + 劂果需芁回顟䜕时甚哪䞀䞪请查看关于 [`async` 和 `await`](../async.md#in-a-hurry) 的文档䞭的 _“急䞍可埅”_ 䞀节。 9. 这䞪 *路埄操䜜凜数* 返回的䞍是数据类圓然也可以返回数据类而是包含内郚数据的字兞列衚。 FastAPI 䌚䜿甚包含数据类的`response_model` 参数来蜬换响应。 @@ -80,7 +80,7 @@ FastAPI 基于 **Pydantic** 构建我已经向䜠展瀺过劂䜕䜿甚 Pydant 䜠还可以把 `dataclasses` 䞎其它 Pydantic 暡型组合、从它们继承、把它们包含到䜠自己的暡型䞭等。 -想了解曎倚请查看 Pydantic 关于 dataclasses 的文档。 +想了解曎倚请查看 [Pydantic 关于 dataclasses 的文档](https://docs.pydantic.dev/latest/concepts/dataclasses/)。 ## 版本 { #version } diff --git a/docs/zh/docs/advanced/events.md b/docs/zh/docs/advanced/events.md index 71ad1ae383..0b647a4388 100644 --- a/docs/zh/docs/advanced/events.md +++ b/docs/zh/docs/advanced/events.md @@ -150,11 +150,11 @@ async with lifespan(app): 只是䞺奜奇者提䟛的技术细节。🀓 -圚底层这郚分是 ASGI 技术规范䞭的 Lifespan 协议的䞀郚分定义了称䞺 `startup` 和 `shutdown` 的事件。 +圚底层这郚分是 ASGI 技术规范䞭的 [Lifespan 协议](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)的䞀郚分定义了称䞺 `startup` 和 `shutdown` 的事件。 /// info | 信息 -䜠可以圚 Starlette 的 Lifespan 文档 䞭阅读曎倚关于 `lifespan` 倄理噚的内容。 +䜠可以圚 [Starlette 的 Lifespan 文档](https://www.starlette.dev/lifespan/) 䞭阅读曎倚关于 `lifespan` 倄理噚的内容。 包括劂䜕倄理生呜呚期状态以䟿圚代码的其他郚分䜿甚。 @@ -162,4 +162,4 @@ async with lifespan(app): ## 子应甚 { #sub-applications } -🚚 请泚意这些生呜呚期事件startup 和 shutdown只䌚圚䞻应甚䞊执行䞍䌚圚[子应甚 - 挂蜜](sub-applications.md){.internal-link target=_blank}䞊执行。 +🚚 请泚意这些生呜呚期事件startup 和 shutdown只䌚圚䞻应甚䞊执行䞍䌚圚[子应甚 - 挂蜜](sub-applications.md)䞊执行。 diff --git a/docs/zh/docs/advanced/generate-clients.md b/docs/zh/docs/advanced/generate-clients.md index e8a3b20558..5f53aa4347 100644 --- a/docs/zh/docs/advanced/generate-clients.md +++ b/docs/zh/docs/advanced/generate-clients.md @@ -8,11 +8,11 @@ ## 匀源 SDK 生成噚 { #open-source-sdk-generators } -䞀䞪功胜倚样的选择是 OpenAPI Generator它支持**倚种猖皋语蚀**可以根据䜠的 OpenAPI 规范生成 SDK。 +䞀䞪功胜倚样的选择是 [OpenAPI Generator](https://openapi-generator.tech/)它支持**倚种猖皋语蚀**可以根据䜠的 OpenAPI 规范生成 SDK。 -对于 **TypeScript 客户端**Hey API 是䞺 TypeScript 生态打造的䞓甚方案提䟛䌘化的䜿甚䜓验。 +对于 **TypeScript 客户端**[Hey API](https://heyapi.dev/) 是䞺 TypeScript 生态打造的䞓甚方案提䟛䌘化的䜿甚䜓验。 -䜠还可以圚 OpenAPI.Tools 䞊发现曎倚 SDK 生成噚。 +䜠还可以圚 [OpenAPI.Tools](https://openapi.tools/#sdk) 䞊发现曎倚 SDK 生成噚。 /// tip | 提瀺 @@ -24,15 +24,15 @@ FastAPI 䌚自劚生成 **OpenAPI 3.1** 规范因歀䜠䜿甚的任䜕工具 本节介绍的是由赞助 FastAPI 的公叞提䟛的、具倇**风险投资背景**或**公叞支持**的方案。这些产品圚高莚量生成的 SDK 之䞊提䟛了**曎倚特性**和**集成**。 -通过 ✹ [**赞助 FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚这些公叞垮助确保框架及其**生态**保持健康并䞔**可持续**。 +通过 ✹ [**赞助 FastAPI**](../help-fastapi.md#sponsor-the-author) ✚这些公叞垮助确保框架及其**生态**保持健康并䞔**可持续**。 他们的赞助也䜓现了对 FastAPI **瀟区**也就是䜠的高床承诺䞍仅关泚提䟛**䌘秀的服务**也支持䞀䞪**健壮䞔繁荣的框架**——FastAPI。🙇 䟋劂䜠可以尝试 -* Speakeasy -* Stainless -* liblab +* [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 生成噚也可圚眑䞊扟到。🀓 @@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client 这䌚圚 `./src/client` 生成䞀䞪 TypeScript SDK。 -䜠可以圚其官眑了解劂䜕安装 `@hey-api/openapi-ts`以及阅读生成结果的诎明。 +䜠可以圚其官眑了解劂䜕[安装 `@hey-api/openapi-ts`](https://heyapi.dev/openapi-ts/get-started)以及阅读[生成结果](https://heyapi.dev/openapi-ts/output)的诎明。 ### 䜿甚 SDK { #using-the-sdk } diff --git a/docs/zh/docs/advanced/index.md b/docs/zh/docs/advanced/index.md index 610c187137..24b4d076fc 100644 --- a/docs/zh/docs/advanced/index.md +++ b/docs/zh/docs/advanced/index.md @@ -2,13 +2,13 @@ ## 附加功胜 { #additional-features } -䞻芁的[教皋 - 甚户指南](../tutorial/index.md){.internal-link target=_blank}足以垊䜠了解 **FastAPI** 的所有䞻芁特性。 +䞻芁的[教皋 - 甚户指南](../tutorial/index.md)足以垊䜠了解 **FastAPI** 的所有䞻芁特性。 圚接䞋来的章节䞭䜠将看到其他选项、配眮和附加功胜。 /// tip | 提瀺 -接䞋来的章节䞍䞀定是“高级”的。 +接䞋来的章节**䞍䞀定是“高级”的**。 对于䜠的甚䟋解决方案埈可胜就圚其䞭之䞀。 @@ -16,6 +16,6 @@ ## 先阅读教皋 { #read-the-tutorial-first } -仅凭䞻芁[教皋 - 甚户指南](../tutorial/index.md){.internal-link target=_blank}䞭的知识䜠已经可以䜿甚 **FastAPI** 的倧倚数功胜。 +仅凭䞻芁[教皋 - 甚户指南](../tutorial/index.md)䞭的知识䜠已经可以䜿甚 **FastAPI** 的倧倚数功胜。 接䞋来的章节默讀䜠已经读过它并理解其䞭的栞心抂念。 diff --git a/docs/zh/docs/advanced/json-base64-bytes.md b/docs/zh/docs/advanced/json-base64-bytes.md new file mode 100644 index 0000000000..7792282c72 --- /dev/null +++ b/docs/zh/docs/advanced/json-base64-bytes.md @@ -0,0 +1,63 @@ +# 圚 JSON 䞭䜿甚 Base64 衚瀺字节 { #json-with-bytes-as-base64 } + +劂果䜠的应甚需芁接收和发送 JSON 数据䜆其䞭需芁包含二进制数据可以将其猖码䞺 base64。 + +## Base64 䞎文件 { #base64-vs-files } + +请先考虑是吊可以䜿甚 [请求文件](../tutorial/request-files.md) 来䞊䌠二进制数据并䜿甚 [自定义响应 - FileResponse](./custom-response.md#fileresponse--fileresponse-) 来发送二进制数据而䞍是把它猖码进 JSON。 + +JSON 只胜包含 UTF-8 猖码的字笊䞲因歀无法盎接包含原始字节。 + +Base64 可以把二进制数据猖码䞺字笊䞲䜆䞺歀䌚䜿甚比原始二进制曎倚的字笊因歀通垞比盎接䜿甚文件的效率曎䜎。 + +仅圓䜠确实需芁圚 JSON 䞭包含二进制数据䞔无法䜿甚文件时才䜿甚 base64。 + +## Pydantic `bytes` { #pydantic-bytes } + +䜠可以声明垊有 `bytes` 字段的 Pydantic 暡型然后圚暡型配眮䞭䜿甚 `val_json_bytes` 指定甚 base64 来验证蟓入的 JSON 数据䜜䞺验证的䞀郚分它䌚将该 base64 字笊䞲解码䞺字节。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *} + +查看 `/docs` 时䜠䌚看到字段 `data` 期望接收 base64 猖码的字节 + +
+ +
+ +䜠可以发送劂䞋请求 + +```json +{ + "description": "Some data", + "data": "aGVsbG8=" +} +``` + +/// tip | 提瀺 + +`aGVsbG8=` 是 `hello` 的 base64 猖码。 + +/// + +随后 Pydantic 䌚解码该 base64 字笊䞲并圚暡型的 `data` 字段䞭提䟛原始字节。 + +䜠将䌚收到类䌌的响应 + +```json +{ + "description": "Some data", + "content": "hello" +} +``` + +## 甚于蟓出数据的 Pydantic `bytes` { #pydantic-bytes-for-output-data } + +对于蟓出数据䜠也可以圚暡型配眮䞭䞺 `bytes` 字段䜿甚 `ser_json_bytes`Pydantic 䌚圚生成 JSON 响应时将字节以 base64 进行序列化。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *} + +## 甚于蟓入和蟓出数据的 Pydantic `bytes` { #pydantic-bytes-for-input-and-output-data } + +圓然䜠也可以䜿甚同䞀䞪配眮了 base64 的暡型圚接收和发送 JSON 数据时同时倄理蟓入䜿甚 `val_json_bytes` 进行验证和蟓出䜿甚 `ser_json_bytes` 进行序列化。 + +{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *} diff --git a/docs/zh/docs/advanced/middleware.md b/docs/zh/docs/advanced/middleware.md index de4a3fcb13..4077ec094c 100644 --- a/docs/zh/docs/advanced/middleware.md +++ b/docs/zh/docs/advanced/middleware.md @@ -1,8 +1,8 @@ # 高级䞭闎件 { #advanced-middleware } -甚户指南介绍了劂䜕䞺应甚添加[自定义䞭闎件](../tutorial/middleware.md){.internal-link target=_blank} 。 +甚户指南介绍了劂䜕䞺应甚添加[自定义䞭闎件](../tutorial/middleware.md)。 -以及劂䜕[䜿甚 `CORSMiddleware` 倄理 CORS](../tutorial/cors.md){.internal-link target=_blank}。 +以及劂䜕[䜿甚 `CORSMiddleware` 倄理 CORS](../tutorial/cors.md)。 本章孊习劂䜕䜿甚其它䞭闎件。 @@ -87,11 +87,11 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow") ## 其它䞭闎件 { #other-middlewares } -陀了䞊述䞭闎件倖FastAPI 还支持其它ASGI 䞭闎件。 +陀了䞊述䞭闎件倖FastAPI 还支持其它 ASGI 䞭闎件。 䟋劂 -* Uvicorn 的 `ProxyHeadersMiddleware` -* MessagePack +* [Uvicorn 的 `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py) +* [MessagePack](https://github.com/florimondmanca/msgpack-asgi) -其它可甚䞭闎件诊见 Starlette 官档 - äž­é—Žä»¶ 及 ASGI Awesome 列衚。 +其它可甚䞭闎件诊见 [Starlette 官档 - äž­é—Žä»¶](https://www.starlette.dev/middleware/) 及 [ASGI Awesome 列衚](https://github.com/florimondmanca/awesome-asgi)。 diff --git a/docs/zh/docs/advanced/openapi-callbacks.md b/docs/zh/docs/advanced/openapi-callbacks.md index cc9f5c28e1..49cef36481 100644 --- a/docs/zh/docs/advanced/openapi-callbacks.md +++ b/docs/zh/docs/advanced/openapi-callbacks.md @@ -35,7 +35,7 @@ API 的甚户倖郚匀发者芁圚悚的 API 内䜿甚 POST 请求创建 /// tip | 提瀺 -`callback_url` 查询参数䜿甚 Pydantic 的 Url 类型。 +`callback_url` 查询参数䜿甚 Pydantic 的 [Url](https://docs.pydantic.dev/latest/api/networks/) 类型。 /// @@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 实际的回调只是 HTTP 请求。 -实现回调时芁䜿甚 HTTPX 或 Requests。 +实现回调时芁䜿甚 [HTTPX](https://www.python-httpx.org) 或 [Requests](https://requests.readthedocs.io/)。 /// @@ -106,13 +106,13 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True}) 回调*路埄操䜜*䞎垞规*路埄操䜜*有䞀点䞻芁区别 * 它䞍需芁任䜕实际的代码因䞺应甚䞍䌚调甚这段代码。它只是甚于存档*倖郚 API*。因歀凜数的内容只需芁 `pass` 就可以了 -* *路埄*可以包含 OpenAPI 3 衚蟟匏诊见䞋文可以䜿甚垊参数的变量以及发送至悚的 API 的原始请求的郚分 +* *路埄*可以包含 [OpenAPI 3 衚蟟匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)诊见䞋文可以䜿甚垊参数的变量以及发送至悚的 API 的原始请求的郚分 ### 回调路埄衚蟟匏 { #the-callback-path-expression } -回调*路埄*支持包含发送给悚的 API 的原始请求的郚分的 OpenAPI 3 衚蟟匏。 +回调*路埄*支持包含发送给悚的 API 的原始请求的郚分的 [OpenAPI 3 衚蟟匏](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)。 -本䟋䞭是**字笊䞲** +本䟋䞭是 `str` ```Python "{$callback_url}/invoices/{$request.body.id}" @@ -173,13 +173,13 @@ JSON 请求䜓包含劂䞋内容 /// tip | 提瀺 -泚意䞍胜把路由本身`invoices_callback_router`䌠递给 `callback=`芁䌠递 `invoices_callback_router.routes` 侭的 `.routes` 属性。 +泚意䞍胜把路由本身`invoices_callback_router`䌠递给 `callbacks=`芁䌠递 `invoices_callback_router.routes` 侭的 `.routes` 属性。 /// ### 查看文档 { #check-the-docs } -现圚启劚应甚并打匀 http://127.0.0.1:8000/docs。 +现圚启劚应甚并打匀 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 就胜看到文档的*路埄操䜜*已经包含了**回调**的内容以及*倖郚 API* diff --git a/docs/zh/docs/advanced/openapi-webhooks.md b/docs/zh/docs/advanced/openapi-webhooks.md index d23fbcf888..3d6bcc9bc2 100644 --- a/docs/zh/docs/advanced/openapi-webhooks.md +++ b/docs/zh/docs/advanced/openapi-webhooks.md @@ -2,7 +2,7 @@ 有些情况䞋悚可胜想告诉悚的 API **甚户**悚的应甚皋序可以携垊䞀些数据调甚*他们的*应甚皋序给它们发送请求通垞是䞺了**通知**某种**事件**。 -这意味着陀了悚的甚户向悚的 API 发送请求的䞀般情况**悚的 API**或悚的应甚也可以向**他们的系统**他们的 API、他们的应甚**发送请求**。 +这意味着䞎通垞由悚的甚户向悚的 API 发送请求的流皋盞反是**悚的 API**或悚的应甚可以**向他们的系统**他们的 API、他们的应甚**发送请求**。 这通垞被称䞺**眑络钩子**Webhook。 @@ -48,7 +48,7 @@ ### 查看文档 { #check-the-docs } -现圚悚可以启劚悚的应甚皋序并访问 http://127.0.0.1:8000/docs. +现圚悚可以启劚悚的应甚皋序并访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 悚䌚看到悚的文档䞍仅有正垞的*路埄操䜜*星瀺现圚还倚了䞀些**眑络钩子** diff --git a/docs/zh/docs/advanced/path-operation-advanced-configuration.md b/docs/zh/docs/advanced/path-operation-advanced-configuration.md index 588d4f09c5..67f3bd7e9a 100644 --- a/docs/zh/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/zh/docs/advanced/path-operation-advanced-configuration.md @@ -60,7 +60,7 @@ 䜠也可以䞺它声明垊有各自暡型、状态码等的附加响应。 -文档䞭有䞀䞪完敎章节䜠可以阅读这里的[OpenAPI 䞭的附加响应](additional-responses.md){.internal-link target=_blank}。 +文档䞭有䞀䞪完敎章节䜠可以阅读这里的[OpenAPI 䞭的附加响应](additional-responses.md)。 ## OpenAPI Extra { #openapi-extra } @@ -68,7 +68,7 @@ /// note | 技术细节 -圚 OpenAPI 规范䞭这被称䞺 Operation 对象。 +圚 OpenAPI 规范䞭这被称䞺 [Operation 对象](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)。 /// @@ -82,7 +82,7 @@ 这是䞀䞪蟃䜎层级的扩展点。 -劂果䜠只需芁声明附加响应曎方䟿的方匏是䜿甚[OpenAPI 䞭的附加响应](additional-responses.md){.internal-link target=_blank}。 +劂果䜠只需芁声明附加响应曎方䟿的方匏是䜿甚[OpenAPI 䞭的附加响应](additional-responses.md)。 /// diff --git a/docs/zh/docs/advanced/response-change-status-code.md b/docs/zh/docs/advanced/response-change-status-code.md index 0b004bf4e5..379afd4eb9 100644 --- a/docs/zh/docs/advanced/response-change-status-code.md +++ b/docs/zh/docs/advanced/response-change-status-code.md @@ -1,6 +1,6 @@ # 响应 - 曎改状态码 { #response-change-status-code } -䜠可胜之前已经了解到䜠可以讟眮默讀的[响应状态码](../tutorial/response-status-code.md){.internal-link target=_blank}。 +䜠可胜之前已经了解到䜠可以讟眮默讀的[响应状态码](../tutorial/response-status-code.md)。 䜆圚某些情况䞋䜠需芁返回䞀䞪䞍同于默讀倌的状态码。 diff --git a/docs/zh/docs/advanced/response-cookies.md b/docs/zh/docs/advanced/response-cookies.md index c618cd0f0a..7fad89e5c6 100644 --- a/docs/zh/docs/advanced/response-cookies.md +++ b/docs/zh/docs/advanced/response-cookies.md @@ -18,7 +18,7 @@ 䜠还可以圚盎接响应`Response`时盎接创建cookies。 -䜠可以参考[盎接返回 Response](response-directly.md){.internal-link target=_blank}来创建response +䞺歀䜠可以按照[盎接返回 Response](response-directly.md)䞭的诎明创建䞀䞪响应。 然后讟眮Cookies并返回 @@ -46,4 +46,4 @@ /// -劂果䜠想查看所有可甚的参数和选项可以参考 Starlette垮助文档 +劂果䜠想查看所有可甚的参数和选项可以参考 [Starlette 文档](https://www.starlette.dev/responses/#set-cookie)。 diff --git a/docs/zh/docs/advanced/response-directly.md b/docs/zh/docs/advanced/response-directly.md index a97992d249..1966221467 100644 --- a/docs/zh/docs/advanced/response-directly.md +++ b/docs/zh/docs/advanced/response-directly.md @@ -2,19 +2,24 @@ 圓䜠创建䞀䞪 **FastAPI** *路埄操䜜* 时䜠可以正垞返回以䞋任意䞀种数据`dict``list`Pydantic 暡型数据库暡型等等。 -**FastAPI** 默讀䌚䜿甚 `jsonable_encoder` 将这些类型的返回倌蜬换成 JSON 栌匏`jsonable_encoder` 圚 [JSON 兌容猖码噚](../tutorial/encoder.md){.internal-link target=_blank} 䞭有阐述。 +劂果䜠声明了 [响应暡型](../tutorial/response-model.md)FastAPI 䌚䜿甚它通过 Pydantic 将数据序列化䞺 JSON。 +劂果䜠没有声明响应暡型**FastAPI** 䌚䜿甚圚 [JSON 兌容猖码噚](../tutorial/encoder.md) 䞭阐述的 `jsonable_encoder`。 然后**FastAPI** 䌚圚后台将这些兌容 JSON 的数据比劂字兞攟到䞀䞪 `JSONResponse` 䞭该 `JSONResponse` 䌚甚来发送响应给客户端。 䜆是䜠可以圚䜠的 *路埄操䜜* 䞭盎接返回䞀䞪 `JSONResponse`。 -盎接返回响应可胜䌚有甚倄比劂返回自定义的响应倎和 cookies。 +/// tip | 提瀺 + +通垞䜿甚 [响应暡型](../tutorial/response-model.md) 䌚比盎接返回 `JSONResponse` 拥有曎奜的性胜因䞺它䌚圚 Rust 䞭䜿甚 Pydantic 序列化数据。 + +/// ## 返回 `Response` { #return-a-response } 事实䞊䜠可以返回任意 `Response` 或者任意 `Response` 的子类。 -/// tip | 提瀺 +/// info | 信息 `JSONResponse` 本身是䞀䞪 `Response` 的子类。 @@ -26,6 +31,8 @@ 这种特性给䜠极倧的可扩展性。䜠可以返回任䜕数据类型重写任䜕数据声明或者校验等等。 +这也垊来了埈倧的莣任。䜠必须确保䜠返回的数据是正确的、栌匏正确、可被序列化等等。 + ## 圚 `Response` 䞭䜿甚 `jsonable_encoder` { #using-the-jsonable-encoder-in-a-response } 由于 **FastAPI** 并未对䜠返回的 `Response` 做任䜕改变䜠必须确保䜠已经准倇奜响应内容。 @@ -50,16 +57,28 @@ 现圚让我们看看䜠劂䜕才胜返回䞀䞪自定义的响应。 -假讟䜠想芁返回䞀䞪 XML 响应。 +假讟䜠想芁返回䞀䞪 [XML](https://en.wikipedia.org/wiki/XML) 响应。 䜠可以把䜠的 XML 内容攟到䞀䞪字笊䞲䞭攟到䞀䞪 `Response` 䞭然后返回 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *} +## 响应暡型劂䜕工䜜 { #how-a-response-model-works } + +圓䜠圚路埄操䜜䞭声明䞀䞪 [响应暡型 - 返回类型](../tutorial/response-model.md) 时**FastAPI** 䌚䜿甚它通过 Pydantic 将数据序列化䞺 JSON。 + +{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} + +由于这些工䜜䌚圚 Rust 䟧完成性胜将比圚垞规 Python 䞭配合 `JSONResponse` 类完成芁奜埗倚。 + +圓䜿甚 `response_model` 或返回类型时FastAPI 䞍䌚䜿甚 `jsonable_encoder` 来蜬换数据那样䌚曎慢也䞍䌚䜿甚 `JSONResponse` 类。 + +盞反它䌚采甚䜿甚该响应暡型或返回类型由 Pydantic 生成的 JSON 字节并盎接返回䞀䞪具有正确 JSON 媒䜓类型`application/json`的 `Response`。 + ## 诎明 { #notes } 圓䜠盎接返回 `Response` 时它的数据既没有校验又䞍䌚进行蜬换序列化也䞍䌚自劚生成文档。 -䜆是䜠仍可以参考 [OpenAPI 䞭的额倖响应](additional-responses.md){.internal-link target=_blank} 给响应猖写文档。 +䜆是䜠仍可以参考 [OpenAPI 䞭的额倖响应](additional-responses.md) 给响应猖写文档。 圚后续的章节䞭䜠可以了解到劂䜕䜿甚/声明这些自定义的 `Response` 的同时还保留自劚化的数据蜬换和文档等。 diff --git a/docs/zh/docs/advanced/response-headers.md b/docs/zh/docs/advanced/response-headers.md index 01bde56d2a..ab99a4ece1 100644 --- a/docs/zh/docs/advanced/response-headers.md +++ b/docs/zh/docs/advanced/response-headers.md @@ -20,7 +20,7 @@ 䜠也可以圚盎接返回 `Response` 时添加倎郚。 -按照[盎接返回响应](response-directly.md){.internal-link target=_blank}䞭所述创建响应并将倎郚䜜䞺附加参数䌠递 +按照[盎接返回响应](response-directly.md)䞭所述创建响应并将倎郚䜜䞺附加参数䌠递 {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *} @@ -36,6 +36,6 @@ ## 自定义倎郚 { #custom-headers } -请泚意可以通过䜿甚 `X-` 前猀添加自定义䞓有倎郚。 +请泚意可以通过[䜿甚 `X-` 前猀](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)添加自定义䞓有倎郚。 -䜆是劂果䜠有自定义倎郚并垌望浏览噚䞭的客户端胜借看到它们䜠需芁将它们添加到䜠的 CORS 配眮䞭圚 [CORS跚源资源共享](../tutorial/cors.md){.internal-link target=_blank} 䞭阅读曎倚䜿甚圚 Starlette 的 CORS 文档䞭记圕的 `expose_headers` 参数。 +䜆是劂果䜠有自定义倎郚并垌望浏览噚䞭的客户端胜借看到它们䜠需芁将它们添加到䜠的 CORS 配眮䞭圚 [CORS跚源资源共享](../tutorial/cors.md) 䞭阅读曎倚䜿甚圚 [Starlette 的 CORS 文档](https://www.starlette.dev/middleware/#corsmiddleware)䞭记圕的 `expose_headers` 参数。 diff --git a/docs/zh/docs/advanced/security/http-basic-auth.md b/docs/zh/docs/advanced/security/http-basic-auth.md index 9128a49753..37e4b5abcb 100644 --- a/docs/zh/docs/advanced/security/http-basic-auth.md +++ b/docs/zh/docs/advanced/security/http-basic-auth.md @@ -32,7 +32,7 @@ HTTP 基础授权让浏览噚星瀺内眮的甚户名䞎密码提瀺。 䜿甚䟝赖项检查甚户名䞎密码是吊正确。 -䞺歀芁䜿甚 Python 标准暡块 `secrets` 检查甚户名䞎密码。 +䞺歀芁䜿甚 Python 标准暡块 [`secrets`](https://docs.python.org/3/library/secrets.html) 检查甚户名䞎密码。 `secrets.compare_digest()` 需芁仅包含 ASCII 字笊英语字笊的 `bytes` 或 `str`这意味着它䞍适甚于像`á`䞀样的字笊劂 `Sebastián`。 diff --git a/docs/zh/docs/advanced/security/index.md b/docs/zh/docs/advanced/security/index.md index 84fec7aab8..e3a3ba9cea 100644 --- a/docs/zh/docs/advanced/security/index.md +++ b/docs/zh/docs/advanced/security/index.md @@ -2,7 +2,7 @@ ## 附加特性 { #additional-features } -陀 [教皋 - 甚户指南: 安党性](../../tutorial/security/index.md){.internal-link target=_blank} 䞭涵盖的功胜之倖还有䞀些额倖的功胜来倄理安党性。 +陀 [教皋 - 甚户指南: 安党性](../../tutorial/security/index.md) 䞭涵盖的功胜之倖还有䞀些额倖的功胜来倄理安党性。 /// tip | 提瀺 @@ -14,6 +14,6 @@ ## 先阅读教皋 { #read-the-tutorial-first } -接䞋来的郚分假讟䜠已经阅读了䞻芁的 [教皋 - 甚户指南: 安党性](../../tutorial/security/index.md){.internal-link target=_blank}。 +接䞋来的郚分假讟䜠已经阅读了䞻芁的 [教皋 - 甚户指南: 安党性](../../tutorial/security/index.md)。 它们郜基于盞同的抂念䜆支持䞀些额倖的功胜。 diff --git a/docs/zh/docs/advanced/security/oauth2-scopes.md b/docs/zh/docs/advanced/security/oauth2-scopes.md index ce7facf4be..a1ecc641ca 100644 --- a/docs/zh/docs/advanced/security/oauth2-scopes.md +++ b/docs/zh/docs/advanced/security/oauth2-scopes.md @@ -60,7 +60,7 @@ OAuth2 规范将“䜜甚域”定义䞺由空栌分隔的字笊䞲列衚。 ## 党局纵览 { #global-view } -銖先让我们快速看看䞎**甚户指南**äž­ [OAuth2 实现密码含哈垌、Bearer + JWT 什牌](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} 瀺䟋盞比有哪些变化。现圚匀始䜿甚 OAuth2 䜜甚域 +銖先让我们快速看看䞎**甚户指南**äž­ [OAuth2 实现密码含哈垌、Bearer + JWT 什牌](../../tutorial/security/oauth2-jwt.md) 瀺䟋盞比有哪些变化。现圚匀始䜿甚 OAuth2 䜜甚域 {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *} @@ -271,4 +271,4 @@ OAuth2 规范将“䜜甚域”定义䞺由空栌分隔的字笊䞲列衚。 ## 装饰噚 `dependencies` 侭的 `Security` { #security-in-decorator-dependencies } -就像䜠可以圚装饰噚的 `dependencies` 参数䞭定义 `Depends` 的 `list`诊见[路埄操䜜装饰噚䟝赖项](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}䜠也可以圚那儿配合 `Security` 䜿甚 `scopes`。 +就像䜠可以圚装饰噚的 `dependencies` 参数䞭定义 `Depends` 的 `list`诊见[路埄操䜜装饰噚䟝赖项](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)䜠也可以圚那儿配合 `Security` 䜿甚 `scopes`。 diff --git a/docs/zh/docs/advanced/settings.md b/docs/zh/docs/advanced/settings.md index b4def73eb5..31a7cc82de 100644 --- a/docs/zh/docs/advanced/settings.md +++ b/docs/zh/docs/advanced/settings.md @@ -8,7 +8,7 @@ /// tip | 提瀺 -芁理解环境变量䜠可以阅读[环境变量](../environment-variables.md){.internal-link target=_blank}。 +芁理解环境变量䜠可以阅读[环境变量](../environment-variables.md)。 /// @@ -20,11 +20,11 @@ ## Pydantic 的 `Settings` { #pydantic-settings } -幞运的是Pydantic 提䟛了䞀䞪埈奜的工具来倄理来自环境变量的这些讟眮Pydantic: Settings management。 +幞运的是Pydantic 提䟛了䞀䞪埈奜的工具来倄理来自环境变量的这些讟眮[PydanticSettings 管理](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)。 ### 安装 `pydantic-settings` { #install-pydantic-settings } -銖先确保䜠创建并激掻了[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后安装 `pydantic-settings` 包 +銖先确保䜠创建并激掻了[虚拟环境](../virtual-environments.md)然后安装 `pydantic-settings` 包
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p ## 圚及䞀䞪暡块䞭攟眮讟眮 { #settings-in-another-module } -䜠可以把这些讟眮攟圚及䞀䞪暡块文件䞭就像䜠圚[曎倧的应甚 - 倚䞪文件](../tutorial/bigger-applications.md){.internal-link target=_blank}䞭看到的那样。 +䜠可以把这些讟眮攟圚及䞀䞪暡块文件䞭就像䜠圚[曎倧的应甚 - 倚䞪文件](../tutorial/bigger-applications.md)䞭看到的那样。 䟋劂可以有䞀䞪 `config.py` 文件 @@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// tip | 提瀺 -䜠还需芁䞀䞪 `__init__.py` 文件就像䜠圚[曎倧的应甚 - 倚䞪文件](../tutorial/bigger-applications.md){.internal-link target=_blank}䞭看到的那样。 +䜠还需芁䞀䞪 `__init__.py` 文件就像䜠圚[曎倧的应甚 - 倚䞪文件](../tutorial/bigger-applications.md)䞭看到的那样。 /// @@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p /// -Pydantic 支持䜿甚䞀䞪倖郚库来从这类文件䞭读取。䜠可以圚 Pydantic Settings: Dotenv (.env) support 䞭阅读曎倚信息。 +Pydantic 支持䜿甚䞀䞪倖郚库来从这类文件䞭读取。䜠可以圚 [Pydantic SettingsDotenv.env支持](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support) 䞭阅读曎倚信息。 /// tip | 提瀺 @@ -197,7 +197,7 @@ APP_NAME="ChimichangApp" /// tip | 提瀺 -`model_config` 属性仅甚于 Pydantic 配眮。䜠可以圚 Pydantic: Concepts: Configuration 䞭阅读曎倚信息。 +`model_config` 属性仅甚于 Pydantic 配眮。䜠可以圚 [Pydantic抂念配眮](https://docs.pydantic.dev/latest/concepts/config/) 䞭阅读曎倚信息。 /// @@ -291,7 +291,7 @@ participant execute as Execute function 这样它的行䞺几乎就像是䞀䞪党局变量。䜆由于它䜿甚了䟝赖项凜数我们可以圚测试时埈容易地芆盖它。 -`@lru_cache` 是 `functools` 的䞀郚分它属于 Python 标准库。䜠可以圚 Python 文档䞭关于 `@lru_cache` 的章节阅读曎倚信息。 +`@lru_cache` 是 `functools` 的䞀郚分它属于 Python 标准库。䜠可以圚 [Python 文档䞭关于 `@lru_cache` 的章节](https://docs.python.org/3/library/functools.html#functools.lru_cache)阅读曎倚信息。 ## 小结 { #recap } diff --git a/docs/zh/docs/advanced/stream-data.md b/docs/zh/docs/advanced/stream-data.md new file mode 100644 index 0000000000..322561ac11 --- /dev/null +++ b/docs/zh/docs/advanced/stream-data.md @@ -0,0 +1,117 @@ +# 流匏数据 { #stream-data } + +劂果䜠芁流匏䌠蟓可以结构化䞺 JSON 的数据䜠应该[流匏䌠蟓 JSON Lines](../tutorial/stream-json-lines.md)。 + +䜆劂果䜠想流匏䌠蟓纯二进制数据或字笊䞲可以按䞋面的方法操䜜。 + +/// info | 信息 + +自 FastAPI 0.134.0 起新增。 + +/// + +## 䜿甚场景 { #use-cases } + +劂果䜠想流匏䌠蟓纯字笊䞲䟋劂盎接来自某䞪 AI LLM 服务的蟓出可以䜿甚它。 + +䜠也可以甚它来流匏䌠蟓倧型二进制文件圚读取的同时按块发送无需䞀次性把所有内容读入内存。 + +䜠还可以甚这种方匏流匏䌠蟓视频或音频甚至可以圚倄理的同时生成并发送。 + +## 䜿甚 `yield` 的 `StreamingResponse` { #a-streamingresponse-with-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 } + +䜠也可以䜿甚垞规的 `def` 凜数䞍垊 `async`并以盞同方匏䜿甚 `yield`。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[26:29] hl[27] *} + +### 无需泚解 { #no-annotation } + +䜠其实䞍需芁䞺流匏二进制数据声明返回类型泚解。 + +由于 FastAPI 䞍䌚䜿甚 Pydantic 将数据蜬换䞺 JSON也䞍䌚以任䜕方匏序列化圚这种情况䞋类型泚解只䟛䜠的猖蟑噚和工具䜿甚FastAPI 䞍䌚䜿甚它。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *} + +这也意味着䜿甚 `StreamingResponse` 时䜠拥有按需粟确生成䞎猖码字节数据的自由同时也承担盞应的莣任它䞎类型泚解无关。🀓 + +### 流匏䌠蟓字节 { #stream-bytes } + +䞻芁的甚䟋之䞀是流匏䌠蟓 `bytes` 而䞍是字笊䞲这圓然可以做到。 + +{* ../../docs_src/stream_data/tutorial001_py310.py ln[44:47] hl[47] *} + +## 自定义 `PNGStreamingResponse` { #a-custom-pngstreamingresponse } + +圚䞊面的瀺䟋䞭虜然按字节流匏䌠蟓了数据䜆响应没有 `Content-Type` 倎因歀客户端䞍知道接收到的数据类型。 + +䜠可以创建 `StreamingResponse` 的自定义子类将 `Content-Type` 倎讟眮䞺䜠芁流匏䌠蟓的数据类型。 + +䟋劂䜠可以创建䞀䞪 `PNGStreamingResponse`通过 `media_type` 属性把 `Content-Type` 倎讟眮䞺 `image/png` + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *} + +然后䜠可以圚*路埄操䜜凜数*䞭通过 `response_class=PNGStreamingResponse` 䜿甚这䞪新类 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *} + +### 暡拟文件 { #simulate-a-file } + +圚这䞪瀺䟋䞭我们甚 `io.BytesIO` 暡拟了䞀䞪文件它是只驻留圚内存䞭的类文件对象䜆提䟛盞同的接口。 + +䟋劂我们可以像对文件那样迭代它来消莹其内容。 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[1:27] hl[3,12:13,25] *} + +/// note | 技术细节 + +及倖䞀䞪变量 `image_base64` 和 `binary_image` 衚瀺䞀匠囟像先甚 Base64 猖码再蜬换䞺 bytes最后䌠给 `io.BytesIO`。 + +只是䞺了让它们胜和瀺䟋攟圚同䞀䞪文件里䟿于䜠盎接倍制运行。🥚 + +/// + +通过䜿甚 `with` 代码块我们确保圚生成噚凜数垊有 `yield` 的凜数完成后关闭这䞪类文件对象。也就是圚发送完响应之后。 + +圚这䞪特定瀺䟋䞭这并䞍那么重芁因䞺它是䞀䞪内存䞭的假文件䜿甚 `io.BytesIO`䜆对于真实文件确保圚完成盞关工䜜后关闭文件是埈重芁的。 + +### 文件䞎匂步 { #files-and-async } + +倧倚数情况䞋类文件对象默讀䞎 async 和 await 䞍兌容。 + +䟋劂它们没有 `await file.read()`也䞍支持 `async for chunk in file`。 + +而䞔埈倚情况䞋读取它们是䞀䞪阻塞操䜜可胜䌚阻塞事件埪环因䞺数据来自磁盘或眑络。 + +/// info | 信息 + +䞊面的瀺䟋其实是䞪䟋倖因䞺 `io.BytesIO` 对象已经圚内存䞭所以读取它䞍䌚阻塞。 + +䜆圚讞倚情况䞋读取文件或类文件对象䌚发生阻塞。 + +/// + +䞺避免阻塞事件埪环䜠可以简单地把*路埄操䜜凜数*声明䞺垞规的 `def`而䞍是 `async def`这样 FastAPI 䌚圚䞀䞪线皋池工䜜线皋䞊运行它从而避免阻塞䞻事件埪环。 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *} + +/// tip | 提瀺 + +劂果䜠需芁圚匂步凜数里调甚阻塞代码或圚阻塞凜数里调甚匂步凜数可以䜿甚 [Asyncer](https://asyncer.tiangolo.com)它是 FastAPI 的姐効库。 + +/// + +### `yield from` { #yield-from } + +圓䜠圚迭代某䞪对象䟋劂类文件对象并䞺每䞪条目执行 `yield` 时䜠也可以䜿甚 `yield from` 盎接产出每䞪条目从而省去 `for` 埪环。 + +这并䞍是 FastAPI 特有的功胜只是 Python 的语法䜆这是䞀䞪倌埗知道的小技巧。😎 + +{* ../../docs_src/stream_data/tutorial002_py310.py ln[37:40] hl[40] *} diff --git a/docs/zh/docs/advanced/strict-content-type.md b/docs/zh/docs/advanced/strict-content-type.md new file mode 100644 index 0000000000..973d1840c0 --- /dev/null +++ b/docs/zh/docs/advanced/strict-content-type.md @@ -0,0 +1,88 @@ +# 䞥栌的 Content-Type 检查 { #strict-content-type-checking } + +默讀情况䞋FastAPI 对 JSON 请求䜓䜿甚䞥栌的 `Content-Type` 倎检查。这意味着JSON 请求必须包含有效的 `Content-Type` 倎䟋劂 `application/json`其请求䜓才䌚被按 JSON 解析。 + +## CSRF 风险 { #csrf-risk } + +歀默讀行䞺圚䞀䞪非垞特定的场景䞋可防埡䞀类跚站请求䌪造CSRF攻击。 + +这类攻击利甚了浏览噚的䞀䞪事实圓请求满足以䞋条件时浏览噚允讞脚本圚䞍进行任䜕 CORS 预检的情况䞋盎接发送请求 + +- 没有 `Content-Type` 倎䟋劂䜿甚 `fetch()` 携垊 `Blob` 䜜䞺 body +- 䞔䞍发送任䜕讀证凭据。 + +这种攻击䞻芁圚以䞋情况䞋盞关 + +- 应甚圚本地劂 `localhost`或内眑䞭运行 +- 䞔应甚没有任䜕讀证假定来自同䞀眑络的请求郜可信。 + +## 攻击瀺䟋 { #example-attack } + +假讟䜠构建了䞀䞪本地运行的 AI 代理。 + +它提䟛了䞀䞪 API地址䞺 + +``` +http://localhost:8000/v1/agents/multivac +``` + +及有䞀䞪前端地址䞺 + +``` +http://localhost:8000 +``` + +/// tip | 提瀺 + +泚意它们的䞻机盞同。 + +/// + +之后䜠可以通过前端让该 AI 代理替䜠执行操䜜。 + +由于它圚本地运行、而非暎露圚匀攟的互联眑䜠决定䞍配眮任䜕讀证只信任对本地眑络的访问。 + +于是䜠的某䜍甚户安装并圚本地运行了它。 + +然后他她可胜䌚打匀䞀䞪恶意眑站䟋劂 + +``` +https://evilhackers.example.com +``` + +该恶意眑站䜿甚 `fetch()` 携垊 `Blob` 䜜䞺 body向本地 API 发送请求地址䞺 + +``` +http://localhost:8000/v1/agents/multivac +``` + +尜管恶意眑站䞎本地应甚的䞻机䞍同浏览噚仍䞍䌚觊发 CORS 预检请求原因是 + +- 请求䞍涉及任䜕讀证无需发送凭据。 +- 浏览噚讀䞺它并未发送 JSON因䞺猺少 `Content-Type` 倎。 + +于是该恶意眑站就可胜让本地 AI 代理替甚户向前老板发送愀怒消息  甚至曎糟。😅 + +## 匀攟的互联眑 { #open-internet } + +劂果䜠的应甚郚眲圚匀攟的互联眑䜠䞍䌚“信任眑络”也䞍䌚允讞任䜕人䞍经讀证就发送特权请求。 + +攻击者完党可以盎接运行脚本向䜠的 API 发送请求无需借助浏览噚亀互因歀䜠埈可胜已经对任䜕特权端点做奜了安党防技。 + +圚这种情况䞋以䞊攻击/风险䞍适甚于䜠。 + +该风险/攻击䞻芁发生圚应甚运行于本地眑络、䞔“仅䟝赖眑络隔犻䜜䞺保技”的场景。 + +## 允讞无 Content-Type 的请求 { #allowing-requests-without-content-type } + +劂果䜠需芁兌容䞍发送 `Content-Type` 倎的客户端可以通过讟眮 `strict_content_type=False` 来关闭䞥栌检查 + +{* ../../docs_src/strict_content_type/tutorial001_py310.py hl[4] *} + +启甚该讟眮后猺少 `Content-Type` 倎的请求其请求䜓也䌚按 JSON 解析这䞎旧版本 FastAPI 的行䞺䞀臎。 + +/// info | 信息 + +歀行䞺和配眮圚 FastAPI 0.132.0 䞭新增。 + +/// diff --git a/docs/zh/docs/advanced/sub-applications.md b/docs/zh/docs/advanced/sub-applications.md index 3e61610a37..b0230402bf 100644 --- a/docs/zh/docs/advanced/sub-applications.md +++ b/docs/zh/docs/advanced/sub-applications.md @@ -30,25 +30,25 @@ ### 查看自劚 API 文档 { #check-the-automatic-api-docs } -现圚䜿甚䜠的文件运行 `fastapi` 呜什 +现圚运行 `fastapi` 呜什
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-然后圚 http://127.0.0.1:8000/docs 打匀文档。 +然后圚 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 打匀文档。 䞋囟星瀺的是䞻应甚 API 文档只包括其自有的*路埄操䜜*。 -然后查看子应甚文档 http://127.0.0.1:8000/subapi/docs。 +然后查看子应甚文档 [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)。 䞋囟星瀺的是子应甚的 API 文档也是只包括其自有的*路埄操䜜*所有这些路埄操䜜郜圚 `/subapi` 子路埄前猀䞋。 @@ -64,4 +64,4 @@ $ fastapi dev main.py 并䞔子应甚还可以再挂蜜子应甚䞀切郜䌚正垞运行FastAPI 可以自劚倄理所有 `root_path`。 -关于 `root_path` 及劂䜕星匏䜿甚 `root_path` 的内容诊见[䜿甚代理](behind-a-proxy.md){.internal-link target=_blank}䞀章。 +关于 `root_path` 及劂䜕星匏䜿甚 `root_path` 的内容诊见[䜿甚代理](behind-a-proxy.md)䞀章。 diff --git a/docs/zh/docs/advanced/templates.md b/docs/zh/docs/advanced/templates.md index 37575aff29..952f438c73 100644 --- a/docs/zh/docs/advanced/templates.md +++ b/docs/zh/docs/advanced/templates.md @@ -8,7 +8,7 @@ Flask 等工具䜿甚的 Jinja2 是最甚的暡板匕擎。 ## 安装䟝赖项 { #install-dependencies } -确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}激掻它并安装 `jinja2` +确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md)激掻它并安装 `jinja2`
@@ -29,14 +29,14 @@ $ pip install jinja2 {* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *} -/// note +/// note | 泚意 圚 FastAPI 0.108.0Starlette 0.29.0 之前`name` 是第䞀䞪参数。 并䞔圚歀之前`request` 对象是䜜䞺 context 的䞀郚分以键倌对的圢匏䌠递的。 /// -/// tip +/// tip | 提瀺 通过声明 `response_class=HTMLResponse`API 文档就胜识别响应的对象是 HTML。 @@ -122,4 +122,4 @@ Item ID: 42 ## 曎倚诎明 { #more-details } -包括测试暡板等曎倚诊情请参阅 Starlette 官方文档 - 暡板。 +包括劂䜕测试暡板圚内的曎倚诊情请查看 [Starlette 的暡板文档](https://www.starlette.dev/templates/)。 diff --git a/docs/zh/docs/advanced/testing-websockets.md b/docs/zh/docs/advanced/testing-websockets.md index e435e41e23..6d2e4b0988 100644 --- a/docs/zh/docs/advanced/testing-websockets.md +++ b/docs/zh/docs/advanced/testing-websockets.md @@ -8,6 +8,6 @@ /// note | 泚意 -曎倚细节请查看 Starlette 的文档测试 WebSockets。 +曎倚细节请查看 Starlette 的文档[测试 WebSockets](https://www.starlette.dev/testclient/#testing-websocket-sessions)。 /// diff --git a/docs/zh/docs/advanced/using-request-directly.md b/docs/zh/docs/advanced/using-request-directly.md index 8cfad4203a..519443d9d2 100644 --- a/docs/zh/docs/advanced/using-request-directly.md +++ b/docs/zh/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ ## `Request` 对象的细节 { #details-about-the-request-object } -实际䞊**FastAPI** 的底层是 **Starlette****FastAPI** 只䞍过是圚 **Starlette** 顶层提䟛了䞀些工具所以胜盎接䜿甚 Starlette 的 `Request` 对象。 +实际䞊**FastAPI** 的底层是 **Starlette****FastAPI** 只䞍过是圚 **Starlette** 顶层提䟛了䞀些工具所以胜盎接䜿甚 Starlette 的 [`Request`](https://www.starlette.dev/requests/) 对象。 䜆盎接从 `Request` 对象提取数据时䟋劂读取请求䜓这些数据䞍䌚被 **FastAPI** 验证、蜬换或文档化䜿甚 OpenAPI䞺自劚的 API 甚户界面。 @@ -45,7 +45,7 @@ ## `Request` 文档 { #request-documentation } -曎倚细节诊见 Starlette 官档 - `Request` 对象。 +䜠可以圚[Starlette 官方文档站点的 `Request` 对象](https://www.starlette.dev/requests/)䞭阅读曎倚细节。 /// note | 技术细节 diff --git a/docs/zh/docs/advanced/websockets.md b/docs/zh/docs/advanced/websockets.md index a4cdae3a22..d90ef87339 100644 --- a/docs/zh/docs/advanced/websockets.md +++ b/docs/zh/docs/advanced/websockets.md @@ -1,10 +1,10 @@ # WebSockets { #websockets } -悚可以圚 **FastAPI** 䞭䜿甚 WebSockets。 +悚可以圚 **FastAPI** 䞭䜿甚 [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)。 ## 安装 `websockets` { #install-websockets } -请确保悚创建䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}、激掻它并安装 `websockets`䞀䞪让䜿甚“WebSocket”协议曎容易的 Python 库 +请确保悚创建䞀䞪[虚拟环境](../virtual-environments.md)、激掻它并安装 `websockets`䞀䞪让䜿甚“WebSocket”协议曎容易的 Python 库
@@ -64,19 +64,19 @@ $ pip install websockets ## 尝试䞀䞋 { #try-it } -劂果悚的文件名䞺 `main.py`请䜿甚以䞋呜什运行应甚皋序 +将代码攟圚 `main.py`然后运行䜠的应甚皋序
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-圚浏览噚䞭打匀 http://127.0.0.1:8000。 +圚浏览噚䞭打匀 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 悚将看到䞀䞪简单的页面劂䞋所瀺 @@ -86,7 +86,7 @@ $ fastapi dev main.py -悚的 **FastAPI** 应甚皋序将回倍 +悚的 **FastAPI** 应甚皋序将通过 WebSockets 回倍 @@ -115,25 +115,25 @@ $ fastapi dev main.py 由于这是䞀䞪 WebSocket抛出 `HTTPException` 并䞍是埈合理而是抛出 `WebSocketException`。 -悚可以䜿甚规范䞭定义的有效代码。 +悚可以䜿甚[规范䞭定义的有效代码](https://tools.ietf.org/html/rfc6455#section-7.4.1)。 /// ### 尝试垊有䟝赖项的 WebSockets { #try-the-websockets-with-dependencies } -劂果悚的文件名䞺 `main.py`请䜿甚以䞋呜什运行应甚皋序 +运行䜠的应甚皋序
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-圚浏览噚䞭打匀 http://127.0.0.1:8000。 +圚浏览噚䞭打匀 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 圚页面䞭悚可以讟眮 @@ -174,7 +174,7 @@ Client #1596980209979 left the chat 䜆请记䜏由于所有内容郜圚内存䞭以单䞪列衚的圢匏倄理因歀它只胜圚进皋运行时工䜜并䞔只胜䜿甚单䞪进皋。 -劂果悚需芁䞎 FastAPI 集成曎简单䜆曎区倧的功胜支持 Redis、PostgreSQL 或其他功胜请查看 encode/broadcaster。 +劂果悚需芁䞎 FastAPI 集成曎简单䜆曎区倧的功胜支持 Redis、PostgreSQL 或其他功胜请查看 [encode/broadcaster](https://github.com/encode/broadcaster)。 /// @@ -182,5 +182,5 @@ Client #1596980209979 left the chat 芁了解曎倚选项请查看 Starlette 的文档 -* `WebSocket` 类。 -* 基于类的 WebSocket 倄理。 +* [`WebSocket` ç±»](https://www.starlette.dev/websockets/)。 +* [基于类的 WebSocket 倄理](https://www.starlette.dev/endpoints/#websocketendpoint)。 diff --git a/docs/zh/docs/advanced/wsgi.md b/docs/zh/docs/advanced/wsgi.md index 487fbf8ddb..038b672f8a 100644 --- a/docs/zh/docs/advanced/wsgi.md +++ b/docs/zh/docs/advanced/wsgi.md @@ -1,6 +1,6 @@ # 包含 WSGI - FlaskDjango其它 { #including-wsgi-flask-django-others } -悚可以挂蜜 WSGI 应甚正劂悚圚 [子应甚 - 挂蜜](sub-applications.md){.internal-link target=_blank}、[圚代理之后](behind-a-proxy.md){.internal-link target=_blank} 䞭所看到的那样。 +悚可以挂蜜 WSGI 应甚正劂悚圚 [子应甚 - 挂蜜](sub-applications.md)、[圚代理之后](behind-a-proxy.md) 䞭所看到的那样。 䞺歀, 悚可以䜿甚 `WSGIMiddleware` 来包装䜠的 WSGI 应甚劂FlaskDjango等等。 @@ -36,13 +36,13 @@ 其䜙的请求则䌚被 **FastAPI** 倄理。 -劂果䜠运行它并访问 http://localhost:8000/v1/䜠将䌚看到由 Flask 返回的响应 +劂果䜠运行它并访问 [http://localhost:8000/v1/](http://localhost:8000/v1/)䜠将䌚看到由 Flask 返回的响应 ```txt Hello, World from Flask! ``` -劂果䜠访问 http://localhost:8000/v2䜠将䌚看到由 FastAPI 返回的响应 +劂果䜠访问 [http://localhost:8000/v2](http://localhost:8000/v2)䜠将䌚看到由 FastAPI 返回的响应 ```JSON { diff --git a/docs/zh/docs/alternatives.md b/docs/zh/docs/alternatives.md index 8a552c91d4..fe7aa98698 100644 --- a/docs/zh/docs/alternatives.md +++ b/docs/zh/docs/alternatives.md @@ -14,7 +14,7 @@ ## 先前的工具 { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } 它是最流行䞔被广泛信任的 Python 框架。被甚于构建 Instagram 等系统。 @@ -22,7 +22,7 @@ 它最初甚于圚后端生成 HTML而䞍是创建由现代前端劂 React、Vue.js、Angular或䞎之通信的其他系统劂 IoT 讟倇䜿甚的 API。 -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST framework 䜜䞺䞀䞪灵掻工具箱而创建甚于圚底层䜿甚 Django 构建 Web API从而增区其 API 胜力。 @@ -42,7 +42,7 @@ Django REST Framework 由 Tom Christie 创建。他也是 Starlette 和 Uvicorn /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask 是䞀䞪“埮框架”它䞍包含数据库集成也没有像 Django 那样的讞倚默讀内建功胜。 @@ -63,7 +63,7 @@ Flask 是䞀䞪“埮框架”它䞍包含数据库集成也没有像 Djan /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI** 实际䞊䞍是 **Requests** 的替代品。它们的䜜甚范囎完党䞍同。 @@ -99,13 +99,13 @@ def read_url(): /// check | 启发 **FastAPI** -- 提䟛简单盎观的 API。 -- 盎接、自然地䜿甚 HTTP 方法名操䜜。 -- 具倇合理默讀倌同时支持区倧定制胜力。 +* 提䟛简单盎观的 API。 +* 盎接、自然地䜿甚 HTTP 方法名操䜜。 +* 具倇合理默讀倌同时支持区倧定制胜力。 /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } 我想从 Django REST Framework 埗到的䞻芁特性之䞀是自劚 API 文档。 @@ -123,8 +123,8 @@ def read_url(): 并集成基于标准的甚户界面工具 -- Swagger UI -- ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) 选择这䞀者是因䞺它们盞圓流行䞔皳定䜆皍䜜搜玢䜠就胜扟到数十种 OpenAPI 的替代甚户界面郜可以䞎 **FastAPI** 搭配䜿甚。 @@ -134,7 +134,7 @@ def read_url(): 有若干基于 Flask 的 REST 框架䜆圚投入时闎粟力深入调研后我发现讞倚已停止绎技或被匃甚并存圚倚倄未解决问题䞍倪适合采甚。 -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } API 系统所需的䞻芁特性之䞀是数据“序列化”即将代码Python䞭的数据蜬换䞺可通过眑络发送的圢匏。䟋劂将包含数据库数据的对象蜬换䞺 JSON 对象、将 `datetime` 对象蜬换䞺字笊䞲等。 @@ -152,7 +152,7 @@ API 的及䞀䞪重芁特性是数据校验确保数据圚给定纊束䞋是 /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } API 的及䞀䞪重芁需求是从䌠入请求䞭解析数据。 @@ -174,7 +174,7 @@ Webargs 由䞎 Marshmallow 盞同的匀发者创建。 /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } Marshmallow 侎 Webargs 通过插件提䟛了校验、解析䞎序列化。 @@ -204,7 +204,7 @@ APISpec 由䞎 Marshmallow 盞同的匀发者创建。 /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } 这是䞀䞪 Flask 插件将 Webargs、Marshmallow 侎 APISpec 结合圚䞀起。 @@ -218,11 +218,11 @@ APISpec 由䞎 Marshmallow 盞同的匀发者创建。 䜿甚它促成了若干 Flask 党栈脚手架的诞生。以䞋是我以及若干倖郚团队至今䜿甚的䞻芁技术栈 -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [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-generation.md){.internal-link target=_blank}的基础。 +这些党栈脚手架也成䞺了[**FastAPI** 项目脚手架](project-generation.md)的基础。 /// info | 信息 @@ -236,7 +236,7 @@ Flask-apispec 由䞎 Marshmallow 盞同的匀发者创建。 /// -### NestJS以及 Angular { #nestjs-and-angular } +### [NestJS](https://nestjs.com/)以及 [Angular](https://angular.io/) { #nestjs-and-angular } 这甚至䞍是 Python。NestJS 是䞀䞪 JavaScriptTypeScript的 NodeJS 框架受 Angular 启发。 @@ -258,13 +258,13 @@ Flask-apispec 由䞎 Marshmallow 盞同的匀发者创建。 /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } 它是最早的䞀批基于 `asyncio` 的极速 Python 框架之䞀䞔做埗䞎 Flask 埈盞䌌。 /// note | 技术细节 -它䜿甚了 `uvloop` 来替代 Python 默讀的 `asyncio` 埪环。这正是它劂歀之快的原因。 +它䜿甚了 [`uvloop`](https://github.com/MagicStack/uvloop) 来替代 Python 默讀的 `asyncio` 埪环。这正是它劂歀之快的原因。 它星然启发了 Uvicorn 和 Starlette圚公匀的基准测试䞭它们目前比 Sanic 曎快。 @@ -278,7 +278,7 @@ Flask-apispec 由䞎 Marshmallow 盞同的匀发者创建。 /// -### Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falcon 是及䞀䞪高性胜 Python 框架它被讟计䞺粟简䞔可䜜䞺 Hug 等其他框架的基础。 @@ -294,7 +294,7 @@ Falcon 是及䞀䞪高性胜 Python 框架它被讟计䞺粟简䞔可䜜䞺 H /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } 我圚构建 **FastAPI** 的早期阶段发现了 Molten。它有䞍少盞䌌的想法 @@ -318,7 +318,7 @@ Falcon 是及䞀䞪高性胜 Python 框架它被讟计䞺粟简䞔可䜜䞺 H /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hug 是最早䜿甚 Python 类型提瀺来声明 API 参数类型的框架之䞀。这䞀绝劙想法也启发了其他工具。 @@ -334,7 +334,7 @@ Hug 是最早䜿甚 Python 类型提瀺来声明 API 参数类型的框架之䞀 /// info | 信息 -Hug 由 Timothy Crosley 创建他也是 `isort` 的䜜者这是䞀䞪胜自劚排序 Python 文件䞭富入的䌘秀工具。 +Hug 由 Timothy Crosley 创建他也是 [`isort`](https://github.com/timothycrosley/isort) 的䜜者这是䞀䞪胜自劚排序 Python 文件䞭富入的䌘秀工具。 /// @@ -348,7 +348,7 @@ Hug 启发 **FastAPI** 圚凜数䞭声明 `response` 参数甚于讟眮 heade /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } 就圚决定劚手构建 **FastAPI** 之前我扟到了 **APIStar** 服务噚。它几乎具倇我想芁的䞀切讟计也埈出色。 @@ -398,7 +398,7 @@ APIStar 由 Tom Christie 创建。他还创建了 ## **FastAPI** 所䜿甚的组件 { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydantic 是䞀䞪基于 Python 类型提瀺来定义数据校验、序列化䞎文档䜿甚 JSON Schema的库。 @@ -414,7 +414,7 @@ Pydantic 是䞀䞪基于 Python 类型提瀺来定义数据校验、序列化䞎 /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starlette 是䞀䞪蜻量级的 ASGI 框架/工具集非垞适合构建高性胜的 asyncio 服务。 @@ -459,7 +459,7 @@ ASGI 是由 Django 栞心团队成员掚劚的新“标准”。它尚䞍是正 /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicorn 是䞀䞪基于 uvloop 侎 httptools 构建的极速 ASGI 服务噚。 @@ -473,10 +473,10 @@ Uvicorn 是䞀䞪基于 uvloop 侎 httptools 构建的极速 ASGI 服务噚。 䜠也可以䜿甚 `--workers` 呜什行选项以获埗匂步的倚进皋服务噚。 -曎倚细节见[郚眲](deployment/index.md){.internal-link target=_blank}䞀节。 +曎倚细节见[郚眲](deployment/index.md)䞀节。 /// ## 基准䞎速床 { #benchmarks-and-speed } -芁理解、比蟃并查看 Uvicorn、Starlette 侎 FastAPI 之闎的差匂请查看[基准](benchmarks.md){.internal-link target=_blank}䞀节。 +芁理解、比蟃并查看 Uvicorn、Starlette 侎 FastAPI 之闎的差匂请查看[基准](benchmarks.md)䞀节。 diff --git a/docs/zh/docs/async.md b/docs/zh/docs/async.md index 36d875f515..92ee5ef22f 100644 --- a/docs/zh/docs/async.md +++ b/docs/zh/docs/async.md @@ -141,7 +141,7 @@ Python 的现代版本支持通过䞀种叫**"协皋"**——䜿甚 `async` 和 /// info | 信息 -挂亮的插画来自 Ketrina Thompson. 🎚 +挂亮的插画来自 [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)。🎚 /// @@ -207,7 +207,7 @@ Python 的现代版本支持通过䞀种叫**"协皋"**——䜿甚 `async` 和 /// info | 信息 -挂亮的插画来自 Ketrina Thompson. 🎚 +挂亮的插画来自 [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)。🎚 /// @@ -251,7 +251,7 @@ Python 的现代版本支持通过䞀种叫**"协皋"**——䜿甚 `async` 和 这䞎 **FastAPI** 的性胜氎平盞同。 -䜠可以同时拥有并行性和匂步性䜠可以获埗比倧倚数经过测试的 NodeJS 框架曎高的性胜并䞔䞎 Go 䞍盞䞊䞋 Go 是䞀种曎接近于 C 的猖译语蚀党郚園功于 Starlette。 +䜠可以同时拥有并行性和匂步性䜠可以获埗比倧倚数经过测试的 NodeJS 框架曎高的性胜并䞔䞎 Go 䞍盞䞊䞋 Go 是䞀种曎接近于 C 的猖译语蚀[党郚園功于 Starlette](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)。 ### 并发比并行奜吗 { #is-concurrency-better-than-parallelism } @@ -298,7 +298,7 @@ CPU 密集型操䜜的垞见瀺䟋是需芁倍杂的数孊倄理。 这䞀点再加䞊 Python 是**数据科孊**、机噚孊习尀其是深床孊习的䞻芁语蚀这䞀简单事实䜿埗 **FastAPI** 䞎数据科孊/机噚孊习 Web API 和应甚皋序以及其他讞倚应甚皋序非垞匹配。 -了解劂䜕圚生产环境䞭实现这种并行性可查看歀文 [郚眲](deployment/index.md){.internal-link target=_blank}。 +了解劂䜕圚生产环境䞭实现这种并行性可查看歀文 [郚眲](deployment/index.md)。 ## `async` 和 `await` { #async-and-await } @@ -363,13 +363,13 @@ async def read_burgers(): ### 猖写自己的匂步代码 { #write-your-own-async-code } -Starlette 和 **FastAPI** 是基于 AnyIO 实现的这䜿埗它们可以兌容 Python 的标准库 asyncio 和 Trio。 +Starlette 和 **FastAPI** 是基于 [AnyIO](https://anyio.readthedocs.io/en/stable/) 实现的这䜿埗它们可以兌容 Python 的标准库 [asyncio](https://docs.python.org/3/library/asyncio-task.html) 和 [Trio](https://trio.readthedocs.io/en/stable/)。 -特别是䜠可以盎接䜿甚 AnyIO 来倄理高级的并发甚䟋这些甚䟋需芁圚自己的代码䞭䜿甚曎高级的暡匏。 +特别是䜠可以盎接䜿甚 [AnyIO](https://anyio.readthedocs.io/en/stable/) 来倄理高级的并发甚䟋这些甚䟋需芁圚自己的代码䞭䜿甚曎高级的暡匏。 -即䜿䜠没有䜿甚 **FastAPI**䜠也可以䜿甚 AnyIO 猖写自己的匂步皋序䜿其拥有蟃高的兌容性并获埗䞀些奜倄䟋劂 结构化并发。 +即䜿䜠没有䜿甚 **FastAPI**䜠也可以䜿甚 [AnyIO](https://anyio.readthedocs.io/en/stable/) 猖写自己的匂步皋序䜿其拥有蟃高的兌容性并获埗䞀些奜倄䟋劂 结构化并发。 -我基于 AnyIO 新建了䞀䞪库䜜䞺䞀䞪蜻量级的封装层甚来䌘化类型泚解同时提䟛了曎奜的**自劚补党**、**内联错误提瀺**等功胜。这䞪库还附垊了䞀䞪友奜的入闚指南和教皋胜垮助䜠**理解**并猖写**自己的匂步代码**Asyncer。劂果䜠有**结合䜿甚匂步代码和垞规**阻塞/同步代码的需求这䞪库䌚特别有甚。 +我基于 AnyIO 新建了䞀䞪库䜜䞺䞀䞪蜻量级的封装层甚来䌘化类型泚解同时提䟛了曎奜的**自劚补党**、**内联错误提瀺**等功胜。这䞪库还附垊了䞀䞪友奜的入闚指南和教皋胜垮助䜠**理解**并猖写**自己的匂步代码**[Asyncer](https://asyncer.tiangolo.com/)。劂果䜠有**结合䜿甚匂步代码和垞规**阻塞/同步代码的需求这䞪库䌚特别有甚。 ### 其他圢匏的匂步代码 { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Starlette 和 **FastAPI** 是基于 Gevent。䜆代码的理解、调试和思考郜芁倍杂讞倚。 +圚以前版本的 Python䜠可以䜿甚倚线皋或者 [Gevent](https://www.gevent.org/)。䜆代码的理解、调试和思考郜芁倍杂讞倚。 圚以前版本的 NodeJS / 浏览噚 JavaScript 䞭䜠䌚䜿甚"回调"因歀也可胜富臎“回调地狱”。 @@ -419,15 +419,15 @@ Starlette 和 **FastAPI** 是基于 I/O 的代码。 -圚这䞀种情况䞋䞎䜠之前的框架盞比**FastAPI** 可胜[仍然埈快](index.md#performance){.internal-link target=_blank}。 +圚这䞀种情况䞋䞎䜠之前的框架盞比**FastAPI** 可胜[仍然埈快](index.md#performance)。 ### 䟝赖 { #dependencies } -这同样适甚于[䟝赖](tutorial/dependencies/index.md){.internal-link target=_blank}。劂果䞀䞪䟝赖是标准的 `def` 凜数而䞍是 `async def`它将被运行圚倖郚线皋池䞭。 +这同样适甚于[䟝赖](tutorial/dependencies/index.md)。劂果䞀䞪䟝赖是标准的 `def` 凜数而䞍是 `async def`它将被运行圚倖郚线皋池䞭。 ### 子䟝赖 { #sub-dependencies } -䜠可以拥有倚䞪盞互䟝赖的䟝赖以及[子䟝赖](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} 䜜䞺凜数的参数它们䞭的䞀些可胜是通过 `async def` 声明也可胜是通过 `def` 声明。它们仍然可以正垞工䜜这些通过 `def` 声明的凜数将䌚圚倖郚线皋䞭调甚来自线皋池而䞍是"被等埅"。 +䜠可以拥有倚䞪盞互䟝赖的䟝赖以及[子䟝赖](tutorial/dependencies/sub-dependencies.md) 䜜䞺凜数的参数它们䞭的䞀些可胜是通过 `async def` 声明也可胜是通过 `def` 声明。它们仍然可以正垞工䜜这些通过 `def` 声明的凜数将䌚圚倖郚线皋䞭调甚来自线皋池而䞍是"被等埅"。 ### 其他凜数 { #other-utility-functions } diff --git a/docs/zh/docs/benchmarks.md b/docs/zh/docs/benchmarks.md index a6e706dfaa..d98d3de593 100644 --- a/docs/zh/docs/benchmarks.md +++ b/docs/zh/docs/benchmarks.md @@ -1,6 +1,6 @@ # 基准测试 { #benchmarks } -第䞉方机构 TechEmpower 的基准测试衚明圚 Uvicorn 䞋运行的 **FastAPI** 应甚皋序是 可甚的最快的 Python 框架之䞀仅次于 Starlette 和 Uvicorn 本身由 FastAPI 内郚䜿甚。 +第䞉方机构 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 内郚䜿甚。 䜆是圚查看基准埗分和对比时请泚意以䞋几点。 diff --git a/docs/zh/docs/deployment/cloud.md b/docs/zh/docs/deployment/cloud.md index 96883bd6bf..025715f523 100644 --- a/docs/zh/docs/deployment/cloud.md +++ b/docs/zh/docs/deployment/cloud.md @@ -6,7 +6,7 @@ ## FastAPI Cloud { #fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 背后的同䞀䜜者䞎团队打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 背后的同䞀䜜者䞎团队打造。 它简化了**构建**、**郚眲**和**访问** API 的流皋几乎䞍莹力。 @@ -16,9 +16,9 @@ FastAPI Cloud 是 *FastAPI and friends* 匀源项目的䞻芁赞助方和资金 ## 云服务商 - 赞助商 { #cloud-providers-sponsors } -还有䞀些云服务商也䌚 ✹ [**赞助 FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✚。🙇 +还有䞀些云服务商也䌚 ✹ [**赞助 FastAPI**](../help-fastapi.md#sponsor-the-author) ✚。🙇 䜠也可以考虑按照他们的指南尝试他们的服务 -* Render -* Railway +* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi) +* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi) diff --git a/docs/zh/docs/deployment/concepts.md b/docs/zh/docs/deployment/concepts.md index 76e967d7de..dd5ba2ba80 100644 --- a/docs/zh/docs/deployment/concepts.md +++ b/docs/zh/docs/deployment/concepts.md @@ -25,7 +25,7 @@ ## 安党性 - HTTPS { #security-https } -圚[䞊䞀章有关 HTTPS](https.md){.internal-link target=_blank} 䞭我们了解了 HTTPS 劂䜕䞺悚的 API 提䟛加密。 +圚[䞊䞀章有关 HTTPS](https.md) 䞭我们了解了 HTTPS 劂䜕䞺悚的 API 提䟛加密。 我们还看到HTTPS 通垞由应甚皋序服务噚的**倖郚**组件**TLS 终止代理**提䟛。 @@ -149,7 +149,7 @@ ### 厩溃后重新启劚 { #restart-after-crash } -䜆圚那些䞥重错误富臎正圚运行的**进皋**厩溃的情况䞋悚需芁䞀䞪倖郚组件来莟莣**重新启劚**进皋至少尝试几次...... +䜆圚那些䞥重错误富臎正圚运行的**进皋**厩溃的情况䞋悚需芁䞀䞪倖郚组件来莟莣**重新启劚**进皋至少尝试几次... /// tip | 提瀺 @@ -190,7 +190,7 @@ ### 工䜜进皋和端口 { #worker-processes-and-ports } -还记埗文档 [关于 HTTPS](https.md){.internal-link target=_blank} 䞭只有䞀䞪进皋可以䟊听服务噚䞭的端口和 IP 地址的䞀种组合吗 +还记埗文档 [关于 HTTPS](https.md) 䞭只有䞀䞪进皋可以䟊听服务噚䞭的端口和 IP 地址的䞀种组合吗 现圚仍然是对的。 @@ -243,7 +243,7 @@ 劂果这些关于 **容噚**、Docker 或 Kubernetes 的内容还没有倚倧意义请䞍芁担心。 -我将圚以后的章节䞭向悚诊细介绍容噚镜像、Docker、Kubernetes 等[容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 +我将圚以后的章节䞭向悚诊细介绍容噚镜像、Docker、Kubernetes 等[容噚䞭的 FastAPI - Docker](docker.md)。 /// @@ -281,7 +281,7 @@ /// tip | 提瀺 -我将圚以后的章节䞭䞺悚提䟛䜿甚容噚执行歀操䜜的曎具䜓瀺䟋[容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 +我将圚以后的章节䞭䞺悚提䟛䜿甚容噚执行歀操䜜的曎具䜓瀺䟋[容噚䞭的 FastAPI - Docker](docker.md)。 /// diff --git a/docs/zh/docs/deployment/docker.md b/docs/zh/docs/deployment/docker.md index 4e7410587e..aa7b60b508 100644 --- a/docs/zh/docs/deployment/docker.md +++ b/docs/zh/docs/deployment/docker.md @@ -1,6 +1,6 @@ # 容噚䞭的 FastAPI - Docker { #fastapi-in-containers-docker } -郚眲 FastAPI 应甚时垞见做法是构建䞀䞪**Linux 容噚镜像**。通垞䜿甚 **Docker** 实现。然后䜠可以甚几种方匏之䞀郚眲该镜像。 +郚眲 FastAPI 应甚时垞见做法是构建䞀䞪**Linux 容噚镜像**。通垞䜿甚 [**Docker**](https://www.docker.com/) 实现。然后䜠可以甚几种方匏之䞀郚眲该镜像。 䜿甚 Linux 容噚有倚种䌘势包括**安党性**、**可倍制性**、**简单性**等。 @@ -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"] ``` @@ -60,16 +60,16 @@ Linux 容噚倍甚宿䞻机物理机、虚拟机、云服务噚等的同 Docker 䞀盎是创建和管理**容噚镜像**侎**容噚**的䞻芁工具之䞀。 -还有䞀䞪公共的 Docker Hub其䞭䞺讞倚工具、环境、数据库和应甚提䟛了预制的**官方容噚镜像**。 +还有䞀䞪公共的 [Docker Hub](https://hub.docker.com/)其䞭䞺讞倚工具、环境、数据库和应甚提䟛了预制的**官方容噚镜像**。 -䟋劂有官方的 Python 镜像。 +䟋劂有官方的 [Python 镜像](https://hub.docker.com/_/python)。 还有讞倚甚于䞍同目的劂数据库的镜像䟋劂 -* PostgreSQL -* MySQL -* MongoDB -* Redis 等。 +* [PostgreSQL](https://hub.docker.com/_/postgres) +* [MySQL](https://hub.docker.com/_/mysql) +* [MongoDB](https://hub.docker.com/_/mongo) +* [Redis](https://hub.docker.com/_/redis) 等。 通过䜿甚预制的容噚镜像可以埈容易地**组合**并䜿甚䞍同工具。䟋劂试甚䞀䞪新的数据库。圚倧倚数情况䞋䜠可以盎接䜿甚**官方镜像**只需通过环境变量配眮即可。 @@ -111,7 +111,7 @@ Docker 䞀盎是创建和管理**容噚镜像**侎**容噚**的䞻芁工具之 最垞见的方匏是䜿甚 `requirements.txt` 文件每行䞀䞪包名及其版本范囎。 -圓然䜠也可以参考䜠圚[关于 FastAPI 版本](versions.md){.internal-link target=_blank}䞭读到的思路来讟眮版本范囎。 +圓然䜠也可以参考䜠圚[关于 FastAPI 版本](versions.md)䞭读到的思路来讟眮版本范囎。 䟋劂䜠的 `requirements.txt` 可胜是 @@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] #### 䜿甚 `CMD` - Exec 圢匏 { #use-cmd-exec-form } -`CMD` 指什有䞀种写法 +[`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) 指什有䞀种写法 ✅ **Exec** 圢匏 @@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"] CMD fastapi run app/main.py --port 80 ``` -务必䜿甚**exec** 圢匏以确保 FastAPI 可以䌘雅停机并觊发[生呜呚期事件](../advanced/events.md){.internal-link target=_blank}。 +务必䜿甚**exec** 圢匏以确保 FastAPI 可以䌘雅停机并觊发[生呜呚期事件](../advanced/events.md)。 -䜠可以圚 Docker 文档Shell 侎 Exec 圢匏䞭了解曎倚。 +䜠可以圚 [Docker 文档Shell 侎 Exec 圢匏](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)䞭了解曎倚。 -圚䜿甚 `docker compose` 时这䞀点尀䞺明星。曎倚技术细节参见该 FAQ䞺什么我的服务需芁 10 秒才胜重新创建或停止 +圚䜿甚 `docker compose` 时这䞀点尀䞺明星。曎倚技术细节参见该 FAQ[䞺什么我的服务需芁 10 秒才胜重新创建或停止](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop) #### 目圕结构 { #directory-structure } @@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 检查䞀䞋 { #check-it } -䜠应该胜圚容噚暎露的 URL 访问它䟋劂http://192.168.99.100/items/5?q=somequery 或 http://127.0.0.1/items/5?q=somequery或其他等价地址取决于䜠的 Docker 䞻机。 +䜠应该胜圚容噚暎露的 URL 访问它䟋劂[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) 或 [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)或其他等价地址取决于䜠的 Docker 䞻机。 䜠䌚看到类䌌内容 @@ -362,17 +362,17 @@ $ docker run -d --name mycontainer -p 80:80 myimage ## 亀互匏 API 文档 { #interactive-api-docs } -现圚䜠可以访问 http://192.168.99.100/docs 或 http://127.0.0.1/docs或其他等价地址取决于䜠的 Docker 䞻机。 +现圚䜠可以访问 [http://192.168.99.100/docs](http://192.168.99.100/docs) 或 [http://127.0.0.1/docs](http://127.0.0.1/docs)或其他等价地址取决于䜠的 Docker 䞻机。 -䜠将看到自劚生成的亀互匏 API 文档由 Swagger UI 提䟛 +䜠将看到自劚生成的亀互匏 API 文档由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ## 倇选 API 文档 { #alternative-api-docs } -䜠还可以访问 http://192.168.99.100/redoc 或 http://127.0.0.1/redoc或其他等价地址取决于䜠的 Docker 䞻机。 +䜠还可以访问 [http://192.168.99.100/redoc](http://192.168.99.100/redoc) 或 [http://127.0.0.1/redoc](http://127.0.0.1/redoc)或其他等价地址取决于䜠的 Docker 䞻机。 -䜠将看到倇选的自劚文档由 ReDoc 提䟛 +䜠将看到倇选的自劚文档由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ## 郚眲抂念 { #deployment-concepts } -我们再从容噚的角床讚论䞀些盞同的[郚眲抂念](concepts.md){.internal-link target=_blank}。 +我们再从容噚的角床讚论䞀些盞同的[郚眲抂念](concepts.md)。 容噚䞻芁是简化应甚**构建䞎郚眲**流皋的工具䜆它们并䞍区制采甚某种特定方匏来倄理这些**郚眲抂念**可选策略有倚种。 @@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] 劂果我们只关泚 FastAPI 应甚的**容噚镜像**以及后续运行的**容噚**HTTPS 通垞由**倖郚**的其他工具倄理。 -它可以是及䞀䞪容噚䟋劂䜿甚 Traefik倄理 **HTTPS** å¹¶**自劚**获取**证乊**。 +它可以是及䞀䞪容噚䟋劂䜿甚 [Traefik](https://traefik.io/)倄理 **HTTPS** å¹¶**自劚**获取**证乊**。 /// tip | 提瀺 @@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] /// info | 信息 -劂果䜠䜿甚 Kubernetes这通垞䌚是䞀䞪 Init Container。 +劂果䜠䜿甚 Kubernetes这通垞䌚是䞀䞪 [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)。 /// @@ -570,7 +570,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] ### 基础 Docker 镜像 { #base-docker-image } -曟经有䞀䞪官方的 FastAPI Docker 镜像tiangolo/uvicorn-gunicorn-fastapi。䜆它现圚已被匃甚。⛔ +曟经有䞀䞪官方的 FastAPI Docker 镜像[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)。䜆它现圚已被匃甚。⛔ 䜠倧抂率**䞍应该**䜿甚这䞪基础镜像或任䜕其它类䌌的镜像。 @@ -600,7 +600,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] ## 䜿甚 `uv` 的 Docker 镜像 { #docker-image-with-uv } -劂果䜠䜿甚 uv 来安装和管理项目可以参考他们的 uv Docker 指南。 +劂果䜠䜿甚 [uv](https://github.com/astral-sh/uv) 来安装和管理项目可以参考他们的 [uv Docker 指南](https://docs.astral.sh/uv/guides/integration/docker/)。 ## 回顟 { #recap } diff --git a/docs/zh/docs/deployment/fastapicloud.md b/docs/zh/docs/deployment/fastapicloud.md index 0239a15128..d438709935 100644 --- a/docs/zh/docs/deployment/fastapicloud.md +++ b/docs/zh/docs/deployment/fastapicloud.md @@ -1,6 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -䜠可以甚**䞀条呜什**将䜠的 FastAPI 应甚郚眲到 FastAPI Cloud劂果还没有去加入候补名单吧。🚀 +䜠可以甚**䞀条呜什**将䜠的 FastAPI 应甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)劂果还没有去加入候补名单吧。🚀 ## 登圕 { #login } @@ -40,7 +40,7 @@ Deploying to FastAPI Cloud... ## 关于 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 背后的䜜者䞎团队打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 背后的䜜者䞎团队打造。 它让䜠以最小的投入完成 API 的**构建**、**郚眲**侎**访问**。 diff --git a/docs/zh/docs/deployment/https.md b/docs/zh/docs/deployment/https.md index 591707f6dd..916fb46da2 100644 --- a/docs/zh/docs/deployment/https.md +++ b/docs/zh/docs/deployment/https.md @@ -10,7 +10,7 @@ /// -芁从甚户的视角**了解 HTTPS 的基础知识**请查看 https://howhttps.works/。 +芁从甚户的视角**了解 HTTPS 的基础知识**请查看 [https://howhttps.works/](https://howhttps.works/)。 现圚从**匀发人员的视角**圚了解 HTTPS 时需芁记䜏以䞋几点 @@ -28,13 +28,13 @@ * **默讀情况䞋**这意味着䜠**每䞪 IP 地址只胜拥有䞀䞪 HTTPS 证乊**。 * 无论䜠的服务噚有倚倧或者服务噚䞊的每䞪应甚皋序有倚小。 * 䞍过对歀有䞀䞪**解决方案**。 -* **TLS** 协议圚 HTTP 之䞋的 TCP 层倄理加密的协议有䞀䞪**扩展**称䞺 **SNI**。 +* **TLS** 协议圚 HTTP 之䞋的 TCP 层倄理加密的协议有䞀䞪**扩展**称䞺 **[SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**。 * SNI 扩展允讞䞀台服务噚具有 **单䞪 IP 地址**拥有 **倚䞪 HTTPS 证乊** 并提䟛 **倚䞪 HTTPS 域名/应甚皋序**。 * 䞺歀服务噚䞊䌚有**单独**的䞀䞪组件皋序䟊听**公共 IP 地址**这䞪组件必须拥有服务噚䞭的**所有 HTTPS 证乊**。 * **获埗安党连接后**通信协议**仍然是HTTP**。 * 内容是 **加密过的**即䜿它们是通过 **HTTP 协议** 发送的。 -通垞的做法是圚服务噚䞊运行**䞀䞪皋序/HTTP 服务噚**å¹¶**管理所有 HTTPS 郚分**接收**加密的 HTTPS 请求** 将 **解密的 HTTP 请求** 发送到圚同䞀服务噚䞭运行的实际 HTTP 应甚皋序圚本䟋䞭䞺 **FastAPI** 应甚皋序从应甚皋序䞭获取 **HTTP 响应** 䜿甚适圓的 **HTTPS 证乊**对其进行加密并䜿甚 **HTTPS** 将其发送回客户端。 歀服务噚通垞被称䞺 **TLS 终止代理(TLS Termination Proxy)**。 +通垞的做法是圚服务噚䞊运行**䞀䞪皋序/HTTP 服务噚**å¹¶**管理所有 HTTPS 郚分**接收**加密的 HTTPS 请求** 将 **解密的 HTTP 请求** 发送到圚同䞀服务噚䞭运行的实际 HTTP 应甚皋序圚本䟋䞭䞺 **FastAPI** 应甚皋序从应甚皋序䞭获取 **HTTP 响应** 䜿甚适圓的 **HTTPS 证乊**对其进行加密并䜿甚 **HTTPS** 将其发送回客户端。 歀服务噚通垞被称䞺 **[TLS 终止代理(TLS Termination Proxy)](https://en.wikipedia.org/wiki/TLS_termination_proxy)**。 䜠可以甚䜜 TLS 终止代理的䞀些选项包括 @@ -49,7 +49,7 @@ 过去获埗这些证乊的过皋非垞繁琐需芁倧量的文乊工䜜而䞔证乊非垞昂莵。 -䜆随后 **Let's Encrypt** 创建了。 +䜆随后 **[Let's Encrypt](https://letsencrypt.org/)** 创建了。 它是 Linux 基金䌚的䞀䞪项目。 它以自劚方匏免莹提䟛 **HTTPS 证乊**。 这些证乊可以䜿甚所有笊合标准的安党加密并䞔有效期埈短倧纊 3 䞪月因歀**安党性实际䞊曎奜**因䞺它们的生呜呚期猩短了。 @@ -201,9 +201,9 @@ TLS 终止代理将䜿甚协商奜的加密算法**解密请求**并将** 这些代理请求倎包括 -* X-Forwarded-For -* X-Forwarded-Proto -* X-Forwarded-Host +* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For) +* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto) +* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host) /// @@ -219,7 +219,7 @@ TLS 终止代理将䜿甚协商奜的加密算法**解密请求**并将** /// tip | 提瀺 -䜠可以圚文档䞭了解曎倚[圚代理之后 - 启甚代理蜬发请求倎](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} +䜠可以圚文档䞭了解曎倚[圚代理之后 - 启甚代理蜬发请求倎](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) /// diff --git a/docs/zh/docs/deployment/index.md b/docs/zh/docs/deployment/index.md index 47dcede653..fa10019adf 100644 --- a/docs/zh/docs/deployment/index.md +++ b/docs/zh/docs/deployment/index.md @@ -16,7 +16,7 @@ 䜠可以䜿甚䞀些工具自行**郚眲服务噚**䜠也可以䜿甚胜䞺䜠完成郚分工䜜的**云服务**或其他可胜的选项。 -䟋劂我们FastAPI 团队构建了 **FastAPI Cloud**让将 FastAPI 应甚郚眲到云端尜可胜流畅并䞔保持䞎䜿甚 FastAPI 匀发时盞同的匀发者䜓验。 +䟋劂我们FastAPI 团队构建了 [**FastAPI Cloud**](https://fastapicloud.com)让将 FastAPI 应甚郚眲到云端尜可胜流畅并䞔保持䞎䜿甚 FastAPI 匀发时盞同的匀发者䜓验。 我将向䜠展瀺圚郚眲 **FastAPI** 应甚皋序时䜠可胜应该记䜏的䞀些䞻芁抂念尜管其䞭倧郚分适甚于任䜕其他类型的 Web 应甚皋序。 diff --git a/docs/zh/docs/deployment/manually.md b/docs/zh/docs/deployment/manually.md index f519c1e87a..c440aa924b 100644 --- a/docs/zh/docs/deployment/manually.md +++ b/docs/zh/docs/deployment/manually.md @@ -52,11 +52,11 @@ FastAPI 䜿甚了䞀种甚于构建 Python Web 框架和服务噚的标准称 陀歀之倖还有其他䞀些可选的 ASGI 服务噚䟋劂 -* Uvicorn高性胜 ASGI 服务噚。 -* Hypercorn䞎 HTTP/2 和 Trio 等兌容的 ASGI 服务噚。 -* Daphne䞺 Django Channels 构建的 ASGI 服务噚。 -* Granian基于 Rust 的 HTTP 服务噚䞓䞺 Python 应甚讟计。 -* NGINX UnitNGINX Unit 是䞀䞪蜻量级䞔灵掻的 Web 应甚运行时环境。 +* [Uvicorn](https://www.uvicorn.dev/): 高性胜 ASGI 服务噚。 +* [Hypercorn](https://hypercorn.readthedocs.io/): 侎 HTTP/2 和 Trio 等兌容的 ASGI 服务噚。 +* [Daphne](https://github.com/django/daphne): 䞺 Django Channels 构建的 ASGI 服务噚。 +* [Granian](https://github.com/emmett-framework/granian): 基于 Rust 的 HTTP 服务噚䞓䞺 Python 应甚讟计。 +* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit 是䞀䞪蜻量级䞔灵掻的 Web 应甚运行时环境。 ## 服务噚䞻机和服务噚皋序 { #server-machine-and-server-program } @@ -74,7 +74,7 @@ FastAPI 䜿甚了䞀种甚于构建 Python Web 框架和服务噚的标准称 䞍过悚也可以手劚安装 ASGI 服务噚。 -请确保悚创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后再安装服务噚应甚皋序。 +请确保悚创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后再安装服务噚应甚皋序。 䟋劂芁安装 Uvicorn可以运行以䞋呜什 diff --git a/docs/zh/docs/deployment/server-workers.md b/docs/zh/docs/deployment/server-workers.md index 2bbd5d9b6a..add83ac1af 100644 --- a/docs/zh/docs/deployment/server-workers.md +++ b/docs/zh/docs/deployment/server-workers.md @@ -13,13 +13,13 @@ 郚眲应甚皋序时悚可胜垌望进行䞀些**进皋倍制**以利甚**倚栞** CPU 并胜借倄理曎倚请求。 -正劂悚圚䞊䞀章有关[郚眲抂念](concepts.md){.internal-link target=_blank}䞭看到的悚可以䜿甚倚种策略。 +正劂悚圚䞊䞀章有关[郚眲抂念](concepts.md)䞭看到的悚可以䜿甚倚种策略。 圚本章节䞭我将向悚展瀺劂䜕䜿甚 `fastapi` 呜什或盎接䜿甚 `uvicorn` 呜什以**倚工䜜进皋暡匏**运行 **Uvicorn**。 /// info | 信息 -劂果悚正圚䜿甚容噚䟋劂 Docker 或 Kubernetes我将圚䞋䞀章䞭告诉悚曎倚盞关信息[容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 +劂果悚正圚䜿甚容噚䟋劂 Docker 或 Kubernetes我将圚䞋䞀章䞭告诉悚曎倚盞关信息[容噚䞭的 FastAPI - Docker](docker.md)。 比蟃特别的是圚 **Kubernetes** 环境䞭运行时悚通垞**䞍需芁**䜿甚倚䞪工䜜进皋而是**每䞪容噚运行䞀䞪 Uvicorn 进皋**。䞍过我䌚圚本章节的后续郚分诊细介绍这䞀点。 @@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 ## 容噚和 Docker { #containers-and-docker } -圚关于 [容噚䞭的 FastAPI - Docker](docker.md){.internal-link target=_blank} 的䞋䞀章䞭我将介绍䞀些可甚于倄理其他**郚眲抂念**的策略。 +圚关于 [容噚䞭的 FastAPI - Docker](docker.md) 的䞋䞀章䞭我将介绍䞀些可甚于倄理其他**郚眲抂念**的策略。 我将向悚展瀺劂䜕**从零匀始构建自己的镜像**以运行䞀䞪单独的 Uvicorn 进皋。这䞪过皋盞对简单并䞔圚䜿甚 **Kubernetes** 等分垃匏容噚管理系统时这通垞是悚需芁采取的方法。 diff --git a/docs/zh/docs/deployment/versions.md b/docs/zh/docs/deployment/versions.md index 23c37f3b5b..13af705568 100644 --- a/docs/zh/docs/deployment/versions.md +++ b/docs/zh/docs/deployment/versions.md @@ -4,7 +4,7 @@ 经垞添加新功胜定期修倍错误并䞔代码仍圚持续改进。 -这就是䞺什么圓前版本仍然是`0.x.x`这反映出每䞪版本郜可胜有Breaking changes。 这遵埪语义版本控制的纊定。 +这就是䞺什么圓前版本仍然是`0.x.x`这反映出每䞪版本郜可胜有Breaking changes。 这遵埪[语义版本控制](https://semver.org/)的纊定。 䜠现圚就可以䜿甚 **FastAPI** 创建生产环境应甚皋序䜠可胜已经这样做了䞀段时闎䜠只需确保䜿甚的版本可以䞎其䜙代码正确配合即可。 @@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0 ## 可甚版本 { #available-versions } -䜠可以圚[发行诎明](../release-notes.md){.internal-link target=_blank}䞭查看可甚版本䟋劂查看圓前最新版本。 +䜠可以圚[发行诎明](../release-notes.md)䞭查看可甚版本䟋劂查看圓前最新版本。 ## 关于版本 { #about-versions } @@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0 䜠应该䞺䜠的应甚皋序添加测试。 -䜿甚 **FastAPI** 猖写测试非垞简单感谢 Starlette请参考文档[测试](../tutorial/testing.md){.internal-link target=_blank} +䜿甚 **FastAPI** 猖写测试非垞简单感谢 Starlette请参考文档[测试](../tutorial/testing.md) 添加测试后䜠可以将 **FastAPI** 版本升级到曎新版本并通过运行测试来确保所有代码郜胜正垞工䜜。 diff --git a/docs/zh/docs/editor-support.md b/docs/zh/docs/editor-support.md new file mode 100644 index 0000000000..5028c6c957 --- /dev/null +++ b/docs/zh/docs/editor-support.md @@ -0,0 +1,23 @@ +# 猖蟑噚支持 { #editor-support } + +官方的 [FastAPI 扩展](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)䞺䜠的 FastAPI 匀发流皋垊来增区包括*路埄操䜜*的发现䞎富航、郚眲到 FastAPI Cloud以及实时日志流匏䌠蟓。 + +有关该扩展的曎倚诊情请参阅其 [GitHub 仓库](https://github.com/fastapi/fastapi-vscode)侭的 README。 + +## 安装䞎配眮 { #setup-and-installation } + +**FastAPI 扩展**同时适甚于 [VS Code](https://code.visualstudio.com/) 和 [Cursor](https://www.cursor.com/)。䜠可以圚各猖蟑噚的扩展面板䞭盎接搜玢 “FastAPI”并选择由 **FastAPI Labs** 发垃的扩展进行安装。该扩展也适甚于基于浏览噚的猖蟑噚䟋劂 [vscode.dev](https://vscode.dev) 和 [github.dev](https://github.dev)。 + +### 应甚发现 { #application-discovery } + +默讀情况䞋扩展䌚通过扫描实䟋化了 `FastAPI()` 的文件自劚发现工䜜区䞭的 FastAPI 应甚。劂果䜠的项目结构无法自劚检测䜠可以通过 `pyproject.toml` 侭的 `[tool.fastapi]` 或 VS Code 讟眮项 `fastapi.entryPoint` 来指定入口点䜿甚暡块衚瀺法䟋劂 `myapp.main:app`。 + +## 功胜 { #features } + +- **Path Operation 资源管理噚** - 䟧蟹栏树状视囟展瀺应甚䞭的所有 *路埄操䜜*。点击可跳蜬至任䞀路由或 APIRouter 的定义。 +- **路由搜玢** - 䜿甚 Ctrl + Shift + EmacOS 䞊䞺 Cmd + Shift + E按路埄、方法或名称进行搜玢。 +- **CodeLens 富航** - 测试客户端调甚䟋劂 `client.get('/items')`䞊方的可点击铟接可跳蜬到匹配的*路埄操䜜*圚测试䞎实现之闎快速埀返。 +- **郚眲到 FastAPI Cloud** - 䞀键将䜠的应甚郚眲到 [FastAPI Cloud](https://fastapicloud.com/)。 +- **应甚日志流匏䌠蟓** - 从郚眲圚 FastAPI Cloud 的应甚䞭实时流匏获取日志并支持按级别过滀䞎文本搜玢。 + +劂果䜠想先熟悉扩展功胜可以打匀呜什面板Ctrl + Shift + PmacOS 䞊䞺 Cmd + Shift + P选择 “Welcome: Open walkthrough...”然后选择 “Get started with FastAPI” 挔练。 diff --git a/docs/zh/docs/environment-variables.md b/docs/zh/docs/environment-variables.md index 8729a6306a..3a90ecde62 100644 --- a/docs/zh/docs/environment-variables.md +++ b/docs/zh/docs/environment-variables.md @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip | 提瀺 -第二䞪参数是 `os.getenv()` 的默讀返回倌。 +第二䞪参数是 [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) 的默讀返回倌。 劂果没有提䟛默讀倌䞺 `None`这里我们提䟛 `"World"` 䜜䞺默讀倌。 @@ -153,7 +153,7 @@ Hello World from Python /// tip | 提瀺 -䜠可以圚 The Twelve-Factor App: 配眮䞭了解曎倚信息。 +䜠可以圚 [The Twelve-Factor App: 配眮](https://12factor.net/config) 䞭了解曎倚信息。 /// @@ -163,7 +163,7 @@ Hello World from Python 这意味着从环境变量䞭读取的**任䜕倌**圚 Python 䞭郜将是䞀䞪 `str`任䜕类型蜬换或验证郜必须圚代码䞭完成。 -䜠将圚[高级甚户指南 - 讟眮和环境变量](./advanced/settings.md){.internal-link target=_blank}䞭了解曎倚关于䜿甚环境变量倄理**应甚皋序讟眮**的信息。 +䜠将圚[高级甚户指南 - 讟眮和环境变量](./advanced/settings.md)䞭了解曎倚关于䜿甚环境变量倄理**应甚皋序讟眮**的信息。 ## `PATH` 环境变量 { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -圓孊习[虚拟环境](virtual-environments.md){.internal-link target=_blank}时这些信息将䌚埈有甚。 +圓孊习[虚拟环境](virtual-environments.md)时这些信息将䌚埈有甚。 ## 结论 { #conclusion } 通过这䞪教皋䜠应该对**环境变量**是什么以及劂䜕圚 Python 䞭䜿甚它们有了基本的了解。 -䜠也可以圚环境变量 - 绎基癟科䞭了解曎倚关于它们的信息。 +䜠也可以圚[环境变量 - 绎基癟科](https://en.wikipedia.org/wiki/Environment_variable)䞭了解曎倚关于它们的信息。 圚讞倚情况䞋环境变量的甚途和适甚性并䞍是埈明星。䜆是圚匀发过皋䞭它们䌚圚讞倚䞍同的场景䞭出现因歀了解它们是埈有必芁的。 diff --git a/docs/zh/docs/fastapi-cli.md b/docs/zh/docs/fastapi-cli.md index 4d3b51a57a..151b7e61ec 100644 --- a/docs/zh/docs/fastapi-cli.md +++ b/docs/zh/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI** 是䞀䞪呜什行皋序䜠可以甚它来郚眲和运行䜠的 FastAPI 应甚皋序管理䜠的 FastAPI 项目等等。 +**FastAPI CLI** 是䞀䞪呜什行皋序䜠可以甚它来郚眲和运行䜠的 FastAPI 应甚、管理 FastAPI 项目等等。 -圓䜠安装 FastAPI 时䟋劂䜿甚 `pip install "fastapi[standard]"`䌚包含䞀䞪名䞺 `fastapi-cli` 的蜯件包该蜯件包圚终端䞭提䟛 `fastapi` 呜什。 +圓䜠安装 FastAPI䟋劂䜿甚 `pip install "fastapi[standard]"`时䌚附垊䞀䞪可以圚终端䞭运行的呜什行皋序。 -芁圚匀发环境䞭运行䜠的 FastAPI 应甚䜠可以䜿甚 `fastapi dev` 呜什 +芁圚匀发环境䞭运行䜠的 FastAPI 应甚可以䜿甚 `fastapi dev` 呜什
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -46,13 +46,66 @@ $ fastapi dev Uvicorn这是䞀䞪高性胜、适甚于生产环境的 ASGI 服务噚。😎 +及倖其他工具可胜扟䞍到它䟋劂 [VS Code 扩展](editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀掚荐圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 ## `fastapi dev` { #fastapi-dev } @@ -70,6 +123,6 @@ FastAPI CLI 接收䜠的 Python 皋序路埄䟋劂 `main.py`自劚检 /// tip | 提瀺 -䜠可以圚[郚眲文档](deployment/index.md){.internal-link target=_blank}䞭了解曎倚。 +䜠可以圚[郚眲文档](deployment/index.md)䞭了解曎倚。 /// diff --git a/docs/zh/docs/features.md b/docs/zh/docs/features.md index 1414f7c6fc..ad6b77f74f 100644 --- a/docs/zh/docs/features.md +++ b/docs/zh/docs/features.md @@ -6,8 +6,8 @@ ### 基于匀攟标准 { #based-on-open-standards } -* 甚于创建 API 的 OpenAPI包含对路埄 操䜜、参数、请求䜓、安党等的声明。 -* 䜿甚 JSON Schema 自劚生成数据暡型文档因䞺 OpenAPI 本身就是基于 JSON Schema 的。 +* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) 甚于创建 API包含对路埄 操䜜、参数、请求䜓、安党等的声明。 +* 䜿甚 [**JSON Schema**](https://json-schema.org/) 自劚生成数据暡型文档因䞺 OpenAPI 本身就是基于 JSON Schema 的。 * 经过了猜密的研究后囎绕这些标准而讟计。并非狗尟续貂。 * 这也允讞了圚埈倚语蚀䞭自劚**生成客户端代码**。 @@ -15,11 +15,11 @@ 亀互匏 API 文档以及具探玢性 web 界面。因䞺该框架是基于 OpenAPI所以有埈倚可选项FastAPI 默讀自垊䞀䞪亀互匏 API 文档。 -* Swagger UI可亀互匏操䜜胜圚浏览噚䞭盎接调甚和测试䜠的 API。 +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)可亀互匏操䜜胜圚浏览噚䞭盎接调甚和测试䜠的 API。 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* 及倖的 API 文档ReDoc +* 及倖的 API 文档[**ReDoc**](https://github.com/Rebilly/ReDoc) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) @@ -27,7 +27,7 @@ 党郚郜基于标准的 **Python 类型** 声明感谢 Pydantic。没有新的语法需芁孊习。只需芁标准的现代 Python。 -劂果䜠需芁2分钟来孊习劂䜕䜿甚 Python 类型即䜿䜠䞍䜿甚 FastAPI看看这䞪简短的教皋[Python Types](python-types.md){.internal-link target=_blank}。 +劂果䜠需芁2分钟来孊习劂䜕䜿甚 Python 类型即䜿䜠䞍䜿甚 FastAPI看看这䞪简短的教皋[Python 类型](python-types.md)。 猖写垊有类型标泚的标准 Python @@ -76,7 +76,7 @@ my_second_user: User = User(**second_user_data) 敎䞪框架郜被讟计埗易于䜿甚䞔盎观所有的决定郜圚匀发之前就圚倚䞪猖蟑噚䞊进行了测试来确保最䜳的匀发䜓验。 -圚最近的 Python 匀发者调查䞭我们胜看到 被䜿甚最倚的功胜是“自劚补党”。 +圚 Python 匀发者调查䞭我们胜看到[被䜿甚最倚的功胜之䞀是“自劚补党”](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)。 敎䞪 **FastAPI** 框架就是基于这䞀点的。任䜕地方郜可以进行自劚补党。 @@ -84,11 +84,11 @@ my_second_user: User = User(**second_user_data) 圚这里䜠的猖蟑噚可胜䌚这样垮助䜠 -* 圚 Visual Studio Code äž­: +* 圚 [Visual Studio Code](https://code.visualstudio.com/) äž­: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -* 圚 PyCharm äž­: +* 圚 [PyCharm](https://www.jetbrains.com/pycharm/) äž­: ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) @@ -125,7 +125,7 @@ my_second_user: User = User(**second_user_data) OpenAPI 䞭定义的安党暡匏包括 * HTTP 基本讀证。 -* **OAuth2**也䜿甚 **JWT tokens**。圚 [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}查看教皋。 +* **OAuth2**也䜿甚 **JWT tokens**。圚 [䜿甚 JWT 的 OAuth2](tutorial/security/oauth2-jwt.md) 查看教皋。 * API 密钥圚: * 请求倎。 * 查询参数。 @@ -142,7 +142,7 @@ FastAPI 有䞀䞪䜿甚非垞简单䜆是非垞区倧的Starlette 完党兌容并基于。所以䜠有的其他的 Starlette 代码也胜正垞工䜜。`FastAPI` 实际䞊是 `Starlette` 的䞀䞪子类。所以劂果䜠已经知道或者䜿甚 Starlette倧郚分的功胜䌚以盞同的方匏工䜜。 +**FastAPI** 和 [**Starlette**](https://www.starlette.dev/) 完党兌容并基于。所以䜠有的其他的 Starlette 代码也胜正垞工䜜。`FastAPI` 实际䞊是 `Starlette` 的䞀䞪子类。所以劂果䜠已经知道或者䜿甚 Starlette倧郚分的功胜䌚以盞同的方匏工䜜。 通过 **FastAPI** 䜠可以获埗所有 **Starlette** 的特性FastAPI 就像加区版的 Starlette -* 什人惊叹的性胜。它是 Python 可甚的最快的框架之䞀和 **NodeJS** 及 **Go** 盞圓。 +* 什人惊叹的性胜。它是[Python 可甚的最快的框架之䞀和 **NodeJS** 及 **Go** 盞圓](https://github.com/encode/starlette#performance)。 * **支持 WebSocket**。 * 进皋内后台任务。 * Startup 和 shutdown 事件。 @@ -176,7 +176,7 @@ FastAPI 有䞀䞪䜿甚非垞简单䜆是非垞区倧的发掚谈谈 **FastAPI**告诉我和倧家䜠䞺什么喜欢它。🎉 +[发掚谈谈 **FastAPI**](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)告诉我和倧家䜠䞺什么喜欢它。🎉 我埈高兎听到 **FastAPI** 的䜿甚情况、䜠喜欢它的哪些点、䜠圚哪䞪项目/公叞䜿甚它等等。 ## 䞺 FastAPI 投祚 { #vote-for-fastapi } -* 圚 Slant 䞊䞺 **FastAPI** 投祚。 -* 圚 AlternativeTo 䞊䞺 **FastAPI** 投祚。 -* 圚 StackShare 䞊标泚䜠圚甚 **FastAPI**。 +* [圚 Slant 䞊䞺 **FastAPI** 投祚](https://www.slant.co/options/34241/~fastapi-review)。 +* [圚 AlternativeTo 䞊䞺 **FastAPI** 投祚](https://alternativeto.net/software/fastapi/about/)。 +* [圚 StackShare 䞊标泚䜠圚甚 **FastAPI**](https://stackshare.io/pypi-fastapi)。 ## 圚 GitHub 䞊垮别人解答问题 { #help-others-with-questions-in-github } 䜠可以尝试圚以䞋地方垮助他人解答问题 -* GitHub Discussions -* GitHub Issues +* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) +* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+) 埈倚情况䞋䜠也讞已经知道这些问题的答案了。🀓 -劂果䜠垮助了埈倚人解答问题䜠䌚成䞺官方的 [FastAPI 䞓家](fastapi-people.md#fastapi-experts){.internal-link target=_blank}。🎉 +劂果䜠垮助了埈倚人解答问题䜠䌚成䞺官方的 [FastAPI 䞓家](fastapi-people.md#fastapi-experts)。🎉 只芁记䜏最重芁的䞀点是尜量友善。人们垊着挫莥感而来埈倚时候他们的提问方匏并䞍理想䜆请尜䜠所胜地友奜对埅。🀗 @@ -104,7 +104,7 @@ 埈倚时候他们只䌚粘莎䞀小段代码䜆这䞍足以**倍现问题**。 -* 䜠可以请他们提䟛䞀䞪可最小倍现的瀺䟋䜠可以**倍制粘莎**并圚本地运行看到䞎他们盞同的错误或行䞺或者曎奜地理解他们的甚䟋。 +* 䜠可以请他们提䟛䞀䞪[可最小倍现的瀺䟋](https://stackoverflow.com/help/minimal-reproducible-example)䜠可以**倍制粘莎**并圚本地运行看到䞎他们盞同的错误或行䞺或者曎奜地理解他们的甚䟋。 * 劂果䜠非垞热心䜠也可以尝试仅根据问题描述自己**构造䞀䞪瀺䟋**。䞍过芁记䜏这可胜䌚花埈倚时闎通垞先请他们柄枅问题䌚曎奜。 @@ -124,7 +124,7 @@ ## 关泚 GitHub 资源库 { #watch-the-github-repository } -䜠可以圚 GitHub 䞊「关泚」FastAPI点击右䞊角的「watch」按钮https://github.com/fastapi/fastapi。👀 +䜠可以圚 GitHub 䞊「关泚」FastAPI点击右䞊角的「watch」按钮[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。👀 劂果䜠选择「Watching」而非「Releases only」圓有人创建新的 issue 或问题时䜠䌚收到通知。䜠也可以指定只通知新 issues、discussions、PR 等。 @@ -132,7 +132,7 @@ ## 提问 { #ask-questions } -䜠可以圚 GitHub 资源库䞭创建䞀䞪新问题Question䟋劂 +䜠可以圚 GitHub 资源库䞭[创建䞀䞪新问题Question](https://github.com/fastapi/fastapi/discussions/new?category=questions)䟋劂 * 提出䞀䞪**问题**或关于某䞪**问题**的求助。 * 建议䞀䞪新的**功胜**。 @@ -195,12 +195,12 @@ ## 创建 Pull Request { #create-a-pull-request } -䜠可以通过 Pull Request 䞺源代码[做莡献](contributing.md){.internal-link target=_blank}䟋劂 +䜠可以通过 Pull Request 䞺源代码[做莡献](contributing.md)䟋劂 * 修正文档䞭的䞀䞪错别字。 -* 通过猖蟑这䞪文件分享䜠创建或发现的关于 FastAPI 的文章、视频或播客。 +* 通过[猖蟑这䞪文件](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)分享䜠创建或发现的关于 FastAPI 的文章、视频或播客。 * 请确保把䜠的铟接添加到盞应区块的匀倎。 -* 垮助把[文档翻译](contributing.md#translations){.internal-link target=_blank}成䜠的语蚀。 +* 垮助把[文档翻译](contributing.md#translations)成䜠的语蚀。 * 䜠也可以审阅他人创建的翻译。 * 提议新增文档章节。 * 修倍现有 issue/bug。 @@ -217,8 +217,8 @@ 䜠现圚就胜做的䞻芁事情有 -* [圚 GitHub 䞊垮别人解答问题](#help-others-with-questions-in-github){.internal-link target=_blank}见䞊面的章节。 -* [审阅 Pull Request](#review-pull-requests){.internal-link target=_blank}见䞊面的章节。 +* [圚 GitHub 䞊垮别人解答问题](#help-others-with-questions-in-github)见䞊面的章节。 +* [审阅 Pull Request](#review-pull-requests)见䞊面的章节。 这䞀项工䜜是**最耗时**的。这也是绎技 FastAPI 的䞻芁工䜜。 @@ -226,11 +226,11 @@ ## 加入聊倩 { #join-the-chat } -加入 👥 Discord 聊倩服务噚 👥和 FastAPI 瀟区的小䌙䌎们䞀起亀流。 +加入 👥 [Discord 聊倩服务噚](https://discord.gg/VQjSZaeJmf) 👥和 FastAPI 瀟区的小䌙䌎们䞀起亀流。 /// tip | 提瀺 -关于提问请圚 GitHub Discussions 䞭发垃这样曎有机䌚埗到 [FastAPI 䞓家](fastapi-people.md#fastapi-experts){.internal-link target=_blank} 的垮助。 +关于提问请圚 [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions) 䞭发垃这样曎有机䌚埗到 [FastAPI 䞓家](fastapi-people.md#fastapi-experts) 的垮助。 聊倩仅甚于其他日垞亀流。 @@ -242,13 +242,13 @@ 圚 GitHub 䞭暡板䌚匕富䜠写出恰圓的问题从而曎容易获埗奜的回答甚至圚提问之前就胜自己解决。而䞔圚 GitHub 里我胜尜量确保最终回倍每䞪问题即䜿这需芁䞀些时闎。对聊倩系统来诎我䞪人做䞍到这䞀点。😅 -聊倩系统䞭的对话也䞍像 GitHub 那样容易搜玢因歀问答可胜圚聊倩䞭淹没。而䞔只有圚 GitHub 䞭的问答才䌚计入成䞺 [FastAPI 䞓家](fastapi-people.md#fastapi-experts){.internal-link target=_blank} 的莡献所以䜠圚 GitHub 䞊曎可胜获埗关泚。 +聊倩系统䞭的对话也䞍像 GitHub 那样容易搜玢因歀问答可胜圚聊倩䞭淹没。而䞔只有圚 GitHub 䞭的问答才䌚计入成䞺 [FastAPI 䞓家](fastapi-people.md#fastapi-experts) 的莡献所以䜠圚 GitHub 䞊曎可胜获埗关泚。 及䞀方面聊倩系统里有成千䞊䞇的甚户䜠几乎随时郜胜圚那里扟到聊埗来的人。😄 ## 赞助䜜者 { #sponsor-the-author } -劂果䜠的**产品/公叞**䟝赖或䞎 **FastAPI** 盞关并䞔䜠想觊蟟它的甚户䜠可以通过 GitHub sponsors 赞助䜜者我。根据赞助层级䜠还可胜获埗䞀些额倖犏利比劂圚文档䞭展瀺埜章。🎁 +劂果䜠的**产品/公叞**䟝赖或䞎 **FastAPI** 盞关并䞔䜠想觊蟟它的甚户䜠可以通过 [GitHub sponsors](https://github.com/sponsors/tiangolo) 赞助䜜者我。根据赞助层级䜠还可胜获埗䞀些额倖犏利比劂圚文档䞭展瀺埜章。🎁 --- diff --git a/docs/zh/docs/history-design-future.md b/docs/zh/docs/history-design-future.md index 00945eab59..429eb8db0d 100644 --- a/docs/zh/docs/history-design-future.md +++ b/docs/zh/docs/history-design-future.md @@ -1,6 +1,6 @@ # 历史、讟计、未来 { #history-design-and-future } -䞍久前曟有 **FastAPI** 甚户问过 +䞍久前[曟有 **FastAPI** 甚户问过](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920) > 这䞪项目有怎样的历史奜像它只甚了几呚就从默默无闻变埗䌗所呚知... @@ -14,7 +14,7 @@ **FastAPI** 其实只是延续了这些前蟈的历史。 -正劂[倇选方案](alternatives.md){.internal-link target=_blank}䞀章所述 +正劂[倇选方案](alternatives.md)䞀章所述
没有倧家之前所做的工䜜**FastAPI** 就䞍䌚存圚。 @@ -42,7 +42,7 @@ 同时我还圚最流行的 Python 代码猖蟑噚䞭测试了埈倚思路包括 PyCharm、VS Code、基于 Jedi 的猖蟑噚。 -根据最新 Python 匀发者调研报告星瀺这几种猖蟑噚芆盖了纊 80% 的甚户。 +根据最新 [Python 匀发者调研报告](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)星瀺这几种猖蟑噚芆盖了纊 80% 的甚户。 也就是诎**FastAPI** 针对差䞍倚 80% 的 Python 匀发者䜿甚的猖蟑噚进行了测试而䞔其它倧倚数猖蟑噚的工䜜方匏也䞎之类䌌因歀**FastAPI** 的䌘势几乎胜圚所有猖蟑噚䞊䜓现。 @@ -52,11 +52,11 @@ ## 需求项 { #requirements } -经过测试倚种倇选方案我最终决定䜿甚 **Pydantic**并充分利甚它的䌘势。 +经过测试倚种倇选方案我最终决定䜿甚 [**Pydantic**](https://docs.pydantic.dev/)并充分利甚它的䌘势。 我甚至䞺它做了䞍少莡献让它完矎兌容了 JSON Schema支持倚种方匏定义纊束声明并基于倚䞪猖蟑噚改进了它对猖蟑噚支持类型检查、自劚补党。 -圚匀发期闎我还䞺 **Starlette** 做了䞍少莡献这是及䞀䞪关键需求项。 +圚匀发期闎我还䞺 [**Starlette**](https://www.starlette.dev/) 做了䞍少莡献这是及䞀䞪关键需求项。 ## 匀发 { #development } @@ -74,4 +74,4 @@ **FastAPI** 前景光明。 -圚歀我们衷心感谢[悚的垮助](help-fastapi.md){.internal-link target=_blank}。 +圚歀我们衷心感谢[䜠的垮助](help-fastapi.md)。 diff --git a/docs/zh/docs/how-to/authentication-error-status-code.md b/docs/zh/docs/how-to/authentication-error-status-code.md index 466b90e15a..6f8c0a67cd 100644 --- a/docs/zh/docs/how-to/authentication-error-status-code.md +++ b/docs/zh/docs/how-to/authentication-error-status-code.md @@ -2,7 +2,7 @@ 圚 FastAPI `0.122.0` 版本之前圓内眮的安党工具圚讀证倱莥后向客户端返回错误时䌚䜿甚 HTTP 状态码 `403 Forbidden`。 -从 FastAPI `0.122.0` 版本匀始它们改甚曎合适的 HTTP 状态码 `401 Unauthorized`并圚响应䞭返回合理的 `WWW-Authenticate` 倎遵埪 HTTP 规范RFC 7235、RFC 9110。 +从 FastAPI `0.122.0` 版本匀始它们改甚曎合适的 HTTP 状态码 `401 Unauthorized`并圚响应䞭返回合理的 `WWW-Authenticate` 倎遵埪 HTTP 规范[RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1)、[RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)。 䜆劂果由于某些原因䜠的客户端䟝赖旧行䞺䜠可以圚䜠的安党类䞭重写方法 `make_not_authenticated_error` 来回退到旧行䞺。 diff --git a/docs/zh/docs/how-to/conditional-openapi.md b/docs/zh/docs/how-to/conditional-openapi.md index d26b5f3bd0..b0c5d521c1 100644 --- a/docs/zh/docs/how-to/conditional-openapi.md +++ b/docs/zh/docs/how-to/conditional-openapi.md @@ -10,7 +10,7 @@ 劂果䜠的代码里有安党挏掞它仍然存圚。 -隐藏文档只䌚让理解劂䜕䞎 API 亀互变埗曎困隟也可胜让䜠圚生产环境䞭调试曎困隟。这倧䜓䞊可以被视䞺䞀种 通过隐藏实现安党 的做法。 +隐藏文档只䌚让理解劂䜕䞎 API 亀互变埗曎困隟也可胜让䜠圚生产环境䞭调试曎困隟。这倧䜓䞊可以被视䞺䞀种 [通过隐藏实现安党](https://en.wikipedia.org/wiki/Security_through_obscurity) 的做法。 劂果䜠想保技䜠的 API有埈倚曎奜的措斜䟋劂 diff --git a/docs/zh/docs/how-to/configure-swagger-ui.md b/docs/zh/docs/how-to/configure-swagger-ui.md index bf26246573..3dbc54911b 100644 --- a/docs/zh/docs/how-to/configure-swagger-ui.md +++ b/docs/zh/docs/how-to/configure-swagger-ui.md @@ -1,10 +1,10 @@ # 配眮 Swagger UI { #configure-swagger-ui } -䜠可以配眮䞀些额倖的 Swagger UI 参数. +䜠可以配眮䞀些额倖的 [Swagger UI 参数](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)。 劂果需芁配眮它们可以圚创建 `FastAPI()` 应甚对象时或调甚 `get_swagger_ui_html()` 凜数时䌠递 `swagger_ui_parameters` 参数。 -`swagger_ui_parameters` 接受䞀䞪盎接䌠递给 Swagger UI的字兞包含配眮参数键倌对。 +`swagger_ui_parameters` 接受䞀䞪字兞该字兞䌚盎接䌠递给 Swagger UI。 FastAPI䌚将这些配眮蜬换䞺 **JSON**䜿其䞎 JavaScript 兌容因䞺这是 Swagger UI 需芁的。 @@ -50,7 +50,7 @@ FastAPI 包含了䞀些默讀配眮参数适甚于倧倚数甚䟋。 ## 其他 Swagger UI 参数 { #other-swagger-ui-parameters } -查看所有其他可甚的配眮请阅读 Swagger UI 参数文档。 +查看所有其他可甚的配眮请阅读官方的 [Swagger UI 参数文档](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)。 ## JavaScript-only 配眮 { #javascript-only-settings } diff --git a/docs/zh/docs/how-to/custom-docs-ui-assets.md b/docs/zh/docs/how-to/custom-docs-ui-assets.md index 9e6e5a66b8..47b27b69ca 100644 --- a/docs/zh/docs/how-to/custom-docs-ui-assets.md +++ b/docs/zh/docs/how-to/custom-docs-ui-assets.md @@ -54,7 +54,7 @@ Swagger UI 䌚圚幕后䞺䜠倄理这些䜆它需芁这䞪“重定向”蟅 ### 测试 { #test-it } -现圚䜠应该可以访问 http://127.0.0.1:8000/docs并刷新页面页面䌚从新的 CDN 加蜜这些资源。 +现圚䜠应该可以访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)并刷新页面页面䌚从新的 CDN 加蜜这些资源。 ## 䞺文档自托管 JavaScript 和 CSS { #self-hosting-javascript-and-css-for-docs } @@ -93,12 +93,12 @@ Swagger UI 䌚圚幕后䞺䜠倄理这些䜆它需芁这䞪“重定向”蟅 Swagger UI 䜿甚以䞋文件 -- `swagger-ui-bundle.js` -- `swagger-ui.css` +- [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js) +- [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css) 而 ReDoc 䜿甚以䞋文件 -- `redoc.standalone.js` +- [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js) 之后䜠的文件结构可胜劂䞋 @@ -122,7 +122,7 @@ Swagger UI 䜿甚以䞋文件 ### 测试静态文件 { #test-the-static-files } -启劚䜠的应甚并访问 http://127.0.0.1:8000/static/redoc.standalone.js。 +启劚䜠的应甚并访问 [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)。 䜠应该䌚看到䞀䞪非垞长的 **ReDoc** 的 JavaScript 文件。 @@ -180,6 +180,6 @@ Swagger UI 䌚圚幕后䞺䜠倄理这些䜆它需芁这䞪“重定向”蟅 ### 测试静态文件 UI { #test-static-files-ui } -现圚䜠可以断匀 WiFi访问 http://127.0.0.1:8000/docs并刷新页面。 +现圚䜠可以断匀 WiFi访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)并刷新页面。 即䜿没有互联眑䜠也胜看到 API 的文档并䞎之亀互。 diff --git a/docs/zh/docs/how-to/custom-request-and-route.md b/docs/zh/docs/how-to/custom-request-and-route.md index 8b365987ce..79860a5623 100644 --- a/docs/zh/docs/how-to/custom-request-and-route.md +++ b/docs/zh/docs/how-to/custom-request-and-route.md @@ -18,7 +18,7 @@ 䞀些䜿甚场景包括 -* 将非 JSON 的请求䜓蜬换䞺 JSON䟋劂 `msgpack`。 +* 将非 JSON 的请求䜓蜬换䞺 JSON䟋劂 [`msgpack`](https://msgpack.org/index.html)。 * 解压猩䜿甚 gzip 压猩的请求䜓。 * 自劚记圕所有请求䜓日志。 @@ -32,7 +32,7 @@ /// tip | 提瀺 -这是䞀䞪挔瀺工䜜原理的瀺䟋。劂果䜠需芁 Gzip 支持可以盎接䜿甚提䟛的 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}。 +这是䞀䞪挔瀺工䜜原理的瀺䟋。劂果䜠需芁 Gzip 支持可以盎接䜿甚提䟛的 [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)。 /// @@ -66,7 +66,7 @@ 创建䞀䞪新的 `Request` 实䟋需芁这䞀样`scope` 和 `receive`。 -想了解曎倚关于 `Request` 的信息请查看 Starlette 的 Request 文档。 +想了解曎倚关于 `Request` 的信息请查看 [Starlette 的 Request 文档](https://www.starlette.dev/requests/)。 /// @@ -82,7 +82,7 @@ /// tip | 提瀺 -芁解决类䌌问题䜿甚 `RequestValidationError` 的自定义倄理噚䞭的 `body` 埀埀曎简单[倄理错误](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}。 +芁解决类䌌问题䜿甚 `RequestValidationError` 的自定义倄理噚䞭的 `body` 埀埀曎简单[倄理错误](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)。 䜆本瀺䟋同样有效并展瀺了劂䜕䞎内郚组件亀互。 diff --git a/docs/zh/docs/how-to/extending-openapi.md b/docs/zh/docs/how-to/extending-openapi.md index ad8a1d6981..fd39e439fa 100644 --- a/docs/zh/docs/how-to/extending-openapi.md +++ b/docs/zh/docs/how-to/extending-openapi.md @@ -37,7 +37,7 @@ 基于以䞊信息䜠可以甚同䞀䞪工具凜数生成 OpenAPI 架构并按需芆盖其䞭的各䞪郚分。 -䟋劂让我们添加 ReDoc 的 OpenAPI 扩展以包含自定义 Logo。 +䟋劂让我们添加 [ReDoc 的 OpenAPI 扩展以包含自定义 Logo](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)。 ### åžžè§„ **FastAPI** { #normal-fastapi } @@ -75,6 +75,6 @@ ### 验证 { #check-it } -圓䜠访问 http://127.0.0.1:8000/redoc 时䜠䌚看到已䜿甚䜠的自定义 Logo本䟋䞭䞺 **FastAPI** 的 Logo +圓䜠访问 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) 时䜠䌚看到已䜿甚䜠的自定义 Logo本䟋䞭䞺 **FastAPI** 的 Logo diff --git a/docs/zh/docs/how-to/general.md b/docs/zh/docs/how-to/general.md index 2c9f781791..1526ca1872 100644 --- a/docs/zh/docs/how-to/general.md +++ b/docs/zh/docs/how-to/general.md @@ -4,36 +4,40 @@ ## 数据过滀 - 安党性 { #filter-data-security } -䞺确保䞍返回超过需芁的数据请阅读 [教皋 - 响应暡型 - 返回类型](../tutorial/response-model.md){.internal-link target=_blank} 文档。 +䞺确保䞍返回超过需芁的数据请阅读 [教皋 - 响应暡型 - 返回类型](../tutorial/response-model.md) 文档。 + +## 䌘化响应性胜 - 响应暡型 - 返回类型 { #optimize-response-performance-response-model-return-type } + +圚返回 JSON 数据时䌘化性胜请䜿甚返回类型或响应暡型这样 Pydantic 䌚圚 Rust 䟧倄理到 JSON 的序列化而无需经过 Python。曎倚内容请阅读 [教皋 - 响应暡型 - 返回类型](../tutorial/response-model.md) 文档。 ## 文档的标筟 - OpenAPI { #documentation-tags-openapi } -圚文档界面䞭添加**路埄操䜜**的标筟和进行分组请阅读 [教皋 - 路埄操䜜配眮 - Tags 参数](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} 文档。 +圚文档界面䞭添加**路埄操䜜**的标筟和进行分组请阅读 [教皋 - 路埄操䜜配眮 - Tags](../tutorial/path-operation-configuration.md#tags) 文档。 ## 文档的抂芁和描述 - OpenAPI { #documentation-summary-and-description-openapi } -圚文档界面䞭添加**路埄操䜜**的抂芁和描述请阅读 [教皋 - 路埄操䜜配眮 - Summary 和 Description 参数](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} 文档。 +圚文档界面䞭添加**路埄操䜜**的抂芁和描述请阅读 [教皋 - 路埄操䜜配眮 - Summary 和 Description](../tutorial/path-operation-configuration.md#summary-and-description) 文档。 ## 文档的响应描述 - OpenAPI { #documentation-response-description-openapi } -圚文档界面䞭定义并星瀺响应描述请阅读 [教皋 - 路埄操䜜配眮 - 响应描述](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} 文档。 +圚文档界面䞭定义并星瀺响应描述请阅读 [教皋 - 路埄操䜜配眮 - 响应描述](../tutorial/path-operation-configuration.md#response-description) 文档。 ## 文档匃甚**路埄操䜜** - OpenAPI { #documentation-deprecate-a-path-operation-openapi } -圚文档界面䞭星瀺匃甚的**路埄操䜜**请阅读 [教皋 - 路埄操䜜配眮 - 匃甚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} 文档。 +圚文档界面䞭星瀺匃甚的**路埄操䜜**请阅读 [教皋 - 路埄操䜜配眮 - 匃甚](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) 文档。 ## 将任䜕数据蜬换䞺 JSON 兌容栌匏 { #convert-any-data-to-json-compatible } -芁将任䜕数据蜬换䞺 JSON 兌容栌匏请阅读 [教皋 - JSON 兌容猖码噚](../tutorial/encoder.md){.internal-link target=_blank} 文档。 +芁将任䜕数据蜬换䞺 JSON 兌容栌匏请阅读 [教皋 - JSON 兌容猖码噚](../tutorial/encoder.md) 文档。 ## OpenAPI 元数据 - 文档 { #openapi-metadata-docs } -芁添加 OpenAPI 的元数据包括讞可证、版本、联系方匏等请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md){.internal-link target=_blank} 文档。 +芁添加 OpenAPI 的元数据包括讞可证、版本、联系方匏等请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md) 文档。 ## OpenAPI 自定义 URL { #openapi-custom-url } -芁自定义 OpenAPI 的 URL或删陀它请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} 文档。 +芁自定义 OpenAPI 的 URL或删陀它请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md#openapi-url) 文档。 ## OpenAPI 文档 URL { #openapi-docs-urls } -芁曎改自劚生成的文档甚户界面所䜿甚的 URL请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}。 +芁曎改自劚生成的文档甚户界面所䜿甚的 URL请阅读 [教皋 - 元数据和文档 URL](../tutorial/metadata.md#docs-urls)。 diff --git a/docs/zh/docs/how-to/graphql.md b/docs/zh/docs/how-to/graphql.md index 5384f15137..b33d6759fa 100644 --- a/docs/zh/docs/how-to/graphql.md +++ b/docs/zh/docs/how-to/graphql.md @@ -18,18 +18,18 @@ 以䞋是䞀些支持 **ASGI** 的 **GraphQL** 库。䜠可以将它们䞎 **FastAPI** 䞀起䜿甚 -* Strawberry 🍓 - * 提䟛 面向 FastAPI 的文档 -* Ariadne - * 提䟛 面向 FastAPI 的文档 -* Tartiflette - * 提䟛甚于 ASGI 集成的 Tartiflette ASGI -* Graphene - * 可配合 starlette-graphene3 䜿甚 +* [Strawberry](https://strawberry.rocks/) 🍓 + * 提䟛 [面向 FastAPI 的文档](https://strawberry.rocks/docs/integrations/fastapi) +* [Ariadne](https://ariadnegraphql.org/) + * 提䟛 [面向 FastAPI 的文档](https://ariadnegraphql.org/docs/fastapi-integration) +* [Tartiflette](https://tartiflette.io/) + * 提䟛甚于 ASGI 集成的 [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) +* [Graphene](https://graphene-python.org/) + * 可配合 [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) 䜿甚 ## 䜿甚 Strawberry 的 GraphQL { #graphql-with-strawberry } -劂果䜠需芁或想芁䜿甚 **GraphQL****Strawberry** 是**掚荐**的库因䞺它的讟计䞎 **FastAPI** 最䞺接近党郚基于**类型泚解**。 +劂果䜠需芁或想芁䜿甚 **GraphQL**[**Strawberry**](https://strawberry.rocks/) 是**掚荐**的库因䞺它的讟计䞎 **FastAPI** 最䞺接近党郚基于**类型泚解**。 根据䜠的甚䟋䜠可胜䌚曎喜欢其他库䜆劂果䜠问我我倧抂率䌚建议䜠先试试 **Strawberry**。 @@ -37,24 +37,24 @@ {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *} -䜠可以圚 Strawberry 文档䞭了解曎倚信息。 +䜠可以圚 [Strawberry 文档](https://strawberry.rocks/) 䞭了解曎倚信息。 -还有关于 将 Strawberry 侎 FastAPI 结合䜿甚的文档。 +还有关于 [将 Strawberry 侎 FastAPI 结合䜿甚](https://strawberry.rocks/docs/integrations/fastapi) 的文档。 ## Starlette 䞭蟃早的 `GraphQLApp` { #older-graphqlapp-from-starlette } -早期版本的 Starlette 包含䞀䞪 `GraphQLApp` 类甚于䞎 Graphene 集成。 +早期版本的 Starlette 包含䞀䞪 `GraphQLApp` 类甚于䞎 [Graphene](https://graphene-python.org/) 集成。 -它已圚 Starlette 䞭被匃甚䜆劂果䜠的代码䜿甚了它䜠可以蜻束**迁移**到 starlette-graphene3它芆盖盞同的甚䟋䞔接口**几乎完党䞀臎**。 +它已圚 Starlette 䞭被匃甚䜆劂果䜠的代码䜿甚了它䜠可以蜻束**迁移**到 [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)它芆盖盞同的甚䟋䞔接口**几乎完党䞀臎**。 /// tip | 提瀺 -劂果䜠需芁 GraphQL我仍然建议看看 Strawberry因䞺它基于类型泚解而䞍是自定义类和类型。 +劂果䜠需芁 GraphQL我仍然建议看看 [Strawberry](https://strawberry.rocks/)因䞺它基于类型泚解而䞍是自定义类和类型。 /// ## 了解曎倚 { #learn-more } -䜠可以圚 GraphQL 官方文档䞭了解曎倚关于 **GraphQL** 的内容。 +䜠可以圚 [GraphQL 官方文档](https://graphql.org/) 䞭了解曎倚关于 **GraphQL** 的内容。 䜠也可以通过䞊面的铟接阅读各䞪库的曎倚信息。 diff --git a/docs/zh/docs/how-to/index.md b/docs/zh/docs/how-to/index.md index 980dcd1a65..ff3d8afa0c 100644 --- a/docs/zh/docs/how-to/index.md +++ b/docs/zh/docs/how-to/index.md @@ -8,6 +8,6 @@ /// tip | 提瀺 -劂果䜠想以系统的方匏**å­Šä¹  FastAPI**掚荐请阅读 [教皋 - 甚户指南](../tutorial/index.md){.internal-link target=_blank} 的每䞀章节。 +劂果䜠想以系统的方匏**å­Šä¹  FastAPI**掚荐请阅读 [教皋 - 甚户指南](../tutorial/index.md) 的每䞀章节。 /// diff --git a/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md index 2e5445200a..3723eb0327 100644 --- a/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md +++ b/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md @@ -22,7 +22,7 @@ FastAPI 0.126.0 移陀了对 Pydantic v1 的支持䜆圚䞀段时闎内仍支 ## 官方指南 { #official-guide } -Pydantic 有䞀仜从 v1 迁移到 v2 的官方 迁移指南。 +Pydantic 有䞀仜从 v1 迁移到 v2 的官方[迁移指南](https://docs.pydantic.dev/latest/migration/)。 其䞭包含变曎内容、校验劂䜕曎准确曎䞥栌、可胜的泚意事项等。 @@ -30,7 +30,7 @@ Pydantic 有䞀仜从 v1 迁移到 v2 的官方 `bump-pydantic`。 +䜠可以䜿甚同䞀 Pydantic 团队提䟛的[`bump-pydantic`](https://github.com/pydantic/bump-pydantic)。 该工具䌚垮助䜠自劚修改倧郚分需芁变曎的代码。 diff --git a/docs/zh/docs/how-to/testing-database.md b/docs/zh/docs/how-to/testing-database.md index e4a20d8436..57219832bb 100644 --- a/docs/zh/docs/how-to/testing-database.md +++ b/docs/zh/docs/how-to/testing-database.md @@ -1,7 +1,7 @@ # 测试数据库 { #testing-a-database } -䜠可以圚 SQLModel 文档 䞭孊习数据库、SQL 和 SQLModel。🀓 +䜠可以圚[SQLModel 文档](https://sqlmodel.tiangolo.com/)䞭孊习数据库、SQL 和 SQLModel。🀓 -这里有䞀䞪关于圚 FastAPI 䞭䜿甚 SQLModel 的小教皋䜿甚 SQLModel 搭配 FastAPI 的教皋。✚ +这里有䞀䞪[圚 FastAPI 䞭䜿甚 SQLModel 的小教皋](https://sqlmodel.tiangolo.com/tutorial/fastapi/)。✚ -该教皋包含䞀䞪关于 测试 SQL 数据库 的章节。😎 +该教皋包含䞀䞪关于[测试 SQL 数据库](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)的章节。😎 diff --git a/docs/zh/docs/index.md b/docs/zh/docs/index.md index 38e128bf14..a88c25efb1 100644 --- a/docs/zh/docs/index.md +++ b/docs/zh/docs/index.md @@ -11,25 +11,25 @@ FastAPI 框架高性胜易于孊习高效猖码生产可甚

- + Test - + Coverage - + Package version - + Supported Python versions

--- -**文档** https://fastapi.tiangolo.com +**文档** [https://fastapi.tiangolo.com/zh](https://fastapi.tiangolo.com/zh) -**源码** https://github.com/fastapi/fastapi +**源码** [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- @@ -44,7 +44,7 @@ FastAPI 是䞀䞪甚于构建 API 的现代、快速高性胜的 Web 框 * **易甚**䞺易甚和易孊而讟计。曎少的文档阅读时闎。 * **简短**最小化代码重倍。䞀次参数声明即可获埗倚种功胜。曎少的 bug。 * **健壮**生产可甚级代码。并垊有自劚生成的亀互匏文档。 -* **标准化**基于并完党兌容API 的匀攟标准OpenAPI以前称䞺 Swagger和 JSON Schema。 +* **标准化**基于并完党兌容API 的匀攟标准[OpenAPI](https://github.com/OAI/OpenAPI-Specification)以前称䞺 Swagger和 [JSON Schema](https://json-schema.org/)。 * 基于某内郚匀发团队圚构建生产应甚时的测试䌰算。 @@ -55,51 +55,51 @@ FastAPI 是䞀䞪甚于构建 API 的现代、快速高性胜的 Web 框 ### Keystone 赞助商 { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} - + {% endfor -%} ### 金牌和银牌赞助商 { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} - + {% endfor -%} {%- for sponsor in sponsors.silver -%} - + {% endfor %} -其他赞助商 +[其他赞助商](https://fastapi.tiangolo.com/zh/fastapi-people/#sponsors) ## 评价 { #opinions } 「_[...] 最近我倧量䜿甚 **FastAPI**。[...] 我实际䞊计划把它甚于我团队圚 **埮蜯** 的所有 **机噚孊习服务**。其䞭䞀些正圚集成进栞心 **Windows** 产品以及䞀些 **Office** 产品。_」 -
Kabir Khan - Microsoft (ref)
+
Kabir Khan - Microsoft (ref)
--- 「_我们采甚 **FastAPI** 来构建可查询以获取**预测结果**的 **REST** 服务噚。[甚于 Ludwig]_」 -
Piero MolinoYaroslav DudinSai Sumanth Miryala - Uber (ref)
+
Piero MolinoYaroslav DudinSai Sumanth Miryala - Uber (ref)
--- 「_**Netflix** 埈高兎宣垃匀源我们的**危机管理**猖排框架**Dispatch**[䜿甚 **FastAPI** 构建]_」 -
Kevin GlissonMarc VilanovaForest Monsen - Netflix (ref)
+
Kevin GlissonMarc VilanovaForest Monsen - Netflix (ref)
--- 「_我对 **FastAPI** 兎奋到飞起。它倪有趣了_」 -
Brian Okken - Python Bytes 播客䞻持人 (ref)
+
Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) 播客䞻持人 (ref)
--- 「_老实诎䜠构建的䞜西非垞皳健而䞔打磚埗埈奜。从埈倚方面看这就是我想让 **Hug** 成䞺的样子 —— 看到有人把它做出来真的埈錓舞人心。_」 -
Timothy Crosley - Hug 䜜者 (ref)
+
Timothy Crosley - [Hug](https://github.com/hugapi/hug) 䜜者 (ref)
--- @@ -107,27 +107,27 @@ FastAPI 是䞀䞪甚于构建 API 的现代、快速高性胜的 Web 框 「_我们已经把我们的 **API** 切换到 **FastAPI** [...] 我想䜠䌚喜欢它 [...]_」 -
Ines Montani - Matthew Honnibal - Explosion AI 创始人 - spaCy 䜜者 (ref) - (ref)
+
Ines Montani - Matthew Honnibal - [Explosion AI](https://explosion.ai) 创始人 - [spaCy](https://spacy.io) 䜜者 (ref) - (ref)
--- 「_劂果有人正圚构建生产级的 Python API我区烈掚荐 **FastAPI**。它**讟计䌘雅**、**䜿甚简单**侔**高床可扩展**已经成䞺我们 API 䌘先匀发战略䞭的**关键组件**并驱劚了讞倚自劚化和服务比劂我们的 Virtual TAC Engineer。_」 -
Deon Pillsbury - Cisco (ref)
+
Deon Pillsbury - Cisco (ref)
--- ## FastAPI 迷䜠纪圕片 { #fastapi-mini-documentary } -圚 2025 幎末发垃了䞀郚FastAPI 迷䜠纪圕片䜠可以圚线观看 +圚 2025 幎末发垃了䞀郚 [FastAPI 迷䜠纪圕片](https://www.youtube.com/watch?v=mpR8ngthqiE)䜠可以圚线观看 -FastAPI Mini Documentary +FastAPI Mini Documentary ## **Typer**呜什行䞭的 FastAPI { #typer-the-fastapi-of-clis } - + -劂果䜠芁匀发䞀䞪甚于终端的 呜什行应甚而䞍是 Web API看看 **Typer**。 +劂果䜠芁匀发䞀䞪甚于终端的 呜什行应甚而䞍是 Web API看看 [**Typer**](https://typer.tiangolo.com/)。 **Typer** 是 FastAPI 的小同胞。它的目标是成䞺**呜什行䞭的 FastAPI**。⌚ 🚀 @@ -135,12 +135,12 @@ FastAPI 是䞀䞪甚于构建 API 的现代、快速高性胜的 Web 框 FastAPI 站圚巚人的肩膀之䞊 -* Starlette 莟莣 Web 郚分。 -* Pydantic 莟莣数据郚分。 +* [Starlette](https://www.starlette.dev/) 莟莣 Web 郚分。 +* [Pydantic](https://docs.pydantic.dev/) 莟莣数据郚分。 ## 安装 { #installation } -创建并激掻䞀䞪虚拟环境然后安装 FastAPI +创建并激掻䞀䞪 [虚拟环境](https://fastapi.tiangolo.com/zh/virtual-environments/)然后安装 FastAPI
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **Note**: -劂果䜠䞍确定请查看文档䞭 _"In a hurry?"_ 章节的`async` 和 `await`郚分。 +劂果䜠䞍确定请查看文档䞭 _"In a hurry?"_ 章节的 [`async` 和 `await`](https://fastapi.tiangolo.com/zh/async/#in-a-hurry) 郚分。 @@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.
-关于呜什 fastapi dev main.py... +关于呜什 fastapi dev... -`fastapi dev` 呜什䌚读取䜠的 `main.py` 文件检测其䞭的 **FastAPI** 应甚并䜿甚 Uvicorn 启劚服务噚。 +`fastapi dev` 呜什䌚读取䜠的 `main.py` 文件检测其䞭的 **FastAPI** 应甚并䜿甚 [Uvicorn](https://www.uvicorn.dev) 启劚服务噚。 默讀情况䞋`fastapi dev` 䌚圚本地匀发时启甚自劚重蜜。 -䜠可以圚 FastAPI CLI 文档䞭了解曎倚。 +䜠可以圚 [FastAPI CLI 文档](https://fastapi.tiangolo.com/zh/fastapi-cli/) 䞭了解曎倚。
### 检查 { #check-it } -甚浏览噚打匀 http://127.0.0.1:8000/items/5?q=somequery。 +甚浏览噚打匀 [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)。 䜠䌚看到劂䞋 JSON 响应 @@ -264,17 +264,17 @@ INFO: Application startup complete. ### 亀互匏 API 文档 { #interactive-api-docs } -现圚访问 http://127.0.0.1:8000/docs。 +现圚访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 -䜠䌚看到自劚生成的亀互匏 API 文档由 Swagger UI 提䟛 +䜠䌚看到自劚生成的亀互匏 API 文档由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 可选的 API 文档 { #alternative-api-docs } -然后访问 http://127.0.0.1:8000/redoc。 +然后访问 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 -䜠䌚看到及䞀䞪自劚生成的文档由 ReDoc 提䟛 +䜠䌚看到及䞀䞪自劚生成的文档由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item): ### 亀互匏 API 文档升级 { #interactive-api-docs-upgrade } -现圚访问 http://127.0.0.1:8000/docs。 +现圚访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 * 亀互匏 API 文档䌚自劚曎新并包含新的请求䜓 @@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item): ### 可选文档升级 { #alternative-api-docs-upgrade } -再访问 http://127.0.0.1:8000/redoc。 +再访问 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 * 可选文档同样䌚䜓现新的查询参数和请求䜓 @@ -442,7 +442,7 @@ item: Item * 功胜区倧䞔易甚的 **䟝赖泚入** 系统。 * 安党䞎讀证包括对 **OAuth2**、**JWT tokens** 和 **HTTP Basic** 讀证的支持。 * 曎高级䜆同样简单的 **倚层嵌套 JSON 暡型** 声明技巧埗益于 Pydantic。 -* 通过 Strawberry 等库进行 **GraphQL** 集成。 +* 通过 [Strawberry](https://strawberry.rocks) 等库进行 **GraphQL** 集成。 * 讞倚额倖特性園功于 Starlette䟋劂 * **WebSockets** * 基于 HTTPX 和 `pytest` 的极其简单的测试 @@ -452,24 +452,10 @@ item: Item ### 郚眲䜠的应甚可选 { #deploy-your-app-optional } -䜠可以选择把 FastAPI 应甚郚眲到 FastAPI Cloud劂果还没有的话去加入候补名单吧。🚀 +䜠可以选择把 FastAPI 应甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)劂果还没有的话去加入候补名单吧。🚀 劂果䜠已经有 **FastAPI Cloud** 莊号我们从候补名单邀请了䜠 😉䜠可以甚䞀䞪呜什郚眲䜠的应甚。 -郚眲前先确讀已登圕 - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -然后郚眲䜠的应甚 -
```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### 关于 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的同䞀䜍䜜者和团队打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的同䞀䜍䜜者和团队打造。 它让䜠以最小的工䜜量就胜**构建**、**郚眲**å¹¶**访问**䞀䞪 API。 @@ -504,9 +490,9 @@ FastAPI 是匀源䞔基于标准的。䜠可以郚眲 FastAPI 应甚到䜠选择 ## 性胜 { #performance } -独立机构 TechEmpower 的基准测试星瀺运行圚 Uvicorn 例的 **FastAPI** 应甚是最快的 Python 框架之䞀仅次于 Starlette 和 Uvicorn 本身FastAPI 内郚䜿甚它们。(*) +独立机构 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/zh/benchmarks/) 章节。 ## 䟝赖项 { #dependencies } @@ -518,19 +504,19 @@ FastAPI 䟝赖 Pydantic 和 Starlette。 Pydantic 䜿甚 -* email-validator - 甚于 email 校验。 +* [`email-validator`](https://github.com/JoshData/python-email-validator) - 甚于 email 校验。 Starlette 䜿甚 -* httpx - 䜿甚 `TestClient` 时需芁。 -* jinja2 - 䜿甚默讀暡板配眮时需芁。 -* python-multipart - 䜿甚 `request.form()` 支持衚单「解析」时需芁。 +* [`httpx`](https://www.python-httpx.org) - 䜿甚 `TestClient` 时需芁。 +* [`jinja2`](https://jinja.palletsprojects.com) - 䜿甚默讀暡板配眮时需芁。 +* [`python-multipart`](https://github.com/Kludex/python-multipart) - 䜿甚 `request.form()` 支持衚单「解析」时需芁。 FastAPI 䜿甚 -* uvicorn - 加蜜并提䟛䜠的应甚的服务噚。包含 `uvicorn[standard]`其䞭包含高性胜服务所需的䞀些䟝赖䟋劂 `uvloop`。 +* [`uvicorn`](https://www.uvicorn.dev) - 加蜜并提䟛䜠的应甚的服务噚。包含 `uvicorn[standard]`其䞭包含高性胜服务所需的䞀些䟝赖䟋劂 `uvloop`。 * `fastapi-cli[standard]` - 提䟛 `fastapi` 呜什。 - * 其䞭包含 `fastapi-cloud-cli`它允讞䜠将 FastAPI 应甚郚眲到 FastAPI Cloud。 + * 其䞭包含 `fastapi-cloud-cli`它允讞䜠将 FastAPI 应甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)。 ### 䞍包含 `standard` 䟝赖 { #without-standard-dependencies } @@ -546,13 +532,13 @@ FastAPI 䜿甚 额倖的 Pydantic 可选䟝赖 -* pydantic-settings - 甚于配眮管理。 -* pydantic-extra-types - 甚于圚 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 - 䜿甚 `ORJSONResponse` 时需芁。 -* ujson - 䜿甚 `UJSONResponse` 时需芁。 +* [`orjson`](https://github.com/ijl/orjson) - 䜿甚 `ORJSONResponse` 时需芁。 +* [`ujson`](https://github.com/esnme/ultrajson) - 䜿甚 `UJSONResponse` 时需芁。 ## 讞可协议 { #license } diff --git a/docs/zh/docs/project-generation.md b/docs/zh/docs/project-generation.md index a6ad9f94ac..8cc50c0963 100644 --- a/docs/zh/docs/project-generation.md +++ b/docs/zh/docs/project-generation.md @@ -4,7 +4,7 @@ 䜠可以䜿甚歀暡板匀始它已经䞺䜠完成了倧量的初始讟眮、安党性、数据库以及䞀些 API 端点。 -GitHub 仓库 Full Stack FastAPI Template +GitHub 仓库[Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) ## FastAPI党栈暡板 - 技术栈和特性 { #full-stack-fastapi-template-technology-stack-and-features } diff --git a/docs/zh/docs/python-types.md b/docs/zh/docs/python-types.md index 4824b7558d..9b2fceb98e 100644 --- a/docs/zh/docs/python-types.md +++ b/docs/zh/docs/python-types.md @@ -269,7 +269,7 @@ def some_function(data: Any): ## Pydantic 暡型 { #pydantic-models } -Pydantic 是䞀䞪甚于执行数据校验的 Python 库。 +[Pydantic](https://docs.pydantic.dev/) 是䞀䞪甚于执行数据校验的 Python 库。 䜠将数据的“结构”声明䞺垊有属性的类。 @@ -285,13 +285,13 @@ def some_function(data: Any): /// info | 信息 -想了解曎倚关于 Pydantic 的信息请查看其文档。 +想了解曎倚关于 [Pydantic](https://docs.pydantic.dev/) 的信息请查看其文档。 /// **FastAPI** 完党建立圚 Pydantic 之䞊。 -䜠䌚圚[教皋 - 甚户指南](tutorial/index.md){.internal-link target=_blank}䞭看到曎倚的实战瀺䟋。 +䜠䌚圚[教皋 - 甚户指南](tutorial/index.md)䞭看到曎倚的实战瀺䟋。 ## 垊元数据泚解的类型提瀺 { #type-hints-with-metadata-annotations } @@ -337,12 +337,12 @@ Python 本身䞍䌚对这䞪 `Annotated` 做任䜕倄理。对于猖蟑噚和其 * 䜿甚 OpenAPI 记圕 API * 然后甚于自劚生成亀互匏文档界面。 -这些听起来可胜有点抜象。别担心。䜠䌚圚[教皋 - 甚户指南](tutorial/index.md){.internal-link target=_blank}䞭看到所有这些的实际效果。 +这些听起来可胜有点抜象。别担心。䜠䌚圚[教皋 - 甚户指南](tutorial/index.md)䞭看到所有这些的实际效果。 重芁的是通过䜿甚标准的 Python 类型而䞔只圚䞀䞪地方声明而䞍是添加曎倚类、装饰噚等**FastAPI** 䌚䞺䜠完成倧量工䜜。 /// info | 信息 -劂果䜠已经读完所有教皋又回来想进䞀步了解类型䞀䞪䞍错的资源是 `mypy` 的“速查衚”。 +劂果䜠已经读完所有教皋又回来想进䞀步了解类型䞀䞪䞍错的资源是 [`mypy` 的“速查衚”](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)。 /// diff --git a/docs/zh/docs/tutorial/background-tasks.md b/docs/zh/docs/tutorial/background-tasks.md index d73fee4299..975bb2688c 100644 --- a/docs/zh/docs/tutorial/background-tasks.md +++ b/docs/zh/docs/tutorial/background-tasks.md @@ -61,7 +61,7 @@ ## 技术细节 { #technical-details } -`BackgroundTasks` 类盎接来自 `starlette.background`。 +`BackgroundTasks` 类盎接来自 [`starlette.background`](https://www.starlette.dev/background/)。 它被盎接富入/包含到FastAPI以䟿䜠可以从 `fastapi` 富入并避免意倖从 `starlette.background` 富入倇甚的 `BackgroundTask` (后面没有 `s`)。 @@ -69,11 +69,11 @@ 圚FastAPI䞭仍然可以单独䜿甚 `BackgroundTask`䜆悚必须圚代码䞭创建对象并返回包含它的Starlette `Response`。 -曎倚细节查看 Starlette 后台任务的官方文档. +曎倚细节查看 [Starlette 后台任务的官方文档](https://www.starlette.dev/background/)。 ## 告诫 { #caveat } -劂果悚需芁执行繁重的后台计算并䞔䞍䞀定需芁由同䞀进皋运行䟋劂悚䞍需芁共享内存、变量等那么䜿甚其他曎倧的工具劂 Celery可胜曎奜。 +劂果悚需芁执行繁重的后台计算并䞔䞍䞀定需芁由同䞀进皋运行䟋劂悚䞍需芁共享内存、变量等那么䜿甚其他曎倧的工具劂 [Celery](https://docs.celeryq.dev)可胜曎奜。 它们埀埀需芁曎倍杂的配眮即消息/䜜䞚队列管理噚劂RabbitMQ或Redis䜆它们允讞悚圚倚䞪进皋䞭运行后台任务甚至是圚倚䞪服务噚䞭。 diff --git a/docs/zh/docs/tutorial/bigger-applications.md b/docs/zh/docs/tutorial/bigger-applications.md index a667d596f8..74522f8384 100644 --- a/docs/zh/docs/tutorial/bigger-applications.md +++ b/docs/zh/docs/tutorial/bigger-applications.md @@ -123,7 +123,7 @@ from app.routers import items 我们正圚䜿甚虚构的请求銖郚来简化歀瀺䟋。 -䜆圚实际情况䞋䜿甚集成的[安党性实甚工具](security/index.md){.internal-link target=_blank}䌚埗到曎奜的效果。 +䜆圚实际情况䞋䜿甚集成的[安党性实甚工具](security/index.md)䌚埗到曎奜的效果。 /// @@ -169,7 +169,7 @@ async def read_item(item_id: str): /// tip | 提瀺 -请泚意和[*路埄操䜜装饰噚*䞭的䟝赖项](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}埈类䌌没有倌䌚被䌠递给䜠的*路埄操䜜凜数*。 +请泚意和[*路埄操䜜装饰噚*䞭的䟝赖项](dependencies/dependencies-in-path-operation-decorators.md)埈类䌌没有倌䌚被䌠递给䜠的*路埄操䜜凜数*。 /// @@ -185,8 +185,8 @@ async def read_item(item_id: str): * 所有的路埄操䜜郜将包含预定义的 `responses`。 * 所有的这些*路埄操䜜*郜将圚自身之前计算/执行 `dependencies` 列衚。 * 劂果䜠还圚䞀䞪具䜓的*路埄操䜜*䞭声明了䟝赖项**它们也䌚被执行**。 - * 路由噚的䟝赖项最先执行然后是[装饰噚䞭的 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}再然后是普通的参数䟝赖项。 - * 䜠还可以添加[具有 `scopes` 的 `Security` 䟝赖项](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}。 + * 路由噚的䟝赖项最先执行然后是[装饰噚䞭的 `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)再然后是普通的参数䟝赖项。 + * 䜠还可以添加[具有 `scopes` 的 `Security` 䟝赖项](../advanced/security/oauth2-scopes.md)。 /// tip | 提瀺 @@ -303,7 +303,7 @@ from ...dependencies import get_token_header 䜠可以像平垞䞀样富入并创建䞀䞪 `FastAPI` 类。 -我们甚至可以声明[党局䟝赖项](dependencies/global-dependencies.md){.internal-link target=_blank}它䌚和每䞪 `APIRouter` 的䟝赖项组合圚䞀起 +我们甚至可以声明[党局䟝赖项](dependencies/global-dependencies.md)它䌚和每䞪 `APIRouter` 的䟝赖项组合圚䞀起 {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ from .routers import items, users from app.routers import items, users ``` -芁了解有关 Python 包和暡块的曎倚信息请查阅关于 Modules 的 Python 官方文档。 +芁了解有关 Python 包和暡块的曎倚信息请查阅[关于 Modules 的 Python 官方文档](https://docs.python.org/3/tutorial/modules.html)。 /// @@ -451,7 +451,7 @@ from .routers.users import router 它将䞎通过 `app.include_router()` 添加的所有其他*路埄操䜜*䞀起正垞运行。 -/// info | 特别的技术细节 +/// info | 非垞技术细节 **泚意**这是䞀䞪非垞技术性的细节䜠也讞可以**盎接跳过**。 @@ -465,6 +465,37 @@ from .routers.users import router /// +## 圚 `pyproject.toml` 䞭配眮 `entrypoint` { #configure-the-entrypoint-in-pyproject-toml } + +因䞺䜠的 FastAPI `app` 对象䜍于 `app/main.py` 䞭䜠可以圚 `pyproject.toml` 䞭这样配眮 `entrypoint` + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +等价于像这样富入 + +```python +from app.main import app +``` + +这样 `fastapi` 呜什就知道到哪里去扟到䜠的应甚了。 + +/// Note | 泚意 + +䜠也可以把路埄䌠给呜什比劂 + +```console +$ fastapi dev app/main.py +``` + +䜆是每次调甚 `fastapi` 呜什时䜠郜需芁记埗䌠入正确的路埄。 + +及倖其他工具可胜扟䞍到它比劂 [VS Code 扩展](../editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀掚荐圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 + +/// + ## 查看自劚化的 API 文档 { #check-the-automatic-api-docs } 现圚运行䜠的应甚 @@ -472,14 +503,14 @@ from .routers.users import router
```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
-然后打匀䜍于 http://127.0.0.1:8000/docs 的文档。 +然后打匀䜍于 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 的文档。 䜠将看到䜿甚了正确路埄和前猀和正确标筟的自劚化 API 文档包括了来自所有子暡块的路埄 diff --git a/docs/zh/docs/tutorial/body-nested-models.md b/docs/zh/docs/tutorial/body-nested-models.md index fe6902e83f..93a34da553 100644 --- a/docs/zh/docs/tutorial/body-nested-models.md +++ b/docs/zh/docs/tutorial/body-nested-models.md @@ -95,7 +95,7 @@ Pydantic 暡型的每䞪属性郜具有类型。 陀了普通的单䞀倌类型劂 `str`、`int`、`float` 等倖䜠还可以䜿甚从 `str` 继承的曎倍杂的单䞀倌类型。 -芁了解所有的可甚选项请查看 Pydantic 的类型抂览。䜠将圚䞋䞀章节䞭看到䞀些瀺䟋。 +芁了解所有的可甚选项请查看 [Pydantic 的类型抂览](https://docs.pydantic.dev/latest/concepts/types/)。䜠将圚䞋䞀章节䞭看到䞀些瀺䟋。 䟋劂圚 `Image` 暡型䞭我们有䞀䞪 `url` 字段我们可以把它声明䞺 Pydantic 的 `HttpUrl`而䞍是 `str` diff --git a/docs/zh/docs/tutorial/body-updates.md b/docs/zh/docs/tutorial/body-updates.md index 000201de99..5b181642cb 100644 --- a/docs/zh/docs/tutorial/body-updates.md +++ b/docs/zh/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## 甹 `PUT` 替换匏曎新 { #update-replacing-with-put } -曎新数据可以䜿甚 HTTP `PUT` 操䜜。 +曎新数据可以䜿甚 [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) 操䜜。 把蟓入数据蜬换䞺以 JSON 栌匏存傚的数据比劂䜿甚 NoSQL 数据库时可以䜿甚 `jsonable_encoder`。䟋劂把 `datetime` 蜬换䞺 `str`。 @@ -28,7 +28,7 @@ ## 甹 `PATCH` 进行郚分曎新 { #partial-updates-with-patch } -也可以䜿甚 HTTP `PATCH` 操䜜对数据进行*郚分*曎新。 +也可以䜿甚 [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) 操䜜对数据进行*郚分*曎新。 也就是诎䜠只需发送想芁曎新的数据其䜙数据保持䞍变。 @@ -95,6 +95,6 @@ 因歀劂果垌望接收的郚分曎新可以省略所有属性则需芁䞀䞪所有属性郜标记䞺可选垊默讀倌或 `None`的暡型。 -䞺了区分甚于**曎新**党郚可选和甚于**创建**必填的暡型可以参考[曎倚暡型](extra-models.md){.internal-link target=_blank} 䞭介绍的思路。 +䞺了区分甚于**曎新**党郚可选和甚于**创建**必填的暡型可以参考[曎倚暡型](extra-models.md) 䞭介绍的思路。 /// diff --git a/docs/zh/docs/tutorial/body.md b/docs/zh/docs/tutorial/body.md index 4a72ba17c5..0a4c9c5e53 100644 --- a/docs/zh/docs/tutorial/body.md +++ b/docs/zh/docs/tutorial/body.md @@ -6,7 +6,7 @@ 䜠的 API 几乎总是需芁发送**响应䜓**。䜆客户端䞍䞀定总是芁发送**请求䜓**有时它们只请求某䞪路埄可胜垊䞀些查询参数䜆䞍䌚发送请求䜓。 -䜿甚 Pydantic 暡型来声明**请求䜓**胜充分利甚它的功胜和䌘点。 +䜿甚 [Pydantic](https://docs.pydantic.dev/) 暡型来声明**请求䜓**胜充分利甚它的功胜和䌘点。 /// info | 信息 @@ -72,7 +72,7 @@ * 数据无效时返回枅晰的错误信息并指出错误数据的确切䜍眮和内容。 * 把接收的数据赋倌给参数 `item`。 * 因䞺䜠把凜数䞭的参数类型声明䞺 `Item`所以还胜获埗所有属性及其类型的猖蟑噚支持补党等。 -* 䞺䜠的暡型生成 JSON Schema 定义劂果对䜠的项目有意义还可以圚其他地方䜿甚它们。 +* 䞺䜠的暡型生成 [JSON Schema](https://json-schema.org) 定义劂果对䜠的项目有意义还可以圚其他地方䜿甚它们。 * 这些 schema 䌚成䞺生成的 OpenAPI Schema 的䞀郚分并被自劚文档的 UIs 䜿甚。 ## 自劚文档 { #automatic-docs } @@ -101,15 +101,15 @@ 我们甚至对 Pydantic 本身做了䞀些改劚以支持这些功胜。 -䞊面的截囟来自 Visual Studio Code。 +䞊面的截囟来自 [Visual Studio Code](https://code.visualstudio.com)。 -䜆䜿甚 PyCharm 和倧倚数其他 Python 猖蟑噚䜠也䌚获埗盞同的猖蟑噚支持 +䜆䜿甚 [PyCharm](https://www.jetbrains.com/pycharm/) 和倧倚数其他 Python 猖蟑噚䜠也䌚获埗盞同的猖蟑噚支持 /// tip | 提瀺 -劂果䜠䜿甚 PyCharm 䜜䞺猖蟑噚可以䜿甚 Pydantic PyCharm 插件。 +劂果䜠䜿甚 [PyCharm](https://www.jetbrains.com/pycharm/) 䜜䞺猖蟑噚可以䜿甚 [Pydantic PyCharm 插件](https://github.com/koxudaxi/pydantic-pycharm-plugin/)。 它胜改进对 Pydantic 暡型的猖蟑噚支持包括 @@ -161,4 +161,4 @@ FastAPI 䌚根据默讀倌 `= None` 知道 `q` 的倌䞍是必填的。 ## 䞍䜿甚 Pydantic { #without-pydantic } -即䟿䞍䜿甚 Pydantic 暡型也胜䜿甚 **Body** 参数。诊见[请求䜓 - 倚参数请求䜓䞭的单倌](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}。 +即䟿䞍䜿甚 Pydantic 暡型也胜䜿甚 **Body** 参数。诊见[请求䜓 - 倚参数请求䜓䞭的单倌](body-multiple-params.md#singular-values-in-body)。 diff --git a/docs/zh/docs/tutorial/cors.md b/docs/zh/docs/tutorial/cors.md index 2e271ec758..ebea43edba 100644 --- a/docs/zh/docs/tutorial/cors.md +++ b/docs/zh/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS跚域资源共享 { #cors-cross-origin-resource-sharing } -CORS 或者「跚域资源共享」 指浏览噚䞭运行的前端拥有䞎后端通信的 JavaScript 代码而后端倄于䞎前端䞍同的「源」的情况。 +[CORS 或者「跚域资源共享」](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) 指浏览噚䞭运行的前端拥有䞎后端通信的 JavaScript 代码而后端倄于䞎前端䞍同的「源」的情况。 ## 源 { #origin } @@ -55,10 +55,10 @@ * `allow_origins` - 䞀䞪允讞跚域请求的源列衚。䟋劂 `['https://example.org', 'https://www.example.org']`。䜠可以䜿甚 `['*']` 允讞任䜕源。 * `allow_origin_regex` - 䞀䞪正则衚蟟匏字笊䞲匹配的源允讞跚域请求。䟋劂 `'https://.*\.example\.org'`。 * `allow_methods` - 䞀䞪允讞跚域请求的 HTTP 方法列衚。默讀䞺 `['GET']`。䜠可以䜿甚 `['*']` 来允讞所有标准方法。 -* `allow_headers` - 䞀䞪允讞跚域请求的 HTTP 请求倎列衚。默讀䞺 `[]`。䜠可以䜿甚 `['*']` 允讞所有的请求倎。`Accept`、`Accept-Language`、`Content-Language` 以及 `Content-Type` 这几䞪请求倎圚简单 CORS 请求䞭总是被允讞。 +* `allow_headers` - 䞀䞪允讞跚域请求的 HTTP 请求倎列衚。默讀䞺 `[]`。䜠可以䜿甚 `['*']` 允讞所有的请求倎。`Accept`、`Accept-Language`、`Content-Language` 以及 `Content-Type` 这几䞪请求倎圚[简单 CORS 请求](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)䞭总是被允讞。 * `allow_credentials` - 指瀺跚域请求支持 cookies。默讀是 `False`。 - 圓 `allow_credentials` 讟䞺 `True` 时`allow_origins`、`allow_methods` 和 `allow_headers` 郜䞍胜讟䞺 `['*']`。它们必须星匏指定。 + 圓 `allow_credentials` 讟䞺 `True` 时`allow_origins`、`allow_methods` 和 `allow_headers` 郜䞍胜讟䞺 `['*']`。它们必须[星匏指定](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)。 * `expose_headers` - 指瀺可以被浏览噚访问的响应倎。默讀䞺 `[]`。 * `max_age` - 讟定浏览噚猓存 CORS 响应的最长时闎单䜍是秒。默讀䞺 `600`。 @@ -77,7 +77,7 @@ ## 曎倚信息 { #more-info } -曎倚关于 CORS 的信息请查看 Mozilla CORS 文档。 +曎倚关于 CORS 的信息请查看 [Mozilla CORS 文档](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)。 /// note | 技术细节 diff --git a/docs/zh/docs/tutorial/debugging.md b/docs/zh/docs/tutorial/debugging.md index 1ff7d61275..19e6f8a612 100644 --- a/docs/zh/docs/tutorial/debugging.md +++ b/docs/zh/docs/tutorial/debugging.md @@ -70,7 +70,7 @@ from myapp import app /// info | 信息 -曎倚信息请检查 Python 官方文档. +曎倚信息请检查 [Python 官方文档](https://docs.python.org/3/library/__main__.html). /// diff --git a/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index 23412e4650..a3b2e6a41e 100644 --- a/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -32,7 +32,7 @@ 本䟋䞭䜿甚的是自定义响应倎 `X-Key` 和 `X-Token`。 -䜆实际匀发䞭尀其是圚实现安党措斜时最奜䜿甚 FastAPI 内眮的[安党工具](../security/index.md){.internal-link target=_blank}诊见䞋䞀章。 +䜆实际匀发䞭尀其是圚实现安党措斜时最奜䜿甚 FastAPI 内眮的[安党工具䞋䞀章](../security/index.md)。 /// @@ -62,7 +62,7 @@ ## 䞺䞀组路埄操䜜定义䟝赖项 { #dependencies-for-a-group-of-path-operations } -皍后[倧型应甚 - 倚文件](../../tutorial/bigger-applications.md){.internal-link target=_blank}䞀章䞭䌚介绍劂䜕䜿甚倚䞪文件创建倧型应甚皋序圚这䞀章䞭悚将了解到劂䜕䞺䞀组*路埄操䜜*声明单䞪 `dependencies` 参数。 +皍后[倧型应甚 - 倚文件](../../tutorial/bigger-applications.md)䞀章䞭䌚介绍劂䜕䜿甚倚䞪文件创建倧型应甚皋序圚这䞀章䞭悚将了解到劂䜕䞺䞀组*路埄操䜜*声明单䞪 `dependencies` 参数。 ## 党局䟝赖项 { #global-dependencies } diff --git a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md index 413dedb96b..a365bccf04 100644 --- a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md @@ -14,8 +14,8 @@ FastAPI 支持那些圚完成后执行䞀些`@contextlib.contextmanager` 或 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 或 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 郜可以䜜䞺 **FastAPI** 的䟝赖项。 @@ -87,7 +87,7 @@ FastAPI 支持那些圚完成后执行䞀些䞊䞋文管理噚。 +这芁園功于 Python 的[䞊䞋文管理噚](https://docs.python.org/3/library/contextlib.html)。 **FastAPI** 圚内郚䜿甚它们来实现这䞀点。 @@ -111,7 +111,7 @@ FastAPI 支持那些圚完成后执行䞀些䜠可以甚 `with` 来读取文件 +䟋劂[䜠可以甚 `with` 来读取文件](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files) ```Python with open("./somefile.txt") as f: @@ -265,7 +265,7 @@ with open("./somefile.txt") as f: /// -圚 Python 䞭䜠可以通过创建䞀䞪垊有 `__enter__()` 和 `__exit__()` 方法的类来创建䞊䞋文管理噚。 +圚 Python 䞭䜠可以通过[创建䞀䞪垊有 `__enter__()` 和 `__exit__()` 方法的类](https://docs.python.org/3/reference/datamodel.html#context-managers)来创建䞊䞋文管理噚。 䜠也可以圚 **FastAPI** 的垊有 `yield` 的䟝赖䞭䜿甚䟝赖凜数内郚的 `with` 或 `async with` 语句来䜿甚它们 @@ -275,8 +275,8 @@ with open("./somefile.txt") as f: 及䞀种创建䞊䞋文管理噚的方匏是 -* `@contextlib.contextmanager` 或 -* `@contextlib.asynccontextmanager` +* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) 或 +* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager) 甚它们去装饰䞀䞪只包含单䞪 `yield` 的凜数。 diff --git a/docs/zh/docs/tutorial/dependencies/global-dependencies.md b/docs/zh/docs/tutorial/dependencies/global-dependencies.md index e33aab65cc..cf083f053d 100644 --- a/docs/zh/docs/tutorial/dependencies/global-dependencies.md +++ b/docs/zh/docs/tutorial/dependencies/global-dependencies.md @@ -2,14 +2,14 @@ 有时我们芁䞺敎䞪应甚添加䟝赖项。 -通过䞎[将 `dependencies` 添加到*路埄操䜜装饰噚*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 类䌌的方匏可以把䟝赖项添加至敎䞪 `FastAPI` 应甚。 +通过䞎[将 `dependencies` 添加到*路埄操䜜装饰噚*](dependencies-in-path-operation-decorators.md) 类䌌的方匏可以把䟝赖项添加至敎䞪 `FastAPI` 应甚。 这样䞀来就可以䞺所有*路埄操䜜*应甚该䟝赖项 {* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *} -[将 `dependencies` 添加到*路埄操䜜装饰噚*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} 䞀章的思路均适甚于党局䟝赖项 圚本䟋䞭这些䟝赖项可以甚于应甚䞭的所有*路埄操䜜*。 +[将 `dependencies` 添加到*路埄操䜜装饰噚*](dependencies-in-path-operation-decorators.md) 䞀章的思路均适甚于党局䟝赖项 圚本䟋䞭这些䟝赖项可以甚于应甚䞭的所有*路埄操䜜*。 ## 䞺䞀组路埄操䜜定义䟝赖项 { #dependencies-for-groups-of-path-operations } -皍后[倧型应甚 - 倚文件](../../tutorial/bigger-applications.md){.internal-link target=_blank}䞀章䞭䌚介绍劂䜕䜿甚倚䞪文件创建倧型应甚皋序圚这䞀章䞭悚将了解到劂䜕䞺䞀组*路埄操䜜*声明单䞪 `dependencies` 参数。 +皍后[倧型应甚 - 倚文件](../../tutorial/bigger-applications.md)䞀章䞭䌚介绍劂䜕䜿甚倚䞪文件创建倧型应甚皋序圚这䞀章䞭䜠将了解到劂䜕䞺䞀组*路埄操䜜*声明单䞪 `dependencies` 参数。 diff --git a/docs/zh/docs/tutorial/dependencies/index.md b/docs/zh/docs/tutorial/dependencies/index.md index 7db9ef9d95..939470f409 100644 --- a/docs/zh/docs/tutorial/dependencies/index.md +++ b/docs/zh/docs/tutorial/dependencies/index.md @@ -57,7 +57,7 @@ FastAPI 圚 0.95.0 版本䞭新增了对 `Annotated` 的支持并匀始掚荐 劂果䜠的版本蟃旧尝试䜿甚 `Annotated` 䌚报错。 -圚䜿甚 `Annotated` 之前请确保[升级 FastAPI 版本](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}到至少 0.95.1。 +圚䜿甚 `Annotated` 之前请确保[升级 FastAPI 版本](../../deployment/versions.md#upgrading-the-fastapi-versions)到至少 0.95.1。 /// @@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)] /// note | 泚意 -劂果䞍了解匂步请参阅文档䞭关于 `async` 和 `await` 的章节[匂步*“着急了”*](../../async.md#in-a-hurry){.internal-link target=_blank}。 +劂果䞍了解匂步请参阅文档䞭关于 `async` 和 `await` 的章节[匂步*“着急了”*](../../async.md#in-a-hurry)。 /// diff --git a/docs/zh/docs/tutorial/encoder.md b/docs/zh/docs/tutorial/encoder.md index 88be497493..8327ab6c7c 100644 --- a/docs/zh/docs/tutorial/encoder.md +++ b/docs/zh/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ 䟋劂它䞍接收`datetime`这类的对象因䞺这些对象䞎JSON䞍兌容。 -因歀`datetime`对象必须蜬换䞺包含ISO 栌匏的`str`类型对象。 +因歀`datetime`对象必须蜬换䞺包含[ISO 栌匏](https://en.wikipedia.org/wiki/ISO_8601)的`str`类型对象。 同样这䞪数据库也䞍䌚接收Pydantic暡型垊有属性的对象而只接收`dict`。 @@ -24,7 +24,7 @@ 圚这䞪䟋子䞭它将Pydantic暡型蜬换䞺`dict`并将`datetime`蜬换䞺`str`。 -调甚它的结果后就可以䜿甚Python标准猖码䞭的`json.dumps()`。 +调甚它的结果后就可以䜿甚Python标准猖码䞭的[`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)。 这䞪操䜜䞍䌚返回䞀䞪包含JSON栌匏䜜䞺字笊䞲数据的庞倧的`str`。它将返回䞀䞪Python标准数据结构䟋劂`dict`其倌和子倌郜䞎JSON兌容。 diff --git a/docs/zh/docs/tutorial/extra-data-types.md b/docs/zh/docs/tutorial/extra-data-types.md index 2cefd163d3..76748a7a38 100644 --- a/docs/zh/docs/tutorial/extra-data-types.md +++ b/docs/zh/docs/tutorial/extra-data-types.md @@ -36,7 +36,7 @@ * `datetime.timedelta`: * 䞀䞪 Python `datetime.timedelta`. * 圚请求和响应䞭将衚瀺䞺 `float` 代衚总秒数。 - * Pydantic 也允讞将其衚瀺䞺 "ISO 8601 时闎差匂猖码", 查看文档了解曎倚信息。 + * Pydantic 也允讞将其衚瀺䞺 "ISO 8601 时闎差匂猖码", [查看文档了解曎倚信息](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)。 * `frozenset`: * 圚请求和响应䞭䜜䞺 `set` 对埅 * 圚请求䞭列衚将被读取消陀重倍并将其蜬换䞺䞀䞪 `set`。 @@ -49,7 +49,7 @@ * `Decimal`: * 标准的 Python `Decimal`。 * 圚请求和响应䞭被圓做 `float` 䞀样倄理。 -* 悚可以圚这里检查所有有效的 Pydantic 数据类型: Pydantic data types. +* 悚可以圚这里检查所有有效的 Pydantic 数据类型: [Pydantic data types](https://docs.pydantic.dev/latest/usage/types/types/)。 ## 䟋子 { #example } diff --git a/docs/zh/docs/tutorial/extra-models.md b/docs/zh/docs/tutorial/extra-models.md index 09baa47319..0ad35cc4fc 100644 --- a/docs/zh/docs/tutorial/extra-models.md +++ b/docs/zh/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ 䞍芁存傚甚户的明文密码。始终只存傚之后可甚于校验的“安党哈垌”。 -劂果䜠还䞍了解可以圚[安党性章节](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}䞭孊习什么是“密码哈垌”。 +劂果䜠还䞍了解可以圚[安党性章节](security/simple-oauth2.md#password-hashing)䞭孊习什么是“密码哈垌”。 /// @@ -108,7 +108,7 @@ UserInDB(**user_dict) UserInDB(**user_in.model_dump()) ``` -  因䞺 `user_in.model_dump()` 是 `dict`圚䌠递给 `UserInDB` 时把 `**` 加圚 `user_in.model_dump()` 前可以让 Python 进行解包。 +...因䞺 `user_in.model_dump()` 是 `dict`圚䌠递给 `UserInDB` 时把 `**` 加圚 `user_in.model_dump()` 前可以让 Python 进行解包。 这样就可以甚其它 Pydantic 暡型䞭的数据生成 Pydantic 暡型。 @@ -120,7 +120,7 @@ UserInDB(**user_in.model_dump()) UserInDB(**user_in.model_dump(), hashed_password=hashed_password) ``` -  蟓出结果劂䞋 +...蟓出结果劂䞋 ```Python UserInDB( @@ -162,11 +162,11 @@ UserInDB( 圚 OpenAPI 䞭䌚甚 `anyOf` 衚瀺。 -䞺歀请䜿甚 Python 标准类型提瀺 `typing.Union` +䞺歀请䜿甚 Python 标准类型提瀺 [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) /// note | 泚意 -定义 `Union` 类型时芁把曎具䜓的类型写圚前面然后是䞍倪具䜓的类型。䞋䟋䞭曎具䜓的 `PlaneItem` 䜍于 `Union[PlaneItem, CarItem]` 侭的 `CarItem` 之前。 +定义 [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) 类型时芁把曎具䜓的类型写圚前面然后是䞍倪具䜓的类型。䞋䟋䞭曎具䜓的 `PlaneItem` 䜍于 `Union[PlaneItem, CarItem]` 侭的 `CarItem` 之前。 /// diff --git a/docs/zh/docs/tutorial/first-steps.md b/docs/zh/docs/tutorial/first-steps.md index 4c23807b8f..78db1fefc0 100644 --- a/docs/zh/docs/tutorial/first-steps.md +++ b/docs/zh/docs/tutorial/first-steps.md @@ -11,7 +11,7 @@
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 查看 { #check-it } -打匀浏览噚访问 http://127.0.0.1:8000。 +打匀浏览噚访问 [http://127.0.0.1:8000](http://127.0.0.1:8000)。 䜠将看到劂䞋的 JSON 响应 @@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ### 亀互匏 API 文档 { #interactive-api-docs } -跳蜬到 http://127.0.0.1:8000/docs。 +跳蜬到 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 -䜠将䌚看到自劚生成的亀互匏 API 文档由 Swagger UI 提䟛 +䜠将䌚看到自劚生成的亀互匏 API 文档由 [Swagger UI](https://github.com/swagger-api/swagger-ui) 提䟛 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ### 可选的 API 文档 { #alternative-api-docs } -前埀 http://127.0.0.1:8000/redoc。 +前埀 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)。 -䜠将䌚看到可选的自劚生成文档 由 ReDoc 提䟛 +䜠将䌚看到可选的自劚生成文档 由 [ReDoc](https://github.com/Rebilly/ReDoc) 提䟛 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) #### API「暡匏」 { #api-schema } -圚这种场景䞋OpenAPI 是䞀种规定劂䜕定义 API 暡匏的规范。 +圚这种场景䞋[OpenAPI](https://github.com/OAI/OpenAPI-Specification) 是䞀种规定劂䜕定义 API 暡匏的规范。 「暡匏」的定义包括䜠的 API 路埄以及它们可胜䜿甚的参数等等。 @@ -110,7 +110,7 @@ OpenAPI 䞺䜠的 API 定义 API 暡匏。该暡匏䞭包含了䜠的 API 发送 劂果䜠对原始的 OpenAPI 暡匏长什么样子感到奜奇FastAPI 自劚生成了包含所有 API 描述的 JSON暡匏。 -䜠可以盎接圚http://127.0.0.1:8000/openapi.json 看到它。 +䜠可以盎接圚[http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json) 看到它。 它将星瀺以劂䞋内容匀倎的 JSON @@ -143,9 +143,58 @@ OpenAPI 䞺䜠的 API 定义 API 暡匏。该暡匏䞭包含了䜠的 API 发送 䜠还可以䜿甚它自劚生成䞎䜠的 API 进行通信的客户端代码。䟋劂 web 前端移劚端或物联眑嵌入皋序。 +### 圚 `pyproject.toml` 䞭配眮应甚 `entrypoint` { #configure-the-app-entrypoint-in-pyproject-toml } + +䜠可以圚 `pyproject.toml` 文件䞭配眮应甚的䜍眮䟋劂 + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +该 `entrypoint` 䌚告诉 `fastapi` 呜什按劂䞋方匏富入应甚 + +```python +from main import app +``` + +劂果䜠的代码结构劂䞋 + +``` +. +├── backend +│   ├── main.py +│   ├── __init__.py +``` + +那么䜠可以将 `entrypoint` 讟眮䞺 + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +这等价于 + +```python +from backend.main import app +``` + +### `fastapi dev` 垊路埄 { #fastapi-dev-with-path } + +䜠也可以把文件路埄䌠给 `fastapi dev` 呜什它䌚尝试掚断芁䜿甚的 FastAPI 应甚对象 + +```console +$ fastapi dev main.py +``` + +䜆这样每次调甚 `fastapi` 呜什时郜需芁记埗䌠入正确的路埄。 + +及倖其他工具可胜无法扟到它䟋劂 [VS Code 扩展](../editor-support.md) 或 [FastAPI Cloud](https://fastapicloud.com)因歀掚荐圚 `pyproject.toml` 䞭䜿甚 `entrypoint`。 + ### 郚眲䜠的应甚可选 { #deploy-your-app-optional } -䜠可以选择将 FastAPI 应甚郚眲到 FastAPI Cloud劂果还没有先去加入候补名单。🚀 +䜠可以选择将 FastAPI 应甚郚眲到 [FastAPI Cloud](https://fastapicloud.com)劂果还没有先去加入候补名单。🚀 劂果䜠已经拥有 **FastAPI Cloud** 莊户我们从候补名单邀请了䜠 😉䜠可以甚䞀条呜什郚眲应甚。 @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI` 是盎接从 `Starlette` 继承的类。 -䜠可以通过 `FastAPI` 䜿甚所有的 Starlette 的功胜。 +䜠可以通过 `FastAPI` 䜿甚所有的 [Starlette](https://www.starlette.dev/) 的功胜。 /// @@ -273,7 +322,7 @@ https://example.com/items/foo * 请求路埄䞺 `/` * 䜿甚 get 操䜜 -/// info | `@decorator` Info +/// info | `@decorator` 信息 `@something` 语法圚 Python 䞭被称䞺「装饰噚」。 @@ -336,7 +385,7 @@ https://example.com/items/foo /// note -劂果䜠䞍知道䞀者的区别请查阅 [并发: *赶时闎吗*](../async.md#in-a-hurry){.internal-link target=_blank}。 +劂果䜠䞍知道䞀者的区别请查阅 [并发: *赶时闎吗*](../async.md#in-a-hurry)。 /// @@ -352,11 +401,11 @@ https://example.com/items/foo ### 步骀 6郚眲 { #step-6-deploy-it } -甚䞀条呜什将䜠的应甚郚眲到 **FastAPI Cloud**`fastapi deploy`。🎉 +甚䞀条呜什将䜠的应甚郚眲到 **[FastAPI Cloud](https://fastapicloud.com)**`fastapi deploy`。🎉 #### 关于 FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** 由 **FastAPI** 的䜜者和团队打造。 +**[FastAPI Cloud](https://fastapicloud.com)** 由 **FastAPI** 的䜜者和团队打造。 它以最小的投入简化了 **构建**、**郚眲** 和 **访问** API 的流皋。 diff --git a/docs/zh/docs/tutorial/handling-errors.md b/docs/zh/docs/tutorial/handling-errors.md index 9782f3d225..f3a23fab0a 100644 --- a/docs/zh/docs/tutorial/handling-errors.md +++ b/docs/zh/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ ## 安装自定义匂垞倄理噚 { #install-custom-exception-handlers } -可以䜿甚䞎 Starlette 盞同的匂垞倄理工具添加自定义匂垞倄理噚。 +可以䜿甚[侎 Starlette 盞同的匂垞倄理工具](https://www.starlette.dev/exceptions/)添加自定义匂垞倄理噚。 假讟有䞀䞪自定义匂垞 `UnicornException`䜠自己或䜠䜿甚的库可胜䌚 `raise` 它。 diff --git a/docs/zh/docs/tutorial/index.md b/docs/zh/docs/tutorial/index.md index 7934583023..8d6cbc7a6d 100644 --- a/docs/zh/docs/tutorial/index.md +++ b/docs/zh/docs/tutorial/index.md @@ -10,12 +10,12 @@ 所有代码片段郜可以倍制后盎接䜿甚它们实际䞊是经过测试的 Python 文件。 -芁运行任䜕瀺䟋请将代码倍制到 `main.py` 文件䞭然后䜿甚以䞋呜什启劚 `fastapi dev` +芁运行任䜕瀺䟋请将代码倍制到 `main.py` 文件䞭然后启劚 `fastapi dev`
```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -62,7 +62,7 @@ $ fastapi dev @@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | 泚意 -圓悚䜿甚 `pip install "fastapi[standard]"` 安装时它䌚附垊䞀些默讀的可选标准䟝赖项其䞭包括 `fastapi-cloud-cli`它可以让悚郚眲到 FastAPI Cloud。 +圓悚䜿甚 `pip install "fastapi[standard]"` 安装时它䌚附垊䞀些默讀的可选标准䟝赖项其䞭包括 `fastapi-cloud-cli`它可以让悚郚眲到 [FastAPI Cloud](https://fastapicloud.com)。 劂果悚䞍想安装这些可选䟝赖可以选择安装 `pip install fastapi`。 @@ -84,6 +84,12 @@ $ pip install "fastapi[standard]" /// +/// tip | 提瀺 + +FastAPI 提䟛了䞀䞪[VS Code 官方扩展](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)也支持 Cursor包含䌗倚功胜䟋劂路埄操䜜浏览噚、路埄操䜜搜玢、测试䞭的 CodeLens 富航从测试跳蜬到定义以及从猖蟑噚内进行 FastAPI Cloud 郚眲和查看日志。 + +/// + ## 进阶甚户指南 { #advanced-user-guide } 圚本**教皋-甚户指南**之后悚可以阅读**进阶甚户指南**。 diff --git a/docs/zh/docs/tutorial/metadata.md b/docs/zh/docs/tutorial/metadata.md index 7ffaa070c5..b761f08886 100644 --- a/docs/zh/docs/tutorial/metadata.md +++ b/docs/zh/docs/tutorial/metadata.md @@ -14,7 +14,7 @@ | `version` | `string` | API 的版本。这是悚自己的应甚皋序的版本而䞍是 OpenAPI 的版本。䟋劂 `2.5.0`。 | | `terms_of_service` | `str` | API 服务条欟的 URL。劂果提䟛则必须是 URL。 | | `contact` | `dict` | 公匀的 API 的联系信息。它可以包含倚䞪字段。
contact 字段
参数类型描述
namestr联系人/组织的识别名称。
urlstr指向联系信息的 URL。必须采甚 URL 栌匏。
emailstr联系人/组织的电子邮件地址。必须采甚电子邮件地址的栌匏。
| -| `license_info` | `dict` | 公匀的 API 的讞可证信息。它可以包含倚䞪字段。
license_info 字段
参数类型描述
namestr必须劂果讟眮了 license_info。甚于 API 的讞可证名称。
identifierstrAPI 的 SPDX 讞可证衚蟟匏。字段 identifier 䞎字段 url 互斥。自 OpenAPI 3.1.0、FastAPI 0.99.0 起可甚。
urlstr甚于 API 的讞可证的 URL。必须采甚 URL 栌匏。
| +| `license_info` | `dict` | 公匀的 API 的讞可证信息。它可以包含倚䞪字段。
license_info 字段
参数类型描述
namestr必须劂果讟眮了 license_info。甚于 API 的讞可证名称。
identifierstrAPI 的 [SPDX](https://spdx.org/licenses/) 讞可证衚蟟匏。字段 identifier 䞎字段 url 互斥。自 OpenAPI 3.1.0、FastAPI 0.99.0 起可甚。
urlstr甚于 API 的讞可证的 URL。必须采甚 URL 栌匏。
| 䜠可以按劂䞋方匏讟眮它们 @@ -76,7 +76,7 @@ /// info | 信息 -阅读曎倚关于标筟的信息[路埄操䜜配眮](path-operation-configuration.md#tags){.internal-link target=_blank}。 +阅读曎倚关于标筟的信息[路埄操䜜配眮](path-operation-configuration.md#tags)。 /// diff --git a/docs/zh/docs/tutorial/middleware.md b/docs/zh/docs/tutorial/middleware.md index a211a63bdf..e7586132f2 100644 --- a/docs/zh/docs/tutorial/middleware.md +++ b/docs/zh/docs/tutorial/middleware.md @@ -15,7 +15,7 @@ 劂果䜠有䜿甚 `yield` 的䟝赖䟝赖䞭的退出代码䌚圚䞭闎件之后运行。 -劂果有任䜕后台任务䌚圚[后台任务](background-tasks.md){.internal-link target=_blank}䞀节䞭介绍䜠皍后䌚看到它们䌚圚所有䞭闎件之后运行。 +劂果有任䜕后台任务䌚圚[后台任务](background-tasks.md)䞀节䞭介绍䜠皍后䌚看到它们䌚圚所有䞭闎件之后运行。 /// @@ -35,9 +35,9 @@ /// tip -请记䜏可以䜿甚 `X-` 前猀添加䞓有自定义请求倎。 +请记䜏可以[䜿甚 `X-` 前猀](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)添加䞓有自定义请求倎。 -䜆是劂果䜠有垌望让浏览噚䞭的客户端可见的自定义请求倎䜠需芁把它们加到䜠的 CORS 配眮[CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}的 `expose_headers` 参数䞭参见 Starlette 的 CORS 文档。 +䜆是劂果䜠有垌望让浏览噚䞭的客户端可见的自定义请求倎䜠需芁把它们加到䜠的 CORS 配眮[CORS跚域资源共享](cors.md)的 `expose_headers` 参数䞭参见 [Starlette 的 CORS 文档](https://www.starlette.dev/middleware/#corsmiddleware)。 /// @@ -61,7 +61,7 @@ /// tip -这里我们䜿甚 `time.perf_counter()` 而䞍是 `time.time()`因䞺圚这类场景䞭它可胜曎粟确。🀓 +这里我们䜿甚 [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) 而䞍是 `time.time()`因䞺圚这类场景䞭它可胜曎粟确。🀓 /// @@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB) ## å…¶ä»–äž­é—Žä»¶ { #other-middlewares } -䜠可以皍后圚[高级甚户指南高级䞭闎件](../advanced/middleware.md){.internal-link target=_blank}䞭阅读曎倚关于其他䞭闎件的内容。 +䜠可以皍后圚[高级甚户指南高级䞭闎件](../advanced/middleware.md)䞭阅读曎倚关于其他䞭闎件的内容。 䜠将圚䞋䞀节䞭了解劂䜕䜿甚䞭闎件倄理 CORS。 diff --git a/docs/zh/docs/tutorial/path-operation-configuration.md b/docs/zh/docs/tutorial/path-operation-configuration.md index b3e4ba95c2..b9046a13be 100644 --- a/docs/zh/docs/tutorial/path-operation-configuration.md +++ b/docs/zh/docs/tutorial/path-operation-configuration.md @@ -58,7 +58,7 @@ OpenAPI 抂囟䌚自劚添加标筟䟛 API 文档接口䜿甚 描述内容比蟃长䞔占甚倚行时可以圚凜数的 docstring 䞭声明*路埄操䜜*的描述**FastAPI** 䌚从䞭读取。 -文档字笊䞲支持 Markdown胜正确解析和星瀺 Markdown 的内容䜆芁泚意文档字笊䞲的猩进。 +文档字笊䞲支持 [Markdown](https://en.wikipedia.org/wiki/Markdown)胜正确解析和星瀺 Markdown 的内容䜆芁泚意文档字笊䞲的猩进。 {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *} diff --git a/docs/zh/docs/tutorial/path-params-numeric-validations.md b/docs/zh/docs/tutorial/path-params-numeric-validations.md index 608aa69a1d..26b91c1d73 100644 --- a/docs/zh/docs/tutorial/path-params-numeric-validations.md +++ b/docs/zh/docs/tutorial/path-params-numeric-validations.md @@ -14,7 +14,7 @@ FastAPI 圚 0.95.0 版本添加了对 `Annotated` 的支持并匀始掚荐䜿 劂果䜠䜿甚的是曎旧的版本尝试䜿甚 `Annotated` 䌚报错。 -请确保圚䜿甚 `Annotated` 之前将 FastAPI 版本[升级](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}到至少 0.95.1。 +请确保圚䜿甚 `Annotated` 之前将 FastAPI 版本[升级](../deployment/versions.md#upgrading-the-fastapi-versions)到至少 0.95.1。 /// @@ -122,7 +122,7 @@ Python 䞍䌚对这䞪 `*` 做任䜕事䜆它䌚知道之后的所有参数 ## 总结 { #recap } -䜠胜借以䞎[查询参数和字笊䞲校验](query-params-str-validations.md){.internal-link target=_blank}盞同的方匏䜿甚 `Query`、`Path`以及其他䜠还没见过的类声明元数据和字笊䞲校验。 +䜠胜借以䞎[查询参数和字笊䞲校验](query-params-str-validations.md)盞同的方匏䜿甚 `Query`、`Path`以及其他䜠还没见过的类声明元数据和字笊䞲校验。 而䞔䜠还可以声明数倌校验 @@ -139,7 +139,7 @@ Python 䞍䌚对这䞪 `*` 做任䜕事䜆它䌚知道之后的所有参数 /// -/// note | 技术细节 +/// note | 泚意 圓䜠从 `fastapi` 富入 `Query`、`Path` 和其他对象时它们实际䞊是凜数。 diff --git a/docs/zh/docs/tutorial/path-params.md b/docs/zh/docs/tutorial/path-params.md index 06a9f1b442..df9210673c 100644 --- a/docs/zh/docs/tutorial/path-params.md +++ b/docs/zh/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ 路埄参数 `item_id` 的倌䌚䜜䞺参数 `item_id` 䌠递给䜠的凜数。 -运行瀺䟋并访问 http://127.0.0.1:8000/items/foo可获埗劂䞋响应 +运行瀺䟋并访问 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)可获埗劂䞋响应 ```JSON {"item_id":"foo"} @@ -28,7 +28,7 @@ ## 数据蜬换 { #data-conversion } -运行瀺䟋并访问 http://127.0.0.1:8000/items/3返回的响应劂䞋 +运行瀺䟋并访问 [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)返回的响应劂䞋 ```JSON {"item_id":3} @@ -44,7 +44,7 @@ ## 数据校验 { #data-validation } -通过浏览噚访问 http://127.0.0.1:8000/items/foo接收劂䞋 HTTP 错误信息 +通过浏览噚访问 [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)接收劂䞋 HTTP 错误信息 ```JSON { @@ -64,7 +64,7 @@ 这是因䞺路埄参数 `item_id` 的倌`"foo"`的类型䞍是 `int`。 -倌的类型䞍是 `int` 而是浮点数`float`时也䌚星瀺同样的错误比劂 http://127.0.0.1:8000/items/4.2 +倌的类型䞍是 `int` 而是浮点数`float`时也䌚星瀺同样的错误比劂 [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) /// check | 检查 @@ -78,7 +78,7 @@ ## 文档 { #documentation } -访问 http://127.0.0.1:8000/docs查看自劚生成的亀互匏 API 文档 +访问 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)查看自劚生成的亀互匏 API 文档 @@ -92,9 +92,9 @@ ## 基于标准的奜倄倇选文档 { #standards-based-benefits-alternative-documentation } -**FastAPI** 䜿甚 OpenAPI 生成抂囟所以胜兌容埈倚工具。 +**FastAPI** 䜿甚 [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) 生成抂囟所以胜兌容埈倚工具。 -因歀**FastAPI** 还内眮了 ReDoc 生成的倇选 API 文档可圚歀查看 http://127.0.0.1:8000/redoc +因歀**FastAPI** 还内眮了 ReDoc 生成的倇选 API 文档可圚歀查看 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) @@ -102,7 +102,7 @@ ## Pydantic { #pydantic } -FastAPI 充分地利甚了 Pydantic 的䌘势甚它圚后台校验数据。䌗所呚知Pydantic 擅长的就是数据校验。 +FastAPI 充分地利甚了 [Pydantic](https://docs.pydantic.dev/) 的䌘势甚它圚后台校验数据。䌗所呚知Pydantic 擅长的就是数据校验。 同样`str`、`float`、`bool` 以及埈倚倍合数据类型郜可以䜿甚类型声明。 diff --git a/docs/zh/docs/tutorial/query-params-str-validations.md b/docs/zh/docs/tutorial/query-params-str-validations.md index d41f302267..67a5b40008 100644 --- a/docs/zh/docs/tutorial/query-params-str-validations.md +++ b/docs/zh/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ FastAPI 圚 0.95.0 版本䞭添加了对 `Annotated` 的支持并匀始掚荐 劂果䜠的版本曎旧䜿甚 `Annotated` 䌚报错。 -圚䜿甚 `Annotated` 之前请确保先[升级 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}到至少 0.95.1。 +圚䜿甚 `Annotated` 之前请确保先[升级 FastAPI 版本](../deployment/versions.md#upgrading-the-fastapi-versions)到至少 0.95.1。 /// ## 圚 `q` 参数的类型䞭䜿甚 `Annotated` { #use-annotated-in-the-type-for-the-q-parameter } -还记埗我之前圚[Python 类型简介](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}䞭诎过可以甚 `Annotated` 给参数添加元数据吗 +还记埗我之前圚[Python 类型简介](../python-types.md#type-hints-with-metadata-annotations)䞭诎过可以甚 `Annotated` 给参数添加元数据吗 现圚正是䞎 FastAPI 搭配䜿甚它的时候。🚀 @@ -105,7 +105,7 @@ FastAPI 现圚䌚 q: str | None = Query(default=None) ``` -  䌚让参数变成可选默讀倌䞺 `None`等同于 +...䌚让参数变成可选默讀倌䞺 `None`等同于 ```Python q: str | None = None @@ -133,7 +133,7 @@ q: str | None = Query(default=None, max_length=50) q: Annotated[str, Query(default="rick")] = "morty" ``` -  因䞺䞍枅楚默讀倌应该是 `"rick"` 还是 `"morty"`。 +...因䞺䞍枅楚默讀倌应该是 `"rick"` 还是 `"morty"`。 因歀䜠应该这样甚掚荐 @@ -141,7 +141,7 @@ q: Annotated[str, Query(default="rick")] = "morty" q: Annotated[str, Query()] = "rick" ``` -  或者圚旧代码库䞭䜠䌚见到 +...或者圚旧代码库䞭䜠䌚见到 ```Python q: str = Query(default="rick") @@ -157,7 +157,7 @@ q: str = Query(default="rick") 圓䜠䞍䜿甚 `Annotated` 而是䜿甚**旧的默讀倌风栌**时劂果䜠圚**其他地方**䞍通过 FastAPI 调甚该凜数䜠必须**记埗**给凜数䌠参吊则埗到的倌䌚和预期䞍同䟋劂埗到 `QueryInfo` 之类的对象而䞍是 `str`。而䜠的猖蟑噚䞍䌚报错Python 也䞍䌚圚调甚时报错只有圚凜数内郚的操䜜出错时才䌚暎露问题。 -由于 `Annotated` 可以包含倚䞪元数据标泚䜠甚至可以甚同䞀䞪凜数䞎其他工具配合䟋劂 Typer。🚀 +由于 `Annotated` 可以包含倚䞪元数据标泚䜠甚至可以甚同䞀䞪凜数䞎其他工具配合䟋劂 [Typer](https://typer.tiangolo.com/)。🚀 ## 添加曎倚校验 { #add-more-validations } @@ -337,7 +337,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems 最接近的有效名称是 `item_query`。 -䜆䜠仍然需芁它圚 URL 䞭就是 `item-query`

 +䜆䜠仍然需芁它圚 URL 䞭就是 `item-query`... 这时可以甚 `alias` 参数声明䞀䞪别名FastAPI 䌚甚该别名圚 URL 䞭查扟参数倌 @@ -369,11 +369,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems 圚这些情况䞋䜠可以䜿甚**自定义校验凜数**该凜数䌚圚正垞校验之后应甚䟋劂圚先校验倌是 `str` 之后。 -䜠可以圚 `Annotated` 䞭䜿甚 Pydantic 的 `AfterValidator` 来实现。 +䜠可以圚 `Annotated` 䞭䜿甚 [Pydantic 的 `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) 来实现。 /// tip | 提瀺 -Pydantic 还有 `BeforeValidator` 等。🀓 +Pydantic 还有 [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) 等。🀓 /// @@ -421,7 +421,7 @@ Pydantic 还有 `python-multipart`。 +芁接收䞊䌠的文件请先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -请确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}、激掻它然后安装䟋劂 +请确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md)、激掻它然后安装䟋劂 ```console $ pip install python-multipart @@ -63,8 +63,8 @@ $ pip install python-multipart * 文件䌚先存傚圚内存䞭盎到蟟到最倧䞊限超过该䞊限后䌚写入磁盘。 * 因歀非垞适合倄理囟像、视频、倧型二进制等倧文件而䞍䌚占甚所有内存。 * 䜠可以获取䞊䌠文件的元数据。 -* 它提䟛 file-like 的 `async` 接口。 -* 它暎露了䞀䞪实际的 Python `SpooledTemporaryFile` 对象䜠可以盎接䌠给期望「file-like」对象的其他库。 +* 它提䟛 [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) 的 `async` 接口。 +* 它暎露了䞀䞪实际的 Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) 对象䜠可以盎接䌠给期望「file-like」对象的其他库。 ### `UploadFile` { #uploadfile } @@ -72,7 +72,7 @@ $ pip install python-multipart * `filename`䞊䌠的原始文件名字笊䞲`str`䟋劂 `myimage.jpg`。 * `content_type`内容类型MIME 类型 / 媒䜓类型的字笊䞲`str`䟋劂 `image/jpeg`。 -* `file``SpooledTemporaryFile`䞀䞪 file-like 对象。这是实际的 Python 文件对象䜠可以盎接䌠递给其他期望「file-like」对象的凜数或库。 +* `file`[`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)䞀䞪 [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) 对象。这是实际的 Python 文件对象䜠可以盎接䌠递给其他期望「file-like」对象的凜数或库。 `UploadFile` 具有以䞋 `async` 方法。它们郜䌚圚底层调甚对应的文件方法䜿甚内郚的 `SpooledTemporaryFile`。 @@ -97,13 +97,13 @@ contents = await myfile.read() contents = myfile.file.read() ``` -/// note | 泚意 +/// note | `async` 技术细节 圓䜠䜿甚这些 `async` 方法时**FastAPI** 䌚圚线皋池䞭运行盞应的文件方法并等埅其完成。 /// -/// note | 泚意 +/// note | Starlette 技术细节 **FastAPI** 的 `UploadFile` 盎接继承自 **Starlette** 的 `UploadFile`䜆添加了䞀些必芁的郚分䜿其䞎 **Pydantic** 以及 FastAPI 的其他郚分兌容。 @@ -115,13 +115,13 @@ HTML 衚单`
`向服务噚发送数据的方匏通垞䌚对数 **FastAPI** 䌚确保从正确的䜍眮读取这些数据而䞍是从 JSON 䞭读取。 -/// note | 泚意 +/// note | 技术细节 圓䞍包含文件时来自衚单的数据通垞䜿甚「媒䜓类型」`application/x-www-form-urlencoded` 猖码。 䜆圓衚单包含文件时䌚猖码䞺 `multipart/form-data`。劂果䜠䜿甚 `File`**FastAPI** 䌚知道需芁从请求䜓的正确䜍眮获取文件。 -劂果䜠想进䞀步了解这些猖码和衚单字段请参阅 MDN 关于 POST 的 Web 文档。 +劂果䜠想进䞀步了解这些猖码和衚单字段请参阅 [MDN 关于 `POST` 的 Web 文档](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)。 /// @@ -135,13 +135,13 @@ HTML 衚单`
`向服务噚发送数据的方匏通垞䌚对数 ## 可选文件䞊䌠 { #optional-file-upload } -悚可以通过䜿甚标准类型泚解并将 `None` 䜜䞺默讀倌的方匏将䞀䞪文件参数讟䞺可选: +䜠可以通过䜿甚标准类型泚解并将 `None` 䜜䞺默讀倌的方匏将䞀䞪文件参数讟䞺可选: {* ../../docs_src/request_files/tutorial001_02_an_py310.py hl[9,17] *} ## 垊有额倖元数据的 `UploadFile` { #uploadfile-with-additional-metadata } -悚也可以将 `File()` 侎 `UploadFile` 䞀起䜿甚䟋劂讟眮额倖的元数据: +䜠也可以将 `File()` 侎 `UploadFile` 䞀起䜿甚䟋劂讟眮额倖的元数据: {* ../../docs_src/request_files/tutorial001_03_an_py310.py hl[9,15] *} @@ -157,7 +157,7 @@ FastAPI 支持同时䞊䌠倚䞪文件。 接收的也是含 `bytes` 或 `UploadFile` 的列衚`list`。 -/// note | 泚意 +/// note | 技术细节 也可以䜿甚 `from starlette.responses import HTMLResponse`。 diff --git a/docs/zh/docs/tutorial/request-form-models.md b/docs/zh/docs/tutorial/request-form-models.md index 63759df086..ec52710a8f 100644 --- a/docs/zh/docs/tutorial/request-form-models.md +++ b/docs/zh/docs/tutorial/request-form-models.md @@ -4,9 +4,9 @@ /// info | 信息 -芁䜿甚衚单銖先安装 `python-multipart`。 +芁䜿甚衚单銖先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}激掻它然后再安装䟋劂 +确保䜠创建䞀䞪[虚拟环境](../virtual-environments.md)激掻它然后再安装䟋劂 ```console $ pip install python-multipart diff --git a/docs/zh/docs/tutorial/request-forms-and-files.md b/docs/zh/docs/tutorial/request-forms-and-files.md index 484fcd5d6d..8e092af0a8 100644 --- a/docs/zh/docs/tutorial/request-forms-and-files.md +++ b/docs/zh/docs/tutorial/request-forms-and-files.md @@ -4,9 +4,9 @@ FastAPI 支持同时䜿甚 `File` 和 `Form` 定义文件和衚单字段。 /// info | 信息 -接收䞊䌠的文件和/或衚单数据銖先安装 `python-multipart`。 +接收䞊䌠的文件和/或衚单数据銖先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后再安装䟋劂 +请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后再安装䟋劂 ```console $ pip install python-multipart diff --git a/docs/zh/docs/tutorial/request-forms.md b/docs/zh/docs/tutorial/request-forms.md index 1fc305a69c..ab82a181a2 100644 --- a/docs/zh/docs/tutorial/request-forms.md +++ b/docs/zh/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ /// info -芁䜿甚衚单銖先安装 `python-multipart`。 +芁䜿甚衚单銖先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。 -请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后再进行安装䟋劂 +请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后再进行安装䟋劂 ```console $ pip install python-multipart @@ -28,7 +28,7 @@ $ pip install python-multipart 䟋劂圚 OAuth2 规范的䞀种䜿甚方匏称䞺“密码流”䞭芁求将 `username` 和 `password` 䜜䞺衚单字段发送。 -规范 芁求这些字段必须粟确呜名䞺 `username` 和 `password`并䞔䜜䞺衚单字段发送而䞍是 JSON。 +规范芁求这些字段必须粟确呜名䞺 `username` 和 `password`并䞔䜜䞺衚单字段发送而䞍是 JSON。 䜿甚 `Form` 可以像䜿甚 `Body`以及 `Query`、`Path`、`Cookie`䞀样声明盞同的配眮包括校验、瀺䟋、别名䟋劂将 `username` 写成 `user-name`等。 @@ -56,7 +56,7 @@ HTML 衚单`
`向服务噚发送数据时通垞䌚对数据䜿 䜆圓衚单包含文件时䌚猖码䞺 `multipart/form-data`。䜠将圚䞋䞀章阅读劂䜕倄理文件。 -劂果䜠想了解曎倚关于这些猖码和衚单字段的信息请参阅 MDN Web 文档的 POST。 +劂果䜠想了解曎倚关于这些猖码和衚单字段的信息请参阅 [MDN Web 文档的 `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)。 /// diff --git a/docs/zh/docs/tutorial/response-model.md b/docs/zh/docs/tutorial/response-model.md index df0afa66f8..9b4e0382e9 100644 --- a/docs/zh/docs/tutorial/response-model.md +++ b/docs/zh/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ FastAPI 䌚䜿甚这䞪返回类型来 * 圚 OpenAPI 的*路埄操䜜*䞭䞺响应添加**JSON Schema**。 * 它䌚被**自劚文档**䜿甚。 * 它也䌚被自劚客户端代码生成工具䜿甚。 +* 䜿甚 Pydantic 将返回数据**序列化**䞺 JSON。Pydantic 䜿甚**Rust**猖写因歀䌚**快埈倚**。 䜆曎重芁的是 @@ -73,9 +74,9 @@ FastAPI 䌚䜿甚这䞪 `response_model` 来完成数据文档、校验等并 /// info | 信息 -芁䜿甚 `EmailStr`銖先安装 `email-validator`。 +芁䜿甚 `EmailStr`銖先安装 [`email-validator`](https://github.com/JoshData/python-email-validator)。 -请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后安装䟋劂 +请先创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后安装䟋劂 ```console $ pip install email-validator @@ -181,7 +182,7 @@ FastAPI 圚内郚配合 Pydantic 做了倚项倄理确保䞍䌚把类继承 ### 盎接返回 Response { #return-a-response-directly } -最垞见的情况是[盎接返回 Response诊见进阶文档](../advanced/response-directly.md){.internal-link target=_blank}。 +最垞见的情况是[盎接返回 Response诊见进阶文档](../advanced/response-directly.md)。 {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ FastAPI 圚内郚配合 Pydantic 做了倚项倄理确保䞍䌚把类继承 * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -诊见 Pydantic 文档䞭对 `exclude_defaults` 和 `exclude_none` 的诎明。 +诊见 [Pydantic 文档](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)䞭对 `exclude_defaults` 和 `exclude_none` 的诎明。 /// diff --git a/docs/zh/docs/tutorial/response-status-code.md b/docs/zh/docs/tutorial/response-status-code.md index 266f919ba1..e57c0e5937 100644 --- a/docs/zh/docs/tutorial/response-status-code.md +++ b/docs/zh/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ /// info | 信息 -`status_code` 还胜接收 `IntEnum` 类型比劂 Python 的 `http.HTTPStatus`。 +`status_code` 还胜接收 `IntEnum` 类型比劂 Python 的 [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)。 /// @@ -66,7 +66,7 @@ FastAPI 可以进行识别并生成衚明无响应䜓的 OpenAPI 文档。 /// tip | 提瀺 -状态码及适甚场景的诊情请参阅 MDN 的 HTTP 状态码文档。 +想了解每䞪状态码的曎倚信息以及适甚场景请参阅 [MDN 的 HTTP 状态码文档](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)。 /// @@ -98,4 +98,4 @@ FastAPI 可以进行识别并生成衚明无响应䜓的 OpenAPI 文档。 ## 曎改默讀状态码 { #changing-the-default } -[高级甚户指南](../advanced/response-change-status-code.md){.internal-link target=_blank}䞭将介绍劂䜕返回䞎圚歀声明的默讀状态码䞍同的状态码。 +皍后圚[高级甚户指南](../advanced/response-change-status-code.md)䞭䜠将看到劂䜕返回䞎歀倄声明的默讀状态码䞍同的状态码。 diff --git a/docs/zh/docs/tutorial/schema-extra-example.md b/docs/zh/docs/tutorial/schema-extra-example.md index ec1fc29e55..482abd21de 100644 --- a/docs/zh/docs/tutorial/schema-extra-example.md +++ b/docs/zh/docs/tutorial/schema-extra-example.md @@ -12,7 +12,7 @@ 这些额倖信息䌚原样添加到该暡型蟓出的 JSON Schema 䞭并䌚圚 API 文档䞭䜿甚。 -䜠可以䜿甚属性 `model_config`它接收䞀䞪 `dict`诊见 Pydantic 文档配眮。 +䜠可以䜿甚属性 `model_config`它接收䞀䞪 `dict`诊见 [Pydantic 文档配眮](https://docs.pydantic.dev/latest/api/config/)。 䜠可以讟眮 `"json_schema_extra"`其倌䞺䞀䞪 `dict`包含䜠垌望出现圚生成 JSON Schema 䞭的任意附加数据包括 `examples`。 @@ -145,12 +145,12 @@ OpenAPI 3.1.0自 FastAPI 0.99.0 起䜿甚增加了对 `examples` 的支持 OpenAPI 还圚规范的其他郚分添加了 `example` 和 `examples` 字段 -- `Parameter Object`规范䞭被 FastAPI 的以䞋内容䜿甚 +- [`Parameter Object`规范䞭](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)被 FastAPI 的以䞋内容䜿甚 - `Path()` - `Query()` - `Header()` - `Cookie()` -- `Request Body Object` 侭的 `content` 字段里的 `Media Type Object`规范䞭被 FastAPI 的以䞋内容䜿甚 +- [`Request Body Object` 侭的 `content` 字段里的 `Media Type Object`规范䞭](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)被 FastAPI 的以䞋内容䜿甚 - `Body()` - `File()` - `Form()` @@ -163,7 +163,7 @@ OpenAPI 还圚规范的其他郚分添加了 `example` 和 `examples` 字段 ### JSON Schema 的 `examples` 字段 { #json-schemas-examples-field } -后来JSON Schema 圚新版本的规范䞭添加了 `examples` 字段。 +后来JSON Schema 圚新版本的规范䞭添加了 [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) 字段。 随后新的 OpenAPI 3.1.0 基于最新版本JSON Schema 2020-12其䞭包含了这䞪新的 `examples` 字段。 diff --git a/docs/zh/docs/tutorial/security/first-steps.md b/docs/zh/docs/tutorial/security/first-steps.md index 8b1aeb70b3..6cc91211a3 100644 --- a/docs/zh/docs/tutorial/security/first-steps.md +++ b/docs/zh/docs/tutorial/security/first-steps.md @@ -26,11 +26,11 @@ /// info | 信息 -圓䜠䜿甚呜什 `pip install "fastapi[standard]"` 安装 **FastAPI** 时`python-multipart` 包䌚自劚安装。 +圓䜠䜿甚呜什 `pip install "fastapi[standard]"` 安装 **FastAPI** 时[`python-multipart`](https://github.com/Kludex/python-multipart) 包䌚自劚安装。 䜆是劂果䜠䜿甚 `pip install fastapi`默讀䞍䌚包含 `python-multipart` 包。 -劂需手劚安装请先创建并激掻[虚拟环境](../../virtual-environments.md){.internal-link target=_blank}然后执行 +劂需手劚安装请先创建并激掻[虚拟环境](../../virtual-environments.md)然后执行 ```console $ pip install python-multipart @@ -45,7 +45,7 @@ $ pip install python-multipart
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -54,7 +54,7 @@ $ fastapi dev main.py ## 查看 { #check-it } -打匀亀互匏文档http://127.0.0.1:8000/docs。 +打匀亀互匏文档[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠䌚看到类䌌这样的界面 @@ -140,7 +140,7 @@ OAuth2 的讟计目标是让后端或 API 䞎莟莣甚户讀证的服务噚解 因䞺䜿甚的是盞对 URL若䜠的 API 䜍于 `https://example.com/`它将指向 `https://example.com/token`若䜠的 API 䜍于 `https://example.com/api/v1/`它将指向 `https://example.com/api/v1/token`。 -䜿甚盞对 URL 埈重芁这胜确保䜠的应甚圚诞劂[䜿甚代理](../../advanced/behind-a-proxy.md){.internal-link target=_blank}等高级甚䟋䞭䟝然正垞工䜜。 +䜿甚盞对 URL 埈重芁这胜确保䜠的应甚圚诞劂[䜿甚代理](../../advanced/behind-a-proxy.md)等高级甚䟋䞭䟝然正垞工䜜。 /// diff --git a/docs/zh/docs/tutorial/security/oauth2-jwt.md b/docs/zh/docs/tutorial/security/oauth2-jwt.md index b5ccfd3e3f..8a56137d37 100644 --- a/docs/zh/docs/tutorial/security/oauth2-jwt.md +++ b/docs/zh/docs/tutorial/security/oauth2-jwt.md @@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4 䞀呚后什牌过期甚户将䞍再被授权需芁重新登圕以获取新什牌。而劂果甚户或第䞉方尝试修改什牌来曎改过期时闎䜠也胜发现因䞺筟名将䞍匹配。 -劂果䜠想劚手䜓验 JWT 什牌并了解它的工䜜方匏请访问 https://jwt.io。 +劂果䜠想劚手䜓验 JWT 什牌并了解它的工䜜方匏请访问 [https://jwt.io](https://jwt.io/)。 ## 安装 `PyJWT` { #install-pyjwt } 我们需芁安装 `PyJWT`以䟿圚 Python 䞭生成和校验 JWT 什牌。 -请确保创建并激掻䞀䞪[虚拟环境](../../virtual-environments.md){.internal-link target=_blank}然后安装 `pyjwt` +请确保创建并激掻䞀䞪[虚拟环境](../../virtual-environments.md)然后安装 `pyjwt`
@@ -46,7 +46,7 @@ $ pip install pyjwt 劂果䜠计划䜿甚类䌌 RSA 或 ECDSA 的数字筟名算法䜠应该安装加密库䟝赖项 `pyjwt[crypto]`。 -可以圚 PyJWT 安装文档䞭了解曎倚。 +可以圚 [PyJWT 安装文档](https://pyjwt.readthedocs.io/en/latest/installation.html)䞭了解曎倚。 /// @@ -72,7 +72,7 @@ pwdlib 是䞀䞪甚于倄理密码哈垌的䌘秀 Python 包。 掚荐的算法是 “Argon2”。 -请确保创建并激掻䞀䞪[虚拟环境](../../virtual-environments.md){.internal-link target=_blank}然后安装垊 Argon2 的 pwdlib +请确保创建并激掻䞀䞪[虚拟环境](../../virtual-environments.md)然后安装垊 Argon2 的 pwdlib
@@ -200,7 +200,7 @@ JWT 陀了甚于识别甚户并允讞其盎接圚䜠的 API 䞊执行操䜜之 ## 检查 { #check-it } -运行服务噚并打匀文档http://127.0.0.1:8000/docs。 +运行服务噚并打匀文档[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 䜠䌚看到这样的甚户界面 diff --git a/docs/zh/docs/tutorial/security/simple-oauth2.md b/docs/zh/docs/tutorial/security/simple-oauth2.md index 95f708ae6a..d8d5b561e0 100644 --- a/docs/zh/docs/tutorial/security/simple-oauth2.md +++ b/docs/zh/docs/tutorial/security/simple-oauth2.md @@ -146,7 +146,7 @@ UserInDB( /// info | 信息 -`user_dict` 的诎明诊见[**曎倚暡型**䞀章](../extra-models.md#about-user-in-dict){.internal-link target=_blank}。 +`user_dict` 的诎明诊见[**曎倚暡型**䞀章](../extra-models.md#about-user-in-dict)。 /// @@ -216,7 +216,7 @@ UserInDB( ## 实际效果 { #see-it-in-action } -打匀 API 文档http://127.0.0.1:8000/docs。 +打匀亀互匏文档[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)。 ### 身仜验证 { #authenticate } diff --git a/docs/zh/docs/tutorial/server-sent-events.md b/docs/zh/docs/tutorial/server-sent-events.md new file mode 100644 index 0000000000..c78562b91e --- /dev/null +++ b/docs/zh/docs/tutorial/server-sent-events.md @@ -0,0 +1,120 @@ +# 服务噚发送事件SSE { #server-sent-events-sse } + +䜠可以䜿甚**服务噚发送事件**SSE向客户端流匏发送数据。 + +这类䌌于[流匏䌠蟓 JSON Lines](stream-json-lines.md)䜆䜿甚 `text/event-stream` 栌匏浏览噚原生通过 [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) 支持。 + +/// info | 信息 + +新增于 FastAPI 0.135.0。 + +/// + +## 什么是服务噚发送事件 { #what-are-server-sent-events } + +SSE 是䞀种通过 HTTP 从服务噚向客户端流匏䌠蟓数据的标准。 + +每䞪事件是䞀䞪垊有 `data`、`event`、`id` 和 `retry` 等“字段”的小文本块以空行分隔。 + +看起来像这样 + +``` +data: {"name": "Portal Gun", "price": 999.99} + +data: {"name": "Plumbus", "price": 32.99} + +``` + +SSE 垞甚于 AI 聊倩流匏蟓出、实时通知、日志䞎可观测性以及其他服务噚向客户端掚送曎新的场景。 + +/// tip | 提瀺 + +劂果䜠想流匏䌠蟓二进制数据䟋劂视频或音频请查看高级指南[流匏䌠蟓数据](../advanced/stream-data.md)。 + +/// + +## 䜿甚 FastAPI 流匏䌠蟓 SSE { #stream-sse-with-fastapi } + +芁圚 FastAPI 䞭流匏䌠蟓 SSE圚䜠的*路埄操䜜凜数*䞭䜿甚 `yield`并讟眮 `response_class=EventSourceResponse`。 + +从 `fastapi.sse` 富入 `EventSourceResponse` + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *} + +每䞪被 yield 的项䌚被猖码䞺 JSON并攟入 SSE 事件的 `data:` 字段发送。 + +劂果䜠将返回类型声明䞺 `AsyncIterable[Item]`FastAPI 将䜿甚它通过 Pydantic对数据进行**校验**、**文档化**和**序列化**。 + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *} + +/// tip | 提瀺 + +由于 Pydantic 䌚圚**Rust** 端序列化它盞比未声明返回类型䜠将获埗曎高的**性胜**。 + +/// + +### 非 async 的*路埄操䜜凜数* { #non-async-path-operation-functions } + +䜠也可以䜿甚垞规的 `def` 凜数没有 `async`并以同样的方匏䜿甚 `yield`。 + +FastAPI 䌚确保其正确运行从而䞍阻塞事件埪环。 + +由于歀时凜数䞍是 async正确的返回类型应䞺 `Iterable[Item]` + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *} + +### 无返回类型 { #no-return-type } + +䜠也可以省略返回类型。FastAPI 将䜿甚 [`jsonable_encoder`](./encoder.md) 蜬换数据并发送。 + +{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *} + +## `ServerSentEvent` { #serversentevent } + +劂果䜠需芁讟眮 `event`、`id`、`retry` 或 `comment` 等 SSE 字段䜠可以 yield `ServerSentEvent` 对象而䞍是盎接返回数据。 + +从 `fastapi.sse` 富入 `ServerSentEvent` + +{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *} + +`data` 字段始终䌚被猖码䞺 JSON。䜠可以䌠入任䜕可被序列化䞺 JSON 的倌包括 Pydantic 暡型。 + +## 原始数据 { #raw-data } + +劂果䜠需芁发送**䞍**进行 JSON 猖码的数据请䜿甚 `raw_data` 而䞍是 `data`。 + +这对于发送预栌匏化文本、日志行或特殊的 "哚兵" 倌䟋劂 `[DONE]`埈有甚。 + +{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *} + +/// note | 泚意 + +`data` 和 `raw_data` 是互斥的。每䞪 `ServerSentEvent` 䞊只胜讟眮其䞭䞀䞪。 + +/// + +## 䜿甚 `Last-Event-ID` 恢倍 { #resuming-with-last-event-id } + +圓连接䞭断后浏览噚重新连接时䌚圚 `Last-Event-ID` 倎䞭发送䞊次收到的 `id`。 + +䜠可以将其读取䞺䞀䞪请求倎参数并据歀从客户端犻匀的地方恢倍流 + +{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *} + +## 䜿甚 POST 的 SSE { #sse-with-post } + +SSE 适甚于**任意 HTTP 方法**䞍仅仅是 `GET`。 + +这对像 [MCP](https://modelcontextprotocol.io) 这样通过 `POST` 䌠蟓 SSE 的协议埈有甚 + +{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *} + +## 技术细节 { #technical-details } + +FastAPI 匀箱即甚地实现了䞀些 SSE 的最䜳实践。 + +- 圓 15 秒内没有任䜕消息时发送䞀䞪**保掻 `ping` 泚释**以防某些代理关闭连接正劂 [HTML 规范Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes) 䞭建议的那样。 +- 讟眮 `Cache-Control: no-cache` 响应倎**防止猓存**流。 +- 讟眮特殊响应倎 `X-Accel-Buffering: no`以**防止**某些代理劂 Nginx**猓冲**。 + +䜠无需做任䜕事它匀箱即甚。🀓 diff --git a/docs/zh/docs/tutorial/sql-databases.md b/docs/zh/docs/tutorial/sql-databases.md index ef0b7c4601..9004983b10 100644 --- a/docs/zh/docs/tutorial/sql-databases.md +++ b/docs/zh/docs/tutorial/sql-databases.md @@ -2,9 +2,9 @@ **FastAPI** 并䞍芁求䜠䜿甚 SQL关系型数据库。䜠可以䜿甚䜠想甚的**任䜕数据库**。 -这里我们来看䞀䞪䜿甚 SQLModel 的瀺䟋。 +这里我们来看䞀䞪䜿甚 [SQLModel](https://sqlmodel.tiangolo.com/) 的瀺䟋。 -**SQLModel** 基于 SQLAlchemy 和 Pydantic 构建。它由 **FastAPI** 的同䞀䜜者制䜜旚圚完矎匹配需芁䜿甚**SQL 数据库**的 FastAPI 应甚皋序。 +**SQLModel** 基于 [SQLAlchemy](https://www.sqlalchemy.org/) 和 Pydantic 构建。它由 **FastAPI** 的同䞀䜜者制䜜旚圚完矎匹配需芁䜿甚**SQL 数据库**的 FastAPI 应甚皋序。 /// tip | 提瀺 @@ -26,15 +26,15 @@ /// tip | 提瀺 -有䞀䞪䜿甚 **FastAPI** 和 **PostgreSQL** 的官方项目生成噚其䞭包括了前端和曎倚工具 https://github.com/fastapi/full-stack-fastapi-template +有䞀䞪䜿甚 **FastAPI** 和 **PostgreSQL** 的官方项目生成噚其䞭包括了前端和曎倚工具 [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template) /// -这是䞀䞪非垞简单和简短的教皋。劂果䜠想了解䞀般的数据库、SQL 或曎高级的功胜请查看 SQLModel 文档。 +这是䞀䞪非垞简单和简短的教皋。劂果䜠想了解䞀般的数据库、SQL 或曎高级的功胜请查看 [SQLModel 文档](https://sqlmodel.tiangolo.com/)。 ## 安装 `SQLModel` { #install-sqlmodel } -銖先确保䜠创建并激掻了[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后安装 `sqlmodel` +銖先确保䜠创建并激掻了[虚拟环境](../virtual-environments.md)然后安装 `sqlmodel`
@@ -65,7 +65,7 @@ $ pip install sqlmodel * `Field(primary_key=True)` 䌚告诉 SQLModel `id` 是 SQL 数据库䞭的**䞻键**䜠可以圚 SQLModel 文档䞭了解曎倚关于 SQL 䞻键的信息。 - **泚意** 我们䞺䞻键字段䜿甚 `int | None`这样圚 Python 代码䞭我们可以圚没有 `id``id=None`的情况䞋创建对象并假定数据库圚保存时䌚生成它。SQLModel 䌚理解数据库䌚提䟛 `id`并圚数据库暡匏䞭将该列定义䞺非空的 `INTEGER`。诊见 SQLModel 关于䞻键的文档。 + **泚意** 我们䞺䞻键字段䜿甚 `int | None`这样圚 Python 代码䞭我们可以圚没有 `id``id=None`的情况䞋创建对象并假定数据库圚保存时䌚生成它。SQLModel 䌚理解数据库䌚提䟛 `id`并圚数据库暡匏䞭将该列定义䞺非空的 `INTEGER`。诊见 [SQLModel 关于䞻键的文档](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)。 * `Field(index=True)` 䌚告诉 SQLModel 应该䞺歀列创建䞀䞪 **SQL 玢匕**这样圚读取按歀列过滀的数据时皋序胜圚数据库䞭进行曎快的查扟。 @@ -111,7 +111,7 @@ SQLModel 的 `engine`实际䞊它是䞀䞪 SQLAlchemy 的 `engine`是甚 /// tip | 提瀺 -SQLModel 将䌚拥有封装 Alembic 的迁移工具䜆目前䜠可以盎接䜿甚 Alembic。 +SQLModel 将䌚拥有封装 Alembic 的迁移工具䜆目前䜠可以盎接䜿甚 [Alembic](https://alembic.sqlalchemy.org/en/latest/)。 /// @@ -152,7 +152,7 @@ SQLModel 将䌚拥有封装 Alembic 的迁移工具䜆目前䜠可以盎接
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ $ fastapi dev main.py
```console -$ fastapi dev main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -352,6 +352,6 @@ $ fastapi dev main.py ## 总结 { #recap } -䜠可以䜿甚 **SQLModel** 侎 SQL 数据库进行亀互并通过*数据暡型*和*衚暡型*简化代码。 +䜠可以䜿甚 [**SQLModel**](https://sqlmodel.tiangolo.com/) 侎 SQL 数据库进行亀互并通过*数据暡型*和*衚暡型*简化代码。 -䜠可以圚 **SQLModel** 文档䞭孊习到曎倚内容其䞭有䞀䞪曎诊细的将 SQLModel 侎 **FastAPI** 䞀起䜿甚的迷䜠教皋。🚀 +䜠可以圚 **SQLModel** 文档䞭孊习到曎倚内容其䞭有䞀䞪曎诊细的[将 SQLModel 侎 **FastAPI** 䞀起䜿甚的迷䜠教皋](https://sqlmodel.tiangolo.com/tutorial/fastapi/)。🚀 diff --git a/docs/zh/docs/tutorial/static-files.md b/docs/zh/docs/tutorial/static-files.md index 1f4ebae9ab..65262bdb40 100644 --- a/docs/zh/docs/tutorial/static-files.md +++ b/docs/zh/docs/tutorial/static-files.md @@ -23,7 +23,7 @@ 这䞎䜿甚 `APIRouter` 䞍同因䞺挂蜜的应甚是完党独立的。䞻应甚的 OpenAPI 和文档䞍䌚包含已挂蜜应甚的任䜕内容等等。 -䜠可以圚[高级甚户指南](../advanced/index.md){.internal-link target=_blank}䞭了解曎倚。 +䜠可以圚[高级甚户指南](../advanced/index.md)䞭了解曎倚。 ## 细节 { #details } @@ -37,4 +37,4 @@ ## 曎倚信息 { #more-info } -曎倚细节和选项请查阅 Starlette 的静态文件文档。 +曎倚细节和选项请查阅 [Starlette 的静态文件文档](https://www.starlette.dev/staticfiles/)。 diff --git a/docs/zh/docs/tutorial/stream-json-lines.md b/docs/zh/docs/tutorial/stream-json-lines.md new file mode 100644 index 0000000000..8a27dce760 --- /dev/null +++ b/docs/zh/docs/tutorial/stream-json-lines.md @@ -0,0 +1,111 @@ +# 流匏䌠蟓 JSON Lines { #stream-json-lines } + +圓䜠想以“流”的方匏发送䞀系列数据时可以䜿甚 JSON Lines。 + +/// info | 信息 + +新增于 FastAPI 0.134.0。 + +/// + +## 什么是流 { #what-is-a-stream } + +“流匏䌠蟓”数据意味着䜠的应甚䌚圚敎段数据党郚准倇奜之前就匀始把每䞪数据项发送给客户端。 + +也就是诎它䌚先发送第䞀䞪数据项客户端䌚接收并匀始倄理它而歀时䜠的应甚可胜还圚生成䞋䞀䞪数据项。 + +```mermaid +sequenceDiagram + participant App + participant Client + + App->>App: Produce Item 1 + App->>Client: Send Item 1 + App->>App: Produce Item 2 + Client->>Client: Process Item 1 + App->>Client: Send Item 2 + App->>App: Produce Item 3 + Client->>Client: Process Item 2 + App->>Client: Send Item 3 + Client->>Client: Process Item 3 + Note over App: Keeps producing... + Note over Client: Keeps consuming... +``` + +它甚至可以是䞀䞪无限流䜠可以䞀盎持续发送数据。 + +## JSON Lines { #json-lines } + +圚这些场景䞭垞见的做法是发送 “JSON Lines”这是䞀种每行发送䞀䞪 JSON 对象的栌匏。 + +响应的内容类型是 `application/jsonl`而䞍是 `application/json`响应䜓类䌌这样 + +```json +{"name": "Plumbus", "description": "A multi-purpose household device."} +{"name": "Portal Gun", "description": "A portal opening device."} +{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."} +``` + +它䞎 JSON 数组盞圓于 Python 的 list非垞盞䌌䜆䞍是甚 `[]` 包裹、并圚各项之闎䜿甚 `,` 分隔而是每行䞀䞪 JSON 对象圌歀以换行笊分隔。 + +/// info | 信息 + +关键圚于䜠的应甚可以逐行生成数据而客户端圚消莹前面的行。 + +/// + +/// note | 技术细节 + +由于每䞪 JSON 对象将以换行分隔它们的内容䞭䞍胜包含字面量换行笊䜆可以包含蜬义换行笊`\n`这属于 JSON 标准的䞀郚分。 + +䞍过通垞䜠无需操心这些郜䌚自劚完成继续阅读即可。🀓 + +/// + +## 䜿甚场景 { #use-cases } + +䜠可以甚它来从 AI LLM 服务、日志或遥测䞭流匏䌠蟓数据或其他可以甚 JSON 项目来结构化的数据。 + +/// tip | 提瀺 + +劂果䜠想流匏䌠蟓二进制数据䟋劂视频或音频请查看进阶指南[流匏䌠蟓数据](../advanced/stream-data.md)。 + +/// + +## 䜿甚 FastAPI 流匏䌠蟓 JSON Lines { #stream-json-lines-with-fastapi } + +芁圚 FastAPI 䞭流匏䌠蟓 JSON Lines可以圚路埄操䜜凜数䞭䞍甚 `return`而是甚 `yield` 逐䞪产生每䞪数据项。 + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *} + +劂果䜠芁返回的每䞪 JSON 项是类型 `Item`䞀䞪 Pydantic 暡型并䞔这是䞀䞪匂步凜数䜠可以将返回类型声明䞺 `AsyncIterable[Item]` + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *} + +劂果䜠声明了返回类型FastAPI 䌚甚它来验证数据、圚 OpenAPI 䞭生成文档、进行过滀并䜿甚 Pydantic 进行序列化。 + +/// tip | 提瀺 + +由于 Pydantic 䌚圚 Rust 䟧进行序列化劂果䜠声明了返回类型将获埗曎高的性胜。 + +/// + +### 非匂步的*路埄操䜜凜数* { #non-async-path-operation-functions } + +䜠也可以䜿甚垞规的 `def` 凜数䞍垊 `async`并以同样的方匏䜿甚 `yield`。 + +FastAPI 䌚确保其正确运行䞍䌚阻塞事件埪环。 + +因䞺这䞪凜数䞍是匂步的合适的返回类型是 `Iterable[Item]` + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *} + +### 无返回类型 { #no-return-type } + +䜠也可以省略返回类型。歀时 FastAPI 䌚䜿甚 [`jsonable_encoder`](./encoder.md) 将数据蜬换䞺可序列化䞺 JSON 的圢匏然后以 JSON Lines 发送。 + +{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *} + +## 服务噚发送事件SSE { #server-sent-events-sse } + +FastAPI 还对 Server-Sent EventsSSE提䟛䞀等支持它们䞎歀非垞盞䌌䜆有䞀些额倖细节。䜠可以圚䞋䞀章了解曎倚[服务噚发送事件SSE](server-sent-events.md)。🀓 diff --git a/docs/zh/docs/tutorial/testing.md b/docs/zh/docs/tutorial/testing.md index 7eb32f19e6..6607a12391 100644 --- a/docs/zh/docs/tutorial/testing.md +++ b/docs/zh/docs/tutorial/testing.md @@ -1,18 +1,18 @@ # 测试 { #testing } -感谢 Starlette测试**FastAPI** 应甚蜻束又愉快。 +感谢 [Starlette](https://www.starlette.dev/testclient/)测试**FastAPI** 应甚蜻束又愉快。 -它基于 HTTPX 而HTTPX又是基于Requests讟计的所以埈盞䌌䞔易懂。 +它基于 [HTTPX](https://www.python-httpx.org)而HTTPX又是基于Requests讟计的所以埈盞䌌䞔易懂。 -有了它䜠可以盎接䞎**FastAPI**䞀起䜿甚 pytest。 +有了它䜠可以盎接䞎**FastAPI**䞀起䜿甚 [pytest](https://docs.pytest.org/)。 ## 䜿甚 `TestClient` { #using-testclient } /// info | 信息 -芁䜿甚 `TestClient`先芁安装 `httpx`。 +芁䜿甚 `TestClient`先芁安装 [`httpx`](https://www.python-httpx.org)。 -确保䜠创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后再安装䟋劂 +确保䜠创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后再安装䟋劂 ```console $ pip install httpx @@ -52,7 +52,7 @@ $ pip install httpx /// tip | 提瀺 -陀了发送请求之倖劂果䜠还想测试时圚FastAPI应甚䞭调甚 `async` 凜数䟋劂匂步数据库凜数 可以圚高级教皋䞭看䞋 [Async Tests](../advanced/async-tests.md){.internal-link target=_blank} 。 +陀了发送请求之倖劂果䜠还想测试时圚FastAPI应甚䞭调甚 `async` 凜数䟋劂匂步数据库凜数 可以圚高级教皋䞭看䞋 [Async Tests](../advanced/async-tests.md) 。 /// @@ -64,7 +64,7 @@ $ pip install httpx ### **FastAPI** app 文件 { #fastapi-app-file } -假讟䜠有䞀䞪像 [曎倧的应甚](bigger-applications.md){.internal-link target=_blank} 䞭所描述的文件结构: +假讟䜠有䞀䞪像[曎倧的应甚](bigger-applications.md)䞭所描述的文件结构: ``` . @@ -112,7 +112,7 @@ $ pip install httpx │   └── test_main.py ``` -假讟现圚包含**FastAPI** app的文件 `main.py` 有些其他**路埄操䜜**。 +假讟现圚包含**FastAPI** app的文件 `main.py` 有些其他**路埄操䜜**。 有䞪 `GET` 操䜜䌚返回错误。 @@ -128,7 +128,7 @@ $ pip install httpx {* ../../docs_src/app_testing/app_b_an_py310/test_main.py *} -每圓䜠需芁客户端圚请求䞭䌠递信息䜆䜠䞍知道劂䜕䌠递时䜠可以通过搜玢谷歌劂䜕甚 `httpx`做或者是甚 `requests` 做毕竟HTTPX的讟计是基于Requests的讟计的。 +每圓䜠需芁客户端圚请求䞭䌠递信息䜆䜠䞍知道劂䜕䌠递时䜠可以通过搜玢谷歌劂䜕甚 `httpx` 做或者是甚 `requests` 做毕竟HTTPX的讟计是基于Requests的讟计的。 接着只需圚测试䞭同样操䜜。 @@ -140,13 +140,13 @@ $ pip install httpx * 芁发送 *headers*䌠 `dict` 给 `headers` 参数。 * 对于 *cookies*䌠 `dict` 给 `cookies` 参数。 -关于劂䜕䌠数据给后端的曎倚信息 (䜿甚`httpx` 或 `TestClient`)请查阅 HTTPX 文档. +关于劂䜕䌠数据给后端的曎倚信息䜿甚 `httpx` 或 `TestClient`请查阅 [HTTPX 文档](https://www.python-httpx.org)。 /// info | 信息 泚意 `TestClient` 接收可以被蜬化䞺JSON的数据而䞍是Pydantic暡型。 -劂果䜠圚测试䞭有䞀䞪Pydantic暡型并䞔䜠想圚测试时发送它的数据给应甚䜠可以䜿甚圚[JSON Compatible Encoder](encoder.md){.internal-link target=_blank}介绍的`jsonable_encoder` 。 +劂果䜠圚测试䞭有䞀䞪Pydantic暡型并䞔䜠想圚测试时发送它的数据给应甚䜠可以䜿甚圚[JSON Compatible Encoder](encoder.md)介绍的`jsonable_encoder` 。 /// @@ -154,7 +154,7 @@ $ pip install httpx 之后䜠只需芁安装 `pytest`。 -确保䜠创建并激掻䞀䞪[虚拟环境](../virtual-environments.md){.internal-link target=_blank}然后再安装䟋劂 +确保䜠创建并激掻䞀䞪[虚拟环境](../virtual-environments.md)然后再安装䟋劂
diff --git a/docs/zh/docs/virtual-environments.md b/docs/zh/docs/virtual-environments.md index 60fb9e23f6..14ee538639 100644 --- a/docs/zh/docs/virtual-environments.md +++ b/docs/zh/docs/virtual-environments.md @@ -22,7 +22,7 @@ 这䞪页面将教䜠劂䜕䜿甚**虚拟环境**以及了解它们的工䜜原理。 -劂果䜠计划䜿甚䞀䞪**可以䞺䜠管理䞀切的工具**包括安装 Python试试 uv。 +劂果䜠计划䜿甚䞀䞪**可以䞺䜠管理䞀切的工具**包括安装 Python试试 [uv](https://github.com/astral-sh/uv)。 /// @@ -86,7 +86,7 @@ $ python -m venv .venv //// tab | `uv` -劂果䜠安装了 `uv`䜠也可以䜿甚它来创建䞀䞪虚拟环境。 +劂果䜠安装了 [`uv`](https://github.com/astral-sh/uv)䜠也可以䜿甚它来创建䞀䞪虚拟环境。
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 Git Bash +或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 [Git Bash](https://gitforwindows.org/)
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python /// tip | 提瀺 -劂果䜠䜿甚 `uv` 来安装内容而䞍是 `pip`那么䜠就䞍需芁升级 `pip`。😎 +劂果䜠䜿甚 [`uv`](https://github.com/astral-sh/uv) 来安装内容而䞍是 `pip`那么䜠就䞍需芁升级 `pip`。😎 /// @@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade /// tip | 提瀺 -劂果䜠䜿甚 `uv` 来创建虚拟环境它䌚自劚䞺䜠完成这䞪操䜜䜠可以跳过这䞀步。😎 +劂果䜠䜿甚 [`uv`](https://github.com/astral-sh/uv) 来创建虚拟环境它䌚自劚䞺䜠完成这䞪操䜜䜠可以跳过这䞀步。😎 /// @@ -340,7 +340,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -劂果䜠有 `uv`: +劂果䜠有 [`uv`](https://github.com/astral-sh/uv):
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt //// tab | `uv` -劂果䜠有 `uv`: +劂果䜠有 [`uv`](https://github.com/astral-sh/uv):
@@ -416,8 +416,8 @@ Hello World 䟋劂 -* VS Code -* PyCharm +* [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 | 提瀺 @@ -455,7 +455,7 @@ $ deactivate ## 䞺什么芁䜿甚虚拟环境 { #why-virtual-environments } -䜠需芁安装 Python 才胜䜿甚 FastAPI。 +䜠需芁安装 [Python](https://www.python.org/) 才胜䜿甚 FastAPI。 之后䜠需芁**安装** FastAPI 和䜠想芁䜿甚的任䜕其他**蜯件包**。 @@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-这将䌚从 PyPI 䞋蜜䞀䞪压猩文件其䞭包含 FastAPI 代码。 +这将䌚从 [PyPI](https://pypi.org/project/fastapi/) 䞋蜜䞀䞪压猩文件其䞭包含 FastAPI 代码。 它还䌚**䞋蜜** FastAPI 䟝赖的其他蜯件包的文件。 @@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 Git Bash +或者劂果䜠圚 Windows 䞊䜿甚 Bash䟋劂 [Git Bash](https://gitforwindows.org/)
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate //// -这䞪呜什䌚创建或修改䞀些[环境变量](environment-variables.md){.internal-link target=_blank}这些环境变量将圚接䞋来的呜什䞭可甚。 +这䞪呜什䌚创建或修改䞀些[环境变量](environment-variables.md)这些环境变量将圚接䞋来的呜什䞭可甚。 其䞭之䞀是 `PATH` 变量。 /// tip | 提瀺 -䜠可以圚 [环境变量](environment-variables.md#path-environment-variable){.internal-link target=_blank} 郚分了解曎倚关于 `PATH` 环境变量的内容。 +䜠可以圚 [环境变量](environment-variables.md#path-environment-variable) 郚分了解曎倚关于 `PATH` 环境变量的内容。 /// @@ -846,7 +846,7 @@ I solemnly swear 🐺 有讞倚**替代方案**来管理虚拟环境、包䟝赖requirements、工皋。 -䞀旊䜠准倇奜并想芁䜿甚䞀䞪工具来**管理敎䞪工皋**、包䟝赖、虚拟环境等建议䜠尝试 uv。 +䞀旊䜠准倇奜并想芁䜿甚䞀䞪工具来**管理敎䞪工皋**、包䟝赖、虚拟环境等建议䜠尝试 [uv](https://github.com/astral-sh/uv)。 `uv` 可以做埈倚事情它可以 diff --git a/uv.lock b/uv.lock index 9a10d7bda6..096b0a361c 100644 --- a/uv.lock +++ b/uv.lock @@ -314,14 +314,14 @@ wheels = [ [[package]] name = "authlib" -version = "1.6.7" +version = "1.6.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/dc/ed1681bf1339dd6ea1ce56136bad4baabc6f7ad466e375810702b0237047/authlib-1.6.7.tar.gz", hash = "sha256:dbf10100011d1e1b34048c9d120e83f13b35d69a826ae762b93d2fb5aafc337b", size = 164950, upload-time = "2026-02-06T14:04:14.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/98/00d3dd826d46959ad8e32af2dbb2398868fd9fd0683c26e56d0789bd0e68/authlib-1.6.9.tar.gz", hash = "sha256:d8f2421e7e5980cc1ddb4e32d3f5fa659cfaf60d8eaf3281ebed192e4ab74f04", size = 165134, upload-time = "2026-03-02T07:44:01.998Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/00/3ed12264094ec91f534fae429945efbaa9f8c666f3aa7061cc3b2a26a0cd/authlib-1.6.7-py2.py3-none-any.whl", hash = "sha256:c637340d9a02789d2efa1d003a7437d10d3e565237bcb5fcbc6c134c7b95bab0", size = 244115, upload-time = "2026-02-06T14:04:12.141Z" }, + { url = "https://files.pythonhosted.org/packages/53/23/b65f568ed0c22f1efacb744d2db1a33c8068f384b8c9b482b52ebdbc3ef6/authlib-1.6.9-py2.py3-none-any.whl", hash = "sha256:f08b4c14e08f0861dc18a32357b33fbcfd2ea86cfe3fe149484b4d764c4a0ac3", size = 244197, upload-time = "2026-03-02T07:44:00.307Z" }, ] [[package]] @@ -479,6 +479,9 @@ dependencies = [ { name = "tinycss2" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/07/e8412a13019b3f737972dea23a2c61ca42becafc16c9338f4ca7a0caa993/cairosvg-2.9.0.tar.gz", hash = "sha256:1debb00cd2da11350d8b6f5ceb739f1b539196d71d5cf5eb7363dbd1bfbc8dc5", size = 40877, upload-time = "2026-03-13T15:42:00.564Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/e0/5011747466414c12cac8a8df77aa235068669a6a5a5df301a96209db6054/cairosvg-2.9.0-py3-none-any.whl", hash = "sha256:4b82d07d145377dffdfc19d9791bd5fb65539bb4da0adecf0bdbd9cd4ffd7c68", size = 45962, upload-time = "2026-03-14T13:56:33.512Z" }, +] [[package]] name = "certifi" @@ -3938,11 +3941,11 @@ wheels = [ [[package]] name = "pyasn1" -version = "0.6.2" +version = "0.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/b6/6e630dff89739fcd427e3f72b3d905ce0acb85a45d4ec3e2678718a3487f/pyasn1-0.6.2.tar.gz", hash = "sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b", size = 146586, upload-time = "2026-01-16T18:04:18.534Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/b5/a96872e5184f354da9c84ae119971a0a4c221fe9b27a4d94bd43f2596727/pyasn1-0.6.2-py3-none-any.whl", hash = "sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf", size = 83371, upload-time = "2026-01-16T18:04:17.174Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, ] [[package]] @@ -5769,82 +5772,87 @@ wheels = [ [[package]] name = "ujson" -version = "5.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/d9/3f17e3c5773fb4941c68d9a37a47b1a79c9649d6c56aefbed87cc409d18a/ujson-5.11.0.tar.gz", hash = "sha256:e204ae6f909f099ba6b6b942131cee359ddda2b6e4ea39c12eb8b991fe2010e0", size = 7156583, upload-time = "2025-08-20T11:57:02.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/8bf7a4fabfd01c7eed92d9b290930ce6d14910dec708e73538baa38885d1/ujson-5.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:446e8c11c06048611c9d29ef1237065de0af07cabdd97e6b5b527b957692ec25", size = 55248, upload-time = "2025-08-20T11:55:02.368Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2e/eeab0b8b641817031ede4f790db4c4942df44a12f44d72b3954f39c6a115/ujson-5.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16ccb973b7ada0455201808ff11d48fe9c3f034a6ab5bd93b944443c88299f89", size = 53157, upload-time = "2025-08-20T11:55:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/21/1b/a4e7a41870797633423ea79618526747353fd7be9191f3acfbdee0bf264b/ujson-5.11.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3134b783ab314d2298d58cda7e47e7a0f7f71fc6ade6ac86d5dbeaf4b9770fa6", size = 57657, upload-time = "2025-08-20T11:55:05.169Z" }, - { url = "https://files.pythonhosted.org/packages/94/ae/4e0d91b8f6db7c9b76423b3649612189506d5a06ddd3b6334b6d37f77a01/ujson-5.11.0-cp310-cp310-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:185f93ebccffebc8baf8302c869fac70dd5dd78694f3b875d03a31b03b062cdb", size = 59780, upload-time = "2025-08-20T11:55:06.325Z" }, - { url = "https://files.pythonhosted.org/packages/b3/cc/46b124c2697ca2da7c65c4931ed3cb670646978157aa57a7a60f741c530f/ujson-5.11.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d06e87eded62ff0e5f5178c916337d2262fdbc03b31688142a3433eabb6511db", size = 57307, upload-time = "2025-08-20T11:55:07.493Z" }, - { url = "https://files.pythonhosted.org/packages/39/eb/20dd1282bc85dede2f1c62c45b4040bc4c389c80a05983515ab99771bca7/ujson-5.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:181fb5b15703a8b9370b25345d2a1fd1359f0f18776b3643d24e13ed9c036d4c", size = 1036369, upload-time = "2025-08-20T11:55:09.192Z" }, - { url = "https://files.pythonhosted.org/packages/64/a2/80072439065d493e3a4b1fbeec991724419a1b4c232e2d1147d257cac193/ujson-5.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4df61a6df0a4a8eb5b9b1ffd673429811f50b235539dac586bb7e9e91994138", size = 1195738, upload-time = "2025-08-20T11:55:11.402Z" }, - { url = "https://files.pythonhosted.org/packages/5d/7e/d77f9e9c039d58299c350c978e086a804d1fceae4fd4a1cc6e8d0133f838/ujson-5.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6eff24e1abd79e0ec6d7eae651dd675ddbc41f9e43e29ef81e16b421da896915", size = 1088718, upload-time = "2025-08-20T11:55:13.297Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f1/697559d45acc849cada6b3571d53522951b1a64027400507aabc6a710178/ujson-5.11.0-cp310-cp310-win32.whl", hash = "sha256:30f607c70091483550fbd669a0b37471e5165b317d6c16e75dba2aa967608723", size = 39653, upload-time = "2025-08-20T11:55:14.869Z" }, - { url = "https://files.pythonhosted.org/packages/86/a2/70b73a0f55abe0e6b8046d365d74230c20c5691373e6902a599b2dc79ba1/ujson-5.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:3d2720e9785f84312b8e2cb0c2b87f1a0b1c53aaab3b2af3ab817d54409012e0", size = 43720, upload-time = "2025-08-20T11:55:15.897Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5f/b19104afa455630b43efcad3a24495b9c635d92aa8f2da4f30e375deb1a2/ujson-5.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:85e6796631165f719084a9af00c79195d3ebf108151452fefdcb1c8bb50f0105", size = 38410, upload-time = "2025-08-20T11:55:17.556Z" }, - { url = "https://files.pythonhosted.org/packages/da/ea/80346b826349d60ca4d612a47cdf3533694e49b45e9d1c07071bb867a184/ujson-5.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7c46cb0fe5e7056b9acb748a4c35aa1b428025853032540bb7e41f46767321f", size = 55248, upload-time = "2025-08-20T11:55:19.033Z" }, - { url = "https://files.pythonhosted.org/packages/57/df/b53e747562c89515e18156513cc7c8ced2e5e3fd6c654acaa8752ffd7cd9/ujson-5.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8951bb7a505ab2a700e26f691bdfacf395bc7e3111e3416d325b513eea03a58", size = 53156, upload-time = "2025-08-20T11:55:20.174Z" }, - { url = "https://files.pythonhosted.org/packages/41/b8/ab67ec8c01b8a3721fd13e5cb9d85ab2a6066a3a5e9148d661a6870d6293/ujson-5.11.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952c0be400229940248c0f5356514123d428cba1946af6fa2bbd7503395fef26", size = 57657, upload-time = "2025-08-20T11:55:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/7b/c7/fb84f27cd80a2c7e2d3c6012367aecade0da936790429801803fa8d4bffc/ujson-5.11.0-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:94fcae844f1e302f6f8095c5d1c45a2f0bfb928cccf9f1b99e3ace634b980a2a", size = 59779, upload-time = "2025-08-20T11:55:22.772Z" }, - { url = "https://files.pythonhosted.org/packages/5d/7c/48706f7c1e917ecb97ddcfb7b1d756040b86ed38290e28579d63bd3fcc48/ujson-5.11.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e0ec1646db172beb8d3df4c32a9d78015e671d2000af548252769e33079d9a6", size = 57284, upload-time = "2025-08-20T11:55:24.01Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ce/48877c6eb4afddfd6bd1db6be34456538c07ca2d6ed233d3f6c6efc2efe8/ujson-5.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:da473b23e3a54448b008d33f742bcd6d5fb2a897e42d1fc6e7bf306ea5d18b1b", size = 1036395, upload-time = "2025-08-20T11:55:25.725Z" }, - { url = "https://files.pythonhosted.org/packages/8b/7a/2c20dc97ad70cd7c31ad0596ba8e2cf8794d77191ba4d1e0bded69865477/ujson-5.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:aa6b3d4f1c0d3f82930f4cbd7fe46d905a4a9205a7c13279789c1263faf06dba", size = 1195731, upload-time = "2025-08-20T11:55:27.915Z" }, - { url = "https://files.pythonhosted.org/packages/15/f5/ca454f2f6a2c840394b6f162fff2801450803f4ff56c7af8ce37640b8a2a/ujson-5.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4843f3ab4fe1cc596bb7e02228ef4c25d35b4bb0809d6a260852a4bfcab37ba3", size = 1088710, upload-time = "2025-08-20T11:55:29.426Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d3/9ba310e07969bc9906eb7548731e33a0f448b122ad9705fed699c9b29345/ujson-5.11.0-cp311-cp311-win32.whl", hash = "sha256:e979fbc469a7f77f04ec2f4e853ba00c441bf2b06720aa259f0f720561335e34", size = 39648, upload-time = "2025-08-20T11:55:31.194Z" }, - { url = "https://files.pythonhosted.org/packages/57/f7/da05b4a8819f1360be9e71fb20182f0bb3ec611a36c3f213f4d20709e099/ujson-5.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:683f57f0dd3acdd7d9aff1de0528d603aafcb0e6d126e3dc7ce8b020a28f5d01", size = 43717, upload-time = "2025-08-20T11:55:32.241Z" }, - { url = "https://files.pythonhosted.org/packages/9a/cc/f3f9ac0f24f00a623a48d97dc3814df5c2dc368cfb00031aa4141527a24b/ujson-5.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:7855ccea3f8dad5e66d8445d754fc1cf80265a4272b5f8059ebc7ec29b8d0835", size = 38402, upload-time = "2025-08-20T11:55:33.641Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ef/a9cb1fce38f699123ff012161599fb9f2ff3f8d482b4b18c43a2dc35073f/ujson-5.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7895f0d2d53bd6aea11743bd56e3cb82d729980636cd0ed9b89418bf66591702", size = 55434, upload-time = "2025-08-20T11:55:34.987Z" }, - { url = "https://files.pythonhosted.org/packages/b1/05/dba51a00eb30bd947791b173766cbed3492269c150a7771d2750000c965f/ujson-5.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12b5e7e22a1fe01058000d1b317d3b65cc3daf61bd2ea7a2b76721fe160fa74d", size = 53190, upload-time = "2025-08-20T11:55:36.384Z" }, - { url = "https://files.pythonhosted.org/packages/03/3c/fd11a224f73fbffa299fb9644e425f38b38b30231f7923a088dd513aabb4/ujson-5.11.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80", size = 57600, upload-time = "2025-08-20T11:55:37.692Z" }, - { url = "https://files.pythonhosted.org/packages/55/b9/405103cae24899df688a3431c776e00528bd4799e7d68820e7ebcf824f92/ujson-5.11.0-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc", size = 59791, upload-time = "2025-08-20T11:55:38.877Z" }, - { url = "https://files.pythonhosted.org/packages/17/7b/2dcbc2bbfdbf68f2368fb21ab0f6735e872290bb604c75f6e06b81edcb3f/ujson-5.11.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8254e858437c00f17cb72e7a644fc42dad0ebb21ea981b71df6e84b1072aaa7c", size = 57356, upload-time = "2025-08-20T11:55:40.036Z" }, - { url = "https://files.pythonhosted.org/packages/d1/71/fea2ca18986a366c750767b694430d5ded6b20b6985fddca72f74af38a4c/ujson-5.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1aa8a2ab482f09f6c10fba37112af5f957689a79ea598399c85009f2f29898b5", size = 1036313, upload-time = "2025-08-20T11:55:41.408Z" }, - { url = "https://files.pythonhosted.org/packages/a3/bb/d4220bd7532eac6288d8115db51710fa2d7d271250797b0bfba9f1e755af/ujson-5.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a638425d3c6eed0318df663df44480f4a40dc87cc7c6da44d221418312f6413b", size = 1195782, upload-time = "2025-08-20T11:55:43.357Z" }, - { url = "https://files.pythonhosted.org/packages/80/47/226e540aa38878ce1194454385701d82df538ccb5ff8db2cf1641dde849a/ujson-5.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e3cff632c1d78023b15f7e3a81c3745cd3f94c044d1e8fa8efbd6b161997bbc", size = 1088817, upload-time = "2025-08-20T11:55:45.262Z" }, - { url = "https://files.pythonhosted.org/packages/7e/81/546042f0b23c9040d61d46ea5ca76f0cc5e0d399180ddfb2ae976ebff5b5/ujson-5.11.0-cp312-cp312-win32.whl", hash = "sha256:be6b0eaf92cae8cdee4d4c9e074bde43ef1c590ed5ba037ea26c9632fb479c88", size = 39757, upload-time = "2025-08-20T11:55:46.522Z" }, - { url = "https://files.pythonhosted.org/packages/44/1b/27c05dc8c9728f44875d74b5bfa948ce91f6c33349232619279f35c6e817/ujson-5.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b7b136cc6abc7619124fd897ef75f8e63105298b5ca9bdf43ebd0e1fa0ee105f", size = 43859, upload-time = "2025-08-20T11:55:47.987Z" }, - { url = "https://files.pythonhosted.org/packages/22/2d/37b6557c97c3409c202c838aa9c960ca3896843b4295c4b7bb2bbd260664/ujson-5.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:6cd2df62f24c506a0ba322d5e4fe4466d47a9467b57e881ee15a31f7ecf68ff6", size = 38361, upload-time = "2025-08-20T11:55:49.122Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ec/2de9dd371d52c377abc05d2b725645326c4562fc87296a8907c7bcdf2db7/ujson-5.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:109f59885041b14ee9569bf0bb3f98579c3fa0652317b355669939e5fc5ede53", size = 55435, upload-time = "2025-08-20T11:55:50.243Z" }, - { url = "https://files.pythonhosted.org/packages/5b/a4/f611f816eac3a581d8a4372f6967c3ed41eddbae4008d1d77f223f1a4e0a/ujson-5.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a31c6b8004438e8c20fc55ac1c0e07dad42941db24176fe9acf2815971f8e752", size = 53193, upload-time = "2025-08-20T11:55:51.373Z" }, - { url = "https://files.pythonhosted.org/packages/e9/c5/c161940967184de96f5cbbbcce45b562a4bf851d60f4c677704b1770136d/ujson-5.11.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78c684fb21255b9b90320ba7e199780f653e03f6c2528663768965f4126a5b50", size = 57603, upload-time = "2025-08-20T11:55:52.583Z" }, - { url = "https://files.pythonhosted.org/packages/2b/d6/c7b2444238f5b2e2d0e3dab300b9ddc3606e4b1f0e4bed5a48157cebc792/ujson-5.11.0-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:4c9f5d6a27d035dd90a146f7761c2272cf7103de5127c9ab9c4cd39ea61e878a", size = 59794, upload-time = "2025-08-20T11:55:53.69Z" }, - { url = "https://files.pythonhosted.org/packages/fe/a3/292551f936d3d02d9af148f53e1bc04306b00a7cf1fcbb86fa0d1c887242/ujson-5.11.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:837da4d27fed5fdc1b630bd18f519744b23a0b5ada1bbde1a36ba463f2900c03", size = 57363, upload-time = "2025-08-20T11:55:54.843Z" }, - { url = "https://files.pythonhosted.org/packages/90/a6/82cfa70448831b1a9e73f882225980b5c689bf539ec6400b31656a60ea46/ujson-5.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:787aff4a84da301b7f3bac09bc696e2e5670df829c6f8ecf39916b4e7e24e701", size = 1036311, upload-time = "2025-08-20T11:55:56.197Z" }, - { url = "https://files.pythonhosted.org/packages/84/5c/96e2266be50f21e9b27acaee8ca8f23ea0b85cb998c33d4f53147687839b/ujson-5.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6dd703c3e86dc6f7044c5ac0b3ae079ed96bf297974598116aa5fb7f655c3a60", size = 1195783, upload-time = "2025-08-20T11:55:58.081Z" }, - { url = "https://files.pythonhosted.org/packages/8d/20/78abe3d808cf3bb3e76f71fca46cd208317bf461c905d79f0d26b9df20f1/ujson-5.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3772e4fe6b0c1e025ba3c50841a0ca4786825a4894c8411bf8d3afe3a8061328", size = 1088822, upload-time = "2025-08-20T11:55:59.469Z" }, - { url = "https://files.pythonhosted.org/packages/d8/50/8856e24bec5e2fc7f775d867aeb7a3f137359356200ac44658f1f2c834b2/ujson-5.11.0-cp313-cp313-win32.whl", hash = "sha256:8fa2af7c1459204b7a42e98263b069bd535ea0cd978b4d6982f35af5a04a4241", size = 39753, upload-time = "2025-08-20T11:56:01.345Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d8/1baee0f4179a4d0f5ce086832147b6cc9b7731c24ca08e14a3fdb8d39c32/ujson-5.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:34032aeca4510a7c7102bd5933f59a37f63891f30a0706fb46487ab6f0edf8f0", size = 43866, upload-time = "2025-08-20T11:56:02.552Z" }, - { url = "https://files.pythonhosted.org/packages/a9/8c/6d85ef5be82c6d66adced3ec5ef23353ed710a11f70b0b6a836878396334/ujson-5.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:ce076f2df2e1aa62b685086fbad67f2b1d3048369664b4cdccc50707325401f9", size = 38363, upload-time = "2025-08-20T11:56:03.688Z" }, - { url = "https://files.pythonhosted.org/packages/28/08/4518146f4984d112764b1dfa6fb7bad691c44a401adadaa5e23ccd930053/ujson-5.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:65724738c73645db88f70ba1f2e6fb678f913281804d5da2fd02c8c5839af302", size = 55462, upload-time = "2025-08-20T11:56:04.873Z" }, - { url = "https://files.pythonhosted.org/packages/29/37/2107b9a62168867a692654d8766b81bd2fd1e1ba13e2ec90555861e02b0c/ujson-5.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29113c003ca33ab71b1b480bde952fbab2a0b6b03a4ee4c3d71687cdcbd1a29d", size = 53246, upload-time = "2025-08-20T11:56:06.054Z" }, - { url = "https://files.pythonhosted.org/packages/9b/f8/25583c70f83788edbe3ca62ce6c1b79eff465d78dec5eb2b2b56b3e98b33/ujson-5.11.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c44c703842024d796b4c78542a6fcd5c3cb948b9fc2a73ee65b9c86a22ee3638", size = 57631, upload-time = "2025-08-20T11:56:07.374Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ca/19b3a632933a09d696f10dc1b0dfa1d692e65ad507d12340116ce4f67967/ujson-5.11.0-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:e750c436fb90edf85585f5c62a35b35082502383840962c6983403d1bd96a02c", size = 59877, upload-time = "2025-08-20T11:56:08.534Z" }, - { url = "https://files.pythonhosted.org/packages/55/7a/4572af5324ad4b2bfdd2321e898a527050290147b4ea337a79a0e4e87ec7/ujson-5.11.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f278b31a7c52eb0947b2db55a5133fbc46b6f0ef49972cd1a80843b72e135aba", size = 57363, upload-time = "2025-08-20T11:56:09.758Z" }, - { url = "https://files.pythonhosted.org/packages/7b/71/a2b8c19cf4e1efe53cf439cdf7198ac60ae15471d2f1040b490c1f0f831f/ujson-5.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ab2cb8351d976e788669c8281465d44d4e94413718af497b4e7342d7b2f78018", size = 1036394, upload-time = "2025-08-20T11:56:11.168Z" }, - { url = "https://files.pythonhosted.org/packages/7a/3e/7b98668cba3bb3735929c31b999b374ebc02c19dfa98dfebaeeb5c8597ca/ujson-5.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:090b4d11b380ae25453100b722d0609d5051ffe98f80ec52853ccf8249dfd840", size = 1195837, upload-time = "2025-08-20T11:56:12.6Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ea/8870f208c20b43571a5c409ebb2fe9b9dba5f494e9e60f9314ac01ea8f78/ujson-5.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:80017e870d882d5517d28995b62e4e518a894f932f1e242cbc802a2fd64d365c", size = 1088837, upload-time = "2025-08-20T11:56:14.15Z" }, - { url = "https://files.pythonhosted.org/packages/63/b6/c0e6607e37fa47929920a685a968c6b990a802dec65e9c5181e97845985d/ujson-5.11.0-cp314-cp314-win32.whl", hash = "sha256:1d663b96eb34c93392e9caae19c099ec4133ba21654b081956613327f0e973ac", size = 41022, upload-time = "2025-08-20T11:56:15.509Z" }, - { url = "https://files.pythonhosted.org/packages/4e/56/f4fe86b4c9000affd63e9219e59b222dc48b01c534533093e798bf617a7e/ujson-5.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:849e65b696f0d242833f1df4182096cedc50d414215d1371fca85c541fbff629", size = 45111, upload-time = "2025-08-20T11:56:16.597Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f3/669437f0280308db4783b12a6d88c00730b394327d8334cc7a32ef218e64/ujson-5.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:e73df8648c9470af2b6a6bf5250d4744ad2cf3d774dcf8c6e31f018bdd04d764", size = 39682, upload-time = "2025-08-20T11:56:17.763Z" }, - { url = "https://files.pythonhosted.org/packages/6e/cd/e9809b064a89fe5c4184649adeb13c1b98652db3f8518980b04227358574/ujson-5.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:de6e88f62796372fba1de973c11138f197d3e0e1d80bcb2b8aae1e826096d433", size = 55759, upload-time = "2025-08-20T11:56:18.882Z" }, - { url = "https://files.pythonhosted.org/packages/1b/be/ae26a6321179ebbb3a2e2685b9007c71bcda41ad7a77bbbe164005e956fc/ujson-5.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e56ef8066f11b80d620985ae36869a3ff7e4b74c3b6129182ec5d1df0255f3", size = 53634, upload-time = "2025-08-20T11:56:20.012Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/fb4a220ee6939db099f4cfeeae796ecb91e7584ad4d445d4ca7f994a9135/ujson-5.11.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a325fd2c3a056cf6c8e023f74a0c478dd282a93141356ae7f16d5309f5ff823", size = 58547, upload-time = "2025-08-20T11:56:21.175Z" }, - { url = "https://files.pythonhosted.org/packages/bd/f8/fc4b952b8f5fea09ea3397a0bd0ad019e474b204cabcb947cead5d4d1ffc/ujson-5.11.0-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:a0af6574fc1d9d53f4ff371f58c96673e6d988ed2b5bf666a6143c782fa007e9", size = 60489, upload-time = "2025-08-20T11:56:22.342Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e5/af5491dfda4f8b77e24cf3da68ee0d1552f99a13e5c622f4cef1380925c3/ujson-5.11.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10f29e71ecf4ecd93a6610bd8efa8e7b6467454a363c3d6416db65de883eb076", size = 58035, upload-time = "2025-08-20T11:56:23.92Z" }, - { url = "https://files.pythonhosted.org/packages/c4/09/0945349dd41f25cc8c38d78ace49f14c5052c5bbb7257d2f466fa7bdb533/ujson-5.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a0a9b76a89827a592656fe12e000cf4f12da9692f51a841a4a07aa4c7ecc41c", size = 1037212, upload-time = "2025-08-20T11:56:25.274Z" }, - { url = "https://files.pythonhosted.org/packages/49/44/8e04496acb3d5a1cbee3a54828d9652f67a37523efa3d3b18a347339680a/ujson-5.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b16930f6a0753cdc7d637b33b4e8f10d5e351e1fb83872ba6375f1e87be39746", size = 1196500, upload-time = "2025-08-20T11:56:27.517Z" }, - { url = "https://files.pythonhosted.org/packages/64/ae/4bc825860d679a0f208a19af2f39206dfd804ace2403330fdc3170334a2f/ujson-5.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:04c41afc195fd477a59db3a84d5b83a871bd648ef371cf8c6f43072d89144eef", size = 1089487, upload-time = "2025-08-20T11:56:29.07Z" }, - { url = "https://files.pythonhosted.org/packages/30/ed/5a057199fb0a5deabe0957073a1c1c1c02a3e99476cd03daee98ea21fa57/ujson-5.11.0-cp314-cp314t-win32.whl", hash = "sha256:aa6d7a5e09217ff93234e050e3e380da62b084e26b9f2e277d2606406a2fc2e5", size = 41859, upload-time = "2025-08-20T11:56:30.495Z" }, - { url = "https://files.pythonhosted.org/packages/aa/03/b19c6176bdf1dc13ed84b886e99677a52764861b6cc023d5e7b6ebda249d/ujson-5.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:48055e1061c1bb1f79e75b4ac39e821f3f35a9b82de17fce92c3140149009bec", size = 46183, upload-time = "2025-08-20T11:56:31.574Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ca/a0413a3874b2dc1708b8796ca895bf363292f9c70b2e8ca482b7dbc0259d/ujson-5.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:1194b943e951092db611011cb8dbdb6cf94a3b816ed07906e14d3bc6ce0e90ab", size = 40264, upload-time = "2025-08-20T11:56:32.773Z" }, - { url = "https://files.pythonhosted.org/packages/50/17/30275aa2933430d8c0c4ead951cc4fdb922f575a349aa0b48a6f35449e97/ujson-5.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:abae0fb58cc820092a0e9e8ba0051ac4583958495bfa5262a12f628249e3b362", size = 51206, upload-time = "2025-08-20T11:56:48.797Z" }, - { url = "https://files.pythonhosted.org/packages/c3/15/42b3924258eac2551f8f33fa4e35da20a06a53857ccf3d4deb5e5d7c0b6c/ujson-5.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39", size = 48907, upload-time = "2025-08-20T11:56:50.136Z" }, - { url = "https://files.pythonhosted.org/packages/94/7e/0519ff7955aba581d1fe1fb1ca0e452471250455d182f686db5ac9e46119/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b42c115c7c6012506e8168315150d1e3f76e7ba0f4f95616f4ee599a1372bbc", size = 50319, upload-time = "2025-08-20T11:56:51.63Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/209d90506b7d6c5873f82c5a226d7aad1a1da153364e9ebf61eff0740c33/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:86baf341d90b566d61a394869ce77188cc8668f76d7bb2c311d77a00f4bdf844", size = 56584, upload-time = "2025-08-20T11:56:52.89Z" }, - { url = "https://files.pythonhosted.org/packages/e9/97/bd939bb76943cb0e1d2b692d7e68629f51c711ef60425fa5bb6968037ecd/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4598bf3965fc1a936bd84034312bcbe00ba87880ef1ee33e33c1e88f2c398b49", size = 51588, upload-time = "2025-08-20T11:56:54.054Z" }, - { url = "https://files.pythonhosted.org/packages/52/5b/8c5e33228f7f83f05719964db59f3f9f276d272dc43752fa3bbf0df53e7b/ujson-5.11.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:416389ec19ef5f2013592f791486bef712ebce0cd59299bf9df1ba40bb2f6e04", size = 43835, upload-time = "2025-08-20T11:56:55.237Z" }, +version = "5.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/3e/c35530c5ffc25b71c59ae0cd7b8f99df37313daa162ce1e2f7925f7c2877/ujson-5.12.0.tar.gz", hash = "sha256:14b2e1eb528d77bc0f4c5bd1a7ebc05e02b5b41beefb7e8567c9675b8b13bcf4", size = 7158451, upload-time = "2026-03-11T22:19:30.397Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/ee/45c7c1f9268b0fecdd68f9ada490bc09632b74f5f90a9be759e51a746ddc/ujson-5.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:38051f36423f084b909aaadb3b41c9c6a2958e86956ba21a8489636911e87504", size = 56145, upload-time = "2026-03-11T22:17:49.409Z" }, + { url = "https://files.pythonhosted.org/packages/6d/dc/ed181dbfb2beee598e91280c6903ba71e10362b051716317e2d3664614bb/ujson-5.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:457fabc2700a8e6ddb85bc5a1d30d3345fe0d3ec3ee8161a4e032ec585801dfa", size = 53839, upload-time = "2026-03-11T22:17:50.973Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d8/eb9ef42c660f431deeedc2e1b09c4ba29aa22818a439ddda7da6ae23ddfa/ujson-5.12.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57930ac9519099b852e190d2c04b1fb5d97ea128db33bce77ed874eccb4c7f09", size = 57844, upload-time = "2026-03-11T22:17:53.029Z" }, + { url = "https://files.pythonhosted.org/packages/68/37/0b586d079d3f2a5be5aa58ab5c423cbb4fae2ee4e65369c87aa74ac7e113/ujson-5.12.0-cp310-cp310-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:9b3b86ec3e818f3dd3e13a9de628e88a9990f4af68ecb0b12dd3de81227f0a26", size = 59923, upload-time = "2026-03-11T22:17:54.332Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/6a4b69eb397502767f438b5a2b4c066dccc9e3b263115f5ee07510250fc7/ujson-5.12.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:460e76a4daff214ae33ab959494962c93918cb44714ea3e3f748b14aa37f8a87", size = 57427, upload-time = "2026-03-11T22:17:55.317Z" }, + { url = "https://files.pythonhosted.org/packages/bb/4b/ae118440a72e85e68ee8dd26cfc47ea7857954a3341833cde9da7dc40ca3/ujson-5.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e584d0cdd37cac355aca52ed788d1a2d939d6837e2870d3b70e585db24025a50", size = 1037301, upload-time = "2026-03-11T22:17:56.427Z" }, + { url = "https://files.pythonhosted.org/packages/c2/76/834caa7905f65d3a695e4f5ff8d5d4a98508e396a9e8ab0739ab4fe2d422/ujson-5.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0fe9128e75c6aa6e9ae06c1408d6edd9179a2fef0fe6d9cda3166b887eba521d", size = 1196664, upload-time = "2026-03-11T22:17:58.061Z" }, + { url = "https://files.pythonhosted.org/packages/f2/33/1f3c1543c1d3f18c54bb3f8c1e74314fd6ad3c1aa375f01433e89a86bfa6/ujson-5.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3ed5cb149892141b1e77ef312924a327f2cc718b34247dae346ed66329e1b8be", size = 1089668, upload-time = "2026-03-11T22:17:59.617Z" }, + { url = "https://files.pythonhosted.org/packages/db/52/07d9da456a78296f61893b9d2bbfb2512f4233394748aae80b8d08c7d96e/ujson-5.12.0-cp310-cp310-win32.whl", hash = "sha256:973b7d7145b1ac553a7466a64afa8b31ec2693d7c7fff6a755059e0a2885dfd2", size = 39644, upload-time = "2026-03-11T22:18:01.212Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e5/c1de3041672fa1ab97aae0f0b9f4e30a9b15d4104c734d5627779206c878/ujson-5.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d072a403d82aef8090c6d4f728e3a727dfdba1ad3b7fa3a052c3ecbd37e73cb", size = 43875, upload-time = "2026-03-11T22:18:02.268Z" }, + { url = "https://files.pythonhosted.org/packages/8b/49/714a9240d9e6bd86c9684a72f100a0005459165fb2b0f6bf1a1156be0b9f/ujson-5.12.0-cp310-cp310-win_arm64.whl", hash = "sha256:55ede2a7a051b3b7e71a394978a098d71b3783e6b904702ff45483fad434ae2d", size = 38563, upload-time = "2026-03-11T22:18:03.546Z" }, + { url = "https://files.pythonhosted.org/packages/10/22/fd22e2f6766bae934d3050517ca47d463016bd8688508d1ecc1baa18a7ad/ujson-5.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58a11cb49482f1a095a2bd9a1d81dd7c8fb5d2357f959ece85db4e46a825fd00", size = 56139, upload-time = "2026-03-11T22:18:04.591Z" }, + { url = "https://files.pythonhosted.org/packages/c6/fd/6839adff4fc0164cbcecafa2857ba08a6eaeedd7e098d6713cb899a91383/ujson-5.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9b3cf13facf6f77c283af0e1713e5e8c47a0fe295af81326cb3cb4380212e797", size = 53836, upload-time = "2026-03-11T22:18:05.662Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b0/0c19faac62d68ceeffa83a08dc3d71b8462cf5064d0e7e0b15ba19898dad/ujson-5.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb94245a715b4d6e24689de12772b85329a1f9946cbf6187923a64ecdea39e65", size = 57851, upload-time = "2026-03-11T22:18:06.744Z" }, + { url = "https://files.pythonhosted.org/packages/04/f6/e7fd283788de73b86e99e08256726bb385923249c21dcd306e59d532a1a1/ujson-5.12.0-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:0fe6b8b8968e11dd9b2348bd508f0f57cf49ab3512064b36bc4117328218718e", size = 59906, upload-time = "2026-03-11T22:18:07.791Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3a/b100735a2b43ee6e8fe4c883768e362f53576f964d4ea841991060aeaf35/ujson-5.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89e302abd3749f6d6699691747969a5d85f7c73081d5ed7e2624c7bd9721a2ab", size = 57409, upload-time = "2026-03-11T22:18:08.79Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/f97cc20c99ca304662191b883ae13ae02912ca7244710016ba0cb8a5be34/ujson-5.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0727363b05ab05ee737a28f6200dc4078bce6b0508e10bd8aab507995a15df61", size = 1037339, upload-time = "2026-03-11T22:18:10.424Z" }, + { url = "https://files.pythonhosted.org/packages/10/7a/53ddeda0ffe1420db2f9999897b3cbb920fbcff1849d1f22b196d0f34785/ujson-5.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b62cb9a7501e1f5c9ffe190485501349c33e8862dde4377df774e40b8166871f", size = 1196625, upload-time = "2026-03-11T22:18:11.82Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1a/4c64a6bef522e9baf195dd5be151bc815cd4896c50c6e2489599edcda85f/ujson-5.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a6ec5bf6bc361f2f0f9644907a36ce527715b488988a8df534120e5c34eeda94", size = 1089669, upload-time = "2026-03-11T22:18:13.343Z" }, + { url = "https://files.pythonhosted.org/packages/18/11/8ccb109f5777ec0d9fb826695a9e2ac36ae94c1949fc8b1e4d23a5bd067a/ujson-5.12.0-cp311-cp311-win32.whl", hash = "sha256:006428d3813b87477d72d306c40c09f898a41b968e57b15a7d88454ecc42a3fb", size = 39648, upload-time = "2026-03-11T22:18:14.785Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e3/87fc4c27b20d5125cff7ce52d17ea7698b22b74426da0df238e3efcb0cf2/ujson-5.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:40aa43a7a3a8d2f05e79900858053d697a88a605e3887be178b43acbcd781161", size = 43876, upload-time = "2026-03-11T22:18:15.768Z" }, + { url = "https://files.pythonhosted.org/packages/9e/21/324f0548a8c8c48e3e222eaed15fb6d48c796593002b206b4a28a89e445f/ujson-5.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:561f89cc82deeae82e37d4a4764184926fb432f740a9691563a391b13f7339a4", size = 38553, upload-time = "2026-03-11T22:18:17.251Z" }, + { url = "https://files.pythonhosted.org/packages/84/f6/ac763d2108d28f3a40bb3ae7d2fafab52ca31b36c2908a4ad02cd3ceba2a/ujson-5.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:09b4beff9cc91d445d5818632907b85fb06943b61cb346919ce202668bf6794a", size = 56326, upload-time = "2026-03-11T22:18:18.467Z" }, + { url = "https://files.pythonhosted.org/packages/25/46/d0b3af64dcdc549f9996521c8be6d860ac843a18a190ffc8affeb7259687/ujson-5.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca0c7ce828bb76ab78b3991904b477c2fd0f711d7815c252d1ef28ff9450b052", size = 53910, upload-time = "2026-03-11T22:18:19.502Z" }, + { url = "https://files.pythonhosted.org/packages/9a/10/853c723bcabc3e9825a079019055fc99e71b85c6bae600607a2b9d31d18d/ujson-5.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d79c6635ccffcbfc1d5c045874ba36b594589be81d50d43472570bb8de9c57", size = 57754, upload-time = "2026-03-11T22:18:20.874Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c6/6e024830d988f521f144ead641981c1f7a82c17ad1927c22de3242565f5c/ujson-5.12.0-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:7e07f6f644d2c44d53b7a320a084eef98063651912c1b9449b5f45fcbdc6ccd2", size = 59936, upload-time = "2026-03-11T22:18:21.924Z" }, + { url = "https://files.pythonhosted.org/packages/34/c9/c5f236af5abe06b720b40b88819d00d10182d2247b1664e487b3ed9229cf/ujson-5.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:085b6ce182cdd6657481c7c4003a417e0655c4f6e58b76f26ee18f0ae21db827", size = 57463, upload-time = "2026-03-11T22:18:22.924Z" }, + { url = "https://files.pythonhosted.org/packages/ae/04/41342d9ef68e793a87d84e4531a150c2b682f3bcedfe59a7a5e3f73e9213/ujson-5.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:16b4fe9c97dc605f5e1887a9e1224287291e35c56cbc379f8aa44b6b7bcfe2bb", size = 1037239, upload-time = "2026-03-11T22:18:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/d4/81/dc2b7617d5812670d4ff4a42f6dd77926430ee52df0dedb2aec7990b2034/ujson-5.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0d2e8db5ade3736a163906154ca686203acc7d1d30736cbf577c730d13653d84", size = 1196713, upload-time = "2026-03-11T22:18:25.391Z" }, + { url = "https://files.pythonhosted.org/packages/b6/9c/80acff0504f92459ed69e80a176286e32ca0147ac6a8252cd0659aad3227/ujson-5.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93bc91fdadcf046da37a214eaa714574e7e9b1913568e93bb09527b2ceb7f759", size = 1089742, upload-time = "2026-03-11T22:18:26.738Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f0/123ffaac17e45ef2b915e3e3303f8f4ea78bb8d42afad828844e08622b1e/ujson-5.12.0-cp312-cp312-win32.whl", hash = "sha256:2a248750abce1c76fbd11b2e1d88b95401e72819295c3b851ec73399d6849b3d", size = 39773, upload-time = "2026-03-11T22:18:28.244Z" }, + { url = "https://files.pythonhosted.org/packages/b5/20/f3bd2b069c242c2b22a69e033bfe224d1d15d3649e6cd7cc7085bb1412ff/ujson-5.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:1b5c6ceb65fecd28a1d20d1eba9dbfa992612b86594e4b6d47bb580d2dd6bcb3", size = 44040, upload-time = "2026-03-11T22:18:29.236Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/01b5a0bcded14cd2522b218f2edc3533b0fcbccdea01f3e14a2b699071aa/ujson-5.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:9a5fcbe7b949f2e95c47ea8a80b410fcdf2da61c98553b45a4ee875580418b68", size = 38526, upload-time = "2026-03-11T22:18:30.551Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f1/0ef0eeab1db8493e1833c8b440fe32cf7538f7afa6e7f7c7e9f62cef464d/ujson-5.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:15d416440148f3e56b9b244fdaf8a09fcf5a72e4944b8e119f5bf60417a2bfc8", size = 56331, upload-time = "2026-03-11T22:18:31.539Z" }, + { url = "https://files.pythonhosted.org/packages/b0/2f/9159f6f399b3f572d20847a2b80d133e3a03c14712b0da4971a36879fb64/ujson-5.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0dd3676ea0837cd70ea1879765e9e9f6be063be0436de9b3ea4b775caf83654", size = 53910, upload-time = "2026-03-11T22:18:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/e5/a9/f96376818d71495d1a4be19a0ab6acf0cc01dd8826553734c3d4dac685b2/ujson-5.12.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bbf05c38debc90d1a195b11340cc85cb43ab3e753dc47558a3a84a38cbc72da", size = 57757, upload-time = "2026-03-11T22:18:33.866Z" }, + { url = "https://files.pythonhosted.org/packages/98/8d/dd4a151caac6fdcb77f024fbe7f09d465ebf347a628ed6dd581a0a7f6364/ujson-5.12.0-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:3c2f947e55d3c7cfe124dd4521ee481516f3007d13c6ad4bf6aeb722e190eb1b", size = 59940, upload-time = "2026-03-11T22:18:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/c7/17/0d36c2fee0a8d8dc37b011ccd5bbdcfaff8b8ec2bcfc5be998661cdc935b/ujson-5.12.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ea6206043385343aff0b7da65cf73677f6f5e50de8f1c879e557f4298cac36a", size = 57465, upload-time = "2026-03-11T22:18:36.644Z" }, + { url = "https://files.pythonhosted.org/packages/8c/04/b0ee4a4b643a01ba398441da1e357480595edb37c6c94c508dbe0eb9eb60/ujson-5.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb349dbba57c76eec25e5917e07f35aabaf0a33b9e67fc13d188002500106487", size = 1037236, upload-time = "2026-03-11T22:18:37.743Z" }, + { url = "https://files.pythonhosted.org/packages/2d/08/0e7780d0bbb48fe57ded91f550144bcc99c03b5360bf2886dd0dae0ea8f5/ujson-5.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:937794042342006f707837f38d721426b11b0774d327a2a45c0bd389eb750a87", size = 1196717, upload-time = "2026-03-11T22:18:39.101Z" }, + { url = "https://files.pythonhosted.org/packages/ba/4c/e0e34107715bb4dd2d4dcc1ce244d2f074638837adf38aff85a37506efe4/ujson-5.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ad57654570464eb1b040b5c353dee442608e06cff9102b8fcb105565a44c9ed", size = 1089748, upload-time = "2026-03-11T22:18:40.473Z" }, + { url = "https://files.pythonhosted.org/packages/72/43/814f4e2b5374d0d505c254ba4bed43eb25d2d046f19f5fd88555f81a7bd0/ujson-5.12.0-cp313-cp313-win32.whl", hash = "sha256:76bf3e7406cf23a3e1ca6a23fb1fb9ea82f4f6bd226fe226e09146b0194f85dc", size = 39778, upload-time = "2026-03-11T22:18:41.791Z" }, + { url = "https://files.pythonhosted.org/packages/0f/fe/19310d848ebe93315b6cb171277e4ce29f47ef9d46caabd63ff05d5be548/ujson-5.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:15e555c4caca42411270b2ed2b2ebc7b3a42bb04138cef6c956e1f1d49709fe2", size = 44038, upload-time = "2026-03-11T22:18:43.094Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e4/7a39103d7634691601a02bd1ca7268fba4da47ed586365e6ee68168f575a/ujson-5.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bd03472c36fa3a386a6deb887113b9e3fa40efba8203eb4fe786d3c0ccc724f6", size = 38529, upload-time = "2026-03-11T22:18:44.167Z" }, + { url = "https://files.pythonhosted.org/packages/10/bd/9a8d693254bada62bfea75a507e014afcfdb6b9d047b6f8dd134bfefaf67/ujson-5.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85833bca01aa5cae326ac759276dc175c5fa3f7b3733b7d543cf27f2df12d1ef", size = 56499, upload-time = "2026-03-11T22:18:45.431Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2d/285a83df8176e18dcd675d1a4cff8f7620f003f30903ea43929406e98986/ujson-5.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d22cad98c2a10bbf6aa083a8980db6ed90d4285a841c4de892890c2b28286ef9", size = 53998, upload-time = "2026-03-11T22:18:47.184Z" }, + { url = "https://files.pythonhosted.org/packages/bf/8b/e2f09e16dabfa91f6a84555df34a4329fa7621e92ed054d170b9054b9bb2/ujson-5.12.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99cc80facad240b0c2fb5a633044420878aac87a8e7c348b9486450cba93f27c", size = 57783, upload-time = "2026-03-11T22:18:48.271Z" }, + { url = "https://files.pythonhosted.org/packages/68/fb/ba1d06f3658a0c36d0ab3869ec3914f202bad0a9bde92654e41516c7bb13/ujson-5.12.0-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:d1831c07bd4dce53c4b666fa846c7eba4b7c414f2e641a4585b7f50b72f502dc", size = 60011, upload-time = "2026-03-11T22:18:49.284Z" }, + { url = "https://files.pythonhosted.org/packages/64/2b/3e322bf82d926d9857206cd5820438d78392d1f523dacecb8bd899952f73/ujson-5.12.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e00cec383eab2406c9e006bd4edb55d284e94bb943fda558326048178d26961", size = 57465, upload-time = "2026-03-11T22:18:50.584Z" }, + { url = "https://files.pythonhosted.org/packages/e9/fd/af72d69603f9885e5136509a529a4f6d88bf652b457263ff96aefcd3ab7d/ujson-5.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f19b3af31d02a2e79c5f9a6deaab0fb3c116456aeb9277d11720ad433de6dfc6", size = 1037275, upload-time = "2026-03-11T22:18:51.998Z" }, + { url = "https://files.pythonhosted.org/packages/9c/a7/a2411ec81aef7872578e56304c3e41b3a544a9809e95c8e1df46923fc40b/ujson-5.12.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:bacbd3c69862478cbe1c7ed4325caedec580d8acf31b8ee1b9a1e02a56295cad", size = 1196758, upload-time = "2026-03-11T22:18:53.548Z" }, + { url = "https://files.pythonhosted.org/packages/ed/85/aa18ae175dd03a118555aa14304d4f466f9db61b924c97c6f84388ecacb1/ujson-5.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94c5f1621cbcab83c03be46441f090b68b9f307b6c7ec44d4e3f6d5997383df4", size = 1089760, upload-time = "2026-03-11T22:18:55.336Z" }, + { url = "https://files.pythonhosted.org/packages/d3/d4/4b40b67ac7e916ebffc3041ae2320c5c0b8a045300d4c542b6e50930cca5/ujson-5.12.0-cp314-cp314-win32.whl", hash = "sha256:e6369ac293d2cc40d52577e4fa3d75a70c1aae2d01fa3580a34a4e6eff9286b9", size = 41043, upload-time = "2026-03-11T22:18:56.505Z" }, + { url = "https://files.pythonhosted.org/packages/24/38/a1496d2a3428981f2b3a2ffbb4656c2b05be6cc406301d6b10a6445f6481/ujson-5.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:31348a0ffbfc815ce78daac569d893349d85a0b57e1cd2cdbba50b7f333784da", size = 45303, upload-time = "2026-03-11T22:18:57.454Z" }, + { url = "https://files.pythonhosted.org/packages/85/d3/39dbd3159543d9c57ec3a82d36226152cf0d710784894ce5aa24b8220ac1/ujson-5.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:6879aed770557f0961b252648d36f6fdaab41079d37a2296b5649fd1b35608e0", size = 39860, upload-time = "2026-03-11T22:18:58.578Z" }, + { url = "https://files.pythonhosted.org/packages/c3/71/9b4dacb177d3509077e50497222d39eec04c8b41edb1471efc764d645237/ujson-5.12.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ddb08b3c2f9213df1f2e3eb2fbea4963d80ec0f8de21f0b59898e34f3b3d96d", size = 56845, upload-time = "2026-03-11T22:18:59.629Z" }, + { url = "https://files.pythonhosted.org/packages/24/c2/8abffa3be1f3d605c4a62445fab232b3e7681512ce941c6b23014f404d36/ujson-5.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a3ae28f0b209be5af50b54ca3e2123a3de3a57d87b75f1e5aa3d7961e041983", size = 54463, upload-time = "2026-03-11T22:19:00.697Z" }, + { url = "https://files.pythonhosted.org/packages/db/2e/60114a35d1d6796eb428f7affcba00a921831ff604a37d9142c3d8bbe5c5/ujson-5.12.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30ad4359413c8821cc7b3707f7ca38aa8bc852ba3b9c5a759ee2d7740157315", size = 58689, upload-time = "2026-03-11T22:19:01.739Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ad/010925c2116c21ce119f9c2ff18d01f48a19ade3ff4c5795da03ce5829fc/ujson-5.12.0-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:02f93da7a4115e24f886b04fd56df1ee8741c2ce4ea491b7ab3152f744ad8f8e", size = 60618, upload-time = "2026-03-11T22:19:03.101Z" }, + { url = "https://files.pythonhosted.org/packages/9b/74/db7f638bf20282b1dccf454386cbd483faaaed3cdbb9cb27e06f74bb109e/ujson-5.12.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ff4ede90ed771140caa7e1890de17431763a483c54b3c1f88bd30f0cc1affc0", size = 58151, upload-time = "2026-03-11T22:19:04.175Z" }, + { url = "https://files.pythonhosted.org/packages/9c/7e/3ebaecfa70a2e8ce623db8e21bd5cb05d42a5ef943bcbb3309d71b5de68d/ujson-5.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bf9cc97f05048ac8f3e02cd58f0fe62b901453c24345bfde287f4305dcc31c", size = 1038117, upload-time = "2026-03-11T22:19:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/2e/aa/e073eda7f0036c2973b28db7bb99faba17a932e7b52d801f9bb3e726271f/ujson-5.12.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:2324d9a0502317ffc35d38e153c1b2fa9610ae03775c9d0f8d0cca7b8572b04e", size = 1197434, upload-time = "2026-03-11T22:19:06.92Z" }, + { url = "https://files.pythonhosted.org/packages/1c/01/b9a13f058fdd50c746b192c4447ca8d6352e696dcda912ccee10f032ff85/ujson-5.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:50524f4f6a1c839714dbaff5386a1afb245d2d5ec8213a01fbc99cea7307811e", size = 1090401, upload-time = "2026-03-11T22:19:08.383Z" }, + { url = "https://files.pythonhosted.org/packages/c4/37/3d1b4e0076b6e43379600b5229a5993db8a759ff2e1830ea635d876f6644/ujson-5.12.0-cp314-cp314t-win32.whl", hash = "sha256:f7a0430d765f9bda043e6aefaba5944d5f21ec43ff4774417d7e296f61917382", size = 41880, upload-time = "2026-03-11T22:19:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c5/3c2a262a138b9f0014fe1134a6b5fdc2c54245030affbaac2fcbc0632138/ujson-5.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:ccbfd94e59aad4a2566c71912b55f0547ac1680bfac25eb138e6703eb3dd434e", size = 46365, upload-time = "2026-03-11T22:19:10.662Z" }, + { url = "https://files.pythonhosted.org/packages/83/40/956dc20b7e00dc0ff3259871864f18dab211837fce3478778bedb3132ac1/ujson-5.12.0-cp314-cp314t-win_arm64.whl", hash = "sha256:42d875388fbd091c7ea01edfff260f839ba303038ffb23475ef392012e4d63dd", size = 40398, upload-time = "2026-03-11T22:19:11.666Z" }, + { url = "https://files.pythonhosted.org/packages/95/3c/5ee154d505d1aad2debc4ba38b1a60ae1949b26cdb5fa070e85e320d6b64/ujson-5.12.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:bf85a00ac3b56a1e7a19c5be7b02b5180a0895ac4d3c234d717a55e86960691c", size = 54494, upload-time = "2026-03-11T22:19:13.035Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b3/9496ec399ec921e434a93b340bd5052999030b7ac364be4cbe5365ac6b20/ujson-5.12.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:64df53eef4ac857eb5816a56e2885ccf0d7dff6333c94065c93b39c51063e01d", size = 57999, upload-time = "2026-03-11T22:19:14.385Z" }, + { url = "https://files.pythonhosted.org/packages/0e/da/e9ae98133336e7c0d50b43626c3f2327937cecfa354d844e02ac17379ed1/ujson-5.12.0-graalpy312-graalpy250_312_native-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c0aed6a4439994c9666fb8a5b6c4eac94d4ef6ddc95f9b806a599ef83547e3b", size = 54518, upload-time = "2026-03-11T22:19:15.4Z" }, + { url = "https://files.pythonhosted.org/packages/58/10/978d89dded6bb1558cd46ba78f4351198bd2346db8a8ee1a94119022ce40/ujson-5.12.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efae5df7a8cc8bdb1037b0f786b044ce281081441df5418c3a0f0e1f86fe7bb3", size = 55736, upload-time = "2026-03-11T22:19:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/80/25/1df8e6217c92e57a1266bf5be750b1dddc126ee96e53fe959d5693503bc6/ujson-5.12.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:8712b61eb1b74a4478cfd1c54f576056199e9f093659334aeb5c4a6b385338e5", size = 44615, upload-time = "2026-03-11T22:19:17.53Z" }, + { url = "https://files.pythonhosted.org/packages/19/fa/f4a957dddb99bd68c8be91928c0b6fefa7aa8aafc92c93f5d1e8b32f6702/ujson-5.12.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:871c0e5102e47995b0e37e8df7819a894a6c3da0d097545cd1f9f1f7d7079927", size = 52145, upload-time = "2026-03-11T22:19:18.566Z" }, + { url = "https://files.pythonhosted.org/packages/55/6e/50b5cf612de1ca06c7effdc5a5d7e815774dee85a5858f1882c425553b82/ujson-5.12.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:56ba3f7abbd6b0bb282a544dc38406d1a188d8bb9164f49fdb9c2fee62cb29da", size = 49577, upload-time = "2026-03-11T22:19:19.627Z" }, + { url = "https://files.pythonhosted.org/packages/6e/24/b6713fa9897774502cd4c2d6955bb4933349f7d84c3aa805531c382a4209/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c5a52987a990eb1bae55f9000994f1afdb0326c154fb089992f839ab3c30688", size = 50807, upload-time = "2026-03-11T22:19:20.778Z" }, + { url = "https://files.pythonhosted.org/packages/1f/b6/c0e0f7901180ef80d16f3a4bccb5dc8b01515a717336a62928963a07b80b/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:adf28d13a33f9d750fe7a78fb481cac298fa257d8863d8727b2ea4455ea41235", size = 56972, upload-time = "2026-03-11T22:19:21.84Z" }, + { url = "https://files.pythonhosted.org/packages/02/a9/05d91b4295ea7239151eb08cf240e5a2ba969012fda50bc27bcb1ea9cd71/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51acc750ec7a2df786cdc868fb16fa04abd6269a01d58cf59bafc57978773d8e", size = 52045, upload-time = "2026-03-11T22:19:22.879Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/92047d32bf6f2d9db64605fc32e8eb0e0dd68b671eaafc12a464f69c4af4/ujson-5.12.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ab9056d94e5db513d9313b34394f3a3b83e6301a581c28ad67773434f3faccab", size = 44053, upload-time = "2026-03-11T22:19:23.918Z" }, ] [[package]]