From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com> Date: Tue, 30 Sep 2025 11:24:39 +0000 (+0200) Subject: 🌐 Update Russian translations for existing pages (LLM-generated) (#14123) X-Git-Tag: 0.118.1~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=977abe239662203ab0ea3b089092f94d3526e8fd;p=thirdparty%2Ffastapi%2Ffastapi.git 🌐 Update Russian translations for existing pages (LLM-generated) (#14123) * Update Russian translations for modified pages * docs: fix translation for multiprocessing * Update Russian translations for other existing pages * Apply changes from latest PRs: 13917 and 14099 --------- Co-authored-by: vldmrdev <70532790+vldmrdev@users.noreply.github.com> --- diff --git a/docs/ru/docs/about/index.md b/docs/ru/docs/about/index.md index 1015b667a8..4f48266a7a 100644 --- a/docs/ru/docs/about/index.md +++ b/docs/ru/docs/about/index.md @@ -1,3 +1,3 @@ -# РпÑоекÑе +# РпÑоекÑе { #about } -FastAPI: внÑÑÑеннее ÑÑÑÑойÑÑво, повлиÑвÑие ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸ и вÑÑ Ñакое пÑоÑее. ð¤ +Ð FastAPI, его дизайне, иÑÑоÑÐ½Ð¸ÐºÐ°Ñ Ð²Ð´Ð¾Ñ Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¸ многом дÑÑгом. ð¤ diff --git a/docs/ru/docs/advanced/additional-status-codes.md b/docs/ru/docs/advanced/additional-status-codes.md index aab1f8ee38..7c73cf5d5d 100644 --- a/docs/ru/docs/advanced/additional-status-codes.md +++ b/docs/ru/docs/advanced/additional-status-codes.md @@ -1,28 +1,28 @@ -# ÐополниÑелÑнÑе ÑÑаÑÑÑ ÐºÐ¾Ð´Ñ +# ÐополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ { #additional-status-codes } -Ðо ÑмолÑÐ°Ð½Ð¸Ñ **FastAPI** возвÑаÑÐ°ÐµÑ Ð¾ÑвеÑÑ, иÑполÑзÑÑ `JSONResponse`, помеÑÐ°Ñ ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе из ваÑей *опеÑаÑии пÑÑи*, внÑÑÑÑ ÑÑого `JSONResponse`. +Ðо ÑмолÑÐ°Ð½Ð¸Ñ **FastAPI** бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾ÑвеÑÑ, иÑполÑзÑÑ `JSONResponse`, помеÑÐ°Ñ ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе из ваÑей *опеÑаÑии пÑÑи*, внÑÑÑÑ ÑÑого `JSONResponse`. -Ðн бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð´ ÑÑаÑÑÑа по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑ, коÑоÑÑй Ð²Ñ ÑкажеÑе в ваÑей *опеÑаÑии пÑÑи*. +Ðн бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑаÑÑÑ-код по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑ, коÑоÑÑй Ð²Ñ ÑкажеÑе в ваÑей *опеÑаÑии пÑÑи*. -## ÐополниÑелÑнÑе ÑÑаÑÑÑ ÐºÐ¾Ð´Ñ +## ÐополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ { #additional-status-codes_1 } -ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе возвÑаÑаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑаÑÑÑ ÐºÐ¾Ð´ помимо оÑновного, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо, возвÑаÑÐ°Ñ Ð¾Ð±ÑÐµÐºÑ `Response` напÑÑмÑÑ, как `JSONResponse`, и ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð½ÑжнÑй ÑÑаÑÑÑ ÐºÐ¾Ð´ напÑÑмÑÑ. +ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе возвÑаÑаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ Ð¿Ð¾Ð¼Ð¸Ð¼Ð¾ оÑновного, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо, возвÑаÑÐ°Ñ `Response` напÑÑмÑÑ, напÑÐ¸Ð¼ÐµÑ `JSONResponse`, и ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑаÑÑÑ-код напÑÑмÑÑ. -ÐапÑимеÑ, Ñкажем, Ð²Ñ Ñ Ð¾ÑиÑе ÑоздаÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑлеменÑÑ Ð¸ возвÑаÑÐ°ÐµÑ HTTP-код 200 "OK" пÑи ÑÑпеÑном вÑполнении. +ÐапÑимеÑ, пÑедположим, ÑÑо Ð²Ñ Ñ Ð¾ÑиÑе имеÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑлеменÑÑ Ð¸ возвÑаÑÐ°ÐµÑ HTTP ÑÑаÑÑÑ-код 200 «OK» пÑи ÑÑпеÑном вÑполнении. -Ðо Ð²Ñ Ñакже Ñ Ð¾ÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° пÑинимала новÑе ÑлеменÑÑ. РеÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñанее не ÑÑÑеÑÑвовал, он ÑоздаÑÑÑÑ, и возвÑаÑалÑÑ HTTP-код 201 "Created". +Ðо Ð²Ñ Ñакже Ñ Ð¾ÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° пÑинимала новÑе ÑлеменÑÑ. РеÑли ÑлеменÑÑ Ñанее не ÑÑÑеÑÑвовали, она ÑоздаÑÑ Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ HTTP ÑÑаÑÑÑ-код 201 «Created». -ЧÑÐ¾Ð±Ñ ÑеализоваÑÑ ÑÑо, импоÑÑиÑÑйÑе `JSONResponse` и возвÑаÑайÑе Ð²Ð°Ñ ÐºÐ¾Ð½ÑÐµÐ½Ñ Ð½Ð°Ð¿ÑÑмÑÑ, ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð½ÑжнÑй `status_code`: +ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÑÑого, импоÑÑиÑÑйÑе `JSONResponse` и веÑниÑе ÑÑда Ñвой конÑÐµÐ½Ñ Ð½Ð°Ð¿ÑÑмÑÑ, ÑÑÑановив нÑжнÑй вам `status_code`: {* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *} /// warning | Ðнимание -Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе обÑÐµÐºÑ `Response` напÑÑмÑÑ, как в пÑимеÑе вÑÑе, он бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑн как еÑÑÑ. +Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `Response` напÑÑмÑÑ, как в пÑимеÑе вÑÑе, он бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑн как еÑÑÑ. -Ðн не бÑÐ´ÐµÑ ÑеÑиализован пÑи помоÑи модели и Ñ.д. +Ðн не бÑÐ´ÐµÑ ÑеÑиализован Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ и Ñ.п. -УбедиÑеÑÑ, ÑÑо в нÑм ÑодеÑжаÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñе даннÑе, коÑоÑÑе Ð²Ñ Ñ Ð¾ÑиÑе, и ÑÑо знаÑÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм JSON (еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`). +УбедиÑеÑÑ, ÑÑо в нÑм именно Ñе даннÑе, коÑоÑÑе Ð²Ñ Ñ Ð¾ÑиÑе, и ÑÑо знаÑÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм JSON (еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`). /// @@ -30,12 +30,12 @@ ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.responses import JSONResponse`. -**FastAPI** пÑедоÑÑавлÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ `starlette.responses` ÑеÑез `fastapi.responses` пÑоÑÑо Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва, как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ Response-клаÑÑов поÑÑÑпаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette. То же Ñамое каÑаеÑÑÑ Ð¸ `status`. +**FastAPI** пÑедоÑÑавлÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ `starlette.responses` ÑеÑез `fastapi.responses` пÑоÑÑо Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ Response-клаÑÑов пÑÐ¸Ñ Ð¾Ð´ÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette. То же Ñамое Ñо `status`. /// -## OpenAPI и докÑменÑаÑÐ¸Ñ API +## OpenAPI и докÑменÑаÑÐ¸Ñ API { #openapi-and-api-docs } -ÐÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе дополниÑелÑнÑе ÐºÐ¾Ð´Ñ ÑÑаÑÑÑов и оÑвеÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, они не бÑдÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð² ÑÑ ÐµÐ¼Ñ OpenAPI (докÑменÑаÑÐ¸Ñ API), поÑÐ¾Ð¼Ñ ÑÑо FastAPI не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ñанее знаÑÑ, ÑÑо Ð²Ñ ÑобиÑаеÑеÑÑ Ð²ÐµÑнÑÑÑ. +ÐÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе дополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ Ð¸ оÑвеÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, они не бÑдÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð² ÑÑ ÐµÐ¼Ñ OpenAPI (докÑменÑаÑÐ¸Ñ API), поÑÐ¾Ð¼Ñ ÑÑо Ñ FastAPI Ð½ÐµÑ ÑпоÑоба заÑанее знаÑÑ, ÑÑо Ð²Ñ ÑобиÑаеÑеÑÑ Ð²ÐµÑнÑÑÑ. -Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задокÑменÑиÑоваÑÑ ÑÑо в ваÑем коде, иÑполÑзÑÑ: [ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI](additional-responses.md){.internal-link target=_blank}. +Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задокÑменÑиÑоваÑÑ ÑÑо в ÑвоÑм коде, иÑполÑзÑÑ: [ÐополниÑелÑнÑе оÑвеÑÑ](additional-responses.md){.internal-link target=_blank}. diff --git a/docs/ru/docs/advanced/async-tests.md b/docs/ru/docs/advanced/async-tests.md index 7849ad1090..5062bc52e7 100644 --- a/docs/ru/docs/advanced/async-tests.md +++ b/docs/ru/docs/advanced/async-tests.md @@ -1,4 +1,4 @@ -# ÐÑÐ¸Ð½Ñ Ñонное ÑеÑÑиÑование +# ÐÑÐ¸Ð½Ñ Ñонное ÑеÑÑиÑование { #async-tests } ÐÑ Ñже видели как ÑеÑÑиÑоваÑÑ **FastAPI** пÑиложение, иÑполÑзÑÑ Ð¸Ð¼ÐµÑÑийÑÑ ÐºÐ»Ð°ÑÑ `TestClient`. Ð ÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ð²Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸ ÑолÑко как пиÑаÑÑ ÑеÑÑÑ Ð² ÑÐ¸Ð½Ñ Ñонном ÑÑиле без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `async` ÑÑнкÑий. @@ -6,11 +6,11 @@ ÐавайÑе ÑаÑÑмоÑÑим, как Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑо ÑеализоваÑÑ. -## pytest.mark.anyio +## pytest.mark.anyio { #pytest-mark-anyio } ÐÑли Ð¼Ñ Ñ Ð¾Ñим вÑзÑваÑÑ Ð°ÑÐ¸Ð½Ñ ÑоннÑе ÑÑнкÑии в наÑÐ¸Ñ ÑеÑÑÐ°Ñ , Ñо наÑи ÑеÑÑовÑе ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð°ÑÐ¸Ð½Ñ ÑоннÑми. AnyIO пÑедоÑÑавлÑÐµÑ Ð´Ð»Ñ ÑÑого оÑлиÑнÑй плагин, коÑоÑÑй позволÑÐµÑ Ð½Ð°Ð¼ ÑказÑваÑÑ, какие ÑеÑÑовÑе ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзÑваÑÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонно. -## HTTPX +## HTTPX { #httpx } Ðаже еÑли **FastAPI** пÑиложение иÑполÑзÑÐµÑ Ð¾Ð±ÑÑнÑе ÑÑнкÑии `def` вмеÑÑо `async def`, ÑÑо вÑе Ñавно `async` пÑиложение 'под капоÑом'. @@ -18,7 +18,7 @@ `TestClient` оÑнован на HTTPX, и, к ÑÑаÑÑÑÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÐµÐ³Ð¾ (`HTTPX`) напÑÑмÑÑ Ð´Ð»Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ API. -## ÐÑÐ¸Ð¼ÐµÑ +## ÐÑÐ¸Ð¼ÐµÑ { #example } РкаÑеÑÑве пÑоÑÑого пÑимеÑа, давайÑе ÑаÑÑмоÑÑим ÑайловÑÑ ÑÑÑÑкÑÑÑÑ, ÑÑ Ð¾Ð¶ÑÑ Ñ Ð¾Ð¿Ð¸Ñанной в [ÐолÑÑие пÑиложениÑ](../tutorial/bigger-applications.md){.internal-link target=_blank} и [ТеÑÑиÑование](../tutorial/testing.md){.internal-link target=_blank}: @@ -38,7 +38,7 @@ {* ../../docs_src/async_tests/test_main.py *} -## ÐапÑÑк ÑеÑÑов +## ÐапÑÑк ÑеÑÑов { #run-it } ÐÑ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ Ñвои ÑеÑÑÑ ÐºÐ°Ðº обÑÑно: @@ -52,7 +52,7 @@ $ pytest -## ÐодÑобнее +## ÐодÑобнее { #in-detail } ÐаÑÐºÐµÑ `@pytest.mark.anyio` говоÑÐ¸Ñ pytest, ÑÑо ÑеÑÑÐ¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ñзвана аÑÐ¸Ð½Ñ Ñонно: @@ -88,7 +88,7 @@ response = client.get('/') /// -## ÐÑзов дÑÑÐ³Ð¸Ñ Ð°ÑÐ¸Ð½Ñ ÑоннÑÑ ÑÑнкÑий +## ÐÑзов дÑÑÐ³Ð¸Ñ Ð°ÑÐ¸Ð½Ñ ÑоннÑÑ ÑÑнкÑий { #other-asynchronous-function-calls } ТепеÑÑ ÑеÑÑÐ¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ ÑÑала аÑÐ¸Ð½Ñ Ñонной, поÑÑÐ¾Ð¼Ñ Ð²Ð½ÑÑÑи нее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзÑваÑÑ Ñакже и дÑÑгие `async` ÑÑнкÑии, не ÑвÑзаннÑе Ñ Ð¾ÑпÑавлением запÑоÑов в ваÑе FastAPI пÑиложение. Ðак еÑли Ð±Ñ Ð²Ñ Ð²ÑзÑвали Ð¸Ñ Ð² лÑбом дÑÑгом меÑÑе ваÑего кода. diff --git a/docs/ru/docs/advanced/index.md b/docs/ru/docs/advanced/index.md index b5cb733e7b..c0a52c6c14 100644 --- a/docs/ru/docs/advanced/index.md +++ b/docs/ru/docs/advanced/index.md @@ -1,12 +1,12 @@ -# РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑÐµÐ»Ñ +# РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑÐµÐ»Ñ { #advanced-user-guide } -## ÐополниÑелÑнÑе возможноÑÑи +## ÐополниÑелÑнÑе возможноÑÑи { #additional-features } ÐÑновное [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](../tutorial/index.md){.internal-link target=_blank} должно бÑÑÑ Ð´Ð¾ÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸ÑÑ Ð²Ð°Ñ Ñо вÑеми оÑновнÑми ÑÑнкÑиÑми **FastAPI**. Ð ÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ Ð²Ñ ÑвидиÑе дÑÑгие ваÑианÑÑ, конÑигÑÑаÑии и дополниÑелÑнÑе возможноÑÑи. -/// tip +/// tip | Ð¡Ð¾Ð²ÐµÑ Ð¡Ð»ÐµÐ´ÑÑÑие ÑÐ°Ð·Ð´ÐµÐ»Ñ **не обÑзаÑелÑно ÑвлÑÑÑÑÑ "пÑодвинÑÑÑми"**. @@ -14,7 +14,7 @@ /// -## СнаÑала пÑоÑиÑайÑе УÑебник - Ð ÑководÑÑво полÑзоваÑÐµÐ»Ñ +## СнаÑала пÑоÑиÑайÑе УÑебник - Ð ÑководÑÑво полÑзоваÑÐµÐ»Ñ { #read-the-tutorial-first } ÐÑ Ð²Ñе еÑе можеÑе иÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑинÑÑво ÑÑнкÑий **FastAPI** Ñо знаниÑми из [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](../tutorial/index.md){.internal-link target=_blank}. diff --git a/docs/ru/docs/advanced/response-change-status-code.md b/docs/ru/docs/advanced/response-change-status-code.md index 37dade99f8..e9e1c9470f 100644 --- a/docs/ru/docs/advanced/response-change-status-code.md +++ b/docs/ru/docs/advanced/response-change-status-code.md @@ -1,22 +1,22 @@ -# Response - Ðзменение cÑаÑÑÑ ÐºÐ¾Ð´Ð° +# Response - Ðзменение ÑÑаÑÑÑ-кода { #response-change-status-code } -ÐÑ, веÑоÑÑно, Ñже ÑиÑали о Ñом, ÑÑо можно ÑÑÑановиÑÑ [СоÑÑоÑние оÑвеÑа по ÑмолÑаниÑ](../tutorial/response-status-code.md){.internal-link target=_blank}. +ÐÑ, веÑоÑÑно, Ñже ÑиÑали о Ñом, ÑÑо можно ÑÑÑановиÑÑ [ÑÑаÑÑÑ-код оÑвеÑа по ÑмолÑаниÑ](../tutorial/response-status-code.md){.internal-link target=_blank}. -Ðо в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð²Ð°Ð¼ нÑжно веÑнÑÑÑ ÐºÐ¾Ð´ ÑоÑÑоÑниÑ, оÑлиÑнÑй Ð¾Ñ ÑÑÑановленного по ÑмолÑаниÑ. +Ðо в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð½Ñжно веÑнÑÑÑ Ð´ÑÑгой ÑÑаÑÑÑ-код, оÑлиÑнÑй Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. -## ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ +## ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ { #use-case } -ÐапÑимеÑ, пÑедÑÑавÑÑе, ÑÑо Ð²Ñ Ñ Ð¾ÑиÑе возвÑаÑаÑÑ HTTP код ÑоÑÑоÑÐ½Ð¸Ñ "OK" `200` по ÑмолÑаниÑ. +ÐапÑимеÑ, пÑедÑÑавÑÑе, ÑÑо Ð²Ñ Ñ Ð¾ÑиÑе по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ HTTP ÑÑаÑÑÑ-код «OK» `200`. -Ðо еÑли даннÑе не ÑÑÑеÑÑвовали, Ð²Ñ Ñ Ð¾ÑиÑе ÑоздаÑÑ Ð¸Ñ Ð¸ веÑнÑÑÑ HTTP код ÑоÑÑоÑÐ½Ð¸Ñ "CREATED" `201`. +Ðо еÑли даннÑе не ÑÑÑеÑÑвовали, Ð²Ñ Ñ Ð¾ÑиÑе ÑоздаÑÑ Ð¸Ñ Ð¸ веÑнÑÑÑ HTTP ÑÑаÑÑÑ-код «CREATED» `201`. ÐÑи ÑÑом Ð²Ñ Ð²ÑÑ ÐµÑÑ Ñ Ð¾ÑиÑе имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑилÑÑÑоваÑÑ Ð¸ пÑеобÑазовÑваÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑе даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `response_model`. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ ÑлÑÑаев Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `Response`. -## ÐÑполÑзование паÑамеÑÑа `Response` +## ÐÑполÑзование паÑамеÑÑа `Response` { #use-a-response-parameter } -ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей *ÑÑнкÑии обÑабоÑки пÑÑи* (Ñак же как Ð´Ð»Ñ cookies и headers). +ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей *ÑÑнкÑии обÑабоÑки пÑÑи* (как и Ð´Ð»Ñ cookies и HTTP-заголовков). РзаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ `status_code` в ÑÑом *вÑеменном* обÑекÑе оÑвеÑа. @@ -26,6 +26,6 @@ РеÑли Ð²Ñ Ð¾Ð±ÑÑвили `response_model`, он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑилÑÑÑаÑии и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого обÑекÑа. -**FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ *вÑеменнÑй* оÑÐ²ÐµÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° ÑоÑÑоÑÐ½Ð¸Ñ (а Ñакже cookies и headers) и помеÑÑÐ¸Ñ Ð¸Ñ Ð² ÑиналÑнÑй оÑвеÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое вами знаÑение, оÑÑилÑÑÑованное лÑбÑм `response_model`. +**FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ *вÑеменнÑй* оÑÐ²ÐµÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÑÑаÑÑÑ-кода (а Ñакже cookies и HTTP-заголовков) и помеÑÑÐ¸Ñ Ð¸Ñ Ð² ÑиналÑнÑй оÑвеÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое вами знаÑение, оÑÑилÑÑÑованное лÑбÑм `response_model`. -ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ `Response` в завиÑимоÑÑÑÑ Ð¸ ÑÑÑановиÑÑ ÐºÐ¾Ð´ ÑоÑÑоÑÐ½Ð¸Ñ Ð² Ð½Ð¸Ñ . Ðо помниÑе, ÑÑо поÑледнее ÑÑÑановленное знаÑение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑиоÑиÑеÑ. +ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ `Response` в завиÑимоÑÑÑÑ Ð¸ ÑÑÑановиÑÑ Ð² Ð½Ð¸Ñ ÑÑаÑÑÑ-код. Ðо помниÑе, ÑÑо поÑледнее ÑÑÑановленное знаÑение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑиоÑиÑеÑ. diff --git a/docs/ru/docs/advanced/response-cookies.md b/docs/ru/docs/advanced/response-cookies.md index e04ff577c9..3aa32b9bb7 100644 --- a/docs/ru/docs/advanced/response-cookies.md +++ b/docs/ru/docs/advanced/response-cookies.md @@ -1,9 +1,8 @@ +# Cookies в оÑвеÑе { #response-cookies } -# Cookies в оÑвеÑе +## ÐÑполÑзование паÑамеÑÑа `Response` { #use-a-response-parameter } -## ÐÑполÑзование паÑамеÑÑа `Response` - -ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей ÑÑнкÑии ÑндпоинÑа. +ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей ÑÑнкÑии-обÑабоÑÑике пÑÑи. ÐаÑем ÑÑÑановиÑÑ cookies в ÑÑом вÑеменном обÑекÑе оÑвеÑа. @@ -13,36 +12,40 @@ ÐÑли Ð²Ñ Ñказали `response_model`, он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑилÑÑÑаÑии и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого обÑекÑа. -**FastAPI** извлеÑÐµÑ cookies (а Ñакже заголовки и ÐºÐ¾Ð´Ñ ÑоÑÑоÑниÑ) из вÑеменного оÑвеÑа и вклÑÑÐ¸Ñ Ð¸Ñ Ð² оконÑаÑелÑнÑй оÑвеÑ, ÑодеÑжаÑий ваÑе возвÑаÑаемое знаÑение, оÑÑилÑÑÑованное ÑеÑез `response_model`. +**FastAPI** извлеÑÐµÑ cookies (а Ñакже HTTP-заголовки и ÑÑаÑÑÑ-код) из вÑеменного оÑвеÑа и вклÑÑÐ¸Ñ Ð¸Ñ Ð² оконÑаÑелÑнÑй оÑвеÑ, ÑодеÑжаÑий ваÑе возвÑаÑаемое знаÑение, оÑÑилÑÑÑованное ÑеÑез `response_model`. -ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа Response в завиÑимоÑÑÑÑ Ð¸ ÑÑÑанавливаÑÑ cookies (и заголовки) Ñам. +ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в завиÑимоÑÑÑÑ Ð¸ ÑÑÑанавливаÑÑ cookies (и HTTP-заголовки) Ñам. -## ÐозвÑаÑение `Response` напÑÑмÑÑ +## ÐозвÑаÑение `Response` напÑÑмÑÑ { #return-a-response-directly } -ÐÑ Ñакже можеÑе ÑÑÑановиÑÑ cookies, еÑли возвÑаÑаеÑе `Response` напÑÑмÑÑ Ð² ваÑем коде. +ÐÑ Ñакже можеÑе ÑÑÑановиÑÑ Cookies, еÑли возвÑаÑаеÑе `Response` напÑÑмÑÑ Ð² ваÑем коде. -ÐÐ»Ñ ÑÑого ÑоздайÑе обÑÐµÐºÑ `Response`, как опиÑано в Ñазделе [ÐозвÑаÑение оÑвеÑа напÑÑмÑÑ](response-directly.md){.target=_blank}. +ÐÐ»Ñ ÑÑого ÑоздайÑе обÑÐµÐºÑ `Response`, как опиÑано в Ñазделе [ÐозвÑаÑение оÑвеÑа напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}. ÐаÑем ÑÑÑановиÑе cookies и веÑниÑе ÑÑÐ¾Ñ Ð¾Ð±ÑекÑ: {* ../../docs_src/response_cookies/tutorial001.py hl[10:12] *} -/// tip | ÐÑимеÑание -ÐмейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе оÑÐ²ÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑа `Response`, **FastAPI** оÑпÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ без дополниÑелÑной обÑабоÑки. +/// tip | Ð¡Ð¾Ð²ÐµÑ + +ÐмейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе оÑÐ²ÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑа `Response`, FastAPI веÑнÑÑ ÐµÐ³Ð¾ напÑÑмÑÑ. -УбедиÑеÑÑ, ÑÑо ваÑи даннÑе имеÑÑ ÐºÐ¾ÑÑекÑнÑй Ñип. ÐапÑимеÑ, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`. +УбедиÑеÑÑ, ÑÑо ваÑи даннÑе имеÑÑ ÐºÐ¾ÑÑекÑнÑй Ñип. ÐапÑимеÑ, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON, еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `JSONResponse`. Также ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ð½Ðµ оÑпÑавлÑеÑе даннÑе, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли бÑÑÑ Ð¾ÑÑилÑÑÑÐ¾Ð²Ð°Ð½Ñ ÑеÑез `response_model`. + /// -### ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ +### ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ { #more-info } /// note | Ð¢ÐµÑ Ð½Ð¸ÑеÑкие деÑали + ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.responses import Response` или `from starlette.responses import JSONResponse`. **FastAPI** пÑедоÑÑавлÑÐµÑ `fastapi.responses`, коÑоÑÑе ÑвлÑÑÑÑÑ Ñеми же обÑекÑами, ÑÑо и `starlette.responses`, пÑоÑÑо Ð´Ð»Ñ ÑдобÑÑва. Ðднако болÑÑинÑÑво доÑÑÑпнÑÑ Ñипов оÑвеÑов поÑÑÑÐ¿Ð°ÐµÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно из **Starlette**. -ÐÐ»Ñ ÑÑÑановки заголовков и cookies `Response` иÑполÑзÑеÑÑÑ ÑаÑÑо, поÑÑÐ¾Ð¼Ñ **FastAPI** Ñакже пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ ÑеÑез `fastapi.responses`. +Ð Ñак как `Response` ÑаÑÑо иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÑÑановки HTTP-заголовков и cookies, **FastAPI** Ñакже пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ как `fastapi.Response`. + /// ЧÑÐ¾Ð±Ñ ÑвидеÑÑ Ð²Ñе доÑÑÑпнÑе паÑамеÑÑÑ Ð¸ наÑÑÑойки, ознакомÑÑеÑÑ Ñ Ð´Ð¾ÐºÑменÑаÑией Starlette. diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md index ee83d22b10..febd40ed4a 100644 --- a/docs/ru/docs/advanced/response-directly.md +++ b/docs/ru/docs/advanced/response-directly.md @@ -1,4 +1,4 @@ -# ÐозвÑÐ°Ñ Ð¾ÑвеÑа напÑÑмÑÑ +# ÐозвÑÐ°Ñ Ð¾ÑвеÑа напÑÑмÑÑ { #return-a-response-directly } Ðогда Ð²Ñ ÑоздаÑÑе **FastAPI** *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð¸Ð· Ð½ÐµÑ Ð»ÑбÑе даннÑе: `dict`, `list`, Pydantic-моделÑ, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ Ñ.д. @@ -8,9 +8,9 @@ Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ `JSONResponse` напÑÑмÑÑ Ð¸Ð· ваÑÐ¸Ñ *опеÑаÑий пÑÑи*. -ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, еÑли нÑжно веÑнÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие заголовки или кÑки. +ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, еÑли нÑжно веÑнÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие HTTP-заголовки или cookie. -## ÐозвÑÐ°Ñ `Response` +## ÐозвÑÐ°Ñ `Response` { #return-a-response } Ðа Ñамом деле, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð»Ñбой обÑÐµÐºÑ `Response` или его подклаÑÑ. @@ -26,7 +26,7 @@ ÐÑо даÑÑ Ð²Ð°Ð¼ болÑÑÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð»ÑбÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ , пеÑеопÑеделÑÑÑ Ð»ÑбÑе обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ Ñ.д. -## ÐÑполÑзование `jsonable_encoder` в `Response` +## ÐÑполÑзование `jsonable_encoder` в `Response` { #using-the-jsonable-encoder-in-a-response } ÐоÑколÑÐºÑ **FastAPI** не изменÑÐµÑ Ð¾Ð±ÑÐµÐºÑ `Response`, коÑоÑÑй Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑбедиÑÑÑÑ, ÑÑо его ÑодеÑжимое гоÑово к оÑпÑавке. @@ -44,7 +44,7 @@ /// -## ÐозвÑÐ°Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого `Response` +## ÐозвÑÐ°Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого `Response` { #returning-a-custom-response } ÐÑÐ¸Ð¼ÐµÑ Ð²ÑÑе показÑÐ²Ð°ÐµÑ Ð²Ñе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе ÑаÑÑи, но он пока не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, Ñак как Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð¿ÑоÑÑо веÑнÑÑÑ `item` напÑÑмÑÑ, и **FastAPI** помеÑÑил Ð±Ñ ÐµÐ³Ð¾ в `JSONResponse`, пÑеобÑазовав в `dict` и Ñ.д. ÐÑÑ ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. @@ -56,7 +56,7 @@ {* ../../docs_src/response_directly/tutorial002.py hl[1,18] *} -## ÐÑимеÑÐ°Ð½Ð¸Ñ +## ÐÑимеÑÐ°Ð½Ð¸Ñ { #notes } Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе обÑÐµÐºÑ `Response` напÑÑмÑÑ, его даннÑе не валидиÑÑÑÑÑÑ, не пÑеобÑазÑÑÑÑÑ (не ÑеÑиализÑÑÑÑÑ) и не докÑменÑиÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки. diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md index bc9dfcbffb..b73fa1ddba 100644 --- a/docs/ru/docs/advanced/websockets.md +++ b/docs/ru/docs/advanced/websockets.md @@ -1,10 +1,10 @@ -# Ðеб-ÑокеÑÑ +# Ðеб-ÑокеÑÑ { #websockets } ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð²ÐµÐ±-ÑокеÑÑ Ð² **FastAPI**. -## УÑÑановка `WebSockets` +## УÑÑановка `websockets` { #install-websockets } -УбедиÑеÑÑ, ÑÑо [виÑÑÑалÑÐ½Ð°Ñ ÑÑеда](../virtual-environments.md){.internal-link target=_blank} Ñоздана, акÑивиÑÑйÑе ÐµÑ Ð¸ ÑÑÑановиÑе `websockets`: +УбедиÑеÑÑ, ÑÑо Ð²Ñ Ñоздали [виÑÑÑалÑное окÑÑжение](../virtual-environments.md){.internal-link target=_blank}, акÑивиÑовали его и ÑÑÑановили `websockets` (библиоÑека Python, ÑпÑоÑаÑÑÐ°Ñ ÑабоÑÑ Ñ Ð¿ÑоÑоколом "WebSocket"):
-## ÐбÑабоÑка оÑклÑÑений и ÑабоÑа Ñ Ð½ÐµÑколÑкими клиенÑами
+## ÐбÑабоÑка оÑклÑÑений и ÑабоÑа Ñ Ð½ÐµÑколÑкими клиенÑами { #handling-disconnections-and-multiple-clients }
ÐÑли веб-ÑÐ¾ÐºÐµÑ Ñоединение закÑÑÑо, Ñо `await websocket.receive_text()` вÑÐ·Ð¾Ð²ÐµÑ Ð¸ÑклÑÑение `WebSocketDisconnect`, коÑоÑое можно поймаÑÑ Ð¸ обÑабоÑаÑÑ ÐºÐ°Ðº в ÑÑом пÑимеÑе:
@@ -168,7 +168,7 @@ $ fastapi dev main.py
Client #1596980209979 left the chat
```
-/// tip | ÐÑимеÑание
+/// tip | ÐодÑказка
ÐÑиложение вÑÑе - ÑÑо вÑего лиÑÑ Ð¿ÑоÑÑой минималÑнÑй пÑимеÑ, демонÑÑÑиÑÑÑÑий обÑабоÑÐºÑ Ð¸ пеÑедаÑÑ ÑообÑений неÑколÑким веб-ÑÐ¾ÐºÐµÑ ÑоединениÑм.
@@ -178,7 +178,7 @@ Client #1596980209979 left the chat
///
-## ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
+## ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ { #more-info }
ÐÐ»Ñ Ð±Ð¾Ð»ÐµÐµ глÑбокого изÑÑÐµÐ½Ð¸Ñ ÑÐµÐ¼Ñ Ð²Ð¾ÑполÑзÑйÑеÑÑ Ð´Ð¾ÐºÑменÑаÑией Starlette:
diff --git a/docs/ru/docs/alternatives.md b/docs/ru/docs/alternatives.md
index 3c5147e793..6380bcc45c 100644
--- a/docs/ru/docs/alternatives.md
+++ b/docs/ru/docs/alternatives.md
@@ -1,104 +1,94 @@
-# ÐлÑÑеÑнаÑивÑ, иÑÑоÑники вдоÑ
Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¸ ÑÑавнениÑ
+# ÐлÑÑеÑнаÑивÑ, иÑÑоÑники вдоÑ
Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¸ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ { #alternatives-inspiration-and-comparisons }
-ЧÑо вдоÑ
новило на Ñоздание **FastAPI**, ÑÑавнение его Ñ Ð°Ð»ÑÑеÑнаÑивами и ÑÐµÐ¼Ñ Ð¾Ð½ наÑÑилÑÑ Ñ Ð½Ð¸Ñ
.
+ЧÑо вдоÑ
новило **FastAPI**, ÑÑавнение Ñ Ð°Ð»ÑÑеÑнаÑивами и ÑÐµÐ¼Ñ Ð¾Ð½ Ñ Ð½Ð¸Ñ
наÑÑилÑÑ.
-## Ðведение
+## Ðведение { #intro }
-**FastAPI** не ÑÑÑеÑÑвовал бÑ, еÑли б не бÑло более ÑанниÑ
ÑÐ°Ð±Ð¾Ñ Ð´ÑÑгиÑ
лÑдей.
+**FastAPI** не ÑÑÑеÑÑвовал Ð±Ñ Ð±ÐµÐ· пÑедÑдÑÑиÑ
ÑÐ°Ð±Ð¾Ñ Ð´ÑÑгиÑ
лÑдей.
-Ðни Ñоздали болÑÑое колиÑеÑÑво инÑÑÑÑменÑов, коÑоÑÑе вдоÑ
новили Ð¼ÐµÐ½Ñ Ð½Ð° Ñоздание **FastAPI**.
+ÐÑло Ñоздано множеÑÑво инÑÑÑÑменÑов, коÑоÑÑе вдоÑ
новили на его поÑвление.
-Я вÑÑÑеÑки избегал ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÑеймвоÑка в ÑеÑение неÑколÑкиÑ
леÑ.
-СнаÑала Ñ Ð¿ÑÑалÑÑ ÑобÑаÑÑ Ð²Ñе нÑжнÑе ÑÑнкÑии, коÑоÑÑе нÑне еÑÑÑ Ð² **FastAPI**, иÑполÑзÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑазлиÑнÑÑ
ÑÑеймвоÑков, плагинов и инÑÑÑÑменÑов.
+Я неÑколÑко Ð»ÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°Ð» ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÑеймвоÑка. СнаÑала пÑÑалÑÑ Ð·Ð°ÐºÑÑÑÑ Ð²Ñе возможноÑÑи, коÑоÑÑе ÑейÑÐ°Ñ Ð¿ÑедоÑÑавлÑÐµÑ **FastAPI**, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑва ÑазнÑÑ
ÑÑеймвоÑков, плагинов и инÑÑÑÑменÑов.
-Ðо в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ оÑÑалоÑÑ Ð´ÑÑгого вÑбоÑа, кÑоме как ÑоздаÑÑ ÑÑо-Ñо, ÑÑо пÑедоÑÑавлÑло Ð±Ñ Ð²Ñе ÑÑи ÑÑнкÑии ÑÑазÑ.
-ÐзÑÑÑ ÑамÑе лÑÑÑие идеи из пÑедÑдÑÑиÑ
инÑÑÑÑменÑов и, иÑполÑзÑÑ Ð½Ð¾Ð²Ñе возможноÑÑи Python (коÑоÑÑÑ
не бÑло до веÑÑии 3.6, Ñо еÑÑÑ Ð¿Ð¾Ð´Ñказки Ñипов), обÑединиÑÑ Ð¸Ñ
.
+Ðо в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ оÑÑалоÑÑ Ð´ÑÑгого ваÑианÑа, кÑоме как ÑоздаÑÑ ÑÑо-Ñо, ÑÑо вклÑÑÐ°ÐµÑ Ð²Ñе ÑÑи возможноÑÑи, взÑв лÑÑÑие идеи из пÑежниÑ
инÑÑÑÑменÑов и ÑовмеÑÑив иÑ
макÑималÑно ÑдаÑнÑм обÑазом, иÑполÑзÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑзÑка, коÑоÑÑÑ
пÑежде не бÑло (анноÑаÑии Ñипов в Python 3.6+).
-## ÐÑедÑеÑÑвÑÑÑие инÑÑÑÑменÑÑ
+## ÐÑедÑеÑÑвÑÑÑие инÑÑÑÑменÑÑ { #previous-tools }
-### Django
+### Django { #django }
-ÐÑо ÑамÑй попÑлÑÑнÑй Python-ÑÑеймвоÑк, и он полÑзÑеÑÑÑ Ð´Ð¾Ð²ÐµÑием.
-Ðн иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоекÑов Ñипа Instagram.
+ÐÑо ÑамÑй попÑлÑÑнÑй Python-ÑÑеймвоÑк, ÐµÐ¼Ñ ÑиÑоко довеÑÑÑÑ. Ðн иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ ÑиÑÑем вÑоде Instagram.
-Django доволÑно ÑеÑно ÑвÑзан Ñ ÑелÑÑионнÑми базами даннÑÑ
(Ñакими как MySQL или PostgreSQL), поÑÐ¾Ð¼Ñ Ð¸ÑполÑзоваÑÑ NoSQL Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
(напÑимеÑ, Couchbase, MongoDB, Cassandra и Ñ.п.) в каÑеÑÑве оÑновного Ñ
ÑанилиÑа даннÑÑ
- непÑоÑÑо.
+Ðн оÑноÑиÑелÑно ÑеÑно ÑвÑзан Ñ ÑелÑÑионнÑми базами даннÑÑ
(напÑимеÑ, MySQL или PostgreSQL), поÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзоваÑÑ NoSQL-Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
(напÑимеÑ, Couchbase, MongoDB, Cassandra и Ñ. п.) в каÑеÑÑве оÑновного Ñ
ÑанилиÑа не оÑÐµÐ½Ñ Ð¿ÑоÑÑо.
-Ðн бÑл Ñоздан Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии HTML-ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ð° ÑеÑвеÑе, а не Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, иÑполÑзÑемÑÑ
ÑовÑеменнÑми веб-инÑеÑÑейÑами (React, Vue.js, Angular и Ñ.п.) или дÑÑгими ÑиÑÑемами (напÑимеÑ, IoT) взаимодейÑÑвÑÑÑими Ñ ÑеÑвеÑом.
+Ðн бÑл Ñоздан Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии HTML на бÑкенде, а не Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, иÑполÑзÑемÑÑ
ÑовÑеменнÑм ÑÑонÑендом (напÑимеÑ, React, Vue.js и Angular) или дÑÑгими ÑиÑÑемами (напÑимеÑ, ÑÑÑÑойÑÑвами IoT), коÑоÑÑе Ñ Ð½Ð¸Ð¼ обÑаÑÑÑÑ.
-### Django REST Framework
+### Django REST Framework { #django-rest-framework }
-ФÑеймвоÑк Django REST бÑл Ñоздан, как гибкий инÑÑÑÑменÑаÑий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÐµÐ±-API на оÑнове Django.
+Django REST Framework бÑл Ñоздан как гибкий Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð²ÐµÐ±-API повеÑÑ
Django, ÑÑÐ¾Ð±Ñ ÑлÑÑÑиÑÑ ÐµÐ³Ð¾ возможноÑÑи в ÑаÑÑи API.
-DRF иÑполÑзовалÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ð¼Ð¸ компаниÑми, вклÑÑÐ°Ñ Mozilla, Red Hat и Eventbrite.
+Ðн иÑполÑзÑеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ð¼Ð¸ компаниÑми, вклÑÑÐ°Ñ Mozilla, Red Hat и Eventbrite.
-ÐÑо бÑл один из пеÑвÑÑ
пÑимеÑов **авÑомаÑиÑеÑкого докÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ API** и ÑÑо бÑла одна из пеÑвÑÑ
идей, вдоÑ
новивÑиÑ
на Ñоздание **FastAPI**.
+ÐÑо бÑл один из пеÑвÑÑ
пÑимеÑов **авÑомаÑиÑеÑкой докÑменÑаÑии API**, и именно ÑÑа Ð¸Ð´ÐµÑ Ð¾Ð´Ð½Ð¾Ð¹ из пеÑвÑÑ
вдоÑ
новила на «поиÑк» **FastAPI**.
/// note | ÐамеÑка
-Django REST Framework бÑл Ñоздан Tom Christie.
-Ðн же Ñоздал Starlette и Uvicorn, на коÑоÑÑÑ
оÑнован **FastAPI**.
+Django REST Framework бÑл Ñоздан Томом ÐÑиÑÑи. Ðн же Ñоздал Starlette и Uvicorn, на коÑоÑÑÑ
оÑнован **FastAPI**.
///
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-Ðолжно бÑÑÑ Ð°Ð²ÑомаÑиÑеÑкое Ñоздание докÑменÑаÑии API Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑким веб-инÑеÑÑейÑом.
+ÐалиÑие полÑзоваÑелÑÑкого веб-инÑеÑÑейÑа Ñ Ð°Ð²ÑомаÑиÑеÑкой докÑменÑаÑией API.
///
-### Flask
+### Flask { #flask }
-Flask - ÑÑо "микÑоÑÑеймвоÑк", в нÑм Ð½ÐµÑ Ð¸Ð½ÑегÑаÑии Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
и многиÑ
дÑÑгиÑ
веÑей, коÑоÑÑе пÑедÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² Django.
+Flask â ÑÑо «микÑоÑÑеймвоÑк», он не вклÑÑÐ°ÐµÑ Ð¸Ð½ÑегÑаÑии Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
и многие дÑÑгие веÑи, коÑоÑÑе в Django идÑÑ Â«Ð¸Ð· коÑобки».
-Ðго пÑоÑÑоÑа и гибкоÑÑÑ Ð´Ð°ÑÑ ÑиÑокие возможноÑÑи, Ñакие как иÑполÑзование баз даннÑÑ
NoSQL в каÑеÑÑве оÑновной ÑиÑÑÐµÐ¼Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
.
+ÐÑа пÑоÑÑоÑа и гибкоÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑеÑ, напÑимеÑ, иÑполÑзоваÑÑ NoSQL-Ð±Ð°Ð·Ñ Ð² каÑеÑÑве оÑновной ÑиÑÑÐµÐ¼Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
.
-Ðн оÑÐµÐ½Ñ Ð¿ÑоÑÑ, его изÑÑение инÑÑиÑивно понÑÑно, Ñ
оÑÑ Ð² некоÑоÑÑÑ
меÑÑаÑ
докÑменÑаÑÐ¸Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно ÑеÑ
ниÑеÑкаÑ.
+Ðн оÑÐµÐ½Ñ Ð¿ÑоÑÑ, его оÑноÑиÑелÑно легко инÑÑиÑивно оÑвоиÑÑ, Ñ
оÑÑ Ð¼ÐµÑÑами докÑменÑаÑÐ¸Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно ÑеÑ
ниÑеÑкаÑ.
-Flask ÑаÑÑо иÑполÑзÑеÑÑÑ Ð¸ Ð´Ð»Ñ Ð¿Ñиложений, коÑоÑÑм не нÑжна база даннÑÑ
, наÑÑÑойки пÑав доÑÑÑпа Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелей и пÑоÑие из множеÑÑва ÑÑнкÑий, пÑедваÑиÑелÑно вÑÑÑоеннÑÑ
в Django.
-ХоÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ из ÑÑиÑ
ÑÑнкÑий могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð².
+Ðго Ñакже ÑаÑÑо иÑполÑзÑÑÑ Ð´Ð»Ñ Ð¿Ñиложений, коÑоÑÑм не нÑжна база даннÑÑ
, ÑпÑавление полÑзоваÑелÑми или многие дÑÑгие ÑÑнкÑии, пÑедваÑиÑелÑно вÑÑÑоеннÑе в Django. ХоÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ из ÑÑиÑ
возможноÑÑей можно добавиÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°Ð¼Ð¸.
-Такое Ñазделение на ÑаÑÑи и Ñо, ÑÑо ÑÑо "микÑоÑÑеймвоÑк", коÑоÑÑй можно ÑаÑÑиÑиÑÑ, добавлÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑе возможноÑÑи, бÑло клÑÑевой оÑобенноÑÑÑÑ, коÑоÑÑÑ Ñ Ñ
оÑел ÑоÑ
ÑаниÑÑ.
+Такое Ñазбиение на ÑаÑÑи и Ñо, ÑÑо ÑÑо «микÑоÑÑеймвоÑк», коÑоÑÑй можно ÑаÑÑиÑÑÑÑ Ñовно под нÑждÑ, â клÑÑÐµÐ²Ð°Ñ Ð¾ÑобенноÑÑÑ, коÑоÑÑÑ Ñ
оÑелоÑÑ ÑоÑ
ÑаниÑÑ.
-ÐÑоÑÑоÑа Flask, показалаÑÑ Ð¼Ð½Ðµ подÑ
одÑÑей Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API.
-Ðо еÑÑ Ð½Ñжно бÑло найÑи "Django REST Framework" Ð´Ð»Ñ Flask.
+С ÑÑÑÑом пÑоÑÑоÑÑ Flask он казалÑÑ Ñ
оÑоÑим ваÑианÑом Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API. СледÑÑÑим бÑло найÑи «Django REST Framework» Ð´Ð»Ñ Flask.
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐÑо бÑÐ´ÐµÑ Ð¼Ð¸ÐºÑоÑÑеймвоÑк. Ð Ð½ÐµÐ¼Ñ Ð»ÐµÐ³ÐºÐ¾ бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑе инÑÑÑÑменÑÑ Ð¸ ÑаÑÑи.
+ÐÑÑÑ Ð¼Ð¸ÐºÑо-ÑÑеймвоÑком. ÐблегÑиÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸Ñование необÑ
одимÑÑ
инÑÑÑÑменÑов и компоненÑов.
-Ðолжна бÑÑÑ Ð¿ÑоÑÑÐ°Ñ Ð¸ лÑÐ³ÐºÐ°Ñ Ð² иÑполÑзовании ÑиÑÑема маÑÑÑÑÑизаÑии запÑоÑов.
+ÐмеÑÑ Ð¿ÑоÑÑÑÑ Ð¸ ÑдобнÑÑ ÑиÑÑÐµÐ¼Ñ Ð¼Ð°ÑÑÑÑÑизаÑии.
///
-### Requests
+### Requests { #requests }
-Ðа Ñамом деле **FastAPI** не ÑвлÑеÑÑÑ Ð°Ð»ÑÑеÑнаÑивой **Requests**.
-ÐÑ
облаÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑÐµÐ½Ñ ÑазнаÑ.
+**FastAPI** на Ñамом деле не алÑÑеÑнаÑива **Requests**. ÐÑ
облаÑÑи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑÐµÐ½Ñ ÑазлиÑнÑ.
-РпÑинÑипе, можно иÑполÑзоваÑÑ Requests *внÑÑÑи* пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI.
+ÐбÑÑно Requests иÑполÑзÑÑÑ Ð´Ð°Ð¶Ðµ внÑÑÑи пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI.
-Ðо вÑÑ Ð¶Ðµ Ñ Ð¸ÑполÑзовал в FastAPI некоÑоÑÑе идеи из Requests.
+РвÑÑ Ð¶Ðµ **FastAPI** во многом вдоÑ
новлÑлÑÑ Requests.
-**Requests** - ÑÑо библиоÑека Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ API в каÑеÑÑве клиенÑа,
-в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº **FastAPI** - ÑÑо библиоÑека Ð´Ð»Ñ *ÑозданиÑ* API (Ñо еÑÑÑ ÑеÑвеÑа).
+**Requests** â ÑÑо библиоÑека Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ API (как клиенÑ), а **FastAPI** â библиоÑека Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API (как ÑеÑвеÑ).
-Ðни, Ñак или инаÑе, диамеÑÑалÑно пÑоÑÐ¸Ð²Ð¾Ð¿Ð¾Ð»Ð¾Ð¶Ð½Ñ Ð¸ дополнÑÑÑ Ð´ÑÑг дÑÑга.
+Ðни, в каком-Ñо ÑмÑÑле, наÑ
одÑÑÑÑ Ð½Ð° пÑоÑивоположнÑÑ
конÑаÑ
и дополнÑÑÑ Ð´ÑÑг дÑÑга.
-Requests Ð¸Ð¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑой и понÑÑнÑй дизайн, оÑÐµÐ½Ñ Ð¿ÑоÑÑ Ð² иÑполÑзовании и Ð¸Ð¼ÐµÐµÑ ÑазÑмнÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
-Рв Ñо же вÑÐµÐ¼Ñ Ð¾Ð½ оÑÐµÐ½Ñ Ð¼Ð¾ÑнÑй и наÑÑÑаиваемÑй.
+Requests Ð¸Ð¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑой и понÑÑнÑй дизайн, им оÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾ полÑзоваÑÑÑÑ, еÑÑÑ ÑазÑмнÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. РпÑи ÑÑом он оÑÐµÐ½Ñ Ð¼Ð¾ÑнÑй и наÑÑÑаиваемÑй.
-ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð½Ð° оÑиÑиалÑном ÑайÑе напиÑано:
+Ðменно поÑÑÐ¾Ð¼Ñ Ð½Ð° оÑиÑиалÑном ÑайÑе Ñказано:
-> Requests - один из ÑамÑÑ
загÑÑжаемÑÑ
пакеÑов Python вÑеÑ
вÑемен
+> Requests â один из ÑамÑÑ
загÑÑжаемÑÑ
Python-пакеÑов вÑеÑ
вÑемÑн
-
-ÐÑполÑзоваÑÑ ÐµÐ³Ð¾ оÑÐµÐ½Ñ Ð¿ÑоÑÑо. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð²ÑполниÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ `GET`, ÐÑ Ð±Ñ Ð½Ð°Ð¿Ð¸Ñали:
+ÐолÑзоваÑÑÑÑ Ð¸Ð¼ оÑÐµÐ½Ñ Ð¿ÑоÑÑо. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ ÑделаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ `GET`, Ð²Ñ Ð±Ñ Ð½Ð°Ð¿Ð¸Ñали:
```Python
response = requests.get("http://example.com/some/url")
```
-ÐÑоÑÐ¸Ð²Ð¾Ð¿Ð¾Ð»Ð¾Ð¶Ð½Ð°Ñ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* в FastAPI Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ ÑледÑÑÑим обÑазом:
+СооÑвеÑÑÑвÑÑÑÐ°Ñ Ð² FastAPI API-опеÑаÑÐ¸Ñ Ð¿ÑÑи могла Ð±Ñ Ð²ÑглÑдеÑÑ Ñак:
```Python hl_lines="1"
@app.get("/some/url")
@@ -106,428 +96,390 @@ def read_url():
return {"message": "Hello World"}
```
-ÐлÑдиÑе, как поÑ
оже `requests.get(...)` и `@app.get(...)`.
+ÐоÑмоÑÑиÑе, наÑколÑко поÑ
ожи `requests.get(...)` и `@app.get(...)`.
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-* Ðолжен бÑÑÑ Ð¿ÑоÑÑой и понÑÑнÑй API.
-* ÐÑжно иÑполÑзоваÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ HTTP-меÑодов (опеÑаÑий) Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿ÑоиÑÑ
одÑÑего.
-* ÐÐ¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑазÑмнÑе наÑÑÑойки по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ ÑиÑокие возможноÑÑи иÑ
каÑÑомизаÑии.
+* ÐмеÑÑ Ð¿ÑоÑÑой и понÑÑнÑй API.
+* ÐÑполÑзоваÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ HTTP-меÑодов (опеÑаÑий) напÑÑмÑÑ, пÑоÑÑÑм и инÑÑиÑивнÑм обÑазом.
+* ÐмеÑÑ ÑазÑмнÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, но и моÑнÑе наÑÑÑойки.
///
-### Swagger / OpenAPI
+### Swagger / OpenAPI { #swagger-openapi }
-Ðлавной ÑÑнкÑией, коÑоÑÑÑ Ñ Ñ
оÑел ÑнаÑледоваÑÑ Ð¾Ñ Django REST Framework, бÑла авÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API.
+Ðлавной возможноÑÑÑÑ, коÑоÑÑÑ Ñ
оÑелоÑÑ Ð²Ð·ÑÑÑ Ð¸Ð· Django REST Framework, бÑла авÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API.
-Ðо поÑом Ñ Ð¾Ð±Ð½Ð°ÑÑжил, ÑÑо ÑÑÑеÑÑвÑÐµÑ ÑÑандаÑÑ Ð´Ð¾ÐºÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ API, иÑполÑзÑÑÑий JSON (или YAML, ÑаÑÑиÑение JSON) под названием Swagger.
+ÐаÑем Ñ Ð¾Ð±Ð½Ð°ÑÑжил, ÑÑо еÑÑÑ ÑÑандаÑÑ Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ API Ñ Ð¸ÑполÑзованием JSON (или YAML â ÑаÑÑиÑÐµÐ½Ð¸Ñ JSON), под названием Swagger.
-Рк Ð½ÐµÐ¼Ñ Ñже бÑл Ñоздан полÑзоваÑелÑÑкий веб-инÑеÑÑейÑ.
-Таким обÑазом, возможноÑÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Swagger Ð´Ð»Ñ API позволила Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¸Ð½ÑеÑÑейÑ.
+Ð Ñже ÑÑÑеÑÑвовал веб-инÑеÑÑÐµÐ¹Ñ Ð´Ð»Ñ Swagger API. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Swagger Ð´Ð»Ñ API позволила Ð±Ñ Ð°Ð²ÑомаÑиÑеÑки иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð²ÐµÐ±-инÑеÑÑейÑ.
Ркакой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Swagger бÑл пеÑедан Linux Foundation и пеÑеименован в OpenAPI.
-ÐÐ¾Ñ Ð¿Ð¾ÑемÑ, когда говоÑÑÑ Ð¾ веÑÑии 2.0, обÑÑно говоÑÑÑ "Swagger", а Ð´Ð»Ñ Ð²ÐµÑÑии 3+ "OpenAPI".
+ÐÐ¾Ñ Ð¿Ð¾ÑемÑ, говоÑÑ Ð¾ веÑÑии 2.0, обÑÑно говоÑÑÑ Â«Swagger», а о веÑÑии 3+ â «OpenAPI».
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐÑполÑзоваÑÑ Ð¾ÑкÑÑÑÑе ÑÑандаÑÑÑ Ð´Ð»Ñ ÑпеÑиÑикаÑий API вмеÑÑо ÑамоделÑнÑÑ
ÑÑ
ем.
+ÐÑполÑзоваÑÑ Ð¾ÑкÑÑÑÑй ÑÑандаÑÑ Ð´Ð»Ñ ÑпеÑиÑикаÑий API вмеÑÑо ÑамоделÑной ÑÑ
емÑ.
-СовмеÑÑимоÑÑÑ Ñ Ð¾ÑнованнÑми на ÑÑандаÑÑаÑ
полÑзоваÑелÑÑкими инÑеÑÑейÑами:
+РинÑегÑиÑоваÑÑ Ð¾ÑнованнÑе на ÑÑандаÑÑаÑ
инÑÑÑÑменÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого инÑеÑÑейÑа:
* Swagger UI
* ReDoc
-Ðни бÑли вÑбÑÐ°Ð½Ñ Ð·Ð° попÑлÑÑноÑÑÑ Ð¸ ÑÑабилÑноÑÑÑ.
-Ðо Ñделав беглÑй поиÑк, ÐÑ Ð¼Ð¾Ð¶ÐµÑе найÑи деÑÑÑки алÑÑеÑнаÑивнÑÑ
полÑзоваÑелÑÑкиÑ
инÑеÑÑейÑов Ð´Ð»Ñ OpenAPI, коÑоÑÑе ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñ **FastAPI**.
+ÐÑи два инÑÑÑÑменÑа вÑбÑÐ°Ð½Ñ Ð·Ð° попÑлÑÑноÑÑÑ Ð¸ ÑÑабилÑноÑÑÑ, но даже пÑи беглом поиÑке можно найÑи деÑÑÑки алÑÑеÑнаÑивнÑÑ
инÑеÑÑейÑов Ð´Ð»Ñ OpenAPI (коÑоÑÑе можно иÑполÑзоваÑÑ Ñ **FastAPI**).
///
-### REST ÑÑеймвоÑки Ð´Ð»Ñ Flask
+### REST-ÑÑеймвоÑки Ð´Ð»Ñ Flask { #flask-rest-frameworks }
-СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко REST ÑÑеймвоÑков Ð´Ð»Ñ Flask, но поÑÑаÑив вÑÐµÐ¼Ñ Ð¸ ÑÑÐ¸Ð»Ð¸Ñ Ð½Ð° иÑ
изÑÑение, Ñ Ð¾Ð±Ð½Ð°ÑÑжил, ÑÑо многие из ниÑ
не обновлÑÑÑÑÑ Ð¸Ð»Ð¸ забÑоÑÐµÐ½Ñ Ð¸ имеÑÑ Ð½ÐµÑеÑÑннÑе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸Ð·-за коÑоÑÑÑ
они непÑÐ¸Ð³Ð¾Ð´Ð½Ñ Ðº иÑполÑзованиÑ.
+СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко REST-ÑÑеймвоÑков Ð´Ð»Ñ Flask, но, вложив вÑÐµÐ¼Ñ Ð¸ ÑÑÐ¸Ð»Ð¸Ñ Ð² иÑÑледование, Ñ Ð¾Ð±Ð½Ð°ÑÑжил, ÑÑо многие из ниÑ
пÑекÑаÑÐµÐ½Ñ Ð¸Ð»Ð¸ забÑоÑенÑ, Ñ Ð½ÐµÑколÑкими неÑеÑÑннÑми Issue (ÑикеÑ\обÑаÑение), из-за коÑоÑÑÑ
они непÑигоднÑ.
-### Marshmallow
+### Marshmallow { #marshmallow }
-Ðдной из оÑновнÑÑ
ÑÑнкÑий, необÑ
одимÑÑ
ÑиÑÑемам API, ÑвлÑеÑÑÑ "ÑеÑиализаÑиÑ" даннÑÑ
, Ñо еÑÑÑ Ð¿ÑеобÑазование даннÑÑ
из кода (Python) во ÑÑо-Ñо, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑпÑавлено по ÑеÑи.
-ÐапÑимеÑ, пÑевÑаÑение обÑекÑа ÑодеÑжаÑего даннÑе из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в обÑÐµÐºÑ JSON, конвеÑÑаÑÐ¸Ñ Ð¾Ð±ÑекÑа `datetime` в ÑÑÑÐ¾ÐºÑ Ð¸ Ñ.п.
+Ðдна из оÑновнÑÑ
возможноÑÑей, нÑжнÑÑ
ÑиÑÑемам API, â «ÑеÑиализаÑиÑ» даннÑÑ
, Ñо еÑÑÑ Ð¿ÑеобÑазование даннÑÑ
из кода (Python) во ÑÑо-Ñо, ÑÑо можно оÑпÑавиÑÑ Ð¿Ð¾ ÑеÑи. ÐапÑимеÑ, пÑеобÑазование обÑекÑа Ñ Ð´Ð°Ð½Ð½Ñми из Ð±Ð°Ð·Ñ Ð² JSON-обÑекÑ. ÐÑеобÑазование обÑекÑов `datetime` в ÑÑÑоки и Ñ. п.
-ÐÑе одна Ð²Ð°Ð¶Ð½Ð°Ñ ÑÑнкÑиÑ, необÑ
Ð¾Ð´Ð¸Ð¼Ð°Ñ API â пÑовеÑка даннÑÑ
, позволÑÑÑÐ°Ñ ÑбедиÑÑÑÑ, ÑÑо даннÑе дейÑÑвиÑелÑÐ½Ñ Ð¸ ÑооÑвеÑÑÑвÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм паÑамеÑÑам.
-Ðак пÑимеÑ, можно ÑказаÑÑ, ÑÑо ожидаÑÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñипа `int`, а не какаÑ-Ñо пÑоизволÑÐ½Ð°Ñ ÑÑÑока.
-ÐÑо оÑобенно полезно Ð´Ð»Ñ Ð²Ñ
одÑÑиÑ
даннÑÑ
.
+ÐÑÑ Ð¾Ð´Ð½Ð° Ð²Ð°Ð¶Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, воÑÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð½Ð°Ñ API, â валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
: ÑбеждаÑÑÑÑ, ÑÑо даннÑе Ð²Ð°Ð»Ð¸Ð´Ð½Ñ Ñ ÑÑÑÑом заданнÑÑ
паÑамеÑÑов. ÐапÑимеÑ, ÑÑо какое-Ñо поле â `int`, а не пÑоизволÑÐ½Ð°Ñ ÑÑÑока. ÐÑо оÑобенно полезно Ð´Ð»Ñ Ð²Ñ
одÑÑиÑ
даннÑÑ
.
-Ðез ÑиÑÑÐµÐ¼Ñ Ð¿ÑовеÑки даннÑÑ
Ðам пÑиÑлоÑÑ Ð±Ñ Ð¿ÑопиÑÑваÑÑ Ð²Ñе пÑовеÑки вÑÑÑнÑÑ.
+Ðез ÑиÑÑÐµÐ¼Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии даннÑÑ
вам пÑиÑлоÑÑ Ð±Ñ Ð²ÑполнÑÑÑ Ð²Ñе пÑовеÑки вÑÑÑнÑÑ Ð² коде.
-Ðменно Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑÑиÑ
ÑÑнкÑий и бÑла Ñоздана Marshmallow.
-ÐÑо оÑлиÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека и Ñ Ð¼Ð½Ð¾Ð³Ð¾ Ñаз полÑзовалÑÑ ÐµÑ ÑанÑÑе.
+Ðменно Ð´Ð»Ñ ÑÑиÑ
возможноÑÑей и бÑл Ñоздан Marshmallow. ÐÑо оÑлиÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека, Ñ Ð¼Ð½Ð¾Ð³Ð¾ ей полÑзовалÑÑ ÑанÑÑе.
-Ðо она бÑла Ñоздана до Ñого, как поÑвилиÑÑ Ð¿Ð¾Ð´Ñказки Ñипов Python.
-ÐÑак, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÐºÐ°Ð¶Ð´ÑÑ ÑÑ
емÑ,
-Ðам нÑжно иÑполÑзоваÑÑ Ð¾Ð¿ÑеделеннÑе ÑÑилиÑÑ Ð¸ клаÑÑÑ, пÑедоÑÑавлÑемÑе Marshmallow.
+Ðо она поÑвилаÑÑ Ð´Ð¾ Ñого, как в Python поÑвилиÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑ
ÐµÐ¼Ñ Ð½Ñжно иÑполÑзоваÑÑ ÑпеÑиалÑнÑе ÑÑилиÑÑ Ð¸ клаÑÑÑ, пÑедоÑÑавлÑемÑе Marshmallow.
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐÑполÑзоваÑÑ ÐºÐ¾Ð´ пÑогÑÐ°Ð¼Ð¼Ñ Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ "ÑÑ
ем", опÑеделÑÑÑиÑ
ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и иÑ
пÑовеÑкÑ.
+ÐÑполÑзоваÑÑ ÐºÐ¾Ð´ Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Â«ÑÑ
ем», задаÑÑиÑ
ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и иÑ
валидаÑиÑ.
///
-### Webargs
+### Webargs { #webargs }
-ÐÑÑÐ³Ð°Ñ Ð½ÐµÐ¼Ð°Ð»Ð¾Ð²Ð°Ð¶Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ API - паÑÑинг даннÑÑ
из вÑ
одÑÑиÑ
запÑоÑов.
+ÐÑÑ Ð¾Ð´Ð½Ð° Ð²Ð°Ð¶Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð»Ñ API â паÑÑинг даннÑÑ
из вÑ
одÑÑиÑ
HTTP-запÑоÑов.
-Webargs - ÑÑо инÑÑÑÑменÑ, коÑоÑÑй бÑл Ñоздан Ð´Ð»Ñ ÑÑого и поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко ÑÑеймвоÑков, вклÑÑÐ°Ñ Flask.
+Webargs â ÑÑо инÑÑÑÑменÑ, ÑозданнÑй Ð´Ð»Ñ ÑÑого повеÑÑ
неÑколÑкиÑ
ÑÑеймвоÑков, вклÑÑÐ°Ñ Flask.
-ÐÐ»Ñ Ð¿ÑовеÑки даннÑÑ
он иÑполÑзÑÐµÑ Marshmallow и Ñоздан Ñеми же авÑоÑами.
+Ðн иÑполÑзÑÐµÑ Marshmallow Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии даннÑÑ
. Ð Ñоздан Ñеми же ÑазÑабоÑÑиками.
-ÐÑо пÑевоÑÑ
однÑй инÑÑÑÑÐ¼ÐµÐ½Ñ Ð¸ Ñ Ñоже ÑаÑÑо полÑзовалÑÑ Ð¸Ð¼ до **FastAPI**.
+ÐÑо оÑлиÑнÑй инÑÑÑÑменÑ, и Ñ Ñоже много им полÑзовалÑÑ Ð´Ð¾ поÑÐ²Ð»ÐµÐ½Ð¸Ñ **FastAPI**.
/// info | ÐнÑоÑмаÑиÑ
-Webargs Ð±Ñ Ñоздан ÑазÑабоÑÑиками Marshmallow.
+Webargs бÑл Ñоздан Ñеми же ÑазÑабоÑÑиками, ÑÑо и Marshmallow.
///
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-Ðолжна бÑÑÑ Ð°Ð²ÑомаÑиÑеÑÐºÐ°Ñ Ð¿ÑовеÑка вÑ
однÑÑ
даннÑÑ
.
+ÐвÑомаÑиÑеÑкÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð²Ñ
одÑÑиÑ
даннÑÑ
HTTP-запÑоÑа.
///
-### APISpec
+### APISpec { #apispec }
-Marshmallow и Webargs оÑÑÑеÑÑвлÑÑÑ Ð¿ÑовеÑкÑ, анализ и ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
как плагинÑ.
+Marshmallow и Webargs пÑедоÑÑавлÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑиÑ, паÑÑинг и ÑеÑиализаÑÐ¸Ñ ÐºÐ°Ðº плагинÑ.
-Ðо докÑменÑаÑии API вÑÑ ÐµÑÑ Ð½Ðµ бÑло. Тогда бÑл Ñоздан APISpec.
+Ðо докÑменÑаÑии вÑÑ ÐµÑÑ Ð½Ðµ бÑло. Тогда поÑвилÑÑ APISpec.
-ÐÑо плагин Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва ÑÑеймвоÑков, в Ñом ÑиÑле и Ð´Ð»Ñ Starlette.
+ÐÑо плагин Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
ÑÑеймвоÑков (еÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½ и Ð´Ð»Ñ Starlette).
-Ðн ÑабоÑÐ°ÐµÑ Ñак - ÐÑ Ð·Ð°Ð¿Ð¸ÑÑваеÑе опÑеделение ÑÑ
ем, иÑполÑзÑÑ ÑоÑÐ¼Ð°Ñ YAML, внÑÑÑи докÑÑÑинга каждой ÑÑнкÑии, обÑабаÑÑваÑÑей маÑÑÑÑÑ.
+Ðн ÑабоÑÐ°ÐµÑ Ñак: Ð²Ñ Ð¿Ð¸ÑеÑе опÑеделение ÑÑ
ÐµÐ¼Ñ Ð² ÑоÑмаÑе YAML внÑÑÑи докÑÑÑинга каждой ÑÑнкÑии, обÑабаÑÑваÑÑей маÑÑÑÑÑ.
-ÐÑполÑзÑÑ ÑÑи докÑÑÑинги, он генеÑиÑÑÐµÑ ÑÑ
ÐµÐ¼Ñ OpenAPI.
+Рон генеÑиÑÑÐµÑ ÑÑ
ÐµÐ¼Ñ OpenAPI.
-Так ÑÑо ÑабоÑÐ°ÐµÑ Ð´Ð»Ñ Flask, Starlette, Responder и Ñ.п.
+Так ÑÑо ÑабоÑÐ°ÐµÑ Ð²Ð¾ Flask, Starlette, Responder и Ñ. д.
-Ðо ÑепеÑÑ Ñ Ð½Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½Ð¾Ð²Ð°Ñ Ð¿Ñоблема - налиÑие поÑÑоÑоннего микÑо-ÑинÑакÑиÑа внÑÑÑи кода Python (болÑÑие YAML).
+Ðо Ñ Ð½Ð°Ñ Ñнова Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ñоблема: поÑвлÑеÑÑÑ Ð¼Ð¸ÐºÑо-ÑинÑакÑÐ¸Ñ Ð²Ð½ÑÑÑи ÑÑÑоки Python (болÑÑой YAML).
-РедакÑÐ¾Ñ ÐºÐ¾Ð´Ð° не оÑобо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð² Ñакой паÑадигме.
-Ризменив какие-Ñо паÑамеÑÑÑ Ð¸Ð»Ð¸ ÑÑ
ÐµÐ¼Ñ Ð´Ð»Ñ Marshmallow можно забÑÑÑ Ð¾ÑÑедакÑиÑоваÑÑ Ð´Ð¾ÐºÑÑÑинг Ñ YAML и ÑгенеÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑ
ема ÑÑановиÑÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑной.
+РедакÑÐ¾Ñ ÐºÐ¾Ð´Ð° мало Ñем Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ. РеÑли Ð¼Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð¼ паÑамеÑÑÑ Ð¸Ð»Ð¸ ÑÑ
ÐµÐ¼Ñ Marshmallow и забÑдем Ñакже измениÑÑ YAML в докÑÑÑинге, ÑгенеÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑ
ема ÑÑÑаÑееÑ.
/// info | ÐнÑоÑмаÑиÑ
-APISpec Ñоже бÑл Ñоздан авÑоÑами Marshmallow.
+APISpec бÑл Ñоздан Ñеми же ÑазÑабоÑÑиками, ÑÑо и Marshmallow.
///
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐеобÑ
одима поддеÑжка оÑкÑÑÑого ÑÑандаÑÑа Ð´Ð»Ñ API - OpenAPI.
+ÐоддеÑÐ¶ÐºÑ Ð¾ÑкÑÑÑого ÑÑандаÑÑа Ð´Ð»Ñ API â OpenAPI.
///
-### Flask-apispec
+### Flask-apispec { #flask-apispec }
-ÐÑо плагин Ð´Ð»Ñ Flask, коÑоÑÑй ÑвÑзан Ñ Webargs, Marshmallow и APISpec.
+ÐÑо плагин Ð´Ð»Ñ Flask, коÑоÑÑй ÑвÑзÑÐ²Ð°ÐµÑ Webargs, Marshmallow и APISpec.
-Ðн полÑÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ñ Webargs и Marshmallow, а заÑем иÑполÑзÑÐµÑ APISpec Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI.
+Ðн иÑполÑзÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· Webargs и Marshmallow, ÑÑÐ¾Ð±Ñ Ð°Ð²ÑомаÑиÑеÑки генеÑиÑоваÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ APISpec.
-ÐÑо оÑлиÑнÑй, но кÑайне недооÑенÑннÑй инÑÑÑÑменÑ.
-Ðн должен бÑÑÑ Ð±Ð¾Ð»ÐµÐµ попÑлÑÑен, Ñем многие Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ Ð´Ð»Ñ Flask.
-Ðозможно, ÑÑо ÑвÑзано Ñ Ñем, ÑÑо его докÑменÑаÑÐ¸Ñ ÑлиÑком ÑкÑдна и абÑÑÑакÑна.
+ÐÑлиÑнÑй и недооÑенÑннÑй инÑÑÑÑменÑ. Ðн заÑлÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð±Ð¾Ð»ÑÑей попÑлÑÑноÑÑи, Ñем многие Ð¿Ð»Ð°Ð³Ð¸Ð½Ñ Ð´Ð»Ñ Flask. Ðозможно, из-за ÑлиÑком кÑаÑкой и абÑÑÑакÑной докÑменÑаÑии.
-Ðн избавил Ð¾Ñ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи пиÑаÑÑ ÑÑжеÑоднÑй ÑинÑакÑÐ¸Ñ YAML внÑÑÑи докÑÑÑингов.
+ÐÑо ÑеÑило пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи пиÑаÑÑ YAML (еÑÑ Ð¾Ð´Ð¸Ð½ ÑинÑакÑиÑ) в докÑÑÑингаÑ
Python.
-Такое ÑоÑеÑание Flask, Flask-apispec, Marshmallow и Webargs бÑло моим лÑбимÑм ÑÑеком пÑи поÑÑÑоении бÑкенда до поÑÐ²Ð»ÐµÐ½Ð¸Ñ **FastAPI**.
+ÐомбинаÑÐ¸Ñ Flask, Flask-apispec Ñ Marshmallow и Webargs бÑла моим лÑбимÑм бÑкенд-ÑÑеком до ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ **FastAPI**.
-ÐÑполÑзование ÑÑого ÑÑека пÑивело к ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÑколÑкиÑ
генеÑаÑоÑов пÑоекÑов. Я и некоÑоÑÑе дÑÑгие ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð¾ ÑиÑ
Ð¿Ð¾Ñ Ð¸ÑполÑзÑем иÑ
:
+Ðго иÑполÑзование пÑивело к ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÑколÑкиÑ
full-stack генеÑаÑоÑов на Flask. ÐÑо оÑновнÑе ÑÑеки, коÑоÑÑе Ñ (и неÑколÑко внеÑниÑ
команд) иÑполÑзовали до ÑиÑ
поÑ:
* https://github.com/tiangolo/full-stack
* https://github.com/tiangolo/full-stack-flask-couchbase
* https://github.com/tiangolo/full-stack-flask-couchdb
-ÐÑи генеÑаÑоÑÑ Ð¿ÑоекÑов Ñакже ÑÑали оÑновой Ð´Ð»Ñ [ÐенеÑаÑоÑов пÑоекÑов Ñ **FastAPI**](project-generation.md){.internal-link target=_blank}.
+Ð ÑÑи же full-stack генеÑаÑоÑÑ ÑÑали оÑновой Ð´Ð»Ñ [ÐенеÑаÑоÑов пÑоекÑов **FastAPI**](project-generation.md){.internal-link target=_blank}.
/// info | ÐнÑоÑмаÑиÑ
-Ðак ни ÑÑÑанно, но Flask-apispec Ñоже Ñоздан авÑоÑами Marshmallow.
+Flask-apispec бÑл Ñоздан Ñеми же ÑазÑабоÑÑиками, ÑÑо и Marshmallow.
///
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-СÑ
ема OpenAPI должна ÑоздаваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки и иÑполÑзоваÑÑ ÑÐ¾Ñ Ð¶Ðµ код, коÑоÑÑй оÑÑÑеÑÑвлÑÐµÑ ÑеÑиализаÑÐ¸Ñ Ð¸ пÑовеÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ
.
+ÐвÑомаÑиÑеÑкÑÑ Ð³ÐµÐ½ÐµÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI из Ñого же кода, коÑоÑÑй опÑеделÑÐµÑ ÑеÑиализаÑÐ¸Ñ Ð¸ валидаÑиÑ.
///
-### NestJS (и Angular)
+### NestJS (и Angular) { #nestjs-and-angular }
-ÐдеÑÑ Ð´Ð°Ð¶Ðµ не иÑполÑзÑеÑÑÑ Python. NestJS - ÑÑÐ¾Ñ ÑÑеймвоÑк напиÑаннÑй на JavaScript (TypeScript), оÑнованнÑй на NodeJS и вдоÑ
новлÑннÑй Angular.
+ÐÑо даже не Python. NestJS â ÑÑо JavaScript/TypeScript-ÑÑеймвоÑк на NodeJS, вдоÑ
новлÑннÑй Angular.
-Ðн позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð½ÐµÑÑо поÑ
ожее на Ñо, ÑÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Flask-apispec.
+Ðн доÑÑÐ¸Ð³Ð°ÐµÑ Ñего-Ñо оÑÑаÑÑи поÑ
ожего на Ñо, ÑÑо можно ÑделаÑÑ Ñ Flask-apispec.
-Рнего вÑÑÑоена ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, еÑÑ Ð¾Ð´Ð½Ð° Ð¸Ð´ÐµÑ Ð²Ð·ÑÑÐ°Ñ Ð¾Ñ Angular.
-Ðднако ÑÑебÑеÑÑÑ Ð¿ÑедваÑиÑелÑÐ½Ð°Ñ ÑегиÑÑÑаÑÐ¸Ñ "внедÑений" (как и во вÑеÑ
дÑÑгиÑ
извеÑÑнÑÑ
мне ÑиÑÑемаÑ
внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей), ÑÑо ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво и повÑоÑÑемоÑÑÑ ÐºÐ¾Ð´Ð°.
+РнÑм вÑÑÑоена ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, вдоÑ
новлÑÐ½Ð½Ð°Ñ Angular 2. ТÑебÑеÑÑÑ Ð¿ÑедваÑиÑелÑÐ½Ð°Ñ ÑегиÑÑÑаÑÐ¸Ñ Â«Ð¸Ð½Ð¶ÐµÐºÑиÑÑемÑÑ
» компоненÑов (как и во вÑеÑ
извеÑÑнÑÑ
мне ÑиÑÑемаÑ
внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей), ÑÑо добавлÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ÑловноÑÑи и повÑоÑÑемоÑÑи кода.
-Так как паÑамеÑÑÑ Ð² нÑм опиÑÑваÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñипов TypeScript (аналогиÑно подÑказкам Ñипов в Python), поддеÑжка ÑедакÑоÑа ÑабоÑÐ°ÐµÑ Ð´Ð¾Ð²Ð¾Ð»Ñно Ñ
оÑоÑо.
+ÐоÑколÑÐºÑ Ð¿Ð°ÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñипов TypeScript (аналог анноÑаÑий Ñипов в Python), поддеÑжка ÑедакÑоÑа веÑÑма Ñ
оÑоÑа.
-Ðо поÑколÑÐºÑ Ð´Ð°Ð½Ð½Ñе из TypeScript не ÑоÑ
ÑанÑÑÑÑÑ Ð¿Ð¾Ñле компилÑÑии в JavaScript, он не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð½Ð° подÑказки Ñипов Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑовеÑки даннÑÑ
, ÑеÑиализаÑии и докÑменÑаÑии.
-Ðз-за ÑÑого и некоÑоÑÑÑ
дизайнеÑÑкиÑ
ÑеÑений, Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и авÑомаÑиÑеÑкой генеÑаÑии ÑÑ
ем, пÑиÑ
одиÑÑÑ Ð²Ð¾ многиÑ
меÑÑаÑ
добавлÑÑÑ Ð´ÐµÐºÐ¾ÑаÑоÑÑ.
-Таким обÑазом, ÑÑо ÑÑановиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно многоÑловнÑм.
+Ðо Ñак как даннÑе о ÑипаÑ
TypeScript не ÑоÑ
ÑанÑÑÑÑÑ Ð¿Ð¾Ñле компилÑÑии в JavaScript, он не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð½Ð° ÑÐ¸Ð¿Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и докÑменÑаÑии. Ðзâза ÑÑого и некоÑоÑÑÑ
пÑоекÑнÑÑ
ÑеÑений Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и авÑомаÑиÑеÑкой генеÑаÑии ÑÑ
ем пÑиÑ
одиÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð´ÐµÐºÐ¾ÑаÑоÑÑ Ð²Ð¾ многиÑ
меÑÑаÑ
. РиÑоге ÑÑо ÑÑановиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно многоÑловнÑм.
-ÐÑоме Ñого, он не оÑÐµÐ½Ñ Ñ
оÑоÑо ÑпÑавлÑеÑÑÑ Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми моделÑми.
-ÐÑли в запÑоÑе имееÑÑÑ Ð¾Ð±ÑÐµÐºÑ JSON, внÑÑÑенние Ð¿Ð¾Ð»Ñ ÐºÐ¾ÑоÑого, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, ÑвлÑÑÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми обÑекÑами JSON, ÑÑо не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом задокÑменÑиÑовано и пÑовеÑено.
+Ðн плоÑ
о ÑпÑавлÑеÑÑÑ Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми моделÑми. ÐÑли JSON-Ñело запÑоÑа â ÑÑо обÑÐµÐºÑ JSON, ÑодеÑжаÑий внÑÑÑенние полÑ, коÑоÑÑе Ñами ÑвлÑÑÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми обÑекÑами JSON, ÑÑо нелÑÐ·Ñ ÐºÐ°Ðº ÑледÑÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑоваÑÑ Ð¸ пÑовалидиÑоваÑÑ.
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐÑжно иÑполÑзоваÑÑ Ð¿Ð¾Ð´Ñказки Ñипов, ÑÑоб воÑполÑзоваÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжкой ÑедакÑоÑа кода.
+ÐÑполÑзоваÑÑ ÑÐ¸Ð¿Ñ Python Ð´Ð»Ñ Ð¾ÑлиÑной поддеÑжки в ÑедакÑоÑе кода.
-ÐÑжна моÑÐ½Ð°Ñ ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей. ÐеобÑ
одим ÑпоÑоб Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÑоÑов кода.
+ÐмеÑÑ Ð¼Ð¾ÑнÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð½ÐµÐ´ÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей. ÐайÑи ÑпоÑоб минимизиÑоваÑÑ Ð¿Ð¾Ð²ÑоÑение кода.
///
-### Sanic
+### Sanic { #sanic }
-Sanic бÑл одним из пеÑвÑÑ
ÑÑезвÑÑайно бÑÑÑÑÑÑ
Python-ÑÑеймвоÑков оÑнованнÑÑ
на `asyncio`.
-Ðн бÑл Ñделан оÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожим на Flask.
+ÐÑо бÑл один из пеÑвÑÑ
ÑÑезвÑÑайно бÑÑÑÑÑÑ
Python-ÑÑеймвоÑков на оÑнове `asyncio`. Ðн бÑл Ñделан оÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожим на Flask.
/// note | ТеÑ
ниÑеÑкие деÑали
-РнÑм иÑполÑзован `uvloop` вмеÑÑо ÑÑандаÑÑного Ñикла ÑобÑÑий `asyncio`, ÑÑо и Ñделало его Ñаким бÑÑÑÑÑм.
+Ðн иÑполÑзовал `uvloop` вмеÑÑо ÑÑандаÑÑного Ñикла `asyncio` в Python. ÐÑо и Ñделало его Ñаким бÑÑÑÑÑм.
-Ðн Ñвно вдоÑ
новил ÑоздаÑелей Uvicorn и Starlette, коÑоÑÑе в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð±ÑÑÑÑее Sanic в оÑкÑÑÑÑÑ
бенÑмаÑкаÑ
.
+Ðн Ñвно вдоÑ
новил Uvicorn и Starlette, коÑоÑÑе ÑейÑÐ°Ñ Ð±ÑÑÑÑее Sanic в оÑкÑÑÑÑÑ
бенÑмаÑкаÑ
.
///
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-Ðолжна бÑÑÑ ÑÑмаÑÑедÑÐ°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ.
+ÐоиÑк ÑпоÑоба доÑÑиÑÑ ÑÑмаÑÑедÑей пÑоизводиÑелÑноÑÑи.
-ÐÐ»Ñ ÑÑого **FastAPI** оÑнован на Starlette, Ñамом бÑÑÑÑом из доÑÑÑпнÑÑ
ÑÑеймвоÑков (по замеÑам незаинÑеÑеÑованнÑÑ
лиÑ).
+Ðменно поÑÑÐ¾Ð¼Ñ **FastAPI** оÑнован на Starlette, Ñак как ÑÑо ÑамÑй бÑÑÑÑÑй доÑÑÑпнÑй ÑÑеймвоÑк (по даннÑм ÑÑоÑонниÑ
бенÑмаÑков).
///
-### Falcon
+### Falcon { #falcon }
-Falcon - еÑÑ Ð¾Ð´Ð¸Ð½ вÑÑокопÑоизводиÑелÑнÑй Python-ÑÑеймвоÑк.
-РнÑм минимÑм ÑÑнкÑий и он Ñоздан, ÑÑоб бÑÑÑ Ð¾Ñновой Ð´Ð»Ñ Ð´ÑÑгиÑ
ÑÑеймвоÑков, напÑимеÑ, Hug.
+Falcon â еÑÑ Ð¾Ð´Ð¸Ð½ вÑÑокопÑоизводиÑелÑнÑй Python-ÑÑеймвоÑк, он минималиÑÑиÑен и ÑлÑÐ¶Ð¸Ñ Ð¾Ñновой Ð´Ð»Ñ Ð´ÑÑгиÑ
ÑÑеймвоÑков, ÑакиÑ
как Hug.
-ФÑнкÑии в нÑм полÑÑаÑÑ Ð´Ð²Ð° паÑамеÑÑа - "запÑÐ¾Ñ Ðº ÑеÑвеÑÑ" и "оÑÐ²ÐµÑ ÑеÑвеÑа".
-ÐаÑем ÐÑ "ÑиÑаеÑе" ÑаÑÑÑ Ð·Ð°Ð¿ÑоÑа и "пиÑиÑе" ÑаÑÑÑ Ð¾ÑвеÑа.
-Ðз-за Ñакой конÑÑÑÑкÑии невозможно обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°Ð¿ÑоÑа и Ñела ÑообÑÐµÐ½Ð¸Ñ Ñо ÑÑандаÑÑнÑми подÑказками Ñипов Python в каÑеÑÑве паÑамеÑÑов ÑÑнкÑии.
+Ðн ÑпÑоекÑиÑован Ñак, ÑÑо ÑÑнкÑии полÑÑаÑÑ Ð´Ð²Ð° паÑамеÑÑа: «request» и «response». ÐаÑем Ð²Ñ Â«ÑиÑаеÑе» ÑаÑÑи из запÑоÑа и «пиÑеÑе» ÑаÑÑи в оÑвеÑ. Ðзâза Ñакого дизайна невозможно обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°Ð¿ÑоÑа и Ñело запÑоÑа ÑÑандаÑÑнÑми анноÑаÑиÑми Ñипов Python как паÑамеÑÑÑ ÑÑнкÑии.
-Таким обÑазом, и валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, и иÑ
ÑеÑиализаÑиÑ, и докÑменÑаÑÐ¸Ñ Ð½Ñжно пÑопиÑÑваÑÑ Ð²ÑÑÑнÑÑ.
-Ðибо ÑÑи ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð²ÑÑÑÐ¾ÐµÐ½Ñ Ð²Ð¾ ÑÑеймвоÑк, ÑконÑÑÑÑиÑованнÑй повеÑÑ
Falcon, как в Hug.
-Ð¢Ð°ÐºÐ°Ñ Ð¶Ðµ оÑобенноÑÑÑ Ð¿ÑиÑÑÑÑÑвÑÐµÑ Ð¸ в дÑÑгиÑ
ÑÑеймвоÑкаÑ
, вдоÑ
новлÑннÑÑ
идеей Falcon, иÑполÑзоваÑÑ ÑолÑко один обÑÐµÐºÑ Ð·Ð°Ð¿ÑоÑа и один обÑÐµÐºÑ Ð¾ÑвеÑа.
+ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸ докÑменÑаÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ Ð² коде вÑÑÑнÑÑ, не авÑомаÑиÑеÑки. Ðибо Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð²Ð¾ ÑÑеймвоÑке повеÑÑ
Falcon, как в Hug. Та же оÑобенноÑÑÑ ÐµÑÑÑ Ð¸ в дÑÑгиÑ
ÑÑеймвоÑкаÑ
, вдоÑ
новлÑннÑÑ
дизайном Falcon â Ñ Ð¾Ð´Ð½Ð¸Ð¼ обÑекÑом запÑоÑа и одним обÑекÑом оÑвеÑа в паÑамеÑÑаÑ
.
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐайдиÑе ÑпоÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¾ÑлиÑной пÑоизводиÑелÑноÑÑи.
+ÐоиÑк ÑпоÑобов полÑÑиÑÑ Ð¾ÑлиÑнÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
-ÐбÑÑвлÑÑÑ Ð¿Ð°ÑамеÑÑÑ `оÑвеÑа ÑеÑвеÑа` в ÑÑнкÑиÑÑ
, как в Hug.
+ÐмеÑÑе Ñ Hug (Ñак как Hug оÑнован на Falcon) вдоÑ
новило **FastAPI** обÑÑвлÑÑÑ Ð¿Ð°ÑамеÑÑ `response` в ÑÑнкÑиÑÑ
.
-ХоÑÑ Ð² FastAPI ÑÑо необÑзаÑелÑно и иÑполÑзÑеÑÑÑ Ð² оÑновном Ð´Ð»Ñ ÑÑÑановки заголовков, кÑки и алÑÑеÑнаÑивнÑÑ
кодов ÑоÑÑоÑниÑ.
+ХоÑÑ Ð² FastAPI ÑÑо необÑзаÑелÑно, и иÑполÑзÑеÑÑÑ Ð² оÑновном Ð´Ð»Ñ ÑÑÑановки HTTP-заголовков, cookie и алÑÑеÑнаÑивнÑÑ
ÑÑаÑÑÑ-кодов.
///
-### Molten
+### Molten { #molten }
-Molten мне попалÑÑ Ð½Ð° наÑалÑной ÑÑадии напиÑÐ°Ð½Ð¸Ñ **FastAPI**. РнÑм бÑли поÑ
ожие идеи:
+Я обнаÑÑжил Molten на ÑанниÑ
ÑÑапаÑ
ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ **FastAPI**. Ð Ñ Ð½ÐµÐ³Ð¾ бÑли оÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожие идеи:
-* ÐÑполÑзование подÑказок Ñипов.
-* ÐалидаÑÐ¸Ñ Ð¸ докÑменÑаÑÐ¸Ñ Ð¸ÑÑ
Ð¾Ð´Ñ Ð¸Ð· ÑÑиÑ
подÑказок.
+* ÐÑнован на анноÑаÑиÑÑ
Ñипов Python.
+* ÐалидаÑÐ¸Ñ Ð¸ докÑменÑаÑÐ¸Ñ Ð¸Ð· ÑÑиÑ
Ñипов.
* СиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей.
-РнÑм не иÑполÑзÑÑÑÑÑ ÑÑоÑонние библиоÑеки (Ñакие, как Pydantic) Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и докÑменÑаÑии.
-ÐоÑÑÐ¾Ð¼Ñ Ð¿ÐµÑеиÑполÑзоваÑÑ ÑÑи опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипов непÑоÑÑо.
+Ðн не иÑполÑзÑÐµÑ ÑÑоÑоннÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и докÑменÑаÑии, ÑакÑÑ ÐºÐ°Ðº Pydantic, â Ñ Ð½ÐµÐ³Ð¾ ÑвоÑ. ÐоÑÑÐ¾Ð¼Ñ Ñакие опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипов даннÑÑ
бÑÐ´ÐµÑ Ñложнее пеÑеиÑполÑзоваÑÑ.
-Также ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ подÑÐ¾Ð±Ð½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸ иÑполÑзÑеÑÑÑ ÑÑандаÑÑ WSGI, коÑоÑÑй не пÑедназнаÑен Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð²ÑÑокопÑоизводиÑелÑнÑми инÑÑÑÑменÑами, Ñакими как Uvicorn, Starlette и Sanic, в оÑлиÑие Ð¾Ñ ASGI.
+ТÑебÑÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ многоÑловнÑе конÑигÑÑаÑии. Ð Ñак как он оÑнован на WSGI (вмеÑÑо ASGI), он не пÑедназнаÑен Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑеимÑÑеÑÑв вÑÑокой пÑоизводиÑелÑноÑÑи инÑÑÑÑменÑов вÑоде Uvicorn, Starlette и Sanic.
-Ðго ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей ÑÑебÑÐµÑ Ð¿ÑедваÑиÑелÑной ÑегиÑÑÑаÑии, и завиÑимоÑÑи опÑеделÑÑÑÑÑ, как обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñипов.
-Ðз-за ÑÑого невозможно обÑÑвиÑÑ Ð±Ð¾Ð»ÐµÐµ одного "компоненÑа" (завиÑимоÑÑи), коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð¾Ð¿ÑеделеннÑй Ñип.
+СиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей ÑÑебÑÐµÑ Ð¿ÑедваÑиÑелÑной ÑегиÑÑÑаÑии завиÑимоÑÑей, а завиÑимоÑÑи ÑазÑеÑаÑÑÑÑ Ð¿Ð¾ обÑÑвленнÑм Ñипам. ÐоÑÑÐ¾Ð¼Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ обÑÑвиÑÑ Ð±Ð¾Ð»ÐµÐµ одного «компоненÑа», пÑедоÑÑавлÑÑÑего опÑеделÑннÑй Ñип.
-ÐаÑÑÑÑÑÑ Ð¾Ð±ÑÑвлÑÑÑÑÑ Ð² единÑÑвенном меÑÑе Ñ Ð¸ÑполÑзованием ÑÑнкÑий, обÑÑвленнÑÑ
в дÑÑгиÑ
меÑÑаÑ
(вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÐºÐ¾ÑаÑоÑов, в коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¾Ð±ÑÑнÑÑÑ ÑÑнкÑии, обÑабаÑÑваÑÑие конкÑеÑнÑе ÑеÑÑÑÑÑ).
-ÐÑо болÑÑе поÑ
оже на Django, Ñем на Flask и Starlette.
-Ðн ÑазделÑÐµÑ Ð² коде веÑи, коÑоÑÑе доволÑно ÑеÑно ÑвÑзанÑ.
+ÐаÑÑÑÑÑÑ Ð¾Ð±ÑÑвлÑÑÑÑÑ Ð² одном меÑÑе, иÑполÑзÑÑ ÑÑнкÑии, обÑÑвленнÑе в дÑÑгиÑ
меÑÑаÑ
(вмеÑÑо декоÑаÑоÑов, коÑоÑÑе можно ÑазмеÑÑиÑÑ Ð¿ÑÑмо над ÑÑнкÑией, обÑабаÑÑваÑÑей ÑндпоинÑ). ÐÑо ближе к ÑомÑ, как ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Django, Ñем Flask (и Starlette). ÐÑо ÑазделÑÐµÑ Ð² коде веÑи, коÑоÑÑе доволÑно ÑеÑно ÑвÑзанÑ.
-/// check | ÐÐ´ÐµÑ Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐпÑеделиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пÑовеÑки Ñипов даннÑÑ
, иÑполÑзÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑов модели "по ÑмолÑаниÑ".
-ÐÑо ÑлÑÑÑÐ°ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑедакÑоÑа и ÑанÑÑе ÑÑо не бÑло доÑÑÑпно в Pydantic.
+ÐпÑеделÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пÑовеÑки Ñипов даннÑÑ
, иÑполÑзÑÑ Ð·Ð½Ð°Ñение «по ÑмолÑаниÑ» аÑÑибÑÑов модели. ÐÑо ÑлÑÑÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð² ÑедакÑоÑе кода, и ÑанÑÑе ÑÑого не бÑло в Pydantic.
-ФакÑиÑеÑки ÑÑо подÑолкнÑло на обновление Pydantic Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки одинакового ÑÑÐ¸Ð»Ñ Ð¿ÑовеÑок (ÑепеÑÑ ÑÑÐ¾Ñ ÑÑнкÑионал Ñже доÑÑÑпен в Pydantic).
+ФакÑиÑеÑки ÑÑо вдоÑ
новило на обновление ÑаÑÑей Pydantic, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ñакой же ÑÑÐ¸Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии (вÑÑ ÑÑа ÑÑнкÑионалÑноÑÑÑ ÑепеÑÑ Ñже еÑÑÑ Ð² Pydantic).
///
-### Hug
+### Hug { #hug }
-Hug бÑл одним из пеÑвÑÑ
ÑÑеймвоÑков, ÑеализовавÑиÑ
обÑÑвление паÑамеÑÑов API Ñ Ð¸ÑполÑзованием подÑказок Ñипов Python.
-ÐÑа оÑлиÑÐ½Ð°Ñ Ð¸Ð´ÐµÑ Ð±Ñла иÑполÑзована и дÑÑгими инÑÑÑÑменÑами.
+Hug бÑл одним из пеÑвÑÑ
ÑÑеймвоÑков, ÑеализовавÑиÑ
обÑÑвление Ñипов паÑамеÑÑов API Ñ Ð¸ÑполÑзованием анноÑаÑий Ñипов Python. ÐÑо бÑла оÑлиÑÐ½Ð°Ñ Ð¸Ð´ÐµÑ, коÑоÑÐ°Ñ Ð²Ð´Ð¾Ñ
новила и дÑÑгие инÑÑÑÑменÑÑ.
-ÐÑи обÑÑвлении паÑамеÑÑов вмеÑÑо ÑÑандаÑÑнÑÑ
Ñипов Python иÑполÑзовалиÑÑ ÑобÑÑвеннÑе ÑипÑ, но вÑÑ Ð¶Ðµ ÑÑо бÑл огÑомнÑй Ñаг впеÑед.
+Ðн иÑполÑзовал ÑобÑÑвеннÑе ÑÐ¸Ð¿Ñ Ð² обÑÑвлениÑÑ
вмеÑÑо ÑÑандаÑÑнÑÑ
Ñипов Python, но ÑÑо вÑÑ Ñавно бÑл огÑомнÑй Ñаг впеÑÑд.
-ÐÑо Ñакже бÑл один из пеÑвÑÑ
ÑÑеймвоÑков, генеÑиÑовавÑиÑ
полнÑÑ API-ÑÑ
ÐµÐ¼Ñ Ð² ÑоÑмаÑе JSON.
+Ðн Ñакже бÑл одним из пеÑвÑÑ
ÑÑеймвоÑков, генеÑиÑовавÑиÑ
ÑобÑÑвеннÑÑ ÑÑ
емÑ, опиÑÑваÑÑÑÑ Ð²ÐµÑÑ API в JSON.
-ÐÐ°Ð½Ð½Ð°Ñ ÑÑ
ема не пÑидеÑживалаÑÑ ÑÑандаÑÑов вÑоде OpenAPI и JSON Schema.
-ÐоÑÑÐ¾Ð¼Ñ Ð±Ñло Ð±Ñ Ð½ÐµÐ¿ÑоÑÑо ÑовмеÑÑиÑÑ ÐµÑ Ñ Ð´ÑÑгими инÑÑÑÑменÑами, Ñакими как Swagger UI.
-Ðо опÑÑÑ Ð¶Ðµ, ÑÑо бÑла оÑÐµÐ½Ñ Ð¸Ð½Ð½Ð¾Ð²Ð°ÑÐ¸Ð¾Ð½Ð½Ð°Ñ Ð¸Ð´ÐµÑ.
+Ðн не бÑл оÑнован на ÑÑандаÑÑаÑ
вÑоде OpenAPI и JSON Schema. ÐоÑÑÐ¾Ð¼Ñ Ð¸Ð½ÑегÑиÑоваÑÑ ÐµÐ³Ð¾ Ñ Ð´ÑÑгими инÑÑÑÑменÑами, Ñакими как Swagger UI, бÑло Ð±Ñ Ð½ÐµÐ¿ÑоÑÑо. Ðо, опÑÑÑ Ð¶Ðµ, ÑÑо бÑла оÑÐµÐ½Ñ Ð¸Ð½Ð½Ð¾Ð²Ð°ÑÐ¸Ð¾Ð½Ð½Ð°Ñ Ð¸Ð´ÐµÑ.
-ÐÑÑ Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ Ð¸Ð½ÑеÑеÑÐ½Ð°Ñ Ð¸ необÑÑÐ½Ð°Ñ ÑÑнкÑиÑ: иÑполÑзÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ ÑÑеймвоÑк можно ÑоздаваÑÑ Ð¸ API, и CLI.
+У него еÑÑÑ Ð¸Ð½ÑеÑеÑÐ½Ð°Ñ Ð¸ необÑÑÐ½Ð°Ñ Ð¾ÑобенноÑÑÑ: Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же ÑÑеймвоÑка можно ÑоздаваÑÑ Ð¸ API, и CLI.
-ÐоÑколÑÐºÑ Ð¾Ð½ оÑнован на WSGI, ÑÑаÑом ÑÑандаÑÑе Ð´Ð»Ñ ÑинÑ
ÑоннÑÑ
веб-ÑÑеймвоÑков, он не Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ñ Ð²ÐµÐ±-ÑокеÑами и дÑÑгими моднÑми ÑÑÑками, но вÑÑ Ñавно Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð²ÑÑокой пÑоизводиÑелÑноÑÑÑÑ.
+Так как он оÑнован на пÑедÑдÑÑем ÑÑандаÑÑе Ð´Ð»Ñ ÑинÑ
ÑоннÑÑ
веб-ÑÑеймвоÑков Python (WSGI), он не Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ñ WebSocket и пÑоÑим, Ñ
оÑÑ Ñакже демонÑÑÑиÑÑÐµÑ Ð²ÑÑокÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
/// info | ÐнÑоÑмаÑиÑ
-Hug Ñоздан Timothy Crosley, авÑоÑом `isort`, оÑлиÑного инÑÑÑÑменÑа Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкой ÑоÑÑиÑовки импоÑÑов в Python-ÑайлаÑ
.
+Hug бÑл Ñоздан ТимоÑи ÐÑоÑли, Ñем же авÑоÑом `isort`, оÑлиÑного инÑÑÑÑменÑа Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкой ÑоÑÑиÑовки импоÑÑов в ÑайлаÑ
Python.
///
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | Ðдеи, вдоÑ
новивÑие **FastAPI**
-Hug повлиÑл на Ñоздание некоÑоÑÑÑ
ÑаÑÑей APIStar и бÑл одним из инÑÑÑÑменÑов, коÑоÑÑе Ñ ÑÑел наиболее многообеÑаÑÑими, наÑÑÐ´Ñ Ñ APIStar.
+Hug вдоÑ
новил ÑаÑÑи APIStar и бÑл одним из наиболее многообеÑаÑÑиÑ
инÑÑÑÑменÑов, коÑоÑÑе Ñ Ð½Ð°ÑÑл, наÑÑÐ´Ñ Ñ APIStar.
-Hug наÑолкнÑл на мÑÑли иÑполÑзоваÑÑ Ð² **FastAPI** подÑказки Ñипов Python Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑ
емÑ, опÑеделÑÑÑей API и его паÑамеÑÑÑ.
+Hug помог вдоÑ
новиÑÑ **FastAPI** иÑполÑзоваÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов Python Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов и авÑомаÑиÑеÑки генеÑиÑоваÑÑ ÑÑ
емÑ, опÑеделÑÑÑÑÑ API.
-Hug вдоÑ
новил **FastAPI** обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ `оÑвеÑа` в ÑÑнкÑиÑÑ
Ð´Ð»Ñ ÑÑÑановки заголовков и кÑки.
+Hug вдоÑ
новил **FastAPI** обÑÑвлÑÑÑ Ð¿Ð°ÑамеÑÑ `response` в ÑÑнкÑиÑÑ
Ð´Ð»Ñ ÑÑÑановки HTTP-заголовков и cookie.
///
-### APIStar (<= 0.5)
+### APIStar (<= 0.5) { #apistar-0-5 }
-ÐепоÑÑедÑÑвенно пеÑед Ñем, как пÑинÑÑÑ ÑеÑение о Ñоздании **FastAPI**, Ñ Ð¾Ð±Ð½Ð°ÑÑжил **APIStar**.
-Рнем бÑло поÑÑи вÑе, ÑÑо Ñ Ð¸Ñкал и Ñ Ð½ÐµÐ³Ð¾ бÑл оÑлиÑнÑй дизайн.
+ÐÑÑмо пеÑед ÑеÑением ÑÑÑоиÑÑ **FastAPI** Ñ Ð½Ð°ÑÑл ÑеÑÐ²ÐµÑ **APIStar**. РнÑм бÑло поÑÑи вÑÑ, ÑÑо Ñ Ð¸Ñкал, и оÑлиÑнÑй дизайн.
-ÐÑо бÑла одна из пеÑвÑÑ
ÑеализаÑий ÑÑеймвоÑка, иÑполÑзÑÑÑего подÑказки Ñипов Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов и запÑоÑов, коÑоÑÑе Ñ ÐºÐ¾Ð³Ð´Ð°-либо видел (до NestJS и Molten).
-Я наÑÑл его пÑимеÑно в Ñо же вÑемÑ, ÑÑо и Hug, но APIStar иÑполÑзовал ÑÑандаÑÑ OpenAPI.
+ÐÑо бÑла одна из пеÑвÑÑ
ÑеализаÑий ÑÑеймвоÑка, иÑполÑзÑÑÑего анноÑаÑии Ñипов Python Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов и запÑоÑов (до NestJS и Molten), коÑоÑÑе Ñ Ð²Ð¸Ð´ÐµÐ». Я обнаÑÑжил его пÑимеÑно в Ñо же вÑемÑ, ÑÑо и Hug. Ðо APIStar иÑполÑзовал ÑÑандаÑÑ OpenAPI.
-РнÑм бÑли авÑомаÑиÑеÑкие пÑовеÑка и ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и генеÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI оÑнованнÑе на подÑказкаÑ
Ñипов в неÑколÑкиÑ
меÑÑаÑ
.
+РнÑм бÑли авÑомаÑиÑеÑкие валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и генеÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI на оÑнове ÑеÑ
же анноÑаÑий Ñипов в неÑколÑкиÑ
меÑÑаÑ
.
-ÐÑи опÑеделении ÑÑ
ÐµÐ¼Ñ Ñела ÑообÑÐµÐ½Ð¸Ñ Ð½Ðµ иÑполÑзовалиÑÑ Ð¿Ð¾Ð´Ñказки Ñипов, как в Pydantic, ÑÑо болÑÑе поÑ
оже на Marshmallow, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑедакÑоÑа бÑла недоÑÑаÑоÑно Ñ
оÑоÑей, но вÑÑ Ð¶Ðµ APIStar бÑл лÑÑÑим доÑÑÑпнÑм ваÑианÑом.
+ÐпÑеделение ÑÑ
ÐµÐ¼Ñ Ñела запÑоÑа не иÑполÑзовало Ñе же анноÑаÑии Ñипов Python, как в Pydantic, â ÑÑо бÑло ближе к Marshmallow, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка ÑедакÑоÑа бÑла Ð±Ñ Ñ
Ñже, но вÑÑ Ñавно APIStar оÑÑавалÑÑ Ð»ÑÑÑим доÑÑÑпнÑм ваÑианÑом.
-Ðа ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð½ÐµÐ³Ð¾ бÑли лÑÑÑие показаÑели пÑоизводиÑелÑноÑÑи (пÑоигÑÑваÑÑие ÑолÑко Starlette).
+Ðа ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð½ÐµÐ³Ð¾ бÑли лÑÑÑие показаÑели в бенÑмаÑкаÑ
(его пÑевоÑÑ
одил ÑолÑко Starlette).
-ÐзнаÑалÑно Ñ Ð½ÐµÐ³Ð¾ не бÑло авÑомаÑиÑеÑкой докÑменÑаÑии API Ð´Ð»Ñ Ð²ÐµÐ±-инÑеÑÑейÑа, но Ñ Ð·Ð½Ð°Ð», ÑÑо Ð¼Ð¾Ð³Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ðº Ð½ÐµÐ¼Ñ Swagger UI.
+СнаÑала Ñ Ð½ÐµÐ³Ð¾ не бÑло вебâUI Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкой докÑменÑаÑии API, но Ñ Ð·Ð½Ð°Ð», ÑÑо Ð¼Ð¾Ð³Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ðº Ð½ÐµÐ¼Ñ Swagger UI.
-Ð APIStar бÑла ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, коÑоÑÐ°Ñ Ñоже ÑÑебовала пÑедваÑиÑелÑнÑÑ ÑегиÑÑÑаÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов, как и Ñанее опиÑаннÑе инÑÑÑÑменÑÑ.
-Ðо, Ñем не менее, ÑÑо бÑла оÑлиÑÐ½Ð°Ñ ÑÑÑка.
+У него бÑла ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей. Ðна ÑÑебовала пÑедваÑиÑелÑной ÑегиÑÑÑаÑии компоненÑов, как и дÑÑгие инÑÑÑÑменÑÑ, обÑÑждавÑиеÑÑ Ð²ÑÑе. Ðо вÑÑ Ð¶Ðµ ÑÑо бÑла оÑлиÑÐ½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ.
-Я не Ñмог иÑполÑзоваÑÑ ÐµÐ³Ð¾ в полноÑенном пÑоекÑе, Ñак как бÑли пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñо вÑÑÑаиванием ÑÑнкÑий безопаÑноÑÑи в ÑÑ
ÐµÐ¼Ñ OpenAPI, из-за коÑоÑÑÑ
невозможно бÑло вÑÑÑоиÑÑ Ð²Ñе ÑÑнкÑии, пÑименÑемÑе в генеÑаÑоÑаÑ
пÑоекÑов на оÑнове Flask-apispec.
-Я добавил в Ñвой ÑпиÑок Ð·Ð°Ð´Ð°Ñ Ñоздание пÑл-ÑеквеÑÑа, добавлÑÑÑего ÑÑÑ ÑÑнкÑионалÑноÑÑÑ.
+Ðне Ñак и не ÑдалоÑÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ в полном пÑоекÑе, поÑколÑÐºÑ Ð½Ðµ бÑло инÑегÑаÑии Ñ ÑиÑÑемой безопаÑноÑÑи, поÑÑÐ¾Ð¼Ñ Ñ Ð½Ðµ мог замениÑÑ Ð²Ñе возможноÑÑи, коÑоÑÑе имел Ñ full-stack генеÑаÑоÑами на оÑнове Flask-apispec. РмоÑм бÑклоге бÑло ÑоздаÑÑ Ð¿Ñлл-ÑеквеÑÑ (запÑÐ¾Ñ Ð½Ð° изменение), добавлÑÑÑий ÑÑÑ ÑÑнкÑионалÑноÑÑÑ.
-РдалÑнейÑем ÑокÑÑ Ð¿ÑоекÑа ÑмеÑÑилÑÑ.
+ÐаÑем ÑокÑÑ Ð¿ÑоекÑа ÑмеÑÑилÑÑ.
-ÐÑо болÑÑе не бÑл API-ÑÑеймвоÑк, Ñак как авÑÐ¾Ñ ÑоÑÑедоÑоÑилÑÑ Ð½Ð° Starlette.
+ÐÑо пеÑеÑÑал бÑÑÑ Ð²ÐµÐ±-ÑÑеймвоÑк Ð´Ð»Ñ API, Ñак как авÑоÑÑ Ð½Ñжно бÑло ÑоÑÑедоÑоÑиÑÑÑÑ Ð½Ð° Starlette.
-ÐÑне APIStar - ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð¿ÑовеÑки ÑпеÑиÑикаÑий OpenAPI.
+СейÑÐ°Ñ APIStar â ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии ÑпеÑиÑикаÑий OpenAPI, а не веб-ÑÑеймвоÑк.
/// info | ÐнÑоÑмаÑиÑ
-APIStar бÑл Ñоздан Tom Christie. Ð¢Ð¾Ñ ÑамÑй паÑенÑ, коÑоÑÑй Ñоздал:
+APIStar бÑл Ñоздан Томом ÐÑиÑÑи. Тем ÑамÑм Ñеловеком, коÑоÑÑй Ñоздал:
* Django REST Framework
* Starlette (на коÑоÑом оÑнован **FastAPI**)
-* Uvicorn (иÑполÑзÑемÑй в Starlette и **FastAPI**)
+* Uvicorn (иÑполÑзÑеÑÑÑ Starlette и **FastAPI**)
///
-/// check | Ðдеи Ð´Ð»Ñ **FastAPI**
+/// check | ÐдоÑ
новило **FastAPI** на
-ÐоплоÑение.
+СÑÑеÑÑвование.
-Ðне казалоÑÑ Ð±Ð»ÐµÑÑÑÑей идеей обÑÑвлÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑÑнкÑий (пÑовеÑка даннÑÑ
, ÑеÑиализаÑиÑ, докÑменÑаÑиÑ) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð´Ð½Ð¸Ñ
и ÑеÑ
же Ñипов Python, коÑоÑÑе пÑи ÑÑом обеÑпеÑиваÑÑ ÐµÑÑ Ð¸ помоÑÑ ÑедакÑоÑа кода.
+ÐÐ´ÐµÑ Ð¾Ð±ÑÑвлÑÑÑ ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко веÑей (валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸ докÑменÑаÑиÑ) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð´Ð½Ð¸Ñ
и ÑеÑ
же Ñипов Python, коÑоÑÑе одновÑеменно обеÑпеÑиваÑÑ Ð¾ÑлиÑнÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð² ÑедакÑоÑе кода, показалаÑÑ Ð¼Ð½Ðµ блеÑÑÑÑей.
-ÐоÑле долгиÑ
поиÑков ÑÑеди поÑ
ожиÑ
дÑÑг на дÑÑга ÑÑеймвоÑков и ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸Ñ
ÑазлиÑий, APIStar ÑÑал ÑамÑм лÑÑÑим вÑбоÑом.
+ÐоÑле долгиÑ
поиÑков поÑ
ожего ÑÑеймвоÑка и ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва алÑÑеÑнаÑив APIStar бÑл лÑÑÑим доÑÑÑпнÑм ваÑианÑом.
-Ðо APIStar пеÑеÑÑал бÑÑÑ ÑÑеймвоÑком Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÐµÐ±-ÑеÑвеÑа, заÑо поÑвилÑÑ Starlette, Ð½Ð¾Ð²Ð°Ñ Ð¸ лÑÑÑÐ°Ñ Ð¾Ñнова Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
ÑиÑÑем.
-ÐÑо бÑла поÑледнÑÑ ÐºÐ°Ð¿Ð»Ñ, ÑподвигнÑвÑÐ°Ñ Ð½Ð° Ñоздание **FastAPI**.
+ÐаÑем APIStar пеÑеÑÑал ÑÑÑеÑÑвоваÑÑ ÐºÐ°Ðº ÑеÑвеÑ, а бÑл Ñоздан Starlette â Ð½Ð¾Ð²Ð°Ñ Ð¸ лÑÑÑÐ°Ñ Ð¾Ñнова Ð´Ð»Ñ Ñакой ÑиÑÑемÑ. ÐÑо ÑÑало оконÑаÑелÑнÑм вдоÑ
новением Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ **FastAPI**.
-Я ÑÑиÑÐ°Ñ **FastAPI** "дÑÑ
овнÑм пÑеемником" APIStar, ÑлÑÑивÑим его возможноÑÑи благодаÑÑ ÑÑокам, извлеÑÑннÑм из вÑеÑ
ÑпомÑнÑÑÑÑ
вÑÑе инÑÑÑÑменÑов.
+Я ÑÑиÑÐ°Ñ **FastAPI** «дÑÑ
овнÑм пÑеемником» APIStar, коÑоÑÑй ÑлÑÑÑÐ°ÐµÑ Ð¸ ÑаÑÑиÑÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи, ÑиÑÑÐµÐ¼Ñ Ñипов и дÑÑгие ÑаÑÑи, опиÑаÑÑÑ Ð½Ð° ÑÑоки Ð¾Ñ Ð²ÑеÑ
ÑÑиÑ
пÑедÑдÑÑиÑ
инÑÑÑÑменÑов.
///
-## ЧÑо иÑполÑзÑеÑÑÑ Ð² **FastAPI**
+## ЧÑо иÑполÑзÑеÑÑÑ Ð² **FastAPI** { #used-by-fastapi }
+
+### Pydantic { #pydantic }
-### Pydantic
+Pydantic â ÑÑо библиоÑека Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии даннÑÑ
, ÑеÑиализаÑии и докÑменÑаÑии (Ñ Ð¸ÑполÑзованием JSON Schema) на оÑнове анноÑаÑий Ñипов Python.
-Pydantic - ÑÑо библиоÑека Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии даннÑÑ
, ÑеÑиализаÑии и докÑменÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (иÑполÑзÑÑ JSON Schema), оÑновÑваÑÑÑ Ð½Ð° подÑказкаÑ
Ñипов Python, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐµÐ³Ð¾ ÑÑезвÑÑайно инÑÑиÑивнÑм.
+ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¾Ð½ ÑÑезвÑÑайно инÑÑиÑивен.
-Ðго можно ÑÑавниÑÑ Ñ Marshmallow, Ñ
оÑÑ Ð² бенÑмаÑкаÑ
Pydantic бÑÑÑÑее, Ñем Marshmallow.
-Рон оÑнован на ÑеÑ
же подÑказкаÑ
Ñипов, коÑоÑÑе оÑлиÑно поддеÑживаÑÑÑÑ ÑедакÑоÑами кода.
+Ðго можно ÑÑавниÑÑ Ñ Marshmallow. ХоÑÑ Ð² бенÑмаÑкаÑ
он бÑÑÑÑее Marshmallow. РпоÑколÑÐºÑ Ð¾Ð½ оÑнован на ÑеÑ
же анноÑаÑиÑÑ
Ñипов Python, поддеÑжка в ÑедакÑоÑе кода оÑлиÑнаÑ.
-/// check | **FastAPI** иÑполÑзÑÐµÑ Pydantic
+/// check | **FastAPI** иÑполÑзÑÐµÑ ÐµÐ³Ð¾ длÑ
-ÐÐ»Ñ Ð¿ÑовеÑки даннÑÑ
, ÑеÑиализаÑии даннÑÑ
и авÑомаÑиÑеÑкой докÑменÑаÑии моделей (на оÑнове JSON Schema).
+ÐбÑабоÑки вÑей валидаÑии даннÑÑ
, ÑеÑиализаÑии даннÑÑ
и авÑомаÑиÑеÑкой докÑменÑаÑии моделей (на оÑнове JSON Schema).
-ÐаÑем **FastAPI** беÑÑÑ ÑÑи ÑÑ
ÐµÐ¼Ñ JSON и помеÑÐ°ÐµÑ Ð¸Ñ
в ÑÑ
ÐµÐ¼Ñ OpenAPI, не каÑаÑÑÑ Ð´ÑÑгиÑ
веÑей, коÑоÑÑе он делаеÑ.
+ÐаÑем **FastAPI** беÑÑÑ ÑÑи даннÑе JSON Schema и помеÑÐ°ÐµÑ Ð¸Ñ
в OpenAPI, помимо вÑеÑ
пÑоÑиÑ
ÑÑнкÑий.
///
-### Starlette
+### Starlette { #starlette }
-Starlette - ÑÑо легковеÑнÑй ASGI ÑÑеймвоÑк/Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов, коÑоÑÑй идеален Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð²ÑÑокопÑоизводиÑелÑнÑÑ
аÑинÑ
ÑоннÑÑ
ÑеÑвиÑов.
+Starlette â ÑÑо лÑгкий ASGI ÑÑеймвоÑк/Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов, идеалÑно подÑ
одÑÑий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑокопÑоизводиÑелÑнÑÑ
asyncioâÑеÑвиÑов.
-Starlette оÑÐµÐ½Ñ Ð¿ÑоÑÑой и инÑÑиÑивнÑй.
-Ðн ÑазÑабоÑан Ñаким обÑазом, ÑÑÐ¾Ð±Ñ Ð±ÑÑÑ Ð»ÐµÐ³ÐºÐ¾ ÑаÑÑиÑÑемÑм и имеÑÑ Ð¼Ð¾Ð´ÑлÑнÑе компоненÑÑ.
+Ðн оÑÐµÐ½Ñ Ð¿ÑоÑÑой и инÑÑиÑивнÑй. СпÑоекÑиÑован Ñак, ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ бÑло легко ÑаÑÑиÑÑÑÑ, и ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ Ð±Ñли модÑлÑнÑми.
РнÑм еÑÑÑ:
* ÐпеÑаÑлÑÑÑÐ°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ.
-* ÐоддеÑжка веб-ÑокеÑов.
-* ФоновÑе задаÑи.
-* ÐбÑабоÑка ÑобÑÑий пÑи ÑÑаÑÑе и ÑиниÑе пÑиложениÑ.
-* ТеÑÑовÑй ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ð° оÑнове HTTPX.
-* ÐоддеÑжка CORS, ÑжаÑие GZip, ÑÑаÑиÑеÑкие ÑайлÑ, поÑÐ¾ÐºÐ¾Ð²Ð°Ñ Ð¿ÐµÑедаÑа даннÑÑ
.
-* ÐоддеÑжка ÑеÑÑий и кÑки.
+* ÐоддеÑжка WebSocket.
+* ФоновÑе задаÑи, вÑполнÑемÑе в Ñом же пÑоÑеÑÑе.
+* СобÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑка и завеÑÑениÑ.
+* ТеÑÑовÑй ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ð° базе HTTPX.
+* CORS, GZip, ÑÑаÑиÑеÑкие ÑайлÑ, поÑоковÑе оÑвеÑÑ.
+* ÐоддеÑжка ÑеÑÑий и cookie.
* 100% покÑÑÑие ÑеÑÑами.
-* 100% анноÑиÑованнÑй код.
-* ÐеÑколÑко жÑÑÑкиÑ
завиÑимоÑÑей.
+* 100% кодовой Ð±Ð°Ð·Ñ Ñ Ð°Ð½Ð½Ð¾ÑаÑиÑми Ñипов.
+* Ðало жÑÑÑкиÑ
завиÑимоÑÑей.
+
+РнаÑÑоÑÑее вÑÐµÐ¼Ñ Starlette â ÑамÑй бÑÑÑÑÑй из пÑоÑеÑÑиÑованнÑÑ
Python-ÑÑеймвоÑков. Ðго пÑевоÑÑ
Ð¾Ð´Ð¸Ñ ÑолÑко Uvicorn, коÑоÑÑй не ÑÑеймвоÑк, а ÑеÑвеÑ.
-РнаÑÑоÑÑее вÑÐµÐ¼Ñ Starlette показÑÐ²Ð°ÐµÑ ÑамÑÑ Ð²ÑÑокÑÑ ÑкоÑоÑÑÑ ÑÑеди Python-ÑÑеймвоÑков в ÑеÑÑовÑÑ
замеÑаÑ
.
-ÐÑÑÑÑее ÑолÑко Uvicorn, коÑоÑÑй ÑвлÑеÑÑÑ ÑеÑвеÑом, а не ÑÑеймвоÑком.
+Starlette пÑедоÑÑавлÑÐµÑ Ð²ÐµÑÑ Ð±Ð°Ð·Ð¾Ð²Ñй ÑÑнкÑионал веб-микÑоÑÑеймвоÑка.
-Starlette обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²ÐµÑÑ ÑÑнкÑионал микÑоÑÑеймвоÑка, но не пÑедоÑÑавлÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸ докÑменÑаÑиÑ.
+Ðо он не пÑедоÑÑавлÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸Ð»Ð¸ докÑменÑаÑиÑ.
-**FastAPI** добавлÑÐµÑ ÑÑи ÑÑнкÑии иÑполÑзÑÑ Ð¿Ð¾Ð´Ñказки Ñипов Python и Pydantic.
-ÐÑÑ **FastAPI** добавлÑÐµÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð½ÐµÐ´ÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, ÑÑилиÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, генеÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI и Ñ.д.
+ÐÑо одна из главнÑÑ
веÑей, коÑоÑÑе **FastAPI** добавлÑÐµÑ Ð¿Ð¾Ð²ÐµÑÑ
, вÑÑ Ð½Ð° оÑнове анноÑаÑий Ñипов Python (Ñ Ð¸ÑполÑзованием Pydantic). ÐлÑÑ ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, ÑÑилиÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, генеÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI и Ñ. д.
/// note | ТеÑ
ниÑеÑкие деÑали
-ASGI - ÑÑо новÑй "ÑÑандаÑÑ" ÑазÑабоÑаннÑй ÑÑаÑÑниками ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Django.
-Ðн пока ÑÑо не ÑвлÑеÑÑÑ "ÑÑандаÑÑом в Python" (Ñо еÑÑÑ Ð¿ÑинÑÑÑм PEP), но пÑоÑеÑÑ Ð¿ÑинÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑен.
+ASGI â ÑÑо новÑй «ÑÑандаÑÑ», ÑазÑабаÑÑваемÑй ÑÑаÑÑниками core-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Django. Ðн вÑÑ ÐµÑÑ Ð½Ðµ ÑвлÑеÑÑÑ Â«ÑÑандаÑÑом Python» (PEP), Ñ
оÑÑ Ð¿ÑоÑеÑÑ Ð¸Ð´ÑÑ.
-Тем не менее он Ñже иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве "ÑÑандаÑÑа" неÑколÑкими инÑÑÑÑменÑами.
-ÐÑо знаÑиÑелÑно ÑлÑÑÑÐ°ÐµÑ ÑовмеÑÑимоÑÑÑ, поÑколÑÐºÑ ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеклÑÑиÑÑÑÑ Ñ Uvicorn на лÑбой дÑÑгой ASGI-ÑеÑÐ²ÐµÑ (напÑимеÑ, Daphne или Hypercorn) или ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ ASGI-ÑовмеÑÑимÑе инÑÑÑÑменÑÑ, Ñакие как `python-socketio`.
+Тем не менее его Ñже иÑполÑзÑÑÑ ÐºÐ°Ðº «ÑÑандаÑÑ» неÑколÑко инÑÑÑÑменÑов. ÐÑо ÑилÑно ÑлÑÑÑÐ°ÐµÑ ÑовмеÑÑимоÑÑÑ: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе замениÑÑ Uvicorn на лÑбой дÑÑгой ASGI-ÑеÑÐ²ÐµÑ (напÑимеÑ, Daphne или Hypercorn) или добавиÑÑ ÑовмеÑÑимÑе Ñ ASGI инÑÑÑÑменÑÑ, Ñакие как `python-socketio`.
///
-/// check | **FastAPI** иÑполÑзÑÐµÑ Starlette
+/// check | **FastAPI** иÑполÑзÑÐµÑ ÐµÐ³Ð¾ длÑ
-РкаÑеÑÑве ÑдÑа веб-ÑеÑвиÑа Ð´Ð»Ñ Ð¾Ð±ÑабоÑки запÑоÑов, добавив некоÑоÑÑе ÑÑнкÑии ÑвеÑÑ
Ñ.
+ÐбÑабоÑки вÑеÑ
оÑновнÑÑ
веб-ÑаÑÑей. ÐобавлÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи повеÑÑ
.
-ÐлаÑÑ `FastAPI` наÑледÑеÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¾Ñ ÐºÐ»Ð°ÑÑа `Starlette`.
+ÐлаÑÑ `FastAPI` напÑÑмÑÑ Ð½Ð°ÑледÑеÑÑÑ Ð¾Ñ ÐºÐ»Ð°ÑÑа `Starlette`.
-Таким обÑазом, вÑÑ ÑÑо ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ делаÑÑ Ñо Starlette, ÐÑ Ð¼Ð¾Ð¶ÐµÑе делаÑÑ Ñ **FastAPI**, по ÑÑÑи ÑÑо пÑокаÑаннÑй Starlette.
+Так ÑÑо вÑÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ Ñо Starlette, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ñ **FastAPI**, по ÑÑÑи ÑÑо «Starlette на ÑÑеÑоидаÑ
».
///
-### Uvicorn
+### Uvicorn { #uvicorn }
-Uvicorn - ÑÑо молниеноÑнÑй ASGI-ÑеÑвеÑ, поÑÑÑоеннÑй на uvloop и httptools.
+Uvicorn â молниеноÑнÑй ASGI-ÑеÑвеÑ, поÑÑÑоеннÑй на uvloop и httptools.
-Uvicorn ÑвлÑеÑÑÑ ÑеÑвеÑом, а не ÑÑеймвоÑком.
-ÐапÑимеÑ, он не пÑедоÑÑавлÑÐµÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð¼Ð°ÑÑÑÑÑизаÑии запÑоÑов по ÑеÑÑÑÑам.
-ÐÐ»Ñ ÑÑого нÑжна надÑÑÑойка, ÑÐ°ÐºÐ°Ñ ÐºÐ°Ðº Starlette (или **FastAPI**).
+ÐÑо не веб-ÑÑеймвоÑк, а ÑеÑвеÑ. ÐапÑимеÑ, он не пÑедоÑÑавлÑÐµÑ Ð¸Ð½ÑÑÑÑменÑÑ Ð´Ð»Ñ Ð¼Ð°ÑÑÑÑÑизаÑии по пÑÑÑм. ÐÑо пÑедоÑÑавлÑÐµÑ ÑвеÑÑ
Ñ ÑÑеймвоÑк, Ñакой как Starlette (или **FastAPI**).
-Ðн ÑекомендÑеÑÑÑ Ð² каÑеÑÑве ÑеÑвеÑа Ð´Ð»Ñ Starlette и **FastAPI**.
+ÐÑо ÑекомендÑемÑй ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Starlette и **FastAPI**.
-/// check | **FastAPI** ÑекомендÑÐµÑ ÐµÐ³Ð¾
+/// check | **FastAPI** ÑекомендÑÐµÑ ÐµÐ³Ð¾ как
-Ðак оÑновной ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI**.
+ÐÑновной веб-ÑеÑÐ²ÐµÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑиложений **FastAPI**.
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑединиÑÑ ÐµÐ³Ð¾ Ñ Gunicorn, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð°ÑинÑ
ÑоннÑй многопÑоÑеÑÑнÑй ÑеÑвеÑ.
+Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--workers`, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð°ÑинÑ
ÑоннÑй многопÑоÑеÑÑнÑй ÑеÑвеÑ.
-УзнаÑÑ Ð±Ð¾Ð»ÑÑе деÑалей можно в Ñазделе [РазвÑÑÑÑвание](deployment/index.md){.internal-link target=_blank}.
+ÐодÑобнее Ñм. Ñаздел [РазвÑÑÑÑвание](deployment/index.md){.internal-link target=_blank}.
///
-## ТеÑÑовÑе замеÑÑ Ð¸ ÑкоÑоÑÑÑ
+## ÐенÑмаÑки и ÑкоÑоÑÑÑ { #benchmarks-and-speed }
-ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, ÑÑавниÑÑ Ð¸ ÑвидеÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Uvicorn, Starlette и FastAPI, ознакомÑÑеÑÑ Ñ Ñазделом [ТеÑÑовÑе замеÑÑ](benchmarks.md){.internal-link target=_blank}.
+ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, ÑÑавниÑÑ Ð¸ ÑвидеÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Uvicorn, Starlette и FastAPI, Ñм. Ñаздел о [ÐенÑмаÑкаÑ
](benchmarks.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/async.md b/docs/ru/docs/async.md
index 813836d360..15d4e108ab 100644
--- a/docs/ru/docs/async.md
+++ b/docs/ru/docs/async.md
@@ -1,18 +1,18 @@
-# ÐонкÑÑенÑноÑÑÑ Ð¸ async / await
+# ÐонкÑÑенÑноÑÑÑ Ð¸ async / await { #concurrency-and-async-await }
-ÐдеÑÑ Ð¿Ñиведена подÑÐ¾Ð±Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑполÑзовании ÑинÑакÑиÑа `async def` пÑи напиÑании *ÑÑнкÑий обÑабоÑки пÑÑи*, а Ñакже ÑаÑÑмоÑÑÐµÐ½Ñ Ð¾ÑÐ½Ð¾Ð²Ñ Ð°ÑинÑ
Ñонного пÑогÑаммиÑованиÑ, конкÑÑенÑноÑÑи и паÑаллелизма.
+ÐодÑобноÑÑи о ÑинÑакÑиÑе `async def` Ð´Ð»Ñ *ÑÑнкÑий-обÑабоÑÑиков пÑÑи* и немного Ñона об аÑинÑ
Ñонном коде, конкÑÑенÑноÑÑи и паÑаллелизме.
-## ÐÐµÑ Ð²Ñемени?
+## ÐÐµÑ Ð²Ñемени? { #in-a-hurry }
-TL;DR:
+TL;DR:
-ÐопÑÑÑим, Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑоÑонÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, коÑоÑÐ°Ñ ÑÑебÑÐµÑ Ð²Ñзова Ñ ÐºÐ»ÑÑевÑм Ñловом `await`:
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑоÑонние библиоÑеки, коÑоÑÑе нÑжно вÑзÑваÑÑ Ñ `await`, напÑимеÑ:
```Python
results = await some_library()
```
-Ð ÑÑом ÑлÑÑае *ÑÑнкÑии обÑабоÑки пÑÑи* необÑ
одимо обÑÑвлÑÑÑ Ñ Ð¸ÑполÑзованием ÑинÑакÑиÑа `async def`:
+Тогда обÑÑвлÑйÑе *ÑÑнкÑии-обÑабоÑÑики пÑÑи* Ñ `async def`, напÑимеÑ:
```Python hl_lines="2"
@app.get('/')
@@ -21,18 +21,15 @@ async def read_results():
return results
```
-/// note
+/// note | ÐÑимеÑание
-`await` можно иÑполÑзоваÑÑ ÑолÑко внÑÑÑи ÑÑнкÑий, обÑÑвленнÑÑ
Ñ Ð¸ÑполÑзованием `async def`.
+`await` можно иÑполÑзоваÑÑ ÑолÑко внÑÑÑи ÑÑнкÑий, обÑÑвленнÑÑ
Ñ `async def`.
///
---
-ÐÑли Ð²Ñ Ð¾Ð±ÑаÑаеÑеÑÑ Ðº ÑÑоÑонней библиоÑеке, коÑоÑÐ°Ñ Ñ Ñем-Ñо взаимодейÑÑвÑеÑ
-(Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ
, API, Ñайловой ÑиÑÑемой и Ñ. д.), и не Ð¸Ð¼ÐµÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑинÑакÑиÑа `await`
-(ÑÑо оÑноÑиÑÑÑ ÑейÑÐ°Ñ Ðº болÑÑинÑÑÐ²Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
), Ñо
-обÑÑвлÑйÑе *ÑÑнкÑии обÑабоÑки пÑÑи* обÑÑнÑм обÑазом Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `def`, напÑимеÑ:
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑоÑоннÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, коÑоÑÐ°Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñ Ñем-Ñо (база даннÑÑ
, API, ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема и Ñ.д.) и не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸ÑполÑзование `await` (ÑейÑÐ°Ñ ÑÑо оÑноÑиÑÑÑ Ðº болÑÑинÑÑÐ²Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек Ð´Ð»Ñ ÐÐ), Ñогда обÑÑвлÑйÑе *ÑÑнкÑии-обÑабоÑÑики пÑÑи* как обÑÑно, пÑоÑÑо Ñ `def`, напÑимеÑ:
```Python hl_lines="2"
@app.get('/')
@@ -43,310 +40,283 @@ def results():
---
-ÐÑли ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÑÑÑаннÑм обÑазом) не нÑжно ни Ñ Ñем взаимодейÑÑвоваÑÑ Ð¸, ÑооÑвеÑÑÑвенно,
-ожидаÑÑ Ð¾ÑвеÑа, иÑполÑзÑйÑе `async def`.
+ÐÑли ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (по какой-Ñо пÑиÑине) не нÑжно ни Ñ Ñем взаимодейÑÑвоваÑÑ Ð¸ ждаÑÑ Ð¾ÑвеÑа, иÑполÑзÑйÑе `async def`, даже еÑли внÑÑÑи не нÑжен `await`.
---
-ÐÑли Ð²Ñ Ð½Ðµ ÑвеÑенÑ, иÑполÑзÑйÑе обÑÑнÑй ÑинÑакÑÐ¸Ñ `def`.
+ÐÑли Ð²Ñ Ð¿ÑоÑÑо не ÑвеÑенÑ, иÑполÑзÑйÑе обÑÑнÑй `def`.
---
-**ÐÑимеÑание**: пÑи необÑ
одимоÑÑи можно ÑмеÑиваÑÑ `def` и `async def` в *ÑÑнкÑиÑÑ
обÑабоÑки пÑÑи*
-и иÑполÑзоваÑÑ Ð² каждом ÑлÑÑае наиболее подÑ
одÑÑий ÑинÑакÑиÑ. Ð FastAPI ÑÐ´ÐµÐ»Ð°ÐµÑ Ñ ÑÑим вÑÑ, ÑÑо нÑжно.
+**ÐÑимеÑание**: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑмеÑиваÑÑ `def` и `async def` в *ÑÑнкÑиÑÑ
-обÑабоÑÑикаÑ
пÑÑи* ÑÑолÑко, ÑколÑко нÑжно, и обÑÑвлÑÑÑ ÐºÐ°Ð¶Ð´ÑÑ Ñак, как лÑÑÑе Ð´Ð»Ñ Ð²Ð°Ñего ÑлÑÑаÑ. FastAPI ÑÐ´ÐµÐ»Ð°ÐµÑ Ñ Ð½Ð¸Ð¼Ð¸ вÑÑ ÐºÐ°Ðº надо.
-РлÑбом из опиÑаннÑÑ
ÑлÑÑаев FastAPI ÑабоÑÐ°ÐµÑ Ð°ÑинÑ
Ñонно и оÑÐµÐ½Ñ Ð±ÑÑÑÑо.
+РлÑбом из ÑлÑÑаев вÑÑе FastAPI вÑÑ Ñавно ÑабоÑÐ°ÐµÑ Ð°ÑинÑ
Ñонно и оÑÐµÐ½Ñ Ð±ÑÑÑÑо.
-Ðднако пÑидеÑживаÑÑÑ ÑказаннÑÑ
ÑовеÑов, можно полÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð¿ÑоизводиÑелÑноÑÑи.
+Ðо ÑледÑÑ ÑÑим Ñагам, он ÑÐ¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе опÑимизаÑии пÑоизводиÑелÑноÑÑи.
-## ТеÑ
ниÑеÑкие подÑобноÑÑи
+## ТеÑ
ниÑеÑкие подÑобноÑÑи { #technical-details }
-СовÑеменнÑе веÑÑии Python поддеÑживаÑÑ ÑазÑабоÑÐºÑ Ñак назÑваемого **"аÑинÑ
Ñонного кода"** поÑÑедÑÑвом напиÑÐ°Ð½Ð¸Ñ **"ÑопÑогÑамм"** Ñ Ð¸ÑполÑзованием ÑинÑакÑиÑа **`async` и `await`**.
+СовÑеменнÑе веÑÑии Python поддеÑживаÑÑ **«аÑинÑ
ÑоннÑй код»** Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **«ÑопÑогÑамм»** (coroutines) и ÑинÑакÑиÑа **`async` и `await`**.
-Ðиже ÑазбеÑÑм ÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾ ÑаÑÑÑм:
+РазбеÑÑм ÑÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾ ÑаÑÑÑм в ÑазделаÑ
ниже:
* **ÐÑинÑ
ÑоннÑй код**
* **`async` и `await`**
* **СопÑогÑаммÑ**
-## ÐÑинÑ
ÑоннÑй код
+## ÐÑинÑ
ÑоннÑй код { #asynchronous-code }
-ÐÑинÑ
ÑоннÑй код ознаÑаеÑ, ÑÑо в ÑзÑке ð¬ еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑообÑиÑÑ Ð¼Ð°Ñине / пÑогÑамме ð¤,
-ÑÑо в опÑеделÑнной ÑоÑке кода ей ð¤ нÑжно бÑÐ´ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ *Ñего-Ñо еÑÑ* в дÑÑгом меÑÑе. ÐопÑÑÑим ÑÑо *ÑÑо-Ñо еÑÑ* назÑваеÑÑÑ "медленнÑй Ñайл" ð.
+ÐÑинÑ
ÑоннÑй код знаÑиÑ, ÑÑо в ÑзÑке ð¬ еÑÑÑ ÑпоÑоб ÑказаÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÑ/пÑогÑамме ð¤, ÑÑо в некоÑоÑÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð° ÐµÐ¼Ñ ð¤ пÑидÑÑÑÑ Ð¿Ð¾Ð´Ð¾Ð¶Ð´Ð°ÑÑ, пока *ÑÑо-Ñо еÑÑ* где-Ñо в дÑÑгом меÑÑе завеÑÑиÑÑÑ. ÐазовÑм ÑÑо *ÑÑо-Ñо еÑÑ* «медленнÑй Ñайл» ð.
-Рпока Ð¼Ñ Ð¶Ð´Ñм завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ñ "медленнÑм Ñайлом" ð, компÑÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеклÑÑиÑÑÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´ÑÑгиÑ
задаÑ.
+Рпока Ð¼Ñ Ð¶Ð´Ñм завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ñ Â«Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñи Ñайлом» ð, компÑÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑÑÑ Ð´ÑÑгой ÑабоÑой.
-Ðо пÑи каждой возможноÑÑи компÑÑÑÐµÑ / пÑогÑамма ð¤ бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ð¾Ð±ÑаÑно. ÐапÑимеÑ, еÑли он ð¤ опÑÑÑ Ð¾ÐºÐ°Ð¶ÐµÑÑÑ Ð² Ñежиме ожиданиÑ, или когда законÑÐ¸Ñ Ð²ÑÑ ÑабоÑÑ. Ð ÑÑом ÑлÑÑае компÑÑÑÐµÑ ð¤ пÑовеÑÑеÑ, не завеÑÑена ли какаÑ-нибÑÐ´Ñ Ð¸Ð· ÑекÑÑиÑ
задаÑ.
+ÐаÑем компÑÑÑеÑ/пÑогÑамма ð¤ бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда поÑвиÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ (пока Ñнова где-Ñо идÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ), или когда ð¤ завеÑÑÐ¸Ñ Ð²ÑÑ ÑекÑÑÑÑ ÑабоÑÑ. Рон ð¤ пÑовеÑиÑ, не завеÑÑилаÑÑ Ð»Ð¸ какаÑ-либо из задаÑ, коÑоÑÑÑ
он ждал, и ÑÐ´ÐµÐ»Ð°ÐµÑ Ñо, ÑÑо нÑжно.
-ÐоÑом он ð¤ беÑÑÑ Ð¿ÐµÑвÑÑ Ð²ÑполненнÑÑ Ð·Ð°Ð´Ð°ÑÑ (допÑÑÑим, Ð½Ð°Ñ "медленнÑй Ñайл" ð) и пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ ÑабоÑÑ, пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ñ Ñ Ð½ÐµÐ¹ необÑ
одимÑе дейÑÑвиÑ.
+Ðалее он ð¤ возÑмÑÑ Ð¿ÐµÑвÑÑ Ð·Ð°Ð²ÐµÑÑивÑÑÑÑÑ Ð·Ð°Ð´Ð°ÑÑ (Ñкажем, Ð½Ð°Ñ Â«Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñй Ñайл» ð) и пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ Ð´ÐµÐ»Ð°ÑÑ Ñ Ð½ÐµÐ¹ Ñо, ÑÑо ÑÑебÑеÑÑÑ.
-ÐÑÑеÑпомÑнÑÑое "ÑÑо-Ñо еÑÑ", завеÑÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑого пÑиÑ
одиÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, обÑÑно оÑноÑиÑÑÑ Ðº доÑÑаÑоÑно "медленнÑм" опеÑаÑиÑм I/O (по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑкоÑоÑÑÑÑ ÑабоÑÑ Ð¿ÑоÑеÑÑоÑа и опеÑаÑивной памÑÑи), напÑимеÑ:
+ÐÑо «ожидание Ñего-Ñо еÑÑ» обÑÑно оÑноÑиÑÑÑ Ðº опеÑаÑиÑм I/O, коÑоÑÑе оÑноÑиÑелÑно «медленнÑе» (по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑкоÑоÑÑÑÑ Ð¿ÑоÑеÑÑоÑа и опеÑаÑивной памÑÑи), напÑÐ¸Ð¼ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ:
-* оÑпÑавка даннÑÑ
Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа по ÑеÑи
-* полÑÑение клиенÑом даннÑÑ
, оÑпÑавленнÑÑ
ваÑей пÑогÑаммой по ÑеÑи
-* ÑÑение ÑиÑÑемой ÑодеÑжимого Ñайла Ñ Ð´Ð¸Ñка и пеÑедаÑа ÑÑиÑ
даннÑÑ
пÑогÑамме
-* запиÑÑ Ð½Ð° диÑк даннÑÑ
, коÑоÑÑе пÑогÑамма пеÑедала ÑиÑÑеме
-* обÑаÑение к ÑдалÑÐ½Ð½Ð¾Ð¼Ñ API
-* ожидание завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ
-* полÑÑение ÑезÑлÑÑаÑов запÑоÑа к базе даннÑÑ
-* и Ñ. д.
+* оÑпÑавки даннÑÑ
клиенÑом по ÑеÑи
+* полÑÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñом даннÑÑ
, оÑпÑавленнÑÑ
ваÑей пÑогÑаммой по ÑеÑи
+* ÑÑÐµÐ½Ð¸Ñ ÑиÑÑемой ÑодеÑжимого Ñайла на диÑке и пеÑедаÑи ÑÑиÑ
даннÑÑ
ваÑей пÑогÑамме
+* запиÑи на диÑк ÑодеÑжимого, коÑоÑое ваÑа пÑогÑамма пеÑедала ÑиÑÑеме
+* опеÑаÑии ÑдалÑнного API
+* завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
+* возвÑаÑа ÑезÑлÑÑаÑов запÑоÑа к базе даннÑÑ
+* и Ñ.д.
-ÐоÑколÑÐºÑ Ð² оÑновном вÑÐµÐ¼Ñ ÑÑаÑиÑÑÑ Ð½Ð° ожидание вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий I/O,
-иÑ
обÑÑно назÑваÑÑ Ð¾Ð¿ÐµÑаÑиÑми, огÑаниÑеннÑми ÑкоÑоÑÑÑÑ Ð²Ð²Ð¾Ð´Ð°-вÑвода.
+ÐоÑколÑÐºÑ Ð¾Ñновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ожидание опеÑаÑий I/O, иÑ
назÑваÑÑ Ð¾Ð¿ÐµÑаÑиÑми, «огÑаниÑеннÑми вводом-вÑводом» (I/O bound).
-Ðод назÑваÑÑ "аÑинÑ
ÑоннÑм", поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑеÑÑ / пÑогÑамме не ÑÑебÑеÑÑÑ "ÑинÑ
ÑонизиÑоваÑÑÑÑ" Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¹ задаÑей и,
-бÑдÑÑи в пÑоÑÑое, ожидаÑÑ Ð¼Ð¾Ð¼ÐµÐ½Ñа ÐµÑ Ð·Ð°Ð²ÐµÑÑениÑ, Ñ Ñем ÑÑÐ¾Ð±Ñ Ð·Ð°Ð±ÑаÑÑ ÑезÑлÑÑÐ°Ñ Ð¸ пÑодолжиÑÑ ÑабоÑÑ.
+ÐÑо назÑваеÑÑÑ Â«Ð°ÑинÑ
ÑоннÑм», поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑеÑÑ/пÑогÑамме не нÑжно «ÑинÑ
ÑонизиÑоваÑÑÑÑ» Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¹ задаÑей, пÑоÑÑÐ°Ð¸Ð²Ð°Ñ Ð¸ вÑÐ¶Ð¸Ð´Ð°Ñ ÑоÑнÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐµÑ Ð·Ð°Ð²ÐµÑÑениÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð±ÑаÑÑ ÑезÑлÑÑÐ°Ñ Ð¸ пÑодолжиÑÑ ÑабоÑÑ.
-ÐмеÑÑо ÑÑого в "аÑинÑ
Ñонной" ÑиÑÑеме завеÑÑÑÐ½Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ подождаÑÑ (бÑквалÑно неÑколÑко микÑоÑекÑнд),
-пока компÑÑÑÐµÑ / пÑогÑамма занимаеÑÑÑ Ð´ÑÑгими важнÑми веÑами, Ñ Ñем ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñом веÑнÑÑÑÑÑ,
-забÑаÑÑ ÑезÑлÑÑаÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ наÑаÑÑ Ð¸Ñ
обÑабаÑÑваÑÑ.
+ÐмеÑÑо ÑÑого, в «аÑинÑ
Ñонной» ÑиÑÑеме, Ñже завеÑÑивÑаÑÑÑ Ð·Ð°Ð´Ð°Ñа Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ подождаÑÑ (неÑколÑко микÑоÑекÑнд) в оÑеÑеди, пока компÑÑÑеÑ/пÑогÑамма завеÑÑÐ¸Ñ Ñо, Ñем занималÑÑ, и заÑем веÑнÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð±ÑаÑÑ ÑезÑлÑÑаÑÑ Ð¸ пÑодолжиÑÑ ÑабоÑÑ Ñ Ð½Ð¸Ð¼Ð¸.
-"СинÑ
Ñонное" иÑполнение (в пÑоÑÐ¸Ð²Ð¾Ð²ÐµÑ "аÑинÑ
ÑонномÑ") Ñакже назÑваÑÑ "поÑледоваÑелÑнÑм",
-поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑÐµÑ / пÑогÑамма поÑледоваÑелÑно вÑполнÑÐµÑ Ð²Ñе ÑÑебÑемÑе Ñаги пеÑед Ñем, как пеÑейÑи к ÑледÑÑÑей задаÑе,
-даже еÑли в пÑоÑеÑÑе пÑиÑ
одиÑÑÑ Ð¶Ð´Ð°ÑÑ.
+ÐÐ»Ñ Â«ÑинÑ
Ñонного» (в пÑоÑивоположноÑÑÑ Â«Ð°ÑинÑ
ÑонномÑ») иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑаÑÑо иÑполÑзÑÑÑ ÑеÑмин «поÑледоваÑелÑнÑй», поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑеÑ/пÑогÑамма вÑполнÑÐµÑ Ð²Ñе Ñаги по поÑÑдкÑ, пÑежде Ñем пеÑеклÑÑиÑÑÑÑ Ð½Ð° дÑÑгÑÑ Ð·Ð°Ð´Ð°ÑÑ, даже еÑли ÑÑи Ñаги вклÑÑаÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ.
-### ÐонкÑÑенÑноÑÑÑ Ð¸ бÑÑгеÑÑ
+### ÐонкÑÑенÑноÑÑÑ Ð¸ бÑÑгеÑÑ { #concurrency-and-burgers }
-Ð¢Ð¾Ñ **аÑинÑ
ÑоннÑй** код, о коÑоÑом идÑÑ ÑеÑÑ Ð²ÑÑе, иногда назÑваÑÑ **"конкÑÑенÑноÑÑÑÑ"**. Ðна оÑлиÑаеÑÑÑ Ð¾Ñ **"паÑаллелизма"**.
+Та Ð¸Ð´ÐµÑ **аÑинÑ
Ñонного** кода, опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе, иногда Ñакже назÑваеÑÑÑ **«конкÑÑенÑноÑÑÑÑ»**. Ðна оÑлиÑаеÑÑÑ Ð¾Ñ **«паÑаллелизма»**.
-Ðа, **конкÑÑенÑноÑÑÑ** и **паÑаллелизм** подÑазÑмеваÑÑ, ÑÑо ÑазнÑе веÑи пÑоиÑÑ
одÑÑ Ð¿ÑимеÑно в одно вÑемÑ.
+Ð **конкÑÑенÑноÑÑÑ**, и **паÑаллелизм** оÑноÑÑÑÑÑ Ðº «ÑазнÑм веÑам, пÑоиÑÑ
одÑÑим пÑимеÑно одновÑеменно».
-Ðо внÑÑÑеннее ÑÑÑÑойÑÑво **конкÑÑенÑноÑÑи** и **паÑаллелизма** доволÑно Ñазное.
+Ðо ÑазлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ *конкÑÑенÑноÑÑÑÑ* и *паÑаллелизмом* доволÑно ÑÑÑеÑÑвеннÑе.
-ЧÑÐ¾Ð±Ñ ÑÑо понÑÑÑ, пÑедÑÑавÑÑе ÑакÑÑ ÐºÐ°ÑÑинÑ:
+ЧÑÐ¾Ð±Ñ Ð¸Ñ
ÑвидеÑÑ, пÑедÑÑавÑÑе ÑледÑÑÑÑÑ Ð¸ÑÑоÑÐ¸Ñ Ð¿Ñо бÑÑгеÑÑ:
-### ÐонкÑÑенÑнÑе бÑÑгеÑÑ
+### ÐонкÑÑенÑнÑе бÑÑгеÑÑ { #concurrent-burgers }
-
+ÐÑ Ð¸Ð´ÑÑе Ñо Ñвоей возлÑбленной за ÑаÑÑÑÑдом, Ð²Ñ ÑÑоиÑе в оÑеÑеди, пока каÑÑÐ¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°ÐºÐ°Ð·Ñ Ñ Ð»Ñдей пеÑед вами. ð
-ÐÑ Ð¸Ð´ÑÑе Ñо Ñвоей возлÑбленной ð в ÑаÑÑÑÑд ð и ÑÑановиÑеÑÑ Ð² оÑеÑедÑ, в ÑÑо вÑÐµÐ¼Ñ ÐºÐ°ÑÑÐ¸Ñ ð пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°ÐºÐ°Ð·Ñ Ñ Ð¿Ð¾ÑеÑиÑелей пеÑед вами.
+
-Ðогда Ð½Ð°ÐºÐ¾Ð½ÐµÑ Ð¿Ð¾Ð´Ñ
Ð¾Ð´Ð¸Ñ Ð¾ÑеÑедÑ, Ð²Ñ Ð·Ð°ÐºÐ°Ð·ÑваеÑе паÑоÑÐºÑ ÑамÑÑ
вкÑÑнÑÑ
и навоÑоÑеннÑÑ
бÑÑгеÑов ð, один Ð´Ð»Ñ Ñвоей возлÑбленной ð, а дÑÑгой Ñебе.
+ÐÐ°ÐºÐ¾Ð½ÐµÑ Ð²Ð°Ñа оÑеÑедÑ: Ð²Ñ Ð·Ð°ÐºÐ°Ð·ÑваеÑе 2 оÑÐµÐ½Ñ Â«Ð½Ð°Ð²Ð¾ÑоÑеннÑÑ
» бÑÑгеÑа â Ð´Ð»Ñ Ð²Ð°Ñей возлÑбленной и Ð´Ð»Ñ ÑебÑ. ðð
-ÐÑдаÑÑе денÑги ð¸.
+
-ÐаÑÑÐ¸Ñ ð ÑÑо-Ñо говоÑÐ¸Ñ Ð¿Ð¾Ð²Ð°Ñам на кÑÑ
не ð¨âð³, ÑепеÑÑ Ð¾Ð½Ð¸ знаÑÑ, какие бÑÑгеÑÑ Ð½Ñжно бÑÐ´ÐµÑ Ð¿ÑигоÑовиÑÑ ð
-(но пока они занÑÑÑ Ð±ÑÑгеÑами пÑедÑдÑÑиÑ
клиенÑов).
+ÐаÑÑÐ¸Ñ Ð³Ð¾Ð²Ð¾ÑÐ¸Ñ ÑÑо-Ñо поваÑÑ Ð½Ð° кÑÑ
не, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ знали, ÑÑо нÑжно пÑигоÑовиÑÑ Ð²Ð°Ñи бÑÑгеÑÑ (Ñ
оÑÑ ÑейÑÐ°Ñ Ð¾Ð½Ð¸ гоÑовÑÑ Ð±ÑÑгеÑÑ Ð´Ð»Ñ Ð¿ÑедÑдÑÑиÑ
клиенÑов).
-ÐаÑÑÐ¸Ñ ð оÑдаÑÑ Ð²Ð°Ð¼ Ñек Ñ Ð½Ð¾Ð¼ÐµÑом заказа.
+
-Рожидании ÐµÐ´Ñ Ð²Ñ Ð¸Ð´ÑÑе Ñо Ñвоей возлÑбленной ð вÑбÑаÑÑ ÑÑолик, ÑадиÑеÑÑ Ð¸ доволÑно пÑодолжиÑелÑное вÑÐµÐ¼Ñ Ð¾Ð±ÑаеÑеÑÑ ð
-(поÑколÑÐºÑ Ð²Ð°Ñи бÑÑгеÑÑ ÑамÑе навоÑоÑеннÑе, гоÑовÑÑÑÑ Ð¾Ð½Ð¸ не Ñак бÑÑÑÑо â¨ðâ¨).
+ÐÑ Ð¿Ð»Ð°ÑиÑе. ð¸
-Ð¡Ð¸Ð´Ñ Ð·Ð° ÑÑоликом Ñ Ð²Ð¾Ð·Ð»Ñбленной ð в ожидании бÑÑгеÑов ð, Ð²Ñ Ð¾ÑлиÑно пÑоводиÑе вÑемÑ,
-воÑÑ
иÑаÑÑÑ ÐµÑ Ð²ÐµÐ»Ð¸ÐºÐ¾Ð»ÐµÐ¿Ð¸ÐµÐ¼, кÑаÑоÑой и Ñмом â¨ðâ¨.
+ÐаÑÑÐ¸Ñ Ð²ÑдаÑÑ Ð²Ð°Ð¼ Ð½Ð¾Ð¼ÐµÑ Ð²Ð°Ñей оÑеÑеди.
-ÐÑÑ ÐµÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ñ Ð·Ð°ÐºÐ°Ð· и болÑÐ°Ñ Ñо Ñвоей возлÑбленной ð, вÑÐµÐ¼Ñ Ð¾Ñ Ð²Ñемени Ð²Ñ Ð¿ÑовеÑÑеÑе,
-какой Ð½Ð¾Ð¼ÐµÑ Ð³Ð¾ÑÐ¸Ñ Ð½Ð°Ð´ пÑилавком, и не подоÑла ли Ñже ваÑа оÑеÑедÑ.
+
-Ð Ð²Ð¾Ñ Ð½Ð°ÐºÐ¾Ð½ÐµÑ Ð½Ð°ÑÑаÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ, и Ð²Ñ Ð¸Ð´ÑÑе к ÑÑойке, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð±ÑаÑÑ Ð±ÑÑгеÑÑ ð и веÑнÑÑÑÑÑ Ð·Ð° ÑÑолик.
+Ðока Ð²Ñ Ð¶Ð´ÑÑе, Ð²Ñ Ð²Ð¼ÐµÑÑе Ñо Ñвоей возлÑбленной идÑÑе и вÑбиÑаеÑе ÑÑолик, ÑадиÑеÑÑ Ð¸ долго болÑаеÑе (ваÑи бÑÑгеÑÑ Ð¾ÑÐµÐ½Ñ Â«Ð½Ð°Ð²Ð¾ÑоÑеннÑе», поÑÑÐ¾Ð¼Ñ Ð¸Ð¼ нÑжно вÑÐµÐ¼Ñ Ð½Ð° пÑигоÑовление).
-ÐÑ Ñо Ñвоей возлÑбленной ð едиÑе бÑÑгеÑÑ ð и оÑлиÑно пÑоводиÑе вÑÐµÐ¼Ñ â¨.
+Ð¡Ð¸Ð´Ñ Ð·Ð° ÑÑоликом Ñо Ñвоей возлÑбленной в ожидании бÑÑгеÑов, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑÑи ÑÑо вÑемÑ, воÑÑ
иÑаÑÑÑ Ñем, ÐºÐ°ÐºÐ°Ñ Ð¾Ð½Ð° клаÑÑнаÑ, Ð¼Ð¸Ð»Ð°Ñ Ð¸ ÑÐ¼Ð½Ð°Ñ â¨ðâ¨.
+
+
+
+Ðока Ð²Ñ Ð¶Ð´ÑÑе и ÑазговаÑиваеÑе, вÑÐµÐ¼Ñ Ð¾Ñ Ð²Ñемени Ð²Ñ Ð¿Ð¾Ð³Ð»ÑдÑваеÑе на Ð½Ð¾Ð¼ÐµÑ Ð½Ð° Ñабло, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, не подоÑла ли Ñже ваÑа оÑеÑедÑ.
+
+Ð Ð²Ð¾Ñ Ð² какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ð°Ñа оÑеÑÐµÐ´Ñ Ð½Ð°ÑÑÑпаеÑ. ÐÑ Ð¿Ð¾Ð´Ñ
одиÑе к ÑÑойке, забиÑаеÑе Ñвои бÑÑгеÑÑ Ð¸ возвÑаÑаеÑеÑÑ Ðº ÑÑоликÑ.
+
+
+
+ÐÑ Ñо Ñвоей возлÑбленной едиÑе бÑÑгеÑÑ Ð¸ оÑлиÑно пÑоводиÑе вÑемÑ. â¨
+
+
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐÑекÑаÑнÑе иллÑÑÑÑаÑии Ð¾Ñ Ketrina Thompson. ð¨
+
+///
---
-Ð ÑепеÑÑ Ð¿ÑедÑÑавÑÑе, ÑÑо в ÑÑой неболÑÑой иÑÑоÑии Ð²Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑÐµÑ / пÑогÑамма ð¤.
+ÐÑедÑÑавÑÑе, ÑÑо в ÑÑой иÑÑоÑии Ð²Ñ â компÑÑÑеÑ/пÑогÑамма ð¤.
-РоÑеÑеди Ð²Ñ Ð¿ÑоÑÑо глазееÑе по ÑÑоÑонам ð´, ждÑÑе и ниÑего оÑобо "пÑодÑкÑивного" не делаеÑе.
-Ðо оÑеÑÐµÐ´Ñ Ð´Ð²Ð¸Ð¶ÐµÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно бÑÑÑÑо, поÑколÑÐºÑ ÐºÐ°ÑÑÐ¸Ñ ð ÑолÑко пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°ÐºÐ°Ð·Ñ (а не занимаеÑÑÑ Ð¿ÑигоÑовлением едÑ), Ñак ÑÑо ниÑего ÑÑÑаÑного.
+Ðока Ð²Ñ ÑÑоиÑе в оÑеÑеди, Ð²Ñ Ð¿ÑоÑÑо бездейÑÑвÑеÑе ð´, ждÑÑе Ñвоей оÑеÑеди и не делаеÑе ниÑего оÑобо «пÑодÑкÑивного». Ðо оÑеÑÐµÐ´Ñ Ð´Ð²Ð¸Ð¶ÐµÑÑÑ Ð±ÑÑÑÑо, поÑÐ¾Ð¼Ñ ÑÑо каÑÑÐ¸Ñ ÑолÑко пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°ÐºÐ°Ð·Ñ (а не гоÑÐ¾Ð²Ð¸Ñ Ð¸Ñ
), Ñак ÑÑо ÑÑо ноÑмалÑно.
-Ðогда подÑ
Ð¾Ð´Ð¸Ñ Ð¾ÑеÑÐµÐ´Ñ Ð²Ñ Ð½Ð°ÐºÐ¾Ð½ÐµÑ Ð¿ÑедпÑинимаеÑе "пÑодÑкÑивнÑе" дейÑÑÐ²Ð¸Ñ ð¤: пÑоÑмаÑÑиваеÑе менÑ, вÑбиÑаеÑе в нÑм ÑÑо-Ñо, ÑзнаÑÑе, ÑÑо Ñ
оÑÐµÑ Ð²Ð°Ñа возлÑÐ±Ð»ÐµÐ½Ð½Ð°Ñ ð, ÑобиÑаеÑеÑÑ Ð¾Ð¿Ð»Ð°ÑиÑÑ ð¸, ÑмоÑÑиÑе, какÑÑ Ð´Ð¾ÑÑали каÑÑÑ, пÑовеÑÑеÑе, ÑÑÐ¾Ð±Ñ Ñ Ð²Ð°Ñ ÑпиÑали веÑнÑÑ ÑÑммÑ, и ÑÑо в заказе вÑÑ Ð²ÐµÑно и Ñ. д.
+Ðогда пÑиÑ
Ð¾Ð´Ð¸Ñ Ð²Ð°Ñа оÑеÑедÑ, Ð²Ñ Ð²ÑполнÑеÑе дейÑÑвиÑелÑно «пÑодÑкÑивнÑÑ» ÑабоÑÑ: пÑоÑмаÑÑиваеÑе менÑ, ÑеÑаеÑе, Ñего Ñ
оÑиÑе, ÑÑиÑÑваеÑе вÑÐ±Ð¾Ñ Ñвоей возлÑбленной, плаÑиÑе, пÑовеÑÑеÑе, ÑÑо дали пÑавилÑнÑÑ ÐºÑпÑÑÑ/каÑÑÑ, ÑÑо ÑÑмма ÑпиÑана коÑÑекÑно, ÑÑо в заказе веÑнÑе позиÑии и Ñ.д.
-Ð Ñ
оÑÑ Ð²Ñ Ð²ÑÑ ÐµÑÑ Ð½Ðµ полÑÑили бÑÑгеÑÑ ð, ваÑа ÑабоÑа Ñ ÐºÐ°ÑÑиÑом ð ÑÑавиÑÑÑ "на паÑзÑ" â¸,
-поÑколÑÐºÑ ÑепеÑÑ Ð½Ñжно ждаÑÑ ð, когда заказ пÑигоÑовÑÑ.
+Ðо заÑем, Ñ
оÑÑ Ñ Ð²Ð°Ñ ÐµÑÑ Ð½ÐµÑ Ð±ÑÑгеÑов, ваÑа «ÑабоÑа» Ñ ÐºÐ°ÑÑиÑом поÑÑавлена «на паÑзÑ» â¸, поÑÐ¾Ð¼Ñ ÑÑо нÑжно подождаÑÑ ð, пока бÑÑгеÑÑ Ð±ÑдÑÑ Ð³Ð¾ÑовÑ.
-Ðо оÑÐ¾Ð¹Ð´Ñ Ñ Ð½Ð¾Ð¼ÐµÑком Ð¾Ñ Ð¿Ñилавка, Ð²Ñ ÑадиÑеÑÑ Ð·Ð° ÑÑолик и можеÑе пеÑеклÑÑиÑÑ ð внимание
-на ÑÐ²Ð¾Ñ Ð²Ð¾Ð·Ð»ÑбленнÑÑ ð и "ÑабоÑаÑÑ" ⯠ð¤ Ñже над ÑÑим. Ð Ð²Ð¾Ñ Ð²Ñ Ñнова оÑенÑ
-"пÑодÑкÑивнÑ" ð¤, мило болÑаеÑе вдвоÑм и вÑÑ Ñакое ð.
+Ðо, оÑÐ¾Ð¹Ð´Ñ Ð¾Ñ ÑÑойки и Ñев за ÑÑолик Ñ Ð½Ð¾Ð¼ÐµÑком, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑеклÑÑиÑÑ ð внимание на ÑÐ²Ð¾Ñ Ð²Ð¾Ð·Ð»ÑбленнÑÑ Ð¸ «поÑабоÑаÑÑ» ⯠ð¤ над ÑÑим. Снова оÑÐµÐ½Ñ Â«Ð¿ÑодÑкÑивно» â ÑлиÑÑ Ñ Ð²Ð°Ñей возлÑбленной ð.
-Ркакой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐºÐ°ÑÑÐ¸Ñ ð помеÑÑÐ¸Ñ Ð½Ð° Ñабло Ð²Ð°Ñ Ð½Ð¾Ð¼ÐµÑ, подÑазÑмеваÑ, ÑÑо бÑÑгеÑÑ Ð³Ð¾ÑÐ¾Ð²Ñ ð, но Ð²Ñ Ð½Ðµ ÑÑанеÑе подÑкакиваÑÑ ÐºÐ°Ðº ÑмалиÑÑннÑй, лиÑÑ ÑолÑко Ñвидев на ÑкÑане ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ. ÐÑ ÑвеÑенÑ, ÑÑо ваÑи бÑÑгеÑÑ ð никÑо не ÑÑаÑиÑ, Ð²ÐµÐ´Ñ Ñ Ð²Ð°Ñ Ñвой номеÑок, а Ñ Ð´ÑÑгиÑ
Ñвой.
+ÐоÑом каÑÑÐ¸Ñ ð «говоÑиÑ»: «Я законÑил делаÑÑ Ð±ÑÑгеÑÑ», â вÑÐ²Ð¾Ð´Ñ Ð²Ð°Ñ Ð½Ð¾Ð¼ÐµÑ Ð½Ð° Ñабло, но Ð²Ñ Ð½Ðµ подпÑÑгиваеÑе как ÑÑмаÑÑедÑий в ÑÑ Ð¶Ðµ ÑекÑндÑ, как ÑолÑко Ð½Ð¾Ð¼ÐµÑ ÑменилÑÑ Ð½Ð° ваÑ. ÐÑ Ð·Ð½Ð°ÐµÑе, ÑÑо ваÑи бÑÑгеÑÑ Ð½Ð¸ÐºÑо не ÑкÑадÑÑ, поÑÐ¾Ð¼Ñ ÑÑо Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð²Ð°Ñей оÑеÑеди, а Ñ Ð´ÑÑгиÑ
â иÑ
.
-ÐоÑÑÐ¾Ð¼Ñ Ð²Ñ Ð¿Ð¾Ð´Ð¾Ð¶Ð´ÑÑе, пока возлÑÐ±Ð»ÐµÐ½Ð½Ð°Ñ ð законÑÐ¸Ñ ÑаÑÑказÑваÑÑ Ð¸ÑÑоÑÐ¸Ñ (законÑиÑе ÑекÑÑÑÑ ÑабоÑÑ â¯ / задаÑÑ Ð² обÑабоÑке ð¤),
-и мило ÑлÑбнÑвÑиÑÑ, ÑкажеÑе, ÑÑо идÑÑе забиÑаÑÑ Ð·Ð°ÐºÐ°Ð· â¸.
+ÐоÑÑÐ¾Ð¼Ñ Ð²Ñ Ð´Ð¾Ð¶Ð¸Ð´Ð°ÐµÑеÑÑ, пока ваÑа возлÑÐ±Ð»ÐµÐ½Ð½Ð°Ñ Ð·Ð°ÐºÐ¾Ð½ÑÐ¸Ñ Ð¸ÑÑоÑÐ¸Ñ (завеÑÑиÑÑÑ ÑекÑÑÐ°Ñ ÑабоÑа ⯠/ вÑполнÑÐµÐ¼Ð°Ñ Ð·Ð°Ð´Ð°Ñа ð¤), мÑгко ÑлÑбаеÑеÑÑ Ð¸ говоÑиÑе, ÑÑо идÑÑе за бÑÑгеÑами â¸.
-Ð Ð²Ð¾Ñ Ð²Ñ Ð¿Ð¾Ð´Ñ
одиÑе к ÑÑойке ð, к пеÑвонаÑалÑной задаÑе, коÑоÑÐ°Ñ Ñже завеÑÑена â¯, беÑÑÑе бÑÑгеÑÑ ð, говоÑиÑе ÑпаÑибо и оÑноÑиÑе заказ за ÑÑолик. Ðа ÑÑом заканÑиваеÑÑÑ ÑÑап / задаÑа взаимодейÑÑÐ²Ð¸Ñ Ñ ÐºÐ°ÑÑой â¹.
-Ð ÑÐ²Ð¾Ñ Ð¾ÑеÑÐµÐ´Ñ Ð¿Ð¾ÑождаеÑÑÑ Ð·Ð°Ð´Ð°Ñа "поедание бÑÑгеÑов" ð â¯, но пÑедÑдÑÑÐ°Ñ ("полÑÑение бÑÑгеÑов") завеÑÑена â¹.
+ÐаÑем Ð²Ñ Ð¸Ð´ÑÑе к ÑÑойке ð, к иÑÑ
одной задаÑе, коÑоÑÐ°Ñ ÑепеÑÑ Ð·Ð°Ð²ÐµÑÑена â¯, забиÑаеÑе бÑÑгеÑÑ, благодаÑиÑе и неÑÑÑе иÑ
к ÑÑоликÑ. Ðа ÑÑом Ñаг/задаÑа взаимодейÑÑÐ²Ð¸Ñ Ñо ÑÑойкой завеÑÑÑн â¹. ÐÑо, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð·Ð°Ð´Ð°ÑÑ â «еÑÑÑ Ð±ÑÑгеÑÑ» ð â¯, но пÑедÑдÑÑÐ°Ñ Â«Ð¿Ð¾Ð»ÑÑиÑÑ Ð±ÑÑгеÑÑ» â завеÑÑена â¹.
-### ÐаÑаллелÑнÑе бÑÑгеÑÑ
+### ÐаÑаллелÑнÑе бÑÑгеÑÑ { #parallel-burgers }
-ТепеÑÑ Ð¿ÑедÑÑавим, ÑÑо вмеÑÑо бÑÑгеÑной "ÐонкÑÑенÑнÑе бÑÑгеÑÑ" Ð²Ñ ÑеÑили ÑÑ
одиÑÑ Ð² "ÐаÑаллелÑнÑе бÑÑгеÑÑ".
+ТепеÑÑ Ð¿ÑедÑÑавим, ÑÑо ÑÑо не «ÐонкÑÑенÑнÑе бÑÑгеÑÑ», а «ÐаÑаллелÑнÑе бÑÑгеÑÑ».
-Ð Ð²Ð¾Ñ Ð²Ñ Ð¸Ð´ÑÑе Ñо Ñвоей возлÑбленной ð оÑведаÑÑ Ð¿Ð°ÑаллелÑного ÑаÑÑÑÑда ð.
+ÐÑ Ð¸Ð´ÑÑе Ñо Ñвоей возлÑбленной за паÑаллелÑнÑм ÑаÑÑÑÑдом.
-ÐÑ ÑÑановиÑеÑÑ Ð² оÑеÑÐµÐ´Ñ Ð¿Ð¾ÐºÐ° неÑколÑко (пÑÑÑÑ Ð±ÑÐ´ÐµÑ 8) каÑÑиÑов, коÑоÑÑе по ÑовмеÑÑиÑелÑÑÑÐ²Ñ ÐµÑÑ Ð¸ поваÑÑ ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³, пÑинимаÑÑ Ð·Ð°ÐºÐ°Ð·Ñ Ñ Ð¿Ð¾ÑеÑиÑелей пеÑед вами.
+ÐÑ ÑÑоиÑе в оÑеÑеди, пока неÑколÑко (Ñкажем, 8) каÑÑиÑов, коÑоÑÑе одновÑеменно ÑвлÑÑÑÑÑ Ð¿Ð¾Ð²Ð°Ñами, пÑинимаÑÑ Ð·Ð°ÐºÐ°Ð·Ñ Ñ Ð»Ñдей пеÑед вами.
-ÐÑи ÑÑом клиенÑÑ Ð½Ðµ оÑÑ
одÑÑ Ð¾Ñ ÑÑойки и ждÑÑ ð полÑÑÐµÐ½Ð¸Ñ ÐµÐ´Ñ, поÑколÑÐºÑ ÐºÐ°Ð¶Ð´Ñй
-из 8 каÑÑиÑов идÑÑ Ð½Ð° кÑÑ
Ð½Ñ Ð³Ð¾ÑовиÑÑ Ð±ÑÑгеÑÑ ð, а ÑолÑко поÑом пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑий заказ.
+ÐÑе пеÑед вами ждÑÑ, пока иÑ
бÑÑгеÑÑ Ð±ÑдÑÑ Ð³Ð¾ÑовÑ, не оÑÑ
Ð¾Ð´Ñ Ð¾Ñ ÑÑойки, поÑÐ¾Ð¼Ñ ÑÑо каждÑй из 8 каÑÑиÑов ÑÑÐ°Ð·Ñ Ð¸Ð´ÑÑ Ð³Ð¾ÑовиÑÑ Ð±ÑÑÐ³ÐµÑ Ð¿ÐµÑед Ñем, как пÑинÑÑÑ ÑледÑÑÑий заказ.
-ÐÐ°ÐºÐ¾Ð½ÐµÑ Ð½Ð°ÑÑаÑÑ Ð²Ð°Ñа оÑеÑедÑ, и Ð²Ñ Ð¿ÑоÑиÑе два ÑамÑÑ
навоÑоÑеннÑÑ
бÑÑгеÑа ð, один Ð´Ð»Ñ Ð´Ð°Ð¼Ñ ÑеÑдÑа ð, а дÑÑгой Ñебе.
+
-Ðи о ÑÑм не жалеÑ, ÑаÑплаÑиваеÑеÑÑ ð¸.
+ÐÐ°ÐºÐ¾Ð½ÐµÑ Ð²Ð°Ñа оÑеÑедÑ: Ð²Ñ Ð·Ð°ÐºÐ°Ð·ÑваеÑе 2 оÑÐµÐ½Ñ Â«Ð½Ð°Ð²Ð¾ÑоÑеннÑÑ
» бÑÑгеÑа â Ð´Ð»Ñ Ð²Ð°Ñей возлÑбленной и Ð´Ð»Ñ ÑебÑ.
-РкаÑÑÐ¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° кÑÑ
Ð½Ñ ð¨âð³.
+ÐÑ Ð¿Ð»Ð°ÑиÑе ð¸.
-Ðам пÑиÑ
одиÑÑÑ Ð¶Ð´Ð°ÑÑ Ð¿ÐµÑед ÑÑойкой ð, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÑо по ÑлÑÑайноÑÑи не забÑал ваÑи бÑÑгеÑÑ ð, Ð²ÐµÐ´Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
номеÑков Ñ Ð²Ð°Ñ Ð½ÐµÑ.
+
-ÐоÑколÑÐºÑ Ð²Ñ Ñ Ð²Ð¾Ð·Ð»Ñбленной ð Ñ
оÑиÑе полÑÑиÑÑ Ð·Ð°ÐºÐ°Ð· вовÑÐµÐ¼Ñ ð, и ÑледиÑе за Ñем, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÑо не вклинилÑÑ Ð² оÑеÑедÑ,
-Ñ Ð²Ð°Ñ Ð½Ðµ полÑÑаеÑÑÑ ÑделÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾Ð³Ð¾ внимание Ñвоей даме ÑеÑдÑа ð.
+ÐаÑÑÐ¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° кÑÑ
нÑ.
-ÐÑо "ÑинÑ
ÑоннаÑ" ÑабоÑа, Ð²Ñ "ÑинÑ
ÑонизиÑованÑ" Ñ ÐºÐ°ÑÑиÑом/поваÑом ð¨âð³. ÐÑиÑ
одиÑÑÑ Ð¶Ð´Ð°ÑÑ ð Ñ ÑÑойки,
-когда каÑÑиÑ/Ð¿Ð¾Ð²Ð°Ñ ð¨âð³ законÑÐ¸Ñ Ð´ÐµÐ»Ð°ÑÑ Ð±ÑÑгеÑÑ ð и вÑÑÑÐ¸Ñ Ð²Ð°Ð¼ заказ, инаÑе его ÑлÑÑайно Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±ÑаÑÑ ÐºÑо-Ñо дÑÑгой.
+ÐÑ Ð¶Ð´ÑÑе, ÑÑÐ¾Ñ Ñ ÑÑойки ð, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÑо не забÑал ваÑи бÑÑгеÑÑ ÑанÑÑе ваÑ, Ñак как никакиÑ
номеÑков неÑ.
-ÐÐ°ÐºÐ¾Ð½ÐµÑ ÐºÐ°ÑÑиÑ/Ð¿Ð¾Ð²Ð°Ñ ð¨âð³ возвÑаÑаеÑÑÑ Ñ Ð±ÑÑгеÑами ð поÑле невÑноÑимо долгого Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð за ÑÑойкой.
+
-ÐÑ ÑкоÑее забиÑаеÑе заказ ð и идÑÑе Ñ Ð²Ð¾Ð·Ð»Ñбленной ð за ÑÑолик.
+Так как Ð²Ñ Ñо Ñвоей возлÑбленной занÑÑÑ Ñем, ÑÑÐ¾Ð±Ñ Ð½Ð¸ÐºÑо не вÑÑал пеÑед вами и не забÑал ваÑи бÑÑгеÑÑ, как ÑолÑко они поÑвÑÑÑÑ, Ð²Ñ Ð½Ðµ можеÑе ÑделиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ Ñвоей возлÑбленной. ð
-Там Ð²Ñ Ð¿ÑоÑÑо едиÑе ÑÑи бÑÑгеÑÑ, и на ÑÑом вÑÑ ð â¹.
+ÐÑо «ÑинÑ
ÑоннаÑ» ÑабоÑа, Ð²Ñ Â«ÑинÑ
ÑонизиÑованÑ» Ñ ÐºÐ°ÑÑиÑом/поваÑом ð¨âð³. Ðам нÑжно ждаÑÑ ð и наÑ
одиÑÑÑÑ Ñам в ÑоÑнÑй моменÑ, когда каÑÑиÑ/Ð¿Ð¾Ð²Ð°Ñ ð¨âð³ законÑÐ¸Ñ Ð±ÑÑгеÑÑ Ð¸ вÑÑÑÐ¸Ñ Ð¸Ñ
вам, инаÑе иÑ
Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±ÑаÑÑ ÐºÑо-Ñо дÑÑгой.
-Ðам не оÑобо ÑдалоÑÑ Ð¿Ð¾Ð¾Ð±ÑаÑÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо болÑÑÑÑ ÑаÑÑÑ Ð²Ñемени ð пÑиÑлоÑÑ Ð¿ÑовеÑÑи Ñ ÐºÐ°ÑÑÑ ð.
+
----
+ÐаÑем Ð²Ð°Ñ ÐºÐ°ÑÑиÑ/Ð¿Ð¾Ð²Ð°Ñ ð¨âð³ Ð½Ð°ÐºÐ¾Ð½ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ñ Ð²Ð°Ñими бÑÑгеÑами, поÑле долгого Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð Ñ ÑÑойки.
-РопиÑанном ÑÑенаÑии Ð²Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑÐµÑ / пÑогÑамма ð¤ Ñ Ð´Ð²ÑÐ¼Ñ Ð¸ÑполниÑелÑми (Ð²Ñ Ð¸ ваÑа возлÑÐ±Ð»ÐµÐ½Ð½Ð°Ñ ð),
-на пÑоÑÑжении долгого вÑемени ð Ð²Ñ Ð¾Ð±Ð° ÑделÑеÑе вÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ ⯠задаÑе "ждаÑÑ Ð½Ð° каÑÑе".
+
-Ð ÑÑом ÑеÑÑоÑане бÑÑÑÑого пиÑÐ°Ð½Ð¸Ñ 8 иÑполниÑелей (каÑÑиÑов/поваÑов) ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³.
-ХоÑÑ Ð² бÑÑгеÑной конкÑÑенÑного Ñипа бÑло вÑего два (один каÑÑÐ¸Ñ Ð¸ один поваÑ) ð ð¨âð³.
+ÐÑ Ð±ÐµÑÑÑе бÑÑгеÑÑ Ð¸ идÑÑе Ñо Ñвоей возлÑбленной к ÑÑоликÑ.
-ÐеÑмоÑÑÑ Ð½Ð° обилие ÑабоÑников, опÑÑ Ð² иÑоге полÑÑилÑÑ Ð½Ðµ из лÑÑÑиÑ
ð.
+ÐÑ Ð¿ÑоÑÑо иÑ
ÑÑедаеÑе â и вÑÑ. â¹
+
+
+
+РазговоÑов и ÑлиÑÑа бÑло немного, поÑÐ¾Ð¼Ñ ÑÑо болÑÑÑÑ ÑаÑÑÑ Ð²Ñемени Ð²Ñ Ð¶Ð´Ð°Ð»Ð¸ ð Ñ ÑÑойки. ð
+
+/// info | ÐнÑоÑмаÑиÑ
+
+ÐÑекÑаÑнÑе иллÑÑÑÑаÑии Ð¾Ñ Ketrina Thompson. ð¨
+
+///
---
-Так Ð±Ñ Ð²ÑглÑдел аналог иÑÑоÑии пÑо бÑÑгеÑнÑÑ ð в "паÑаллелÑном" миÑе.
+Ð ÑÑом ÑÑенаÑии «паÑаллелÑнÑÑ
бÑÑгеÑов» Ð²Ñ â компÑÑÑеÑ/пÑогÑамма ð¤ Ñ Ð´Ð²ÑÐ¼Ñ Ð¿ÑоÑеÑÑоÑами (Ð²Ñ Ð¸ ваÑа возлÑбленнаÑ), оба ждÑÑ ð и ÑделÑÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ ⯠ÑомÑ, ÑÑÐ¾Ð±Ñ Â«Ð¶Ð´Ð°ÑÑ Ñ ÑÑойки» ð долгое вÑемÑ.
+
+Ð ÑеÑÑоÑане 8 пÑоÑеÑÑоÑов (каÑÑиÑов/поваÑов). Тогда как в «конкÑÑенÑнÑÑ
бÑÑгеÑаÑ
» могло бÑÑÑ ÑолÑко 2 (один каÑÑÐ¸Ñ Ð¸ один поваÑ).
-ÐÐ¾Ñ Ð±Ð¾Ð»ÐµÐµ ÑеалиÑÑиÑнÑй пÑимеÑ. ÐÑедÑÑавÑÑе Ñебе банк.
+РвÑÑ Ð¶Ðµ ÑиналÑнÑй опÑÑ â не ÑамÑй лÑÑÑий. ð
-Ðо недавниÑ
Ð¿Ð¾Ñ Ð² болÑÑинÑÑве банков бÑло неÑколÑко каÑÑиÑов ð¨âð¼ð¨âð¼ð¨âð¼ð¨âð¼ и длиннÑе оÑеÑеди ðððððððð.
+---
-ÐаждÑй каÑÑÐ¸Ñ Ð¾Ð±ÑлÑживал одного клиенÑа, поÑом ÑледÑÑÑего ð¨âð¼â¯.
+ÐÑо бÑла паÑаллелÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¸ÑÑоÑии пÑо бÑÑгеÑÑ. ð
-ÐÑжно бÑло долгое вÑÐµÐ¼Ñ ð ÑÑоÑÑÑ Ð¿ÐµÑед окоÑком вмеÑÑе Ñо вÑеми, инаÑе пÑопÑÑÑиÑÑ ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ.
+ÐÐ»Ñ Ð±Ð¾Ð»ÐµÐµ «жизненного» пÑимеÑа пÑедÑÑавÑÑе банк.
-СомневаÑÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ð±Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¾ желание пÑийÑи Ñ Ð²Ð¾Ð·Ð»Ñбленной ð в банк ð¦ оплаÑиваÑÑ Ð½Ð°Ð»Ð¾Ð³Ð¸.
+Ðо недавнего вÑемени в болÑÑинÑÑве банков бÑло неÑколÑко каÑÑиÑов ð¨âð¼ð¨âð¼ð¨âð¼ð¨âð¼ и Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ð¾ÑеÑÐµÐ´Ñ ðððððððð.
-### ÐÑÐ²Ð¾Ð´Ñ Ð¾ бÑÑгеÑаÑ
+ÐÑе каÑÑиÑÑ Ð´ÐµÐ»Ð°ÑÑ Ð²ÑÑ ÑабоÑÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ клиенÑом за дÑÑгим ð¨âð¼â¯.
-РнаÑей иÑÑоÑии пÑо поÑ
од в ÑаÑÑÑÑд за бÑÑгеÑами пÑиÑ
одиÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ждаÑÑ ð,
-поÑÑÐ¾Ð¼Ñ Ð¸Ð¼ÐµÐµÑ ÑмÑÑл оÑганизоваÑÑ ÐºÐ¾Ð½ÐºÑÑенÑнÑÑ ÑиÑÑÐµÐ¼Ñ â¸ðâ¯.
+Рвам пÑиÑ
одиÑÑÑ Ð´Ð¾Ð»Ð³Ð¾ ð ÑÑоÑÑÑ Ð² оÑеÑеди, инаÑе Ð²Ñ Ð¿Ð¾ÑеÑÑеÑе ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ.
-Ð Ñо же Ñамое Ñ Ð±Ð¾Ð»ÑÑинÑÑвом веб-пÑиложений.
+ÐÑ Ð²ÑÑд ли заÑ
оÑиÑе взÑÑÑ ÑÐ²Ð¾Ñ Ð²Ð¾Ð·Ð»ÑбленнÑÑ ð Ñ Ñобой, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð½ÑÑÑÑÑ Ð´ÐµÐ»Ð°Ð¼Ð¸ в банке ð¦.
-ÐолÑзоваÑелей оÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾, но Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð²ÑÑ Ñавно вÑнÑжден ждаÑÑ ð запÑоÑÑ Ð¿Ð¾ иÑ
ÑÐ»Ð°Ð±Ð¾Ð¼Ñ Ð¸Ð½ÑеÑнеÑ-ÑоединениÑ.
+### ÐÑвод пÑо бÑÑгеÑÑ { #burger-conclusion }
-ÐоÑом Ñнова ждаÑÑ ð, пока веÑнÑÑÑÑ Ð¾ÑвеÑ.
+Ð ÑÑом ÑÑенаÑии «ÑаÑÑÑÑда Ñ Ð²Ð°Ñей возлÑбленной», Ñак как много Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð, гоÑаздо логиÑнее имеÑÑ ÐºÐ¾Ð½ÐºÑÑенÑнÑÑ ÑиÑÑÐµÐ¼Ñ â¸ðâ¯.
-
-ÐÑо ожидание ð измеÑÑеÑÑÑ Ð¼Ð¸ÐºÑоÑекÑндами, но еÑли вÑÑ ÑложиÑÑ, Ñо Ð½Ð°Ð±ÐµÐ³Ð°ÐµÑ Ð´Ð¾Ð²Ð¾Ð»Ñно много вÑемени.
+Так обÑÑÐ¾Ð¸Ñ Ð´ÐµÐ»Ð¾ и Ñ Ð±Ð¾Ð»ÑÑинÑÑвом веб-пÑиложений.
-ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ ÐµÑÑÑ ÑмÑÑл иÑполÑзоваÑÑ Ð°ÑинÑ
Ñонное â¸ð⯠пÑогÑаммиÑование пÑи поÑÑÑоении веб-API.
+ÐÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾ полÑзоваÑелей, но Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð¶Ð´ÑÑ ð, пока иÑ
не Ñамое Ñ
оÑоÑее Ñоединение оÑпÑÐ°Ð²Ð¸Ñ Ð¸Ñ
запÑоÑÑ.
-ÐолÑÑинÑÑво попÑлÑÑнÑÑ
ÑÑеймвоÑков (вклÑÑÐ°Ñ Flask и Django) ÑоздавалиÑÑ
-до поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð² Python новÑÑ
возможноÑÑей аÑинÑ
Ñонного пÑогÑаммиÑованиÑ. ÐоÑÑомÑ
-иÑ
можно ÑазвоÑаÑиваÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой паÑаллелÑного иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ аÑинÑ
Ñонного
-пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑаÑого Ñипа, коÑоÑое не наÑÑолÑко ÑÑÑекÑивно.
+РзаÑем Ñнова ждÑÑ ð, пока оÑпÑавÑÑÑÑ Ð¾ÑвеÑÑ.
-ÐÑи Ñом, ÑÑо оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð°ÑинÑ
Ñонного взаимодейÑÑÐ²Ð¸Ñ Python Ñ Ð²ÐµÐ±-ÑеÑвеÑом
-(ASGI)
-бÑла ÑазÑабоÑана командой Django Ð´Ð»Ñ Ð²Ð½ÐµÐ´ÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки веб-ÑокеÑов.
+ÐÑо «ожидание» ð измеÑÑеÑÑÑ Ð¼Ð¸ÐºÑоÑекÑндами, но еÑли вÑÑ ÑложиÑÑ, Ñо в ÑÑмме полÑÑаеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ожиданиÑ.
-Ðменно аÑинÑ
ÑонноÑÑÑ Ñделала NodeJS Ñаким попÑлÑÑнÑм (неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо он не паÑаллелÑнÑй),
-и в ÑÑом пÑеимÑÑеÑÑво Go как ÑзÑка пÑогÑаммиÑованиÑ.
+ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð°ÑинÑ
ÑоннÑй â¸ð⯠код оÑÐµÐ½Ñ ÑмеÑÑен Ð´Ð»Ñ Ð²ÐµÐ±-API.
-Ð ÑÐ¾Ñ Ð¶Ðµ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¿ÑоизводиÑелÑноÑÑи даÑÑ **FastAPI**.
+Ðменно ÑÐ°ÐºÐ°Ñ Ð°ÑинÑ
ÑонноÑÑÑ Ñделала NodeJS попÑлÑÑнÑм (Ñ
оÑÑ NodeJS â не паÑаллелÑнÑй), и ÑÑо ÑилÑÐ½Ð°Ñ ÑÑоÑона Go как ÑзÑка пÑогÑаммиÑованиÑ.
-ÐоÑколÑÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¿ÑеимÑÑеÑÑва паÑаллелизма и аÑинÑ
ÑонноÑÑи вмеÑÑе,
-Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе пÑоизводиÑелÑноÑÑÑ Ð»ÑÑÑе, Ñем Ñ Ð±Ð¾Ð»ÑÑинÑÑва пÑоÑеÑÑиÑованнÑÑ
NodeJS ÑÑеймвоÑков
-и на ÑÑовне Ñ Go, коÑоÑÑй ÑвлÑеÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸ÑÑемÑм ÑзÑком близким к C (вÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ Starlette).
+Того же ÑÑÐ¾Ð²Ð½Ñ Ð¿ÑоизводиÑелÑноÑÑи Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе Ñ **FastAPI**.
-### ÐолÑÑаеÑÑÑ, конкÑÑенÑноÑÑÑ Ð»ÑÑÑе паÑаллелизма?
+Ð Ñак как можно одновÑеменно иÑполÑзоваÑÑ Ð¿Ð°Ñаллелизм и аÑинÑ
ÑонноÑÑÑ, Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе пÑоизводиÑелÑноÑÑÑ Ð²ÑÑе, Ñем Ñ Ð±Ð¾Ð»ÑÑинÑÑва пÑоÑеÑÑиÑованнÑÑ
ÑÑеймвоÑков на NodeJS и на ÑÑовне Go, коÑоÑÑй â компилиÑÑемÑй ÑзÑк, ближе к C (вÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ Starlette).
-ÐеÑ! ÐоÑÐ°Ð»Ñ Ð¸ÑÑоÑии ÑовÑем не в ÑÑом.
+### ÐонкÑÑенÑноÑÑÑ Ð»ÑÑÑе паÑаллелизма? { #is-concurrency-better-than-parallelism }
-ÐонкÑÑенÑноÑÑÑ Ð¾ÑлиÑаеÑÑÑ Ð¾Ñ Ð¿Ð°Ñаллелизма. Ðна лÑÑÑе в **конкÑеÑнÑÑ
** ÑлÑÑаÑÑ
, где много вÑемени пÑиÑ
одиÑÑÑ Ð½Ð° ожидание.
-ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð¾Ð½Ð° заÑаÑÑÑÑ Ð»ÑÑÑе паÑаллелизма пÑи ÑазÑабоÑке веб-пÑиложений. Ðо ÑÑо не знаÑиÑ, ÑÑо конкÑÑенÑноÑÑÑ Ð»ÑÑÑе в лÑбÑÑ
ÑÑенаÑиÑÑ
.
+ÐеÑ! ÐоÑÐ°Ð»Ñ Ð¸ÑÑоÑии не в ÑÑом.
-ÐавайÑе поÑмоÑÑим Ñ Ð´ÑÑгой ÑÑоÑонÑ, пÑедÑÑавÑÑе ÑакÑÑ ÐºÐ°ÑÑинÑ:
+ÐонкÑÑенÑноÑÑÑ Ð¾ÑлиÑаеÑÑÑ Ð¾Ñ Ð¿Ð°Ñаллелизма. Рона лÑÑÑе в **конкÑеÑнÑÑ
** ÑÑенаÑиÑÑ
, где много ожиданиÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи ÑазÑабоÑке веб-пÑиложений она обÑÑно намного лÑÑÑе паÑаллелизма. Ðо не во вÑÑм.
-> Ðам нÑжно ÑбÑаÑÑÑÑ Ð² болÑÑом гÑÑзном доме.
+ЧÑÐ¾Ð±Ñ ÑÑавновеÑиÑÑ ÑÑо, пÑедÑÑавÑÑе ÑакÑÑ ÐºÐ¾ÑоÑкÑÑ Ð¸ÑÑоÑиÑ:
+
+> Ðам нÑжно ÑбÑаÑÑ Ð±Ð¾Ð»ÑÑой гÑÑзнÑй дом.
*Ðа, ÑÑо вÑÑ Ð¸ÑÑоÑиÑ*.
---
-ТÑÑ Ð½Ðµ нÑжно нигде ждаÑÑ ð, пÑоÑÑо еÑÑÑ ÐºÑÑа ÑабоÑÑ Ð² ÑазнÑÑ
ÑаÑÑÑÑ
дома.
+ÐдеÑÑ Ð½Ð¸Ð³Ð´Ðµ Ð½ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð, пÑоÑÑо оÑÐµÐ½Ñ Ð¼Ð½Ð¾Ð³Ð¾ ÑабоÑÑ Ð² ÑазнÑÑ
меÑÑаÑ
дома.
-Ðожно оÑганизоваÑÑ Ð¾ÑеÑÐµÐ´Ñ ÐºÐ°Ðº в пÑимеÑе Ñ Ð±ÑÑгеÑами, ÑнаÑала гоÑÑинаÑ, поÑом кÑÑ
нÑ,
-но ÑÑо ни на ÑÑо не повлиÑеÑ, поÑколÑÐºÑ Ð²Ñ Ð½Ð¸Ð³Ð´Ðµ не ждÑÑе ð, а пÑоÑÑо ÑÑÑÑе да моеÑе.
+Ðожно оÑганизоваÑÑ Â«Ð¾ÑеÑеди» как в пÑимеÑе Ñ Ð±ÑÑгеÑами â ÑнаÑала гоÑÑинаÑ, поÑом кÑÑ
нÑ, â но Ñак как Ð²Ñ Ð½Ð¸Ñего не ждÑÑе ð, а пÑоÑÑо ÑбиÑаеÑе и ÑбиÑаеÑе, оÑеÑеди ни на ÑÑо не повлиÑÑÑ.
-РпонадобиÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ колиÑеÑÑво вÑемени Ñ Ð¾ÑеÑедÑÑ (конкÑÑенÑноÑÑÑÑ) и без неÑ,
-и ÑабоÑÑ Ð±ÑÐ´ÐµÑ Ñделано Ñоже одинаковое колиÑеÑÑво.
+Ðа завеÑÑение ÑйдÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ вÑÐµÐ¼Ñ â Ñ Ð¾ÑеÑедÑми (конкÑÑенÑноÑÑÑÑ) и без ниÑ
â и обÑÑм вÑполненной ÑабоÑÑ Ð±ÑÐ´ÐµÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм.
-Ðднако в ÑлÑÑае, еÑли Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ пÑивеÑÑи 8 бÑвÑиÑ
каÑÑиÑов/поваÑов, а нÑне ÑбоÑÑиков ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³ð©âð³ð¨âð³,
-и каждÑй из ниÑ
(вмеÑÑе Ñ Ð²Ð°Ð¼Ð¸) взÑлÑÑ Ð±Ñ Ð·Ð° Ñвой ÑÑаÑÑок дома,
-Ñ Ñакой помоÑÑÑ Ð²Ñ Ð±Ñ Ð·Ð°ÐºÐ¾Ð½Ñили намного бÑÑÑÑее, Ð´ÐµÐ»Ð°Ñ Ð²ÑÑ ÑабоÑÑ **паÑаллелÑно**.
+Ðо в ÑÑом ÑлÑÑае, еÑли Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ пÑивеÑÑи 8 бÑвÑиÑ
каÑÑиÑов/поваÑов, а ÑепеÑÑ â ÑбоÑÑиков, и каждÑй из ниÑ
(плÑÑ Ð²Ñ) взÑл Ð±Ñ ÑÐ²Ð¾Ñ Ð·Ð¾Ð½Ñ Ð´Ð¾Ð¼Ð° Ð´Ð»Ñ ÑбоÑки, Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ ÑделаÑÑ Ð²ÑÑ ÑабоÑÑ **паÑаллелÑно**, Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной помоÑÑÑ, и завеÑÑиÑÑ Ð³Ð¾Ñаздо бÑÑÑÑее.
-РопиÑанном ÑÑенаÑии каждÑй ÑбоÑÑик (вклÑÑÐ°Ñ Ð²Ð°Ñ) бÑл Ð±Ñ Ð¸ÑполниÑелем, занÑÑÑм на ÑвоÑм ÑÑаÑÑке ÑабоÑÑ.
+Ð ÑÑом ÑÑенаÑии каждÑй ÑбоÑÑик (вклÑÑÐ°Ñ Ð²Ð°Ñ) бÑл Ð±Ñ Ð¿ÑоÑеÑÑоÑом, вÑполнÑÑÑим ÑÐ²Ð¾Ñ ÑаÑÑÑ ÑабоÑÑ.
-РпоÑколÑÐºÑ Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ Ð²Ñемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑеалÑÐ½Ð°Ñ ÑабоÑа (а не ожидание),
-а ÑабоÑÑ Ð² компÑÑÑеÑе Ð´ÐµÐ»Ð°ÐµÑ Ð¦Ð,
-Ñакие задаÑи назÑваÑÑ Ð¾Ð³ÑаниÑеннÑми пÑоизводиÑелÑноÑÑÑÑ Ð¿ÑоÑеÑÑоÑа.
+Ð Ñак как оÑновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑеалÑнÑÑ ÑабоÑÑ (а не ожидание), а ÑабоÑÑ Ð² компÑÑÑеÑе вÑполнÑÐµÑ CPU, Ñакие задаÑи назÑваÑÑ Â«Ð¾Ð³ÑаниÑеннÑми пÑоÑеÑÑоÑом» (CPU bound).
---
-ÐгÑаниÑение по пÑоÑеÑÑоÑÑ Ð¿ÑоÑвлÑеÑÑÑ Ð² опеÑаÑиÑÑ
, где ÑÑебÑеÑÑÑ Ð²ÑполнÑÑÑ ÑложнÑе маÑемаÑиÑеÑкие вÑÑиÑлениÑ.
+ТипиÑнÑе пÑимеÑÑ CPU-bound опеÑаÑий â Ñе, коÑоÑÑе ÑÑебÑÑÑ Ñложной маÑемаÑиÑеÑкой обÑабоÑки.
ÐапÑимеÑ:
-* ÐбÑабоÑка **звÑка** или **изобÑажений**.
-* **ÐомпÑÑÑеÑное зÑение**: изобÑажение ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· миллионов пикÑелей, в каждом пикÑеле 3 ÑоÑÑавлÑÑÑиÑ
ÑвеÑа,
-обÑабоÑка обÑÑно ÑÑебÑÐµÑ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑаÑÑÑÑов по вÑем пикÑелÑм ÑÑазÑ.
-* **ÐаÑинное обÑÑение**: здеÑÑ Ð¾Ð±ÑÑно ÑÑебÑеÑÑÑ Ñмножение "маÑÑиÑ" и "векÑоÑов".
-ÐÑедÑÑавÑÑе гиганÑÑкÑÑ ÑаблиÑÑ Ñ ÑиÑлами в ÐкÑеле, и вÑе иÑ
надо одновÑеменно пеÑемножиÑÑ.
-* **ÐлÑбокое обÑÑение**: ÑÑо облаÑÑÑ *маÑинного обÑÑениÑ*, поÑÑÐ¾Ð¼Ñ ÑÑда подÑ
Ð¾Ð´Ð¸Ñ Ñо же опиÑание.
-ÐÑоÑÑо Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ Ð½Ðµ одна ÑаблиÑа в ÐкÑеле, а множеÑÑво. Ð ÑÑде ÑлÑÑаев иÑполÑзÑеÑÑÑ
-ÑпеÑиалÑнÑй пÑоÑеÑÑÐ¾Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ / или иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑÑÑоеннÑÑ
Ñаким обÑазом моделей.
+* ÐбÑабоÑка **аÑдио** или **изобÑажений**.
+* **ÐомпÑÑÑеÑное зÑение**: изобÑажение ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· миллионов пикÑелей, каждÑй пикÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ 3 знаÑениÑ/ÑвеÑа; обÑÑно ÑÑебÑеÑÑÑ Ð²ÑÑиÑлиÑÑ ÑÑо-Ñо Ð´Ð»Ñ Ð²ÑеÑ
ÑÑиÑ
пикÑелей одновÑеменно.
+* **ÐаÑинное обÑÑение**: обÑÑно ÑÑебÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑва Ñмножений «маÑÑиÑ» и «векÑоÑов». ÐÑедÑÑавÑÑе огÑомнÑÑ ÑаблиÑÑ Ñ ÑиÑлами и Ñмножение вÑеÑ
ÑÑиÑ
ÑиÑел «одновÑеменно».
+* **ÐлÑбокое обÑÑение**: ÑÑо подполе ÐаÑинного обÑÑениÑ, Ñак ÑÑо вÑÑ Ð²ÑÑеÑказанное пÑименимо. ÐÑоÑÑо ÑÑо не одна ÑаблиÑа ÑиÑел, а иÑ
огÑомнÑй набоÑ, и во многиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¸ÑполÑзÑеÑе ÑпеÑиалÑнÑй пÑоÑеÑÑоÑ, ÑÑÐ¾Ð±Ñ ÑÑÑоиÑÑ Ð¸/или иÑполÑзоваÑÑ Ñакие модели.
-### ÐонкÑÑенÑноÑÑÑ + паÑаллелизм: Ðеб + маÑинное обÑÑение
+### ÐонкÑÑенÑноÑÑÑ + паÑаллелизм: Ðеб + ÐаÑинное обÑÑение { #concurrency-parallelism-web-machine-learning }
-**FastAPI** пÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи конкÑÑеÑного пÑогÑаммиÑованиÑ,
-коÑоÑое оÑÐµÐ½Ñ ÑаÑпÑоÑÑÑанено в веб-ÑазÑабоÑке (именно ÑÑим ÑлавиÑÑÑ NodeJS).
+С **FastAPI** Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÑеимÑÑеÑÑва конкÑÑенÑноÑÑи, ÑÑо оÑÐµÐ½Ñ ÑаÑпÑоÑÑÑанено в веб-ÑазÑабоÑке (ÑÑо Ñа же оÑÐ½Ð¾Ð²Ð½Ð°Ñ Â«ÑиÑка» NodeJS).
-ÐÑоме Ñого Ð²Ñ ÑможеÑе иÑполÑзоваÑÑ Ð²Ñе пÑеимÑÑеÑÑва паÑаллелизма и
-многопÑоÑеÑÑоÑноÑÑи (когда неÑколÑко пÑоÑеÑÑов ÑабоÑаÑÑ Ð¿Ð°ÑаллелÑно),
-еÑли ÑабоÑÐ°Ñ Ð½Ð°Ð³ÑÑзка пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ **огÑаниÑение по пÑоÑеÑÑоÑÑ**,
-как, напÑимеÑ, в ÑиÑÑемаÑ
маÑинного обÑÑениÑ.
+Ðо Ð²Ñ Ñакже можеÑе иÑполÑзоваÑÑ Ð²ÑÐ³Ð¾Ð´Ñ Ð¿Ð°Ñаллелизма и многопÑоÑеÑÑноÑÑи (когда неÑколÑко пÑоÑеÑÑов ÑабоÑаÑÑ Ð¿Ð°ÑаллелÑно) Ð´Ð»Ñ ÑабоÑиÑ
нагÑÑзок, **огÑаниÑеннÑÑ
пÑоÑеÑÑоÑом** (CPU bound), как в ÑиÑÑемаÑ
ÐаÑинного обÑÑениÑ.
-ÐеобÑ
одимо Ñакже оÑмеÑиÑÑ, ÑÑо Python ÑвлÑеÑÑÑ Ð³Ð»Ð°Ð²Ð½Ñм ÑзÑком в облаÑÑи
-**даÑа-ÑайенÑ**,
-маÑинного обÑÑÐµÐ½Ð¸Ñ Ð¸, оÑобенно, глÑбокого обÑÑениÑ. ÐÑÑ ÑÑо Ð´ÐµÐ»Ð°ÐµÑ FastAPI
-оÑлиÑнÑм ваÑианÑом (ÑÑеди многиÑ
дÑÑгиÑ
) Ð´Ð»Ñ ÑазÑабоÑки веб-API и пÑиложений
-в облаÑÑи даÑа-ÑÐ°Ð¹ÐµÐ½Ñ / маÑинного обÑÑениÑ.
+ÐлÑÑ Ðº ÑÑÐ¾Ð¼Ñ Ð¿ÑоÑÑой ÑакÑ, ÑÑо Python â оÑновной ÑзÑк Ð´Ð»Ñ **Data Science**, ÐаÑинного обÑÑÐµÐ½Ð¸Ñ Ð¸ оÑобенно ÐлÑбокого обÑÑениÑ, Ð´ÐµÐ»Ð°ÐµÑ FastAPI оÑÐµÐ½Ñ Ñ
оÑоÑим вÑбоÑом Ð´Ð»Ñ Ð²ÐµÐ±-API и пÑиложений в облаÑÑи Data Science / ÐаÑинного обÑÑÐµÐ½Ð¸Ñ (ÑÑеди многиÑ
дÑÑгиÑ
).
-Ðак добиÑÑÑÑ Ñакого паÑаллелизма в ÑкÑплÑаÑаÑии опиÑано в Ñазделе [РазвÑÑÑÑвание](deployment/index.md){.internal-link target=_blank}.
+Ðак добиÑÑÑÑ Ñакого паÑаллелизма в пÑодакÑн, Ñм. Ñаздел [РазвÑÑÑÑвание](deployment/index.md){.internal-link target=_blank}.
-## `async` и `await`
+## `async` и `await` { #async-and-await }
-Ð ÑовÑеменнÑÑ
веÑÑиÑÑ
Python ÑазÑабоÑка аÑинÑ
Ñонного кода Ñеализована оÑÐµÐ½Ñ Ð¸Ð½ÑÑиÑивно.
-Ðн вÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº обÑÑнÑй "поÑледоваÑелÑнÑй" код и ÑамоÑÑоÑÑелÑно вÑполнÑÐµÑ "ожидание", когда ÑÑо необÑ
одимо.
+Ð ÑовÑеменнÑÑ
веÑÑиÑÑ
Python еÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¸Ð½ÑÑиÑивнÑй ÑпоÑоб опÑеделÑÑÑ Ð°ÑинÑ
ÑоннÑй код. ÐÑо Ð´ÐµÐ»Ð°ÐµÑ ÐµÐ³Ð¾ поÑ
ожим на обÑÑнÑй «поÑледоваÑелÑнÑй» код, а «ожидание» вÑполнÑеÑÑÑ Ð·Ð° Ð²Ð°Ñ Ð² нÑжнÑе моменÑÑ.
-ÐÑли Ð½ÐµÐºÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ ÑÑебÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑед Ñем, как веÑнÑÑÑ ÑезÑлÑÑаÑ, и
-поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑовÑеменнÑе возможноÑÑи Python, код можно напиÑаÑÑ ÑледÑÑÑим обÑазом:
+Ðогда еÑÑÑ Ð¾Ð¿ÐµÑаÑиÑ, коÑоÑой нÑжно подождаÑÑ Ð¿ÐµÑед Ñем, как веÑнÑÑÑ ÑезÑлÑÑаÑ, и она поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑи новÑе возможноÑÑи Python, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе напиÑаÑÑ Ñак:
```Python
burgers = await get_burgers(2)
```
-Ðлавное здеÑÑ Ñлово `await`. Ðно ÑообÑÐ°ÐµÑ Ð¸Ð½ÑеÑпÑеÑаÑоÑÑ, ÑÑо необÑ
одимо дождаÑÑÑÑ â¸
-пока `get_burgers(2)` законÑÐ¸Ñ Ñвои дела ð, и ÑолÑко поÑле ÑÑого ÑоÑ
ÑаниÑÑ ÑезÑлÑÑÐ°Ñ Ð² `burgers`.
-ÐÐ½Ð°Ñ ÑÑо, Python Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ° пеÑеклÑÑиÑÑÑÑ Ð½Ð° вÑполнение дÑÑгиÑ
Ð·Ð°Ð´Ð°Ñ ð â¯
-(напÑÐ¸Ð¼ÐµÑ Ð¿Ð¾Ð»ÑÑение ÑледÑÑÑего запÑоÑа).
+ÐлÑÑ Ð·Ð´ÐµÑÑ â `await`. Ðн говоÑÐ¸Ñ Python, ÑÑо нÑжно подождаÑÑ â¸, пока `get_burgers(2)` законÑÐ¸Ñ ÑÐ²Ð¾Ñ Ð´ÐµÐ»Ð¾ ð, пÑежде Ñем ÑоÑ
ÑанÑÑÑ ÑезÑлÑÑÐ°Ñ Ð² `burgers`. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Python бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо за ÑÑо вÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ занÑÑÑÑÑ Ñем-Ñо еÑÑ ð ⯠(напÑимеÑ, пÑинÑÑÑ Ð´ÑÑгой запÑоÑ).
-ЧÑÐ¾Ð±Ñ ÐºÐ»ÑÑевое Ñлово `await` ÑÑабоÑало, оно должно наÑ
одиÑÑÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии,
-коÑоÑÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð°ÑинÑ
ÑонноÑÑÑ. ÐÐ»Ñ ÑÑого вам пÑоÑÑо нÑжно обÑÑвиÑÑ ÐµÑ ÐºÐ°Ðº `async def`:
+ЧÑÐ¾Ð±Ñ `await` ÑабоÑал, он должен наÑ
одиÑÑÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии, коÑоÑÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑакÑÑ Ð°ÑинÑ
ÑонноÑÑÑ. ÐÐ»Ñ ÑÑого пÑоÑÑо обÑÑвиÑе ÐµÑ Ñ `async def`:
```Python hl_lines="1"
async def get_burgers(number: int):
- # ÐоÑовим бÑÑгеÑÑ Ð¿Ð¾ ÑпеÑиалÑÐ½Ð¾Ð¼Ñ Ð°ÑинÑ
ÑÐ¾Ð½Ð½Ð¾Ð¼Ñ ÑеÑепÑÑ
+ # СделаÑÑ ÑÑо-Ñо аÑинÑ
Ñонное, ÑÑÐ¾Ð±Ñ Ð¿ÑигоÑовиÑÑ Ð±ÑÑгеÑÑ
return burgers
```
@@ -355,26 +325,22 @@ async def get_burgers(number: int):
```Python hl_lines="2"
# ÐÑо не аÑинÑ
ÑоннÑй код
def get_sequential_burgers(number: int):
- # ÐоÑовим бÑÑгеÑÑ Ð¿Ð¾ÑледоваÑелÑно по Ñагам
+ # СделаÑÑ ÑÑо-Ñо поÑледоваÑелÑное, ÑÑÐ¾Ð±Ñ Ð¿ÑигоÑовиÑÑ Ð±ÑÑгеÑÑ
return burgers
```
-ÐбÑÑвление `async def` ÑказÑÐ²Ð°ÐµÑ Ð¸Ð½ÑеÑпÑеÑаÑоÑÑ, ÑÑо внÑÑÑи ÑÑой ÑÑнкÑии
-ÑледÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð²ÑÑажений `await`, и ÑÑо можно поÑÑавиÑÑ Ð²Ñполнение Ñакой ÑÑнкÑии на "паÑзÑ" ⸠и
-пеÑеклÑÑиÑÑÑÑ Ð½Ð° дÑÑгие задаÑи ð, Ñ Ñем ÑÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑÑÑ ÑÑда позже.
+С `async def` Python знаеÑ, ÑÑо внÑÑÑи ÑÑой ÑÑнкÑии нÑжно ÑÑиÑÑваÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ `await` и ÑÑо вÑполнение Ñакой ÑÑнкÑии можно «пÑиоÑÑанавливаÑÑ» ⸠и идÑи делаÑÑ ÑÑо-Ñо еÑÑ ð, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñом веÑнÑÑÑÑÑ.
-ÐÑли Ð²Ñ Ñ
оÑиÑе вÑзваÑÑ ÑÑнкÑÐ¸Ñ Ñ `async def`, вам нÑжно "ожидаÑÑ" еÑ.
-ÐоÑÑÐ¾Ð¼Ñ Ñакое не ÑÑабоÑаеÑ:
+Ðогда Ð²Ñ Ñ
оÑиÑе вÑзваÑÑ ÑÑнкÑиÑ, обÑÑвленнÑÑ Ñ `async def`, нÑжно ÐµÑ Â«Ð¾Ð¶Ð¸Ð´Ð°ÑÑ». ÐоÑÑÐ¾Ð¼Ñ Ð²Ð¾Ñ Ñак не ÑÑабоÑаеÑ:
```Python
-# ÐÑо не заÑабоÑаеÑ, поÑколÑÐºÑ get_burgers обÑÑвлена Ñ Ð¸ÑполÑзованием async def
+# ÐÑо не ÑÑабоÑаеÑ, поÑÐ¾Ð¼Ñ ÑÑо get_burgers опÑеделена Ñ: async def
burgers = get_burgers(2)
```
---
-ÐÑли ÑÑоÑоннÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека ÑÑебÑÐµÑ Ð²ÑзÑваÑÑ ÐµÑ Ñ ÐºÐ»ÑÑевÑм Ñловом `await`,
-необÑ
одимо пиÑаÑÑ *ÑÑнкÑии обÑабоÑки пÑÑи* Ñ Ð¸ÑполÑзованием `async def`, напÑимеÑ:
+ÐÑак, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе библиоÑекÑ, коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзÑваÑÑ Ñ `await`, вам нÑжно ÑоздаÑÑ *ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи*, коÑоÑÐ°Ñ ÐµÑ Ð¸ÑполÑзÑеÑ, Ñ `async def`, напÑимеÑ:
```Python hl_lines="2-3"
@app.get('/burgers')
@@ -383,129 +349,96 @@ async def read_burgers():
return burgers
```
-### ТеÑ
ниÑеÑкие подÑобноÑÑи
+### Ðолее ÑеÑ
ниÑеÑкие подÑобноÑÑи { #more-technical-details }
+
+ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ замеÑиÑÑ, ÑÑо `await` можно иÑполÑзоваÑÑ ÑолÑко внÑÑÑи ÑÑнкÑий, опÑеделÑннÑÑ
Ñ `async def`.
-Ðак Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ замеÑиÑÑ, `await` Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ ÑолÑко в ÑÑнкÑиÑÑ
, обÑÑвленнÑÑ
Ñ Ð¸ÑполÑзованием `async def`.
+Ðо пÑи ÑÑом ÑÑнкÑии, опÑеделÑннÑе Ñ `async def`, нÑжно «ожидаÑÑ». ÐнаÑиÑ, ÑÑнкÑии Ñ `async def` Ñоже можно вÑзÑваÑÑ ÑолÑко из ÑÑнкÑий, опÑеделÑннÑÑ
Ñ `async def`.
-
-Ðо вÑполнение Ñакой ÑÑнкÑии необÑ
одимо "ожидаÑÑ" Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `await`.
-ÐÑо ознаÑаеÑ, ÑÑо ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑзваÑÑ ÑолÑко из дÑÑгой ÑÑнкÑии, коÑоÑÐ°Ñ Ñоже обÑÑвлена Ñ `async def`.
+Так ÑÑо же Ñ Â«ÑйÑом и кÑÑиÑей» â как вÑзваÑÑ Ð¿ÐµÑвÑÑ `async` ÑÑнкÑиÑ?
-Ðо как же Ñогда поÑвилаÑÑ Ð¿ÐµÑÐ²Ð°Ñ ÐºÑÑиÑа? Ð ÑмÑÑле... как нам вÑзваÑÑ Ð¿ÐµÑвÑÑ Ð°ÑинÑ
ÑоннÑÑ ÑÑнкÑиÑ?
+ÐÑли Ð²Ñ ÑабоÑаеÑе Ñ **FastAPI**, вам не о Ñем беÑпокоиÑÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо ÑÑой «пеÑвой» ÑÑнкÑией бÑÐ´ÐµÑ Ð²Ð°Ñа *ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи*, а FastAPI знаеÑ, как ÑделаÑÑ Ð²ÑÑ Ð¿ÑавилÑно.
-ÐÑи ÑабоÑе Ñ **FastAPI** пÑоÑÑо не дÑмайÑе об ÑÑом, поÑÐ¾Ð¼Ñ ÑÑо "пеÑвой" ÑÑнкÑией ÑвлÑеÑÑÑ Ð²Ð°Ñа *ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки пÑÑи*,
-и далÑÑе Ñ ÑÑим ÑазбеÑÑÑÑÑ FastAPI.
+Ðо еÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ `async` / `await` без FastAPI, Ð²Ñ Ñоже можеÑе ÑÑо ÑделаÑÑ.
-ÐÑоме Ñого, еÑли Ñ
оÑиÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑинÑакÑÐ¸Ñ `async` / `await` и без FastAPI.
+### ÐиÑиÑе Ñвой аÑинÑ
ÑоннÑй код { #write-your-own-async-code }
-### ÐиÑиÑе Ñвой аÑинÑ
ÑоннÑй код
+Starlette (и **FastAPI**) оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° AnyIO, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¸Ñ
ÑовмеÑÑимÑми и Ñо ÑÑандаÑÑной библиоÑекой Python asyncio, и Ñ Trio.
-Starlette (и **FastAPI**) оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° AnyIO, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¸Ñ
ÑовмеÑÑимÑми как Ñо ÑÑандаÑÑной библиоÑекой asyncio в Python, Ñак и Ñ Trio.
+Ð ÑаÑÑноÑÑи, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе напÑÑмÑÑ Ð¸ÑполÑзоваÑÑ AnyIO Ð´Ð»Ñ Ð¿ÑодвинÑÑÑÑ
ÑÑенаÑиев конкÑÑенÑноÑÑи, где в ваÑем коде нÑÐ¶Ð½Ñ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе паÑÑеÑнÑ.
-Ð ÑаÑÑноÑÑи, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе напÑÑмÑÑ Ð¸ÑполÑзоваÑÑ AnyIO в ÑеÑ
пÑоекÑаÑ
, где ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð»Ð¾Ð³Ð¸ÐºÐ° ÑабоÑÑ Ñ ÐºÐ¾Ð½ÐºÑÑенÑноÑÑÑÑ.
+Рдаже еÑли Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе FastAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пиÑаÑÑ Ñвои аÑинÑ
ÑоннÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ AnyIO, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ бÑли макÑималÑно ÑовмеÑÑимÑми и полÑÑали его пÑеимÑÑеÑÑва (напÑимеÑ, *ÑÑÑÑкÑÑÑнÑÑ ÐºÐ¾Ð½ÐºÑÑенÑноÑÑÑ*).
-Ðаже еÑли Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе FastAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пиÑаÑÑ Ð°ÑинÑ
ÑоннÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ AnyIO, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ бÑли макÑималÑно ÑовмеÑÑимÑми и полÑÑали его пÑеимÑÑеÑÑва (напÑÐ¸Ð¼ÐµÑ *ÑÑÑÑкÑÑÑнÑÑ ÐºÐ¾Ð½ÐºÑÑенÑноÑÑÑ*).
+Я Ñоздал еÑÑ Ð¾Ð´Ð½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð¿Ð¾Ð²ÐµÑÑ
AnyIO, Ñонкий Ñлой, ÑÑÐ¾Ð±Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ ÑлÑÑÑиÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов и полÑÑиÑÑ Ð±Ð¾Ð»ÐµÐµ каÑеÑÑвенное **авÑозавеÑÑение**, **оÑибки пÑÑмо в ÑедакÑоÑе** и Ñ.д. Там Ñакже еÑÑÑ Ð´ÑÑжелÑбное введение и ÑÑководÑÑво, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð²Ð°Ð¼ **понÑÑÑ** и пиÑаÑÑ **Ñвой ÑобÑÑвеннÑй аÑинÑ
ÑоннÑй код**: Asyncer. Ðна оÑобенно полезна, еÑли вам нÑжно **комбиниÑоваÑÑ Ð°ÑинÑ
ÑоннÑй код Ñ Ð¾Ð±ÑÑнÑм** (блокиÑÑÑÑим/ÑинÑ
ÑоннÑм) кодом.
-### ÐÑÑгие Ð²Ð¸Ð´Ñ Ð°ÑинÑ
Ñонного пÑогÑаммиÑованиÑ
+### ÐÑÑгие ÑоÑÐ¼Ñ Ð°ÑинÑ
Ñонного кода { #other-forms-of-asynchronous-code }
-СÑÐ¸Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ `async` и `await` поÑвилÑÑ Ð² ÑзÑке Python оÑноÑиÑелÑно недавно.
+Такой ÑÑÐ¸Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `async` и `await` оÑноÑиÑелÑно новÑй в ÑзÑке.
-Ðо он ÑилÑно облегÑÐ°ÐµÑ ÑабоÑÑ Ñ Ð°ÑинÑ
ÑоннÑм кодом.
+Ðо он ÑилÑно ÑпÑоÑÐ°ÐµÑ ÑабоÑÑ Ñ Ð°ÑинÑ
ÑоннÑм кодом.
-Ровно Ñакой же ÑинÑакÑÐ¸Ñ (Ð½Ñ Ð¸Ð»Ð¸ поÑÑи Ñакой же) недавно бÑл вклÑÑÑн в ÑовÑеменнÑе веÑÑии JavaScript (в бÑаÑзеÑе и NodeJS).
+Такой же (или поÑÑи Ñакой же) ÑинÑакÑÐ¸Ñ Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ поÑвилÑÑ Ð² ÑовÑеменнÑÑ
веÑÑиÑÑ
JavaScript (в бÑаÑзеÑе и NodeJS).
-Ðо ÑÑого поддеÑжка аÑинÑ
Ñонного кода бÑла Ñеализована намного Ñложнее, и его бÑло ÑÑÑднее воÑпÑинимаÑÑ.
+Ðо ÑÑого ÑабоÑа Ñ Ð°ÑинÑ
ÑоннÑм кодом бÑла замеÑно Ñложнее и ÑÑÑднее Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ.
-РпÑедÑдÑÑиÑ
веÑÑиÑÑ
Python Ð´Ð»Ñ ÑÑого иÑполÑзовалиÑÑ Ð¿Ð¾Ñоки или Gevent. Ðо Ñакой код намного Ñложнее понимаÑÑ, оÑлаживаÑÑ Ð¸ мÑÑленно пÑедÑÑавлÑÑÑ.
+РпÑедÑдÑÑиÑ
веÑÑиÑÑ
Python можно бÑло иÑполÑзоваÑÑ Ð¿Ð¾Ñоки или Gevent. Ðо Ñакой код гоÑаздо Ñложнее понимаÑÑ, оÑлаживаÑÑ Ð¸ деÑжаÑÑ Ð² голове.
-ЧÑо каÑаеÑÑÑ JavaScript (в бÑаÑзеÑе и NodeJS), ÑанÑÑе Ñам иÑполÑзовали Ð´Ð»Ñ ÑÑой Ñели
-"обÑаÑнÑе вÑзовÑ". ЧÑо вÑливалоÑÑ Ð²
-"ад обÑаÑнÑÑ
вÑзовов".
+РпÑежниÑ
веÑÑиÑÑ
NodeJS/бÑаÑзеÑного JavaScript Ð²Ñ Ð±Ñ Ð¸ÑполÑзовали «callbacks» (обÑаÑнÑе вÑзовÑ), ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº «callback hell» (ад обÑаÑнÑÑ
вÑзовов).
-## СопÑогÑаммÑ
+## СопÑогÑÐ°Ð¼Ð¼Ñ { #coroutines }
-**ÐоÑÑÑиÌна** (или же ÑопÑогÑамма) â ÑÑо кÑÑÑое ÑловеÑко Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ñой ÑÑÑноÑÑи,
-коÑоÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ `async def`. Python знаеÑ, ÑÑо ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ запÑÑÑиÑÑ, как и обÑÑнÑÑ ÑÑнкÑиÑ,
-но кÑоме Ñого ÑопÑогÑÐ°Ð¼Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ поÑÑавиÑÑ Ð½Ð° паÑÐ·Ñ â¸ Ð² Ñом меÑÑе, где вÑÑÑеÑиÑÑÑ Ñлово `await`.
+**СопÑогÑамма** (coroutine) â ÑÑо пÑоÑÑо «навоÑоÑенное» Ñлово Ð´Ð»Ñ Ñого, ÑÑо возвÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ `async def`. Python знаеÑ, ÑÑо ÑÑо поÑ
оже на ÑÑнкÑиÑ: ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ запÑÑÑиÑÑ, она когда-нибÑÐ´Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ, но ÐµÑ Ð²Ñполнение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиоÑÑанавливаÑÑÑÑ â¸ Ð²Ð½ÑÑÑи, когда вÑÑÑеÑаеÑÑÑ `await`.
-ÐÑÑ ÑÑнкÑионалÑноÑÑÑ Ð°ÑинÑ
Ñонного пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¸ÑполÑзованием `async` и `await`
-ÑаÑÑо обобÑаÑÑ Ñловом "коÑÑÑинÑ". Ðни аналогиÑÐ½Ñ "гоÑÑÑинам", клÑÑевой оÑобенноÑÑи
-ÑзÑка Go.
+ЧаÑÑо вÑÑ ÑÑнкÑионалÑноÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°ÑинÑ
Ñонного кода Ñ `async` и `await` кÑаÑко назÑваÑÑ Â«ÑопÑогÑаммами». ÐÑо ÑопоÑÑавимо Ñ ÐºÐ»ÑÑевой оÑобенноÑÑÑÑ Go â «goroutines».
-## ÐаклÑÑение
+## ÐаклÑÑение { #conclusion }
-Ð Ñамом наÑале бÑла ÑÐ°ÐºÐ°Ñ ÑÑаза:
+ÐеÑнÑмÑÑ Ðº Ñой же ÑÑазе:
-> СовÑеменнÑе веÑÑии Python поддеÑживаÑÑ ÑазÑабоÑÐºÑ Ñак назÑваемого
-**"аÑинÑ
Ñонного кода"** поÑÑедÑÑвом напиÑÐ°Ð½Ð¸Ñ **"ÑопÑогÑамм"** Ñ Ð¸ÑполÑзованием
-ÑинÑакÑиÑа **`async` и `await`**.
+> СовÑеменнÑе веÑÑии Python поддеÑживаÑÑ **«аÑинÑ
ÑоннÑй код»** Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **«ÑопÑогÑамм»** (coroutines) и ÑинÑакÑиÑа **`async` и `await`**.
-ТепеÑÑ Ð²ÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ звÑÑаÑÑ Ð¿Ð¾Ð½ÑÑнее. â¨
+ТепеÑÑ ÑÑо должно звÑÑаÑÑ Ð¿Ð¾Ð½ÑÑнее. â¨
-Ðа ÑÑом оÑнована ÑабоÑа FastAPI (поÑÑедÑÑвом Starlette), и именно ÑÑо
-обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ вÑÑокÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
+Ðменно ÑÑо «движеÑ» FastAPI (ÑеÑез Starlette) и обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑÑÐ¾Ð»Ñ Ð²Ð¿ÐµÑаÑлÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ.
-## ÐÑÐµÐ½Ñ ÑеÑ
ниÑеÑкие подÑобноÑÑи
+## ÐÑÐµÐ½Ñ ÑеÑ
ниÑеÑкие подÑобноÑÑи { #very-technical-details }
-/// warning
+/// warning | ÐÑедÑпÑеждение
-ÐÑÐ¾Ñ Ñаздел ÑиÑаÑÑ Ð½Ðµ обÑзаÑелÑно.
+СкоÑее вÑего, ÑÑÐ¾Ñ Ñаздел можно пÑопÑÑÑиÑÑ.
-ÐдеÑÑ Ð¿ÑиводÑÑÑÑ Ð¿Ð¾Ð´ÑобноÑÑи внÑÑÑеннего ÑÑÑÑойÑÑва **FastAPI**.
+ÐдеÑÑ â оÑÐµÐ½Ñ ÑеÑ
ниÑеÑкие подÑобноÑÑи о Ñом, как **FastAPI** ÑабоÑÐ°ÐµÑ Â«Ð¿Ð¾Ð´ капоÑом».
-Ðо еÑли Ð²Ñ Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑе ÑеÑ
ниÑеÑкими знаниÑми (коÑÑÑинÑ, поÑоки, блокиÑовка и Ñ. д.)
-и вам инÑеÑеÑно, как FastAPI обÑабаÑÑÐ²Ð°ÐµÑ `async def` в оÑлиÑие Ð¾Ñ Ð¾Ð±ÑÑнÑÑ
`def`,
-ÑиÑайÑе далÑÑе.
+ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð´Ð¾ÑÑаÑоÑно ÑеÑ
ниÑеÑкиÑ
знаний (ÑопÑогÑаммÑ, поÑоки, блокиÑовки и Ñ.д.) и вам инÑеÑеÑно, как FastAPI обÑабаÑÑÐ²Ð°ÐµÑ `async def` по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑÑнÑм `def`, â впеÑÑд.
///
-### ФÑнкÑии обÑабоÑки пÑÑи
+### ФÑнкÑии-обÑабоÑÑики пÑÑи { #path-operation-functions }
-Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе *ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки пÑÑи* обÑÑнÑм обÑазом Ñ ÐºÐ»ÑÑевÑм Ñловом `def`
-вмеÑÑо `async def`, FastAPI Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ ÐµÑ Ð²ÑполнениÑ, запÑÑÑив ÑÑнкÑÐ¸Ñ Ð²Ð¾ внеÑнем
-пÑле поÑоков, а не напÑÑмÑÑ (ÑÑо Ð±Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовало ÑеÑвеÑ).
+Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе *ÑÑнкÑиÑ-обÑабоÑÑик пÑÑи* обÑÑнÑм `def` вмеÑÑо `async def`, она запÑÑкаеÑÑÑ Ð²Ð¾ внеÑнем пÑле поÑоков, коÑоÑÑй заÑем «ожидаеÑÑÑ», вмеÑÑо пÑÑмого вÑзова (пÑÑмой вÑзов заблокиÑовал Ð±Ñ ÑеÑвеÑ).
-ÐÑли Ñанее Ð²Ñ Ð¸ÑполÑзовали дÑÑгой аÑинÑ
ÑоннÑй ÑÑеймвоÑк, коÑоÑÑй ÑабоÑÐ°ÐµÑ Ð¸Ð½Ð°Ñе,
-и пÑивÑкли обÑÑвлÑÑÑ Ð¿ÑоÑÑÑе вÑÑиÑлиÑелÑнÑе *ÑÑнкÑии* ÑеÑез `def` Ñади
-незнаÑиÑелÑного пÑиÑоÑÑа ÑкоÑоÑÑи (поÑÑдка 100 наноÑекÑнд), обÑаÑиÑе внимание,
-ÑÑо Ñ **FastAPI** Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе пÑоÑивоположнÑй ÑÑÑекÑ. Ð Ñаком ÑлÑÑае болÑÑе подÑ
одиÑ
-`async def`, еÑли ÑолÑко *ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки пÑÑи* не иÑполÑзÑÐµÑ ÐºÐ¾Ð´, пÑиводÑÑий
-к блокиÑовке I/O.
-
+ÐÑли Ð²Ñ Ð¿ÑиÑли из дÑÑгого async-ÑÑеймвоÑка, коÑоÑÑй ÑабоÑÐ°ÐµÑ Ð¸Ð½Ð°Ñе, и пÑивÑкли обÑÑвлÑÑÑ ÑÑивиалÑнÑе *ÑÑнкÑии-обÑабоÑÑики пÑÑи*, вÑполнÑÑÑие ÑолÑко вÑÑиÑлениÑ, ÑеÑез пÑоÑÑой `def` Ñади кÑоÑеÑной вÑÐ³Ð¾Ð´Ñ Ð² пÑоизводиÑелÑноÑÑи (около 100 наноÑекÑнд), обÑаÑиÑе внимание: в **FastAPI** ÑÑÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð¿ÑоÑивоположнÑм. Ð ÑакиÑ
ÑлÑÑаÑÑ
лÑÑÑе иÑполÑзоваÑÑ `async def`, еÑли ÑолÑко ваÑи *ÑÑнкÑии-обÑабоÑÑики пÑÑи* не иÑполÑзÑÑÑ ÐºÐ¾Ð´, вÑполнÑÑÑий блокиÑÑÑÑий I/O.
-
-Ðо в лÑбом ÑлÑÑае велика веÑоÑÑноÑÑÑ, ÑÑо **FastAPI** [окажеÑÑÑ Ð±ÑÑÑÑее](index.md#_11){.internal-link target=_blank}
-дÑÑгого ÑÑеймвоÑка (или Ñ
оÑÑ Ð±Ñ Ð½Ð° ÑÑовне Ñ Ð½Ð¸Ð¼).
+Тем не менее, в обоиÑ
ÑлÑÑаÑÑ
велика веÑоÑÑноÑÑÑ, ÑÑо **FastAPI** [вÑÑ Ñавно бÑÐ´ÐµÑ Ð±ÑÑÑÑее](index.md#performance){.internal-link target=_blank} (или как минимÑм ÑопоÑÑавим) Ñ Ð²Ð°Ñим пÑедÑдÑÑим ÑÑеймвоÑком.
-### ÐавиÑимоÑÑи
+### ÐавиÑимоÑÑи { #dependencies }
-То же оÑноÑиÑÑÑ Ðº завиÑимоÑÑÑм. ÐÑли ÑÑо обÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ `def`, а не `async def`,
-она запÑÑкаеÑÑÑ Ð²Ð¾ внеÑнем пÑле поÑоков.
+То же оÑноÑиÑÑÑ Ðº [завиÑимоÑÑÑм](tutorial/dependencies/index.md){.internal-link target=_blank}. ÐÑли завиÑимоÑÑÑ â ÑÑо обÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ `def`, а не `async def`, она запÑÑкаеÑÑÑ Ð²Ð¾ внеÑнем пÑле поÑоков.
-### ÐодзавиÑимоÑÑи
+### ÐодзавиÑимоÑÑи { #sub-dependencies }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑÑÑлаÑÑиÑ
ÑÑ Ð´ÑÑг на дÑÑга завиÑимоÑÑей и подзавиÑимоÑÑей
-(в виде паÑамеÑÑов пÑи опÑеделении ÑÑнкÑии). Ðакие-Ñо бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `async def`,
-дÑÑгие обÑÑнÑм обÑазом ÑеÑез `def`, и ÑÐ°ÐºÐ°Ñ ÑÑ
ема вполне ÑабоÑоÑпоÑобна. ФÑнкÑии,
-обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `def` бÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð½Ð° внеÑнем поÑоке (из пÑла),
-а не Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `await`.
+У Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑколÑко завиÑимоÑÑей и [подзавиÑимоÑÑей](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank}, коÑоÑÑе ÑÑебÑÑÑ Ð´ÑÑг дÑÑга (в виде паÑамеÑÑов опÑеделений ÑÑнкÑий): ÑаÑÑÑ Ð¸Ð· ниÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвлена Ñ `async def`, а ÑаÑÑÑ â обÑÑнÑм `def`. ÐÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ, а Ñе, ÑÑо обÑÑÐ²Ð»ÐµÐ½Ñ Ð¾Ð±ÑÑнÑм `def`, бÑдÑÑ Ð²ÑзÑваÑÑÑÑ Ð²Ð¾ внеÑнем поÑоке (из пÑла), а не «ожидаÑÑÑÑ».
-### ÐÑÑгие ÑлÑжебнÑе ÑÑнкÑии
+### ÐÑÑгие ÑлÑжебнÑе ÑÑнкÑии { #other-utility-functions }
-ÐÑбÑе дÑÑгие ÑлÑжебнÑе ÑÑнкÑии, коÑоÑÑе Ð²Ñ Ð²ÑзÑваеÑе напÑÑмÑÑ, можно обÑÑвлÑÑÑ
-Ñ Ð¸ÑполÑзованием `def` или `async def`. FastAPI не бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° Ñо, как вÑ
-иÑ
запÑÑкаеÑе.
+ÐÑбÑе дÑÑгие ÑлÑжебнÑе ÑÑнкÑии, коÑоÑÑе Ð²Ñ Ð²ÑзÑваеÑе напÑÑмÑÑ, можно обÑÑвлÑÑÑ Ð¾Ð±ÑÑнÑм `def` или `async def`, и FastAPI не бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° Ñо, как Ð²Ñ Ð¸Ñ
вÑзÑваеÑе.
-ÐÑим они оÑлиÑаÑÑÑÑ Ð¾Ñ ÑÑнкÑий, коÑоÑÑе FastAPI вÑзÑÐ²Ð°ÐµÑ ÑамоÑÑоÑÑелÑно:
-*ÑÑнкÑии обÑабоÑки пÑÑи* и завиÑимоÑÑи.
+РоÑлиÑие Ð¾Ñ ÑÑнкÑий, коÑоÑÑе FastAPI вÑзÑÐ²Ð°ÐµÑ Ð·Ð° ваÑ: *ÑÑнкÑии-обÑабоÑÑики пÑÑи* и завиÑимоÑÑи.
-ÐÑли ÑлÑÐ¶ÐµÐ±Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑÑвлена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `def`, она бÑÐ´ÐµÑ Ð²Ñзвана напÑÑмÑÑ
-(как Ð²Ñ Ð¸ напиÑали в коде), а не в оÑделÑном поÑоке. ÐÑли же она обÑÑвлена Ñ
-помоÑÑÑ `async def`, ÐµÑ Ð²Ñзов должен оÑÑÑеÑÑвлÑÑÑÑÑ Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸ÐµÐ¼ ÑеÑез `await`.
+ÐÑли ÑлÑÐ¶ÐµÐ±Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ â обÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ñ `def`, она бÑÐ´ÐµÑ Ð²Ñзвана напÑÑмÑÑ (как Ð²Ñ Ð¸ пиÑеÑе в коде), не в пÑле поÑоков; еÑли ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑÑвлена Ñ `async def`, Ñогда пÑи ÐµÑ Ð²Ñзове в ваÑем коде Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ `await`.
---
-
-ÐÑÑ Ñаз повÑоÑим, ÑÑо вÑе ÑÑи ÑеÑ
ниÑеÑкие подÑобноÑÑи полезнÑ, ÑолÑко еÑли Ð²Ñ ÑпеÑиалÑно иÑ
иÑкали.
+Снова: ÑÑо оÑÐµÐ½Ñ ÑеÑ
ниÑеÑкие подÑобноÑÑи, полезнÑе, веÑоÑÑно, ÑолÑко еÑли Ð²Ñ ÑеленапÑавленно иÑ
иÑеÑе.
-РпÑоÑивном ÑлÑÑае пÑоÑÑо ознакомÑÑеÑÑ Ñ Ð¾ÑновнÑми пÑинÑипами в Ñазделе вÑÑе: ÐÐµÑ Ð²Ñемени?.
+ÐнаÑе вам доÑÑаÑоÑно ÑÑководÑÑвоваÑÑÑÑ ÑекомендаÑиÑми из Ñаздела вÑÑе: ÐÐµÑ Ð²Ñемени?.
diff --git a/docs/ru/docs/benchmarks.md b/docs/ru/docs/benchmarks.md
index 259dca8e67..612b39f708 100644
--- a/docs/ru/docs/benchmarks.md
+++ b/docs/ru/docs/benchmarks.md
@@ -1,37 +1,34 @@
-# ÐамеÑÑ Ð¿ÑоизводиÑелÑноÑÑи
+# ÐенÑмаÑки (ÑеÑÑÑ Ð¿ÑоизводиÑелÑноÑÑи) { #benchmarks }
-ÐезавиÑимÑе ÑеÑÑÑ Ð¿ÑоизводиÑелÑноÑÑи пÑиложений Ð¾Ñ TechEmpower показÑваÑÑ, ÑÑо **FastAPI** под ÑпÑавлением Uvicorn один из ÑамÑÑ
бÑÑÑÑÑÑ
Python-ÑÑеймвоÑков и ÑÑÑÑÐ¿Ð°ÐµÑ ÑолÑко Starlette и Uvicorn (коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð² FastAPI). (*)
+ÐезавиÑимÑе бенÑмаÑки TechEmpower показÑваÑÑ, ÑÑо пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** под ÑпÑавлением Uvicorn â одни из ÑамÑÑ
бÑÑÑÑÑÑ
PythonâÑÑеймвоÑков, ÑÑÑÑпаÑÑие ÑолÑко Starlette и ÑÐ°Ð¼Ð¾Ð¼Ñ Uvicorn (иÑполÑзÑÑÑÑÑ Ð²Ð½ÑÑÑи FastAPI).
-Ðо пÑи пÑоÑмоÑÑе и ÑÑавнении замеÑов пÑоизводиÑелÑноÑÑи ÑледÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð² Ð²Ð¸Ð´Ñ Ð½Ð¸Ð¶ÐµÐ¾Ð¿Ð¸Ñанное.
+Ðо пÑи пÑоÑмоÑÑе бенÑмаÑков и ÑÑавнений ÑледÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð² Ð²Ð¸Ð´Ñ ÑледÑÑÑее.
-## ÐамеÑÑ Ð¿ÑоизводиÑелÑноÑÑи и ÑкоÑоÑÑи
+## ÐенÑмаÑки и ÑкоÑоÑÑÑ { #benchmarks-and-speed }
-РподобнÑÑ
ÑеÑÑаÑ
ÑаÑÑо можно ÑвидеÑÑ, ÑÑо инÑÑÑÑменÑÑ Ñазного Ñипа ÑÑавниваÑÑ Ð´ÑÑг Ñ Ð´ÑÑгом, как аналогиÑнÑе.
+ÐÑи пÑовеÑке бенÑмаÑков ÑаÑÑо можно ÑвидеÑÑ, ÑÑо инÑÑÑÑменÑÑ ÑазнÑÑ
Ñипов ÑÑавниваÑÑ ÐºÐ°Ðº ÑквиваленÑнÑе.
-Ð ÑаÑÑноÑÑи, ÑÑавниваÑÑ Ð²Ð¼ÐµÑÑе Uvicorn, Starlette и FastAPI (ÑÑеди многиÑ
дÑÑгиÑ
инÑÑÑÑменÑов).
+Ð ÑаÑÑноÑÑи, ÑаÑÑо ÑÑавниваÑÑ Ð²Ð¼ÐµÑÑе Uvicorn, Starlette и FastAPI (ÑÑеди многиÑ
дÑÑгиÑ
инÑÑÑÑменÑов).
-Чем пÑоÑе пÑоблема, коÑоÑÑÑ ÑеÑÐ°ÐµÑ Ð¸Ð½ÑÑÑÑменÑ, Ñем вÑÑе его пÑоизводиÑелÑноÑÑÑ. РболÑÑинÑÑво ÑеÑÑов не пÑовеÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÑнкÑии, пÑедоÑÑавлÑемÑе инÑÑÑÑменÑом.
+Чем пÑоÑе задаÑа, коÑоÑÑÑ ÑеÑÐ°ÐµÑ Ð¸Ð½ÑÑÑÑменÑ, Ñем вÑÑе его пÑоизводиÑелÑноÑÑÑ. РболÑÑинÑÑво бенÑмаÑков не ÑеÑÑиÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе возможноÑÑи, пÑедоÑÑавлÑемÑе инÑÑÑÑменÑом.
-ÐеÑаÑÑ
Ð¸Ñ Ð¸Ð½ÑÑÑÑменÑов Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий вид:
+ÐеÑаÑÑ
Ð¸Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñак:
* **Uvicorn**: ASGI-ÑеÑвеÑ
- * **Starlette** (иÑполÑзÑÐµÑ Uvicorn): веб-микÑоÑÑеймвоÑк
- * **FastAPI** (иÑполÑзÑÐµÑ Starlette): API-микÑоÑÑеймвоÑк Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми ÑÑнкÑиÑми Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñией даннÑÑ
и Ñ.д.
+ * **Starlette**: (иÑполÑзÑÐµÑ Uvicorn) веб-микÑоÑÑеймвоÑк
+ * **FastAPI**: (иÑполÑзÑÐµÑ Starlette) API-микÑоÑÑеймвоÑк Ñ ÑÑдом дополниÑелÑнÑÑ
возможноÑÑей Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, вклÑÑÐ°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ. п.
* **Uvicorn**:
- * ÐÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½Ð°Ð¸Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, Ñак как не Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÑÑого колиÑеÑÑва дополниÑелÑного кода, кÑоме Ñамого ÑеÑвеÑа.
- * ÐÑ Ð½Ðµ бÑдеÑе пиÑаÑÑ Ð¿Ñиложение на Uvicorn напÑÑмÑÑ. ÐÑо ознаÑало бÑ, ÑÑо ÐÐ°Ñ ÐºÐ¾Ð´ должен вклÑÑаÑÑ ÐºÐ°Ðº минимÑм веÑÑ
- код, пÑедоÑÑавлÑемÑй Starlette (или **FastAPI**). РеÑли ÐÑ Ñак ÑделаеÑе, Ñо в конеÑном иÑоге ÐаÑе пÑиложение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ñе же накладнÑе ÑаÑÑ
одÑ, ÑÑо и пÑи иÑполÑзовании ÑÑеймвоÑка, минимизиÑÑÑÑего код ÐаÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÐаÑи оÑибки.
- * Uvicorn Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð¸Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Daphne, Hypercorn, uWSGI и дÑÑгими веб-ÑеÑвеÑами.
-
+ * ÐÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½Ð°Ð¸Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, Ñак как помимо Ñамого ÑеÑвеÑа Ñ Ð½ÐµÐ³Ð¾ немного дополниÑелÑного кода.
+ * ÐÑ Ð½Ðµ бÑдеÑе пиÑаÑÑ Ð¿Ñиложение непоÑÑедÑÑвенно на Uvicorn. ÐÑо ознаÑало бÑ, ÑÑо ÐÐ°Ñ ÐºÐ¾Ð´ должен вклÑÑаÑÑ ÐºÐ°Ðº минимÑм веÑÑ ÐºÐ¾Ð´, пÑедоÑÑавлÑемÑй Starlette (или **FastAPI**). РеÑли ÐÑ Ñак ÑделаеÑе, Ñо в конеÑном иÑоге ÐаÑе пÑиложение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ñе же накладнÑе ÑаÑÑ
одÑ, ÑÑо и пÑи иÑполÑзовании ÑÑеймвоÑка, минимизиÑÑÑÑего код ÐаÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÐаÑи оÑибки.
+ * ÐÑли ÐÑ ÑÑавниваеÑе Uvicorn, ÑÑавнивайÑе его Ñ Daphne, Hypercorn, uWSGI и Ñ. д. â ÑеÑвеÑами пÑиложений.
* **Starlette**:
- * ÐÑÐ´ÐµÑ ÑÑÑÑпаÑÑ Uvicorn по пÑоизводиÑелÑноÑÑи. ФакÑиÑеÑки Starlette ÑпÑавлÑеÑÑÑ Uvicorn и из-за вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑего колиÑеÑÑва кода он не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее, Ñем Uvicorn.
- * ÐаÑо он пÑедоÑÑавлÑÐµÑ Ðам инÑÑÑÑменÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑÑ
веб-пÑиложений Ñ Ð¾Ð±ÑабоÑкой маÑÑÑÑÑов URL и Ñ.д.
- * Starlette ÑледÑÐµÑ ÑÑавниваÑÑ Ñ Sanic, Flask, Django и дÑÑгими веб-ÑÑеймвоÑками (или микÑоÑÑеймвоÑками).
-
+ * ÐÑÐ´ÐµÑ Ð½Ð° ÑледÑÑÑем меÑÑе по пÑоизводиÑелÑноÑÑи поÑле Uvicorn. ФакÑиÑеÑки Starlette запÑÑкаеÑÑÑ Ð¿Ð¾Ð´ ÑпÑавлением Uvicorn, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко «медленнее» Uvicorn изâза вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑего обÑÑма кода.
+ * ÐаÑо он пÑедоÑÑавлÑÐµÑ Ðам инÑÑÑÑменÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑÑ
вебâпÑиложений Ñ Ð¼Ð°ÑÑÑÑÑизаÑией по пÑÑÑм и Ñ. п.
+ * ÐÑли ÐÑ ÑÑавниваеÑе Starlette, ÑÑавнивайÑе его Ñ Sanic, Flask, Django и Ñ. д. â вебâÑÑеймвоÑками (или микÑоÑÑеймвоÑками).
* **FastAPI**:
- * Так же как Starlette иÑполÑзÑÐµÑ Uvicorn и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее него, **FastAPI** иÑполÑзÑÐµÑ Starlette, Ñо еÑÑÑ Ð¾Ð½ не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее Starlette.
- * FastAPI пÑедоÑÑавлÑÐµÑ Ð±Ð¾Ð»ÑÑе возможноÑÑей повеÑÑ
Starlette, коÑоÑÑе навеÑнÑка Ðам понадобÑÑÑÑ Ð¿Ñи Ñоздании API, Ñакие как пÑовеÑка даннÑÑ
и ÑеÑиализаÑиÑ. РдовеÑок ÐÑ ÐµÑÑ Ð¸ полÑÑаеÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ (авÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð°Ð¶Ðµ не ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñе ÑаÑÑ
Ð¾Ð´Ñ Ð¿Ñи ÑабоÑе пÑиложениÑ, Ñак как она ÑоздаеÑÑÑ Ð¿Ñи запÑÑке).
- * ÐÑли ÐÑ Ð½Ðµ иÑполÑзÑеÑе FastAPI, а иÑполÑзÑеÑе Starlette напÑÑмÑÑ (или дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð²Ñоде Sanic, Flask, Responder и Ñ.д.), Ðам пÑиÑлоÑÑ Ð±Ñ ÑамоÑÑоÑÑелÑно ÑеализоваÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. То еÑÑÑ, в иÑоге, ÐаÑе пÑиложение имело Ð±Ñ Ñакие же накладнÑе ÑаÑÑ
одÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¾ бÑло Ñоздано Ñ Ð¸ÑполÑзованием FastAPI. Рво многиÑ
ÑлÑÑаÑÑ
валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑедÑÑавлÑÑÑ Ñобой ÑамÑй болÑÑой обÑÑм кода, напиÑанного в пÑиложениÑÑ
.
- * Таким обÑазом, иÑполÑзÑÑ FastAPI ÐÑ Ð¿Ð¾ÑÑаÑиÑе менÑÑе вÑемени на ÑазÑабоÑкÑ, ÑменÑÑиÑе колиÑеÑÑво оÑибок, ÑÑÑок кода и, веÑоÑÑно, полÑÑиÑе ÑÑ Ð¶Ðµ пÑоизводиÑелÑноÑÑÑ (или лÑÑÑе), как и еÑли Ð±Ñ Ð½Ðµ иÑполÑзовали его (поÑколÑÐºÑ Ðам пÑиÑлоÑÑ Ð±Ñ ÑеализоваÑÑ Ð²Ñе его возможноÑÑи в Ñвоем коде).
- * FastAPI должно ÑÑавниваÑÑ Ñ ÑÑеймвоÑками веб-пÑиложений (или набоÑами инÑÑÑÑменÑов), коÑоÑÑе обеÑпеÑиваÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, а Ñакже пÑедоÑÑавлÑÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑиÑ, Ñакими как Flask-apispec, NestJS, Molten и им подобнÑе.
+ * ТоÑно Ñак же, как Starlette иÑполÑзÑÐµÑ Uvicorn и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее него, **FastAPI** иÑполÑзÑÐµÑ Starlette, поÑÑÐ¾Ð¼Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее его.
+ * FastAPI пÑедоÑÑавлÑÐµÑ Ð±Ð¾Ð»ÑÑе возможноÑÑей повеÑÑ
Starlette â Ñе, коÑоÑÑе поÑÑи вÑегда нÑÐ¶Ð½Ñ Ð¿Ñи Ñоздании API, Ñакие как валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. РдовеÑок ÐÑ ÐµÑÑ Ð¸ полÑÑаеÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ (авÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð°Ð¶Ðµ не ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñе ÑаÑÑ
Ð¾Ð´Ñ Ð¿Ñи ÑабоÑе пÑиложениÑ, Ñак как она ÑоздаÑÑÑÑ Ð¿Ñи запÑÑке).
+ * ÐÑли Ð±Ñ ÐÑ Ð½Ðµ иÑполÑзовали FastAPI, а иÑполÑзовали Starlette напÑÑмÑÑ (или дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð²Ñоде Sanic, Flask, Responder и Ñ. д.), Ðам пÑиÑлоÑÑ Ð±Ñ ÑамоÑÑоÑÑелÑно ÑеализоваÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. То еÑÑÑ, в иÑоге, ÐаÑе пÑиложение имело Ð±Ñ Ñакие же накладнÑе ÑаÑÑ
одÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¾ бÑло Ñоздано Ñ Ð¸ÑполÑзованием FastAPI. Рво многиÑ
ÑлÑÑаÑÑ
валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑедÑÑавлÑÑÑ Ñобой ÑамÑй болÑÑой обÑÑм кода, напиÑанного в пÑиложениÑÑ
.
+ * Таким обÑазом, иÑполÑзÑÑ FastAPI, ÐÑ ÑкономиÑе вÑÐµÐ¼Ñ ÑазÑабоÑки, ÑменÑÑаеÑе колиÑеÑÑво оÑибок, ÑÑÑок кода и, веÑоÑÑно, полÑÑиÑе ÑÑ Ð¶Ðµ пÑоизводиÑелÑноÑÑÑ (или лÑÑÑе), как и еÑли Ð±Ñ Ð½Ðµ иÑполÑзовали его (поÑколÑÐºÑ Ðам пÑиÑлоÑÑ Ð±Ñ ÑеализоваÑÑ Ð²Ñе его возможноÑÑи в ÑвоÑм коде).
+ * ÐÑли ÐÑ ÑÑавниваеÑе FastAPI, ÑÑавнивайÑе его Ñ ÑÑеймвоÑком вебâпÑиложений (или набоÑом инÑÑÑÑменÑов), коÑоÑÑй обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸ докÑменÑаÑиÑ, Ñакими как Flask-apispec, NestJS, Molten и им подобнÑе. ФÑеймвоÑки Ñ Ð¸Ð½ÑегÑиÑованной авÑомаÑиÑеÑкой валидаÑией даннÑÑ
, ÑеÑиализаÑией и докÑменÑаÑией.
diff --git a/docs/ru/docs/deployment/concepts.md b/docs/ru/docs/deployment/concepts.md
index acfa1f4fe6..207d1604d7 100644
--- a/docs/ru/docs/deployment/concepts.md
+++ b/docs/ru/docs/deployment/concepts.md
@@ -1,323 +1,321 @@
-# ÐонÑепÑии ÑазвÑÑÑÑваниÑ
+# ÐонÑепÑии ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ { #deployments-concepts }
-СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко конÑепÑий, пÑименÑемÑÑ
Ð´Ð»Ñ ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñиложений **FastAPI**, Ñавно как и Ð´Ð»Ñ Ð»ÑбÑÑ
дÑÑгиÑ
Ñипов веб-пÑиложений, ÑÑеди коÑоÑÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑбÑаÑÑ **наиболее подÑ
одÑÑий** ÑпоÑоб.
+ÐÑи ÑазвÑÑÑÑвании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** (и вообÑе лÑбого вебâAPI) еÑÑÑ Ð½ÐµÑколÑко конÑепÑий, о коÑоÑÑÑ
ÑÑÐ¾Ð¸Ñ Ð´ÑмаÑÑ â Ñ Ð¸Ñ
помоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑбÑаÑÑ **наиболее подÑ
одÑÑий** ÑпоÑоб **ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð²Ð°Ñего пÑиложениÑ**.
-СамÑе важнÑе из ниÑ
:
+ÐекоÑоÑÑе из важнÑÑ
конÑепÑий:
-* ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
-* ÐаÑÑÑойки запÑÑка пÑиложениÑ
-* ÐеÑезагÑÑзка пÑиложениÑ
-* ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑиложениÑ
-* УпÑавление памÑÑÑÑ
-* ÐÑполÑзование пеÑеÑиÑленнÑÑ
ÑÑнкÑий пеÑед запÑÑком пÑиложениÑ.
+* ÐезопаÑноÑÑÑ â HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе
+* ÐеÑезапÑÑки
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
-РаÑÑмоÑÑим ниже влиÑние каждого из ниÑ
на пÑоÑеÑÑ **ÑазвÑÑÑÑваниÑ**.
+ÐоÑмоÑÑим, как они влиÑÑÑ Ð½Ð° **ÑазвÑÑÑÑваниÑ**.
-ÐаÑа конеÑÐ½Ð°Ñ ÑÐµÐ»Ñ - **обÑлÑживаÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов ваÑего API безопаÑно** и **беÑпеÑебойно**, Ñ Ð¼Ð°ÐºÑималÑно ÑÑÑекÑивнÑм иÑполÑзованием **вÑÑиÑлиÑелÑнÑÑ
ÑеÑÑÑÑов** (напÑимеÑ, ÑдалÑннÑÑ
ÑеÑвеÑов/виÑÑÑалÑнÑÑ
маÑин). ð
+РконеÑном иÑоге ÑÐµÐ»Ñ â **обÑлÑживаÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов ваÑего API** безопаÑно, **избегаÑÑ Ð¿ÐµÑебоев** и макÑималÑно ÑÑÑекÑивно иÑполÑзоваÑÑ **вÑÑиÑлиÑелÑнÑе ÑеÑÑÑÑÑ** (напÑимеÑ, ÑдалÑннÑе ÑеÑвеÑÑ/виÑÑÑалÑнÑе маÑинÑ). ð
-ÐдеÑÑ Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ ÑаÑÑÐºÐ°Ð¶Ñ Ðам об ÑÑиÑ
**конÑепÑиÑÑ
** и надеÑÑÑ, ÑÑо Ñ Ð²Ð°Ñ ÑложиÑÑÑ **инÑÑиÑивное понимание**, какой ÑпоÑоб вÑбÑаÑÑ Ð¿Ñи ÑазвеÑÑÑвании ваÑего API в ÑазлиÑнÑÑ
окÑÑжениÑÑ
, возможно, даже **еÑÑ Ð½Ðµ ÑÑÑеÑÑвÑÑÑиÑ
**.
+ÐдеÑÑ Ñ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ ÑаÑÑÐºÐ°Ð¶Ñ Ð¾ ÑÑиÑ
**конÑепÑиÑÑ
**, ÑÑÐ¾Ð±Ñ Ñ Ð²Ð°Ñ Ð¿Ð¾ÑвилаÑÑ **инÑÑиÑиÑ**, как ÑазвÑÑÑÑваÑÑ Ð²Ð°Ñ API в ÑазнÑÑ
окÑÑжениÑÑ
, возможно даже в **бÑдÑÑиÑ
**, коÑоÑÑÑ
еÑÑ Ð½Ðµ ÑÑÑеÑÑвÑеÑ.
-ÐзнакомивÑиÑÑ Ñ ÑÑими конÑепÑиÑми, Ð²Ñ ÑможеÑе **оÑениÑÑ Ð¸ вÑбÑаÑÑ** лÑÑÑий ÑпоÑоб ÑазвÑÑÑÑвании **ÐаÑего API**.
+УÑиÑÑÐ²Ð°Ñ ÑÑи конÑепÑии, Ð²Ñ ÑможеÑе **оÑениÑÑ Ð¸ ÑпÑоекÑиÑоваÑÑ** лÑÑÑий ÑпоÑоб ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ **ÑвоиÑ
API**.
-РпоÑледÑÑÑиÑ
главаÑ
Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»Ñ Ðам **конкÑеÑнÑе ÑеÑепÑÑ** ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI.
+Ð ÑледÑÑÑиÑ
главаÑ
Ñ Ð´Ð°Ð¼ более **конкÑеÑнÑе ÑеÑепÑÑ** по ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñиложений FastAPI.
-Ð ÑейÑÐ°Ñ Ð´Ð°Ð²Ð°Ð¹Ñе оÑÑановимÑÑ Ð½Ð° важнÑÑ
**идеÑÑ
ÑÑиÑ
конÑепÑий**. ÐÑи идеи можно Ñакже пÑимениÑÑ Ð¸ к дÑÑгим Ñипам веб-пÑиложений. ð¡
+Рпока давайÑе ÑазбеÑÑм важнÑе **идеи**. ÐÑи конÑепÑии пÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ Ð¸ к дÑÑгим Ñипам вебâAPI. ð¡
-## ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
+## ÐезопаÑноÑÑÑ â HTTPS { #security-https }
-Ð [пÑедÑдÑÑей главе об HTTPS](https.md){.internal-link target=_blank} Ð¼Ñ ÑаÑÑмоÑÑели, как HTTPS обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑиÑÑование Ð´Ð»Ñ Ð²Ð°Ñего API.
+Ð [пÑедÑдÑÑей главе пÑо HTTPS](https.md){.internal-link target=_blank} Ð¼Ñ ÑазобÑалиÑÑ, как HTTPS обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑиÑÑование Ð´Ð»Ñ Ð²Ð°Ñего API.
-Также Ð¼Ñ Ð·Ð°Ð¼ÐµÑили, ÑÑо обÑÑно Ð´Ð»Ñ ÑабоÑÑ Ñ HTTPS ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ñжен **дополниÑелÑнÑй** ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ - **пÑокÑи-ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS**.
+Также Ð¼Ñ Ñвидели, ÑÑо HTTPS обÑÑно обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, **внеÑний** по оÑноÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â **TLS Termination Proxy**.
-РеÑли пÑокÑи-ÑеÑÐ²ÐµÑ Ð½Ðµ ÑÐ¼ÐµÐµÑ Ñам **обновлÑÑÑ ÑеÑÑиÑикаÑÑ HTTPS**, Ñо нÑжен еÑÑ Ð¾Ð´Ð¸Ð½ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð´Ð»Ñ ÑÑого дейÑÑвиÑ.
+Рдолжен бÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, оÑвеÑаÑÑий за **обновление HTTPSâÑеÑÑиÑикаÑов** â ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ð¶Ðµ ÑамÑй ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¸Ð»Ð¸ оÑделÑнÑй.
-### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ ÑабоÑÑ Ñ HTTPS
+### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ HTTPS { #example-tools-for-https }
-ÐÐ¾Ñ Ð½ÐµÐºÐ¾ÑоÑÑе инÑÑÑÑменÑÑ, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑименÑÑÑ ÐºÐ°Ðº пÑокÑи-ÑеÑвеÑÑ:
+ÐекоÑоÑÑе инÑÑÑÑменÑÑ, коÑоÑÑе можно иÑполÑзоваÑÑ ÐºÐ°Ðº TLS Termination Proxy:
* Traefik
- * С авÑомаÑиÑеÑким обновлением ÑеÑÑиÑикаÑов â¨
+ * ÐвÑомаÑиÑеÑки обновлÑÐµÑ ÑеÑÑиÑикаÑÑ â¨
* Caddy
- * С авÑомаÑиÑеÑким обновлением ÑеÑÑиÑикаÑов â¨
+ * ÐвÑомаÑиÑеÑки обновлÑÐµÑ ÑеÑÑиÑикаÑÑ â¨
* Nginx
- * С дополниÑелÑнÑм компоненÑом Ñипа Certbot Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
+ * С внеÑним компоненÑом (напÑимеÑ, Certbot) Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
* HAProxy
- * С дополниÑелÑнÑм компоненÑом Ñипа Certbot Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
-* Kubernetes Ñ Ingress Controller поÑ
ожим на Nginx
- * С дополниÑелÑнÑм компоненÑом Ñипа cert-manager Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
-* ÐÑполÑзование ÑÑлÑг облаÑного пÑовайдеÑа (ÑиÑайÑе ниже ð)
+ * С внеÑним компоненÑом (напÑимеÑ, Certbot) Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
+* Kubernetes Ñ Ingress Controller (напÑимеÑ, Nginx)
+ * С внеÑним компоненÑом (напÑимеÑ, cert-manager) Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
+* ÐбÑабаÑÑваеÑÑÑ Ð²Ð½ÑÑÑи облаÑного пÑовайдеÑа как ÑаÑÑÑ ÐµÐ³Ð¾ ÑÑлÑг (Ñм. ниже ð)
-РпоÑледнем ваÑианÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ ÑÑлÑгами **облаÑного ÑеÑвиÑа**, коÑоÑÑй ÑÐ´ÐµÐ»Ð°ÐµÑ Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ ÑабоÑÑ, вклÑÑÐ°Ñ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ HTTPS. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð»Ð¾Ð¶Ð¸ÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ поÑÑебоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¿Ð»Ð°ÑÑ Ð¸ Ñ.п. ÐаÑо Ðам не понадобиÑÑÑ ÑамоÑÑоÑÑелÑно занимаÑÑÑÑ Ð½Ð°ÑÑÑойками пÑокÑи-ÑеÑвеÑа.
+ÐÑÑгой ваÑÐ¸Ð°Ð½Ñ â иÑполÑзоваÑÑ **облаÑнÑй ÑеÑвиÑ**, коÑоÑÑй возÑмÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑÑе задаÑ, вклÑÑÐ°Ñ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ HTTPS. Там могÑÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ дополниÑелÑÐ½Ð°Ñ ÑÑоимоÑÑÑ Ð¸ Ñ.п., но в Ñаком ÑлÑÑае вам не пÑидÑÑÑÑ Ñамим наÑÑÑаиваÑÑ TLS Termination Proxy.
-РдалÑнейÑем Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ðам некоÑоÑÑе конкÑеÑнÑе пÑимеÑÑ Ð¸Ñ
пÑименениÑ.
+Ð ÑледÑÑÑиÑ
главаÑ
Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ ÐºÐ¾Ð½ÐºÑеÑнÑе пÑимеÑÑ.
---
-СледÑÑÑие конÑепÑии ÑаÑÑмаÑÑиваÑÑ Ð¿Ñименение пÑогÑаммÑ, запÑÑкаÑÑей ÐÐ°Ñ API (Ñакой как Uvicorn).
+Ðалее ÑаÑÑмоÑÑим конÑепÑии, ÑвÑзаннÑе Ñ Ð¿ÑогÑаммой, коÑоÑÐ°Ñ Ð·Ð°Ð¿ÑÑÐºÐ°ÐµÑ Ð²Ð°Ñ ÑеалÑнÑй API (напÑимеÑ, Uvicorn).
-## ÐÑогÑамма и пÑоÑеÑÑ
+## ÐÑогÑамма и пÑоÑеÑÑ { #program-and-process }
-ÐÑ ÑаÑÑо бÑдем вÑÑÑеÑаÑÑ Ñлова **пÑоÑеÑÑ** и **пÑогÑамма**, поÑÐ¾Ð¼Ñ ÑледÑÐµÑ ÑÑÑниÑÑ Ð¾ÑлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
+ÐÑ ÑаÑÑо бÑдем говоÑиÑÑ Ð¾ ÑабоÑаÑÑем "**пÑоÑеÑÑе**", поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ ÑÑÑко понимаÑÑ, ÑÑо ÑÑо знаÑÐ¸Ñ Ð¸ Ñем оÑлиÑаеÑÑÑ Ð¾Ñ "**пÑогÑаммÑ**".
-### ЧÑо Ñакое пÑогÑамма
+### ЧÑо Ñакое пÑогÑамма { #what-is-a-program }
-ТеÑмином **пÑогÑамма** обÑÑно опиÑÑваÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво веÑей:
+Словом **пÑогÑамма** обÑÑно назÑваÑÑ ÑазнÑе веÑи:
-* **Ðод**, коÑоÑÑй Ð²Ñ Ð½Ð°Ð¿Ð¸Ñали, в наÑем ÑлÑÑае **Python-ÑайлÑ**.
-* **Файл**, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **иÑполнен** опеÑаÑионной ÑиÑÑемой, напÑÐ¸Ð¼ÐµÑ `python`, `python.exe` или `uvicorn`.
-* ÐонкÑеÑÐ½Ð°Ñ Ð¿ÑогÑамма, **запÑÑеннаÑ** опеÑаÑионной ÑиÑÑемой и иÑполÑзÑÑÑÐ°Ñ ÑенÑÑалÑнÑй пÑоÑеÑÑÐ¾Ñ Ð¸ памÑÑÑ. Ð Ñаком ÑлÑÑае ÑÑо Ñакже назÑваеÑÑÑ **пÑоÑеÑÑ**.
+* **Ðод**, коÑоÑÑй Ð²Ñ Ð¿Ð¸ÑеÑе, Ñо еÑÑÑ **PythonâÑайлÑ**.
+* **Файл**, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **запÑÑен** опеÑаÑионной ÑиÑÑемой, напÑимеÑ: `python`, `python.exe` или `uvicorn`.
+* ÐонкÑеÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð² моменÑ, когда она **ÑабоÑаеÑ** в опеÑаÑионной ÑиÑÑеме, иÑполÑзÑÑ CPU и памÑÑÑ. ÐÑо Ñакже назÑваÑÑ **пÑоÑеÑÑом**.
-### ЧÑо Ñакое пÑоÑеÑÑ
+### ЧÑо Ñакое пÑоÑеÑÑ { #what-is-a-process }
-ТеÑмин **пÑоÑеÑÑ** Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÐµÐµ Ñзкое Ñолкование, подÑазÑÐ¼ÐµÐ²Ð°Ñ ÑÑо-Ñо, запÑÑенное опеÑаÑионной ÑиÑÑемой (как в поÑледнем пÑнкÑе из вÑÑеÑÑоÑÑего абзаÑа):
+Слово **пÑоÑеÑÑ** обÑÑно иÑполÑзÑÑÑ Ð±Ð¾Ð»ÐµÐµ конкÑеÑно â ÑолÑко Ð´Ð»Ñ Ñого, ÑÑо ÑеалÑно вÑполнÑеÑÑÑ Ð² опеÑаÑионной ÑиÑÑеме (как в поÑледнем пÑнкÑе вÑÑе):
-* ÐонкÑеÑÐ½Ð°Ñ Ð¿ÑогÑамма, **запÑÑеннаÑ** опеÑаÑионной ÑиÑÑемой.
- * ÐÑо не Ð¸Ð¼ÐµÐµÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ðº какомÑ-либо ÑÐ°Ð¹Ð»Ñ Ð¸Ð»Ð¸ кодÑ, но неÑÑо **опÑеделÑнное**, ÑпÑавлÑемое и **вÑполнÑемое** опеÑаÑионной ÑиÑÑемой.
-* ÐÑÐ±Ð°Ñ Ð¿ÑогÑамма, лÑбой код, **могÑÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо-Ñо** ÑолÑко когда они **вÑполнÑÑÑÑÑ**. То еÑÑÑ, когда ÑвлÑÑÑÑÑ **ÑабоÑаÑÑим пÑоÑеÑÑом**.
-* ÐÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **пÑеÑван** (или "ÑбиÑ") Ðами или ваÑей опеÑаÑионной ÑиÑÑемой. Ð ÑезÑлÑÑаÑе Ñего он пеÑеÑÑÐ°Ð½ÐµÑ Ð¸ÑполнÑÑÑÑÑ Ð¸ **не бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑ Ð´ÐµÐ»Ð°ÑÑ ÑÑо-либо**.
-* Ðаждое пÑиложение, коÑоÑое Ð²Ñ Ð·Ð°Ð¿ÑÑÑили на ÑвоÑм компÑÑÑеÑе, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¿ÑогÑамма, каждое "окно" запÑÑÐºÐ°ÐµÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо пÑоÑеÑÑ. РобÑÑно на вклÑÑенном компÑÑÑеÑе **одновÑеменно** запÑÑено множеÑÑво пÑоÑеÑÑов.
-* Ð **одна пÑогÑамма** Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ **неÑколÑко паÑаллелÑнÑÑ
пÑоÑеÑÑов**.
+* ÐонкÑеÑÐ½Ð°Ñ Ð¿ÑогÑамма в моменÑ, когда она **запÑÑена** в опеÑаÑионной ÑиÑÑеме.
+ * РеÑÑ Ð½Ðµ о Ñайле и не о коде, а **конкÑеÑно** о Ñом, ÑÑо **иÑполнÑеÑÑÑ** и ÑпÑавлÑеÑÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемой.
+* ÐÑÐ±Ð°Ñ Ð¿ÑогÑамма, лÑбой код **могÑÑ ÑÑоâÑо делаÑÑ** ÑолÑко когда **иÑполнÑÑÑÑÑ**, Ñо еÑÑÑ ÐºÐ¾Ð³Ð´Ð° еÑÑÑ **ÑабоÑаÑÑий пÑоÑеÑÑ**.
+* ÐÑоÑеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ **завеÑÑиÑÑ** (или «ÑбиÑÑ») вами или опеÑаÑионной ÑиÑÑемой. Ð ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð½ пеÑеÑÑаÑÑ Ð²ÑполнÑÑÑÑÑ Ð¸ **болÑÑе ниÑего делаÑÑ Ð½Ðµ можеÑ**.
+* У каждого запÑÑенного пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° ваÑем компÑÑÑеÑе еÑÑÑ Ñвой пÑоÑеÑÑ; Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ пÑогÑаммÑ, Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ окна и Ñ.д. ÐбÑÑно одновÑеменно **ÑабоÑÐ°ÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ пÑоÑеÑÑов**, пока компÑÑÑÐµÑ Ð²ÐºÐ»ÑÑÑн.
+* ÐогÑÑ **одновÑеменно** ÑабоÑаÑÑ **неÑколÑко пÑоÑеÑÑов** одной и Ñой же **пÑогÑаммÑ**.
-ÐÑли Ð²Ñ Ð·Ð°Ð³Ð»ÑнеÑе в "диÑпеÑÑÐµÑ Ð·Ð°Ð´Ð°Ñ" или "ÑиÑÑемнÑй мониÑоÑ" (или аналогиÑнÑе инÑÑÑÑменÑÑ) ваÑей опеÑаÑионной ÑиÑÑемÑ, Ñо ÑвидиÑе множеÑÑво ÑабоÑаÑÑиÑ
пÑоÑеÑÑов.
+ÐÑли Ð²Ñ Ð¿Ð¾ÑмоÑÑиÑе «диÑпеÑÑÐµÑ Ð·Ð°Ð´Ð°Ñ» или «ÑиÑÑемнÑй мониÑоÑ» (или аналогиÑнÑе инÑÑÑÑменÑÑ) в ваÑей опеÑаÑионной ÑиÑÑеме, Ñо ÑвидиÑе множеÑÑво ÑабоÑаÑÑиÑ
пÑоÑеÑÑов.
-Ðполне веÑоÑÑно, ÑÑо Ð²Ñ ÑвидиÑе неÑколÑко пÑоÑеÑÑов Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же названием бÑаÑзеÑной пÑогÑÐ°Ð¼Ð¼Ñ (Firefox, Chrome, Edge и Ñ. Ð.). ÐбÑÑно бÑаÑзеÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð¾Ð´Ð¸Ð½ пÑоÑеÑÑ Ð½Ð° Ð²ÐºÐ»Ð°Ð´ÐºÑ Ð¸ вдобавок некоÑоÑÑе дополниÑелÑнÑе пÑоÑеÑÑÑ.
+ÐапÑимеÑ, вÑ, ÑкоÑее вÑего, ÑвидиÑе неÑколÑко пÑоÑеÑÑов одного и Ñого же бÑаÑзеÑа (Firefox, Chrome, Edge и Ñ.д.). ÐбÑÑно бÑаÑзеÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð¾Ð´Ð¸Ð½ пÑоÑеÑÑ Ð½Ð° Ð²ÐºÐ»Ð°Ð´ÐºÑ Ð¿Ð»ÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пÑоÑеÑÑÑ.
---
-ТепеÑÑ, когда нам извеÑÑна ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ **пÑоÑеÑÑом** и **пÑогÑаммой**, давайÑе пÑодолжим обÑÑждение ÑазвÑÑÑÑваниÑ.
+ТепеÑÑ, когда Ð¼Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°ÐµÐ¼ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ **пÑоÑеÑÑом** и **пÑогÑаммой**, пÑодолжим ÑÐ°Ð·Ð³Ð¾Ð²Ð¾Ñ Ð¾ ÑазвÑÑÑÑваниÑÑ
.
-## ÐаÑÑÑойки запÑÑка пÑиложениÑ
+## ÐапÑÑк пÑи ÑÑаÑÑе { #running-on-startup }
-РболÑÑинÑÑве ÑлÑÑаев когда Ð²Ñ ÑоздаÑÑе веб-пÑиложение, Ñо желаеÑе, ÑÑоб оно **ÑабоÑало поÑÑоÑнно** и непÑеÑÑвно, пÑедоÑÑавлÑÑ ÐºÐ»Ð¸ÐµÐ½Ñам доÑÑÑп в лÑбое вÑемÑ. ХоÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° Ñ Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑиÑинÑ, ÑÑоб оно запÑÑкалоÑÑ ÑолÑко пÑи опÑеделÑннÑÑ
ÑÑловиÑÑ
.
+РболÑÑинÑÑве ÑлÑÑаев, ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð²ÐµÐ±âAPI, Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½ **ÑабоÑал поÑÑоÑнно**, без пеÑеÑÑвов, ÑÑÐ¾Ð±Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð²Ñегда могли к Ð½ÐµÐ¼Ñ Ð¾Ð±ÑаÑиÑÑÑÑ. Разве ÑÑо Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¾ÑобÑе пÑиÑÐ¸Ð½Ñ Ð·Ð°Ð¿ÑÑкаÑÑ ÐµÐ³Ð¾ ÑолÑко пÑи опÑеделÑннÑÑ
ÑÑловиÑÑ
, но обÑÑно Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½ бÑл поÑÑоÑнно запÑÑен и **доÑÑÑпен**.
-### УдалÑннÑй ÑеÑвеÑ
+### Ðа ÑдалÑнном ÑеÑвеÑе { #in-a-remote-server }
-Ðогда Ð²Ñ Ð½Ð°ÑÑÑаиваеÑе ÑдалÑннÑй ÑеÑÐ²ÐµÑ (облаÑнÑй ÑеÑвеÑ, виÑÑÑалÑнÑÑ Ð¼Ð°ÑÐ¸Ð½Ñ Ð¸ Ñ.п.), Ñамое пÑоÑÑое, ÑÑо можно ÑделаÑÑ, запÑÑÑиÑÑ Uvicorn (или его аналог) вÑÑÑнÑÑ, как Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе пÑи локалÑной ÑазÑабоÑке.
+Ðогда Ð²Ñ Ð½Ð°ÑÑÑаиваеÑе ÑдалÑннÑй ÑеÑÐ²ÐµÑ (облаÑнÑй ÑеÑвеÑ, виÑÑÑалÑнÑÑ Ð¼Ð°ÑÐ¸Ð½Ñ Ð¸ Ñ.п.), ÑамÑй пÑоÑÑой ваÑÐ¸Ð°Ð½Ñ â вÑÑÑнÑÑ Ð¸ÑполÑзоваÑÑ `fastapi run` (он иÑполÑзÑÐµÑ Uvicorn) или ÑÑоâÑо поÑ
ожее, как Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе пÑи локалÑной ÑазÑабоÑке.
-ÐÑо ÑабоÑий ÑпоÑоб и он полезен **во вÑÐµÐ¼Ñ ÑазÑабоÑки**.
+ÐÑо бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð¸ полезно **во вÑÐµÐ¼Ñ ÑазÑабоÑки**.
-Ðо еÑли Ð²Ñ Ð¿Ð¾ÑеÑÑеÑе Ñоединение Ñ ÑеÑвеÑом, Ñо не ÑможеÑе оÑÑлеживаÑÑ - ÑабоÑÐ°ÐµÑ Ð»Ð¸ вÑÑ ÐµÑÑ **запÑÑеннÑй Ðами пÑоÑеÑÑ**.
+Ðо еÑли Ñоединение Ñ ÑеÑвеÑом пÑеÑвÑÑÑÑ, **запÑÑеннÑй пÑоÑеÑÑ**, ÑкоÑее вÑего, завеÑÑиÑÑÑ.
-РеÑли ÑеÑÐ²ÐµÑ Ð¿ÐµÑезагÑÑзиÑÑÑ (напÑимеÑ, поÑле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ какиÑ
-Ñо дейÑÑвий облаÑного пÑовайдеÑа), Ð²Ñ ÑкоÑее вÑего **ÑÑого не замеÑиÑе**, ÑÑÐ¾Ð±Ñ Ñнова запÑÑÑиÑÑ Ð¿ÑоÑеÑÑ Ð²ÑÑÑнÑÑ. ÐÑледÑÑвие ÑÑого ÐÐ°Ñ API оÑÑанеÑÑÑ Ð¼ÑÑÑвÑм. ð±
+РеÑли ÑеÑÐ²ÐµÑ Ð¿ÐµÑезагÑÑзиÑÑÑ (напÑимеÑ, поÑле обновлений или мигÑаÑий Ñ Ð¾Ð±Ð»Ð°Ñного пÑовайдеÑа), вÑ, веÑоÑÑно, **даже не замеÑиÑе ÑÑого**. Ðзâза ÑÑого Ð²Ñ Ð½Ðµ ÑзнаеÑе, ÑÑо нÑжно вÑÑÑнÑÑ Ð¿ÐµÑезапÑÑÑиÑÑ Ð¿ÑоÑеÑÑ â и Ð²Ð°Ñ API пÑоÑÑо бÑÐ´ÐµÑ Â«Ð¼ÑÑÑв». ð±
-### ÐвÑомаÑиÑеÑкий запÑÑк пÑогÑамм
+### ÐвÑомаÑиÑеÑкий запÑÑк пÑи ÑÑаÑÑе { #run-automatically-on-startup }
-ÐеÑоÑÑно Ð²Ñ Ð·Ð°Ñ
оÑиÑе, ÑÑоб ÐаÑа ÑеÑвеÑÐ½Ð°Ñ Ð¿ÑогÑамма (ÑакаÑ, как Uvicorn) ÑÑаÑÑовала авÑомаÑиÑеÑки пÑи вклÑÑении ÑеÑвеÑа, без **ÑеловеÑеÑкого вмеÑаÑелÑÑÑва** и вÑегда могла ÑпÑавлÑÑÑ ÐаÑим API (Ñак как Uvicorn запÑÑÐºÐ°ÐµÑ Ð¿Ñиложение FastAPI).
+Ðак пÑавило, Ð²Ñ Ð·Ð°Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ ÑеÑвеÑÐ½Ð°Ñ Ð¿ÑогÑамма (напÑимеÑ, Uvicorn) запÑÑкалаÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑи ÑÑаÑÑе ÑеÑвеÑа и без **ÑÑаÑÑÐ¸Ñ Ñеловека**, ÑÑÐ¾Ð±Ñ Ð²Ñегда бÑл пÑоÑеÑÑ, запÑÑеннÑй Ñ Ð²Ð°Ñим API (напÑимеÑ, Uvicorn, запÑÑкаÑÑий ваÑе пÑиложение FastAPI).
-### ÐÑделÑÐ½Ð°Ñ Ð¿ÑогÑамма
+### ÐÑделÑÐ½Ð°Ñ Ð¿ÑогÑамма { #separate-program }
-ÐÐ»Ñ ÑÑого Ñ Ð¾Ð±ÑÑно иÑполÑзÑÑÑ Ð¾ÑделÑнÑÑ Ð¿ÑогÑаммÑ, коÑоÑÐ°Ñ ÑÐ»ÐµÐ´Ð¸Ñ Ð·Ð° Ñем, ÑÑÐ¾Ð±Ñ ÐаÑи пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑкалиÑÑ Ð¿Ñи вклÑÑении ÑеÑвеÑа. Такой подÑ
од гаÑанÑиÑÑеÑ, ÑÑо дÑÑгие компоненÑÑ Ð¸Ð»Ð¸ пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñакже бÑдÑÑ Ð·Ð°Ð¿ÑÑенÑ, напÑимеÑ, база даннÑÑ
+ЧÑÐ¾Ð±Ñ ÑÑого добиÑÑÑÑ, обÑÑно иÑполÑзÑÑÑ **оÑделÑнÑÑ Ð¿ÑогÑаммÑ**, коÑоÑÐ°Ñ Ð³Ð°ÑанÑиÑÑÐµÑ Ð·Ð°Ð¿ÑÑк ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи ÑÑаÑÑе. Ðо многиÑ
ÑлÑÑаÑÑ
она Ñакже запÑÑÐºÐ°ÐµÑ Ð¸ дÑÑгие компоненÑÑ/пÑиложениÑ, напÑÐ¸Ð¼ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
-### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов, ÑпÑавлÑÑÑиÑ
запÑÑком пÑогÑамм
+### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑи ÑÑаÑÑе { #example-tools-to-run-at-startup }
-ÐÐ¾Ñ Ð½ÐµÑколÑко пÑимеÑов, коÑоÑÑе могÑÑ ÑпÑавиÑÑÑÑ Ñ Ñакой задаÑей:
+ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов, коÑоÑÑе могÑÑ Ñ ÑÑим ÑпÑавиÑÑÑÑ:
* Docker
* Kubernetes
* Docker Compose
-* Docker в Ñежиме Swarm
+* Docker в Ñежиме Swarm (Swarm Mode)
* Systemd
* Supervisor
-* ÐÑполÑзование ÑÑлÑг облаÑного пÑовайдеÑа
+* ÐбÑабоÑка внÑÑÑи облаÑного пÑовайдеÑа как ÑаÑÑÑ ÐµÐ³Ð¾ ÑÑлÑг
* ÐÑоÑие...
-Я Ð¿Ð¾ÐºÐ°Ð¶Ñ Ðам некоÑоÑÑе пÑимеÑÑ Ð¸Ñ
иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑледÑÑÑиÑ
главаÑ
.
+Ðолее конкÑеÑнÑе пÑимеÑÑ Ð±ÑдÑÑ Ð² ÑледÑÑÑиÑ
главаÑ
.
-## ÐеÑезапÑÑк
+## ÐеÑезапÑÑки { #restarts }
-ÐÑ, веÑоÑÑно, Ñакже заÑ
оÑиÑе, ÑÑоб ваÑе пÑиложение **пеÑезапÑÑкалоÑÑ**, еÑли в нÑм пÑоизоÑÑл Ñбой.
+Ðодобно ÑÐ¾Ð¼Ñ ÐºÐ°Ðº Ð²Ñ Ð¾Ð±ÐµÑпеÑиваеÑе запÑÑк пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи ÑÑаÑÑе, вÑ, веÑоÑÑно, заÑ
оÑиÑе обеÑпеÑиÑÑ ÐµÐ³Ð¾ **пеÑезапÑÑк** поÑле Ñбоев.
-### ÐÑ Ð¾ÑибаемÑÑ
+### ÐÑ Ð¾ÑибаемÑÑ { #we-make-mistakes }
-ÐÑе лÑди ÑовеÑÑаÑÑ **оÑибки**. ÐÑогÑаммное обеÑпеÑение поÑÑи *вÑегда* ÑодеÑÐ¶Ð¸Ñ **баги** ÑпÑÑÑавÑиеÑÑ Ð² ÑазнÑÑ
меÑÑаÑ
. ð
+ÐÑ, лÑди, поÑÑоÑнно ÑовеÑÑаем **оÑибки**. РпÑогÑаммном обеÑпеÑении поÑÑи вÑегда еÑÑÑ **баги**, ÑкÑÑÑÑе в ÑазнÑÑ
меÑÑаÑ
. ð
-РмÑ, бÑдÑÑи ÑазÑабоÑÑиками, пÑодолжаем ÑлÑÑÑаÑÑ ÐºÐ¾Ð´, когда обнаÑÑживаем в нÑм баги или добавлÑем новÑй ÑÑнкÑионал (возможно, добавлÑÑ Ð¿Ñи ÑÑом баги ð
).
+РмÑ, как ÑазÑабоÑÑики, пÑодолжаем ÑлÑÑÑаÑÑ ÐºÐ¾Ð´ â наÑ
одим баги и добавлÑем новÑе возможноÑÑи (иногда добавлÑÑ Ð½Ð¾Ð²Ñе баги ð
).
-### ÐеболÑÑие оÑибки обÑабаÑÑваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки
+### ÐеболÑÑие оÑибки обÑабаÑÑваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки { #small-errors-automatically-handled }
-Ðогда Ð²Ñ ÑоздаÑÑе Ñвои API на оÑнове FastAPI и допÑÑкаеÑе в коде оÑибкÑ, Ñо FastAPI обÑÑно оÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ ÐµÑ ÑаÑпÑоÑÑÑанение внÑÑÑи одного запÑоÑа, пÑи обÑабоÑке коÑоÑого она возникла. ð¡
+Ð¡Ð¾Ð·Ð´Ð°Ð²Ð°Ñ Ð²ÐµÐ±âAPI Ñ FastAPI, еÑли в наÑем коде Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка, FastAPI обÑÑно «локализÑеÑ» ÐµÑ Ð² пÑеделаÑ
одного запÑоÑа, коÑоÑÑй ÑÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð²Ñзвал. ð¡
-ÐÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¾ÑÐ¸Ð±ÐºÑ **500 Internal Server Error** в оÑÐ²ÐµÑ Ð½Ð° Ñвой запÑоÑ, но пÑиложение не ÑломаеÑÑÑ Ð¸ бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑ ÑабоÑаÑÑ Ñ Ð¿Ð¾ÑледÑÑÑими запÑоÑами.
+ÐÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ **500 Internal Server Error** Ð´Ð»Ñ ÑÑого запÑоÑа, но пÑиложение пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑабоÑаÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑиÑ
запÑоÑов, а не «ÑпадÑÑ» Ñеликом.
-### ÐолÑÑие оÑибки - Ðадение пÑиложений
+### ÐолÑÑие оÑибки â Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ { #bigger-errors-crashes }
-Тем не менее, Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑиÑÑÑÑ Ñак, ÑÑо оÑибка вÑÐ·Ð¾Ð²ÐµÑ **Ñбой вÑего пÑиложениÑ** или даже Ñбой в Uvicorn, а Ñо и в Ñамом Python. ð¥
+Тем не менее Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ ÑлÑÑаи, когда код **ÑонÑÐµÑ Ð²ÑÑ Ð¿Ñиложение**, пÑÐ¸Ð²Ð¾Ð´Ñ Ðº ÑÐ±Ð¾Ñ Uvicorn и Python. ð¥
-Ðо Ð¼Ñ Ð²ÑÑ ÐµÑÑ Ñ
оÑим, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение **пÑодолжало ÑабоÑаÑÑ** неÑмоÑÑÑ Ð½Ð° ÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑÑ Ð¾ÑибкÑ, обÑабаÑÑваÑ, как минимÑм, запÑоÑÑ Ðº *опеÑаÑиÑм пÑÑи* не имеÑÑим оÑибок.
+РвÑ, ÑкоÑее вÑего, не заÑ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение оÑÑавалоÑÑ Â«Ð¼ÑÑÑвÑм» изâза оÑибки в одном меÑÑе â Ð²Ñ Ð·Ð°Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ **пÑодолжало ÑабоÑаÑÑ** Ñ
оÑÑ Ð±Ñ Ð´Ð»Ñ *опеÑаÑий пÑÑи*, коÑоÑÑе не ÑломанÑ.
-### ÐеÑезапÑÑк поÑле падениÑ
+### ÐеÑезапÑÑк поÑле Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ { #restart-after-crash }
-ÐÐ»Ñ ÑлÑÑаев, когда оÑибки пÑиводÑÑ Ðº ÑÐ±Ð¾Ñ Ð² запÑÑенном **пÑоÑеÑÑе**, Ðам понадобиÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, коÑоÑÑй **пеÑезапÑÑÑиÑ** пÑоÑеÑÑ Ñ
оÑÑ Ð±Ñ Ð¿Ð°ÑÑ Ñаз...
+Ð ÑлÑÑаÑÑ
дейÑÑвиÑелÑно ÑеÑÑÑзнÑÑ
оÑибок, коÑоÑÑе ÑонÑÑÑ ÑабоÑаÑÑий **пÑоÑеÑÑ**, вам понадобиÑÑÑ Ð²Ð½ÐµÑний компоненÑ, оÑвеÑаÑÑий за **пеÑезапÑÑк** пÑоÑеÑÑа, как минимÑм паÑÑ Ñаз...
-/// tip | ÐамеÑка
+/// tip | СовеÑ
-... ÐÑли пÑиложение Ð¿Ð°Ð´Ð°ÐµÑ ÑÑÐ°Ð·Ñ Ð¶Ðµ поÑле запÑÑка, веÑоÑÑно беÑполезно его беÑконеÑно пеÑезапÑÑкаÑÑ. Ðо полагаÑ, Ð²Ñ Ð·Ð°Ð¼ÐµÑиÑе Ñакое поведение во вÑÐµÐ¼Ñ ÑазÑабоÑки или, по кÑайней меÑе, ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле ÑазвÑÑÑÑваниÑ.
+...ХоÑÑ ÐµÑли пÑиложение **Ð¿Ð°Ð´Ð°ÐµÑ ÑÑÐ°Ð·Ñ Ð¶Ðµ**, веÑоÑÑно, Ð½ÐµÑ ÑмÑÑла пеÑезапÑÑкаÑÑ ÐµÐ³Ð¾ беÑконеÑно. Ðо Ñакие ÑлÑÑаи вÑ, ÑкоÑее вÑего, замеÑиÑе во вÑÐµÐ¼Ñ ÑазÑабоÑки или как минимÑм ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле ÑазвÑÑÑÑваниÑ.
-Так ÑÑо давайÑе ÑоÑÑедоÑоÑимÑÑ Ð½Ð° конкÑеÑнÑÑ
ÑлÑÑаÑÑ
, когда пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð²ÑйÑи из ÑÑÑоÑ, но вÑÑ ÐµÑÑ ÐµÑÑÑ ÑмÑÑл его запÑÑÑиÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾.
+ÐавайÑе ÑоÑÑедоÑоÑимÑÑ Ð½Ð° оÑновнÑÑ
ÑÑенаÑиÑÑ
, когда в какиÑ
âÑо конкÑеÑнÑÑ
ÑиÑÑаÑиÑÑ
**в бÑдÑÑем** пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð°Ð´Ð°ÑÑ Ñеликом, и пÑи ÑÑом Ð¸Ð¼ÐµÐµÑ ÑмÑÑл его пеÑезапÑÑкаÑÑ.
///
-Ðозможно Ð²Ñ Ð·Ð°Ñ
оÑиÑе, ÑÑоб бÑл некий **внеÑний компоненÑ**, оÑвеÑÑÑвеннÑй за пеÑезапÑÑк ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð¶Ðµ еÑли Ñже не ÑабоÑÐ°ÐµÑ Uvicorn или Python. То еÑÑÑ Ð½Ð¸Ñего из Ñого, ÑÑо напиÑано в ваÑем коде внÑÑÑи пÑиложениÑ, не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнено в пÑинÑипе.
+СкоÑее вÑего, Ð²Ñ Ð·Ð°Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑезапÑÑком ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°Ð»ÑÑ **внеÑний компоненÑ**, поÑÐ¾Ð¼Ñ ÑÑо к ÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Uvicorn и Python Ñже Ñпали, и внÑÑÑи Ñого же кода ваÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑделаÑÑ Ñже ниÑего нелÑзÑ.
-### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого пеÑезапÑÑка
+### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого пеÑезапÑÑка { #example-tools-to-restart-automatically }
-РболÑÑинÑÑве ÑлÑÑаев инÑÑÑÑменÑÑ **запÑÑкаÑÑие пÑогÑÐ°Ð¼Ð¼Ñ Ð¿Ñи ÑÑаÑÑе ÑеÑвеÑа** ÑмеÑÑ **пеÑезапÑÑкаÑÑ** ÑÑи пÑогÑаммÑ.
+РболÑÑинÑÑве ÑлÑÑаев ÑÐ¾Ñ Ð¶Ðµ инÑÑÑÑменÑ, коÑоÑÑй **запÑÑÐºÐ°ÐµÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð¿Ñи ÑÑаÑÑе**, ÑÐ¼ÐµÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð¸ авÑомаÑиÑеÑкие **пеÑезапÑÑки**.
-РкаÑеÑÑве пÑимеÑа можно взÑÑÑ Ñе же:
+ÐапÑимеÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ:
* Docker
* Kubernetes
* Docker Compose
-* Docker в Ñежиме Swarm
+* Docker в Ñежиме Swarm (Swarm Mode)
* Systemd
* Supervisor
-* ÐÑполÑзование ÑÑлÑг облаÑного пÑовайдеÑа
+* ÐбÑабоÑка внÑÑÑи облаÑного пÑовайдеÑа как ÑаÑÑÑ ÐµÐ³Ð¾ ÑÑлÑг
* ÐÑоÑие...
-## ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (РепликаÑиÑ) - ÐÑоÑеÑÑÑ Ð¸ памÑÑÑ
+## РепликаÑÐ¸Ñ â пÑоÑеÑÑÑ Ð¸ памÑÑÑ { #replication-processes-and-memory }
-ÐÑиложение FastAPI, ÑпÑавлÑемое ÑеÑвеÑной пÑогÑаммой (Ñакой как Uvicorn), запÑÑкаеÑÑÑ ÐºÐ°Ðº **один пÑоÑеÑÑ** и Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑлÑживаÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво клиенÑов одновÑеменно.
+РпÑиложении FastAPI, иÑполÑзÑÑ ÑеÑвеÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ (напÑимеÑ, ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi`, коÑоÑÐ°Ñ Ð·Ð°Ð¿ÑÑÐºÐ°ÐµÑ Uvicorn), запÑÑк в **одном пÑоÑеÑÑе** Ñже позволÑÐµÑ Ð¾Ð±ÑлÑживаÑÑ Ð½ÐµÑколÑкиÑ
клиенÑов одновÑеменно.
-Ðо ÑаÑÑо Ðам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð½ÐµÑколÑко одновÑеменно ÑабоÑаÑÑиÑ
одинаковÑÑ
пÑоÑеÑÑов.
+Ðо во многиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð·Ð°Ñ
оÑиÑе одновÑеменно запÑÑÑиÑÑ Ð½ÐµÑколÑко пÑоÑеÑÑовâвоÑкеÑов.
-### ÐножеÑÑво пÑоÑеÑÑов - ÐоÑкеÑÑ (Workers)
+### ÐеÑколÑко пÑоÑеÑÑов â ÐоÑкеÑÑ { #multiple-processes-workers }
-ÐÑли колиÑеÑÑво ÐаÑиÑ
клиенÑов болÑÑе, Ñем Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑлÑжиÑÑ Ð¾Ð´Ð¸Ð½ пÑоÑеÑÑ (допÑÑÑим, ÑÑо виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина не ÑлиÑком моÑнаÑ), но пÑи ÑÑом Ðам доÑÑÑпно **неÑколÑко ÑÐ´ÐµÑ Ð¿ÑоÑеÑÑоÑа**, Ñо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ **неÑколÑко пÑоÑеÑÑов** одного и Ñого же пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°ÑаллелÑно и ÑаÑпÑеделиÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑÑими пÑоÑеÑÑами.
+ÐÑли клиенÑов болÑÑе, Ñем ÑпоÑобен обÑлÑжиÑÑ Ð¾Ð´Ð¸Ð½ пÑоÑеÑÑ (напÑимеÑ, еÑли виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина не ÑлиÑком моÑнаÑ), и на ÑеÑвеÑе еÑÑÑ **неÑколÑко ÑÐ´ÐµÑ CPU**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ **неÑколÑко пÑоÑеÑÑов** одного и Ñого же пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°ÑаллелÑно и ÑаÑпÑеделÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
-**ÐеÑколÑко запÑÑеннÑÑ
пÑоÑеÑÑов** одной и Ñой же API-пÑогÑÐ°Ð¼Ð¼Ñ ÑаÑÑо назÑваÑÑ **воÑкеÑами**.
+Ðогда Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе **неÑколÑко пÑоÑеÑÑов** одной и Ñой же пÑогÑÐ°Ð¼Ð¼Ñ API, иÑ
обÑÑно назÑваÑÑ **воÑкеÑами**.
-### ÐÑоÑеÑÑÑ Ð¸ поÑÑÑÌ
+### ÐÑоÑеÑÑÑâвоÑкеÑÑ Ð¸ поÑÑÑ { #worker-processes-and-ports }
-ÐомниÑе ли ÐÑ, как на ÑÑÑаниÑе [Ðб HTTPS](https.md){.internal-link target=_blank} Ð¼Ñ Ð¾Ð±ÑÑждали, ÑÑо на ÑеÑвеÑе ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ Ð¾Ð´Ð½Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ IP-адÑеÑа и поÑÑа?
+ÐомниÑе из Ñаздела [Ðб HTTPS](https.md){.internal-link target=_blank}, ÑÑо на ÑеÑвеÑе ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ Ð¿Ð¾ÑÑа и IPâадÑеÑа?
-С ÑеÑ
Ð¿Ð¾Ñ Ð½Ð¸Ñего не изменилоÑÑ.
+ÐÑо поâпÑÐµÐ¶Ð½ÐµÐ¼Ñ Ñак.
-СооÑвеÑÑÑвенно, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑабоÑаÑÑ Ñ **неÑколÑкими пÑоÑеÑÑами** одновÑеменно, должен бÑÑÑ **один пÑоÑеÑÑ, пÑоÑлÑÑиваÑÑий поÑÑ** и заÑем каким-либо обÑазом пеÑедаÑÑий даннÑе ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑабоÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ.
+ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменно ÑабоÑало **неÑколÑко пÑоÑеÑÑов**, должен бÑÑÑ **один пÑоÑеÑÑ, ÑлÑÑаÑÑий поÑÑ**, коÑоÑÑй заÑем какимâÑо обÑазом пеÑедаÑÑ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð²Ð¾ÑкеÑâпÑоÑеÑÑÑ.
-### У каждого пÑоÑеÑÑа ÑÐ²Ð¾Ñ Ð¿Ð°Ð¼ÑÑÑ
+### ÐамÑÑÑ Ð½Ð° пÑоÑеÑÑ { #memory-per-process }
-РабоÑаÑÑÐ°Ñ Ð¿ÑогÑамма загÑÑÐ¶Ð°ÐµÑ Ð² памÑÑÑ Ð´Ð°Ð½Ð½Ñе, необÑ
одимÑе Ð´Ð»Ñ ÐµÑ ÑабоÑÑ, напÑимеÑ, пеÑеменнÑе ÑодеÑжаÑие модели маÑинного обÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ болÑÑие ÑайлÑ. ÐÐ°Ð¶Ð´Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ **поÑÑеблÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑое колиÑеÑÑво опеÑаÑивной памÑÑи (RAM)** ÑеÑвеÑа.
+Ðогда пÑогÑамма загÑÑÐ¶Ð°ÐµÑ ÑÑоâÑо в памÑÑÑ (напÑимеÑ, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¼Ð°Ñинного обÑÑÐµÐ½Ð¸Ñ Ð² пеÑеменнÑÑ Ð¸Ð»Ð¸ ÑодеÑжимое болÑÑого Ñайла в пеÑеменнÑÑ), вÑÑ ÑÑо **поÑÑеблÑÐµÑ ÑаÑÑÑ Ð¿Ð°Ð¼ÑÑи (RAM)** ÑеÑвеÑа.
-ÐбÑÑно пÑоÑеÑÑÑ **не делÑÑÑÑ Ð¿Ð°Ð¼ÑÑÑÑ Ð´ÑÑг Ñ Ð´ÑÑгом**. Сие ознаÑаеÑ, ÑÑо каждÑй ÑабоÑаÑÑий пÑоÑеÑÑ Ð¸Ð¼ÐµÐµÑ Ñвои даннÑе, пеÑеменнÑе и Ñвой кÑÑок памÑÑи. РеÑли Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ñего кода пÑоÑеÑÑÑ Ð½Ñжно много памÑÑи, Ñо **каждÑй Ñакой же пÑоÑеÑÑ** запÑÑеннÑй дополниÑелÑно, поÑÑебÑÐµÑ Ñакого же колиÑеÑÑва памÑÑи.
+Ð ÑазнÑе пÑоÑеÑÑÑ Ð¾Ð±ÑÑно **не делÑÑ Ð¿Ð°Ð¼ÑÑÑ**. ÐÑо знаÑиÑ, ÑÑо Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пÑоÑеÑÑа Ñвои пеÑеменнÑе и ÑÐ²Ð¾Ñ Ð¿Ð°Ð¼ÑÑÑ. ÐÑли Ð²Ð°Ñ ÐºÐ¾Ð´ поÑÑеблÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ памÑÑи, Ñо **каждÑй пÑоÑеÑÑ** бÑÐ´ÐµÑ Ð¿Ð¾ÑÑеблÑÑÑ ÑопоÑÑавимÑй обÑÑм памÑÑи.
-### ÐамÑÑÑ ÑеÑвеÑа
+### ÐамÑÑÑ ÑеÑвеÑа { #server-memory }
-ÐопÑÑÑим, ÑÑо ÐÐ°Ñ ÐºÐ¾Ð´ загÑÑÐ¶Ð°ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¼Ð°Ñинного обÑÑÐµÐ½Ð¸Ñ **ÑазмеÑом 1 ÐÐ**. Ðогда Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе ÑÐ²Ð¾Ñ API как один пÑоÑеÑÑ, он займÑÑ Ð² опеÑаÑивной памÑÑи не менее 1 ÐÐ. РеÑли Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе **4 ÑакиÑ
же пÑоÑеÑÑа** (4 воÑкеÑа), Ñо каждÑй из ниÑ
займÑÑ 1 ÐРопеÑаÑивной памÑÑи. Ð ÑезÑлÑÑаÑе ваÑÐµÐ¼Ñ API поÑÑебÑеÑÑÑ **4 ÐРопеÑаÑивной памÑÑи (RAM)**.
+ÐапÑимеÑ, еÑли Ð²Ð°Ñ ÐºÐ¾Ð´ загÑÑÐ¶Ð°ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ñ ÐаÑинного обÑÑÐµÐ½Ð¸Ñ ÑазмеÑом **1 ÐÐ**, Ñо пÑи запÑÑке одного пÑоÑеÑÑа Ñ Ð²Ð°Ñим API он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº минимÑм 1 ÐÐ RAM. РеÑли Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе **4 пÑоÑеÑÑа** (4 воÑкеÑа), каждÑй пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ 1 ÐÐ RAM. ÐÑего Ð²Ð°Ñ API бÑÐ´ÐµÑ Ð¿Ð¾ÑÑеблÑÑÑ **4 ÐÐ RAM**.
-РеÑли ÐÐ°Ñ ÑдалÑннÑй ÑеÑÐ²ÐµÑ Ð¸Ð»Ð¸ виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина ÑаÑÐ¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ ÑолÑко 3 ÐРпамÑÑи, Ñо попÑÑка загÑÑзиÑÑ Ð² Ð½ÐµÑ 4 ÐРданнÑÑ
вÑÐ·Ð¾Ð²ÐµÑ Ð¿ÑоблемÑ. ð¨
+РеÑли Ñ Ð²Ð°Ñего ÑдалÑнного ÑеÑвеÑа или виÑÑÑалÑной маÑÐ¸Ð½Ñ ÑолÑко 3 ÐÐ RAM, попÑÑка загÑÑзиÑÑ Ð±Ð¾Ð»ÐµÐµ 4 ÐРвÑÐ·Ð¾Ð²ÐµÑ Ð¿ÑоблемÑ. ð¨
-### ÐножеÑÑво пÑоÑеÑÑов - ÐÑимеÑ
+### ÐеÑколÑко пÑоÑеÑÑов â пÑÐ¸Ð¼ÐµÑ { #multiple-processes-an-example }
-Ð ÑÑом пÑимеÑе **Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов** запÑÑÑÐ¸Ñ Ð¸ бÑÐ´ÐµÑ ÑпÑавлÑÑÑ Ð´Ð²ÑÐ¼Ñ **воÑкеÑами**.
+Ð ÑÑом пÑимеÑе еÑÑÑ **пÑоÑеÑÑâменеджеÑ**, коÑоÑÑй запÑÑÐºÐ°ÐµÑ Ð¸ конÑÑолиÑÑÐµÑ Ð´Ð²Ð° **пÑоÑеÑÑаâвоÑкеÑа**.
-ÐÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов бÑÐ´ÐµÑ ÑлÑÑаÑÑ Ð¾Ð¿ÑеделÑннÑй **ÑокеÑ** (IP:поÑÑ) и пеÑедаваÑÑ Ð´Ð°Ð½Ð½Ñе ÑабоÑаÑÑим пÑоÑеÑÑам.
+ÐÑоÑеÑÑâменеджеÑ, веÑоÑÑно, бÑÐ´ÐµÑ Ñем, кÑо ÑлÑÑÐ°ÐµÑ **поÑÑ** на IP. Рон бÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑ Ð²ÑÑ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ Ð²Ð¾ÑкеÑâпÑоÑеÑÑам.
-ÐаждÑй из ÑÑиÑ
пÑоÑеÑÑов бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð²Ð°Ñе пÑиложение Ð´Ð»Ñ Ð¾Ð±ÑабоÑки полÑÑенного **запÑоÑа** и возвÑаÑÐµÐ½Ð¸Ñ Ð²ÑÑиÑленного **оÑвеÑа** и они бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑивнÑÑ Ð¿Ð°Ð¼ÑÑÑ.
+ÐÑи воÑкеÑÑ Ð±ÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð²Ð°Ñе пÑиложение, вÑполнÑÑÑ Ð¾ÑновнÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ **запÑоÑа** и возвÑаÑа **оÑвеÑа**, и загÑÑжаÑÑ Ð²ÑÑ, ÑÑо Ð²Ñ ÐºÐ»Ð°Ð´ÑÑе в пеÑеменнÑе, в RAM.