diff --git a/.github/workflows/issue-manager.yml b/.github/workflows/issue-manager.yml index bba089c6f..e7f3a5f53 100644 --- a/.github/workflows/issue-manager.yml +++ b/.github/workflows/issue-manager.yml @@ -29,6 +29,6 @@ jobs: env: GITHUB_CONTEXT: ${{ toJson(github) }} run: echo "$GITHUB_CONTEXT" - - uses: tiangolo/issue-manager@75d60679db1ea348f6f6ea1d0e20de80a7c04645 # 0.7.1 + - uses: tiangolo/issue-manager@dc846170c36eb62fb434b3d943b36399fe240fb5 # 0.8.1 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/latest-changes.yml b/.github/workflows/latest-changes.yml index 111b47424..be20c98ae 100644 --- a/.github/workflows/latest-changes.yml +++ b/.github/workflows/latest-changes.yml @@ -30,6 +30,7 @@ jobs: run: echo "$GITHUB_CONTEXT" - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: + ref: ${{ github.event.repository.default_branch }} # To allow latest-changes to commit to the main branch token: ${{ secrets.FASTAPI_LATEST_CHANGES }} # zizmor: ignore[secrets-outside-env] persist-credentials: true # required by tiangolo/latest-changes @@ -39,7 +40,7 @@ jobs: if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} with: limit-access-to-actor: true - - uses: tiangolo/latest-changes@eb3f6e7ff0073896ecb561e774a121de9418fa06 # 0.5.0 + - uses: tiangolo/latest-changes@c9b73efbc8992ef1a401e4235ea307a8ca8a724b # 0.6.1 with: token: ${{ secrets.GITHUB_TOKEN }} latest_changes_file: docs/en/docs/release-notes.md diff --git a/.github/workflows/notify-translations.yml b/.github/workflows/notify-translations.yml index aa006978c..261be1a98 100644 --- a/.github/workflows/notify-translations.yml +++ b/.github/workflows/notify-translations.yml @@ -32,6 +32,7 @@ jobs: run: echo "$GITHUB_CONTEXT" - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: + ref: ${{ github.event.repository.default_branch }} persist-credentials: false - name: Set up Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 diff --git a/README.md b/README.md index 03cd90e77..36d262983 100644 --- a/README.md +++ b/README.md @@ -66,8 +66,8 @@ The key features are: - + diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index ae2c0f6e2..f2e5df571 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -51,12 +51,12 @@ silver: - url: https://dribia.com/en/ title: Dribia - Data Science within your reach img: /img/sponsors/dribia.png - - url: https://www.rapidproxy.io/?ref=fastapi - title: Try RapidProxy for free - Residential Proxies with 90M+ Global IPs. Starting from $0.65/GB for web scraping, automation, and data collection. - img: /img/sponsors/rapidproxy.png - url: https://www.bairesdev.com/ title: "BairesDev | Nearshore Software Development & Staff Augmentation Company" img: /img/sponsors/bairesdev.svg + - url: https://tutorcruncher.com/?utm_source=fastapi + title: TutorCruncher + img: /img/sponsors/tutorcruncher.png bronze: # - url: https://testdriven.io/courses/tdd-fastapi/ # title: Learn to build high-quality web apps with best practices diff --git a/docs/en/data/sponsors_badge.yml b/docs/en/data/sponsors_badge.yml index d35a4b19f..d2fd7029f 100644 --- a/docs/en/data/sponsors_badge.yml +++ b/docs/en/data/sponsors_badge.yml @@ -49,3 +49,4 @@ logins: - requestly - greptileai - talorelowen + - tutorcruncher diff --git a/docs/en/docs/img/sponsors/tutorcruncher.png b/docs/en/docs/img/sponsors/tutorcruncher.png new file mode 100644 index 000000000..aae58b2f5 Binary files /dev/null and b/docs/en/docs/img/sponsors/tutorcruncher.png differ diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 2e42ba00f..c2dac0c4c 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -7,6 +7,21 @@ hide: ## Latest Changes +### Translations + +* ЁЯМР Update translations for hi (add-missing). PR [#15797](https://github.com/fastapi/fastapi/pull/15797) by [@tiangolo](https://github.com/tiangolo). +* ЁЯМР Update `llm-prompt.md` for Hindi. PR [#15810](https://github.com/fastapi/fastapi/pull/15810) by [@YuriiMotov](https://github.com/YuriiMotov). +* ЁЯМР Fix language-specific translation prompt for Russian language. PR [#15924](https://github.com/fastapi/fastapi/pull/15924) by [@YuriiMotov](https://github.com/YuriiMotov). + +### Internal + +* ЁЯФз Update sponsors: add TutorCruncher. PR [#15947](https://github.com/fastapi/fastapi/pull/15947) by [@tiangolo](https://github.com/tiangolo). +* ЁЯС╖ Fix notify translations checkout target. PR [#15933](https://github.com/fastapi/fastapi/pull/15933) by [@tiangolo](https://github.com/tiangolo). +* ЁЯС╖ Fix latest-changes checkout target. PR [#15932](https://github.com/fastapi/fastapi/pull/15932) by [@tiangolo](https://github.com/tiangolo). +* ЁЯФз Update sponsors: remove RapidProxy. PR [#15929](https://github.com/fastapi/fastapi/pull/15929) by [@tiangolo](https://github.com/tiangolo). +* тмЖя╕П Update issue-manager to 0.8.1. PR [#15928](https://github.com/fastapi/fastapi/pull/15928) by [@tiangolo](https://github.com/tiangolo). +* тмЖя╕П Update latest-changes to 0.6.1. PR [#15926](https://github.com/fastapi/fastapi/pull/15926) by [@tiangolo](https://github.com/tiangolo). + ## 0.139.0 (2026-07-01) ### Features diff --git a/docs/hi/docs/alternatives.md b/docs/hi/docs/alternatives.md new file mode 100644 index 000000000..31ca9e107 --- /dev/null +++ b/docs/hi/docs/alternatives.md @@ -0,0 +1,485 @@ +# рд╡рд┐рдХрд▓реНрдк, рдкреНрд░реЗрд░рдгрд╛ рдФрд░ рддреБрд▓рдирд╛рдПрдБ { #alternatives-inspiration-and-comparisons } + +**FastAPI** рдХреЛ рдХрд┐рд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА, рдпрд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ рдФрд░ рдЙрдирд╕реЗ рдЗрд╕рдиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛ред + +## рдкрд░рд┐рдЪрдп { #intro } + +рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рдо рдХреЗ рдмрд┐рдирд╛ **FastAPI** рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ред + +рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ tools рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред + +рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рддрдХ рдПрдХ рдирдпрд╛ framework рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд░рд╣рд╛ред рдкрд╣рд▓реЗ рдореИрдВрдиреЗ **FastAPI** рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╕рднреА features рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ frameworks, plug-ins рдФрд░ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред + +рд▓реЗрдХрд┐рди рдПрдХ рд╕рдордп рдРрд╕рд╛ рдЖрдпрд╛ рдЬрдм рдРрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛ рдЬреЛ рдпреЗ рд╕рднреА features рдкреНрд░рджрд╛рди рдХрд░реЗ, рдкрд┐рдЫрд▓реЗ tools рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓реЗрдХрд░, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓рд╛рдХрд░, рдЙрди language features рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз рднреА рдирд╣реАрдВ рдереЗ (Python 3.6+ type hints)ред + +## рдкрд┐рдЫрд▓реЗ tools { #previous-tools } + +### [Django](https://www.djangoproject.com/) { #django } + +рдпрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп Python framework рд╣реИ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рднрд░реЛрд╕реЗрдордВрдж рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Instagram рдЬреИрд╕реЗ systems рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдпрд╣ relational databases (рдЬреИрд╕реЗ MySQL рдпрд╛ PostgreSQL) рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд tightly coupled рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЦреНрдп store engine рдХреЗ рд░реВрдк рдореЗрдВ NoSQL database (рдЬреИрд╕реЗ Couchbase, MongoDB, Cassandra, рдЖрджрд┐) рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред + +рдЗрд╕реЗ backend рдореЗрдВ HTML generate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рди рдХрд┐ рдХрд┐рд╕реА modern frontend (рдЬреИрд╕реЗ React, Vue.js рдФрд░ Angular) рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп systems (рдЬреИрд╕реЗ IoT devices) рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА APIs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред + +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } + +Django REST Framework рдХреЛ Django рдХреЗ рдКрдкрд░ Web APIs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ flexible toolkit рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдЗрд╕рдХреА API рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХреЗред + +рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Mozilla, Red Hat рдФрд░ Eventbrite рд╕рд╣рд┐рдд рдХрдИ рдХрдВрдкрдирд┐рдпрд╛рдБ рдХрд░рддреА рд╣реИрдВред + +рдпрд╣ **automatic API documentation** рдХреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛, рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ рдЬрд┐рд╕рдиреЗ **FastAPI** рдХреА "рдЦреЛрдЬ" рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред + +/// note | рдиреЛрдЯ + +Django REST Framework рдХреЛ Tom Christie рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред рд╡рд╣реА Starlette рдФрд░ Uvicorn рдХреЗ creator рд╣реИрдВ, рдЬрд┐рди рдкрд░ **FastAPI** рдЖрдзрд╛рд░рд┐рдд рд╣реИред + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдПрдХ automatic API documentation web user interface рд╣реЛред + +/// + +### [Flask](https://flask.palletsprojects.com) { #flask } + +Flask рдПрдХ "microframework" рд╣реИ, рдЗрд╕рдореЗрдВ database integrations рдпрд╛ Django рдореЗрдВ default рд░реВрдк рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЪреАрдЬрд╝реЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред + +рдпрд╣ simplicity рдФрд░ flexibility рдореБрдЦреНрдп data storage system рдХреЗ рд░реВрдк рдореЗрдВ NoSQL databases рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬрд╝реЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред + +рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЗрд╕реЗ рд╕реАрдЦрдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╣рдЬ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ documentation рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдереЛрдбрд╝рд╛ technical рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред + +рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдЙрди рдЕрдиреНрдп applications рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ database, user management, рдпрд╛ Django рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ built-in рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдИ features рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ features plug-ins рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред + +Parts рдХрд╛ рдпрд╣ decoupling, рдФрд░ рдПрдХ "microframework" рд╣реЛрдирд╛ рдЬрд┐рд╕реЗ рдареАрдХ рд╡рд╣реА рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП extend рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ key feature рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред + +Flask рдХреА simplicity рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ APIs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ match рд▓рдЧрд╛ред рдЕрдЧрд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдЦреЛрдЬрдиреА рдереА рд╡рд╣ Flask рдХреЗ рд▓рд┐рдП рдПрдХ "Django REST Framework" рдерд╛ред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдПрдХ micro-framework рд╣реЛред рдЖрд╡рд╢реНрдпрдХ tools рдФрд░ parts рдХреЛ mix and match рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПред + +рдПрдХ simple рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди routing system рд╣реЛред + +/// + +### [Requests](https://requests.readthedocs.io) { #requests } + +**FastAPI** рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ **Requests** рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЙрдирдХрд╛ scope рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред + +рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ FastAPI application рдХреЗ *рдЕрдВрджрд░* Requests рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реЛрдЧреАред + +рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, FastAPI рдХреЛ Requests рд╕реЗ рдХрд╛рдлреА рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реАред + +**Requests** APIs рдХреЗ рд╕рд╛рде *interact* рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (client рдХреЗ рд░реВрдк рдореЗрдВ) рдПрдХ library рд╣реИ, рдЬрдмрдХрд┐ **FastAPI** APIs *рдмрдирд╛рдиреЗ* рдХреЗ рд▓рд┐рдП (server рдХреЗ рд░реВрдк рдореЗрдВ) рдПрдХ library рд╣реИред + +рд╡реЗ рдХрдореЛрдмреЗрд╢ рд╡рд┐рдкрд░реАрдд рд╕рд┐рд░реЛрдВ рдкрд░ рд╣реИрдВ, рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реБрдПред + +Requests рдХрд╛ design рдмрд╣реБрдд simple рдФрд░ intuitive рд╣реИ, sensible defaults рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рдпрд╣ рдмрд╣реБрдд powerful рдФрд░ customizable рд╣реИред + +рдЗрд╕реАрд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ official website рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: + +> Requests рдЕрдм рддрдХ рдХреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ downloaded Python packages рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ + +рдЖрдк рдЗрд╕реЗ рдЬрд┐рд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, `GET` request рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдЦреЗрдВрдЧреЗ: + +```Python +response = requests.get("http://example.com/some/url") +``` + +FastAPI рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖ API *path operation* рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: + +```Python hl_lines="1" +@app.get("/some/url") +def read_url(): + return {"message": "Hello World"} +``` + +`requests.get(...)` рдФрд░ `@app.get(...)` рдореЗрдВ рд╕рдорд╛рдирддрд╛рдПрдБ рджреЗрдЦреЗрдВред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +* рдПрдХ simple рдФрд░ intuitive API рд╣реЛред +* HTTP method names (operations) рдХреЛ рд╕реАрдзреЗ, straightforward рдФрд░ intuitive рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред +* sensible defaults рд╣реЛрдВ, рд▓реЗрдХрд┐рди powerful customizations рднреА рд╣реЛрдВред + +/// + +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } + +Django REST Framework рд╕реЗ рдЬреЛ рдореБрдЦреНрдп feature рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ automatic API documentation рдерд╛ред + +рдлрд┐рд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ APIs рдХреЛ document рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSON (рдпрд╛ YAML, JSON рдХрд╛ рдПрдХ extension) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ standard рдерд╛, рдЬрд┐рд╕реЗ Swagger рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред + +рдФрд░ Swagger APIs рдХреЗ рд▓рд┐рдП рдПрдХ web user interface рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА API рдХреЗ рд▓рд┐рдП Swagger documentation generate рдХрд░ рдкрд╛рдирд╛ рдЗрд╕ web user interface рдХрд╛ automatically рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ред + +рдПрдХ рд╕рдордп рдкрд░, Swagger рдХреЛ Linux Foundation рдХреЛ рджреЗ рджрд┐рдпрд╛ рдЧрдпрд╛, рддрд╛рдХрд┐ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ OpenAPI рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред + +рдЗрд╕реАрд▓рд┐рдП version 2.0 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп "Swagger" рдХрд╣рдирд╛ рдЖрдо рд╣реИ, рдФрд░ version 3+ рдХреЗ рд▓рд┐рдП "OpenAPI"ред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +Custom schema рдХреЗ рдмрдЬрд╛рдп API specifications рдХреЗ рд▓рд┐рдП рдПрдХ open standard рдЕрдкрдирд╛рдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред + +рдФрд░ standards-based user interface tools рдХреЛ integrate рдХрд┐рдпрд╛ рдЬрд╛рдП: + +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) + +рдЗрди рджреЛрдиреЛрдВ рдХреЛ рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХрд╛рдлреА popular рдФрд░ stable рдереЗ, рд▓реЗрдХрд┐рди рдПрдХ quick search рдХрд░рдиреЗ рдкрд░, рдЖрдк OpenAPI рдХреЗ рд▓рд┐рдП рджрд░реНрдЬрдиреЛрдВ alternative user interfaces рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк **FastAPI** рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред + +/// + +### Flask REST frameworks { #flask-rest-frameworks } + +рдХрдИ Flask REST frameworks рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдЬрд╛рдБрдЪ рдореЗрдВ рд╕рдордп рдФрд░ рдХрд╛рдо рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХрдИ discontinue рдпрд╛ abandon рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рдХрдИ unresolved issues рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдкрдпреБрдХреНрдд рдмрдирд╛ рджрд┐рдпрд╛ред + +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } + +API systems рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдореБрдЦреНрдп features рдореЗрдВ рд╕реЗ рдПрдХ data "serialization" рд╣реИ, рдЬрд┐рд╕рдореЗрдВ code (Python) рд╕реЗ data рд▓реЗрдХрд░ рдЙрд╕реЗ рдРрд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ network рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, database рд╕реЗ data рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ object рдХреЛ JSON object рдореЗрдВ рдмрджрд▓рдирд╛ред `datetime` objects рдХреЛ strings рдореЗрдВ рдмрджрд▓рдирд╛, рдЖрджрд┐ред + +APIs рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдПрдХ рдФрд░ рдмрдбрд╝рд╛ feature data validation рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ data рдирд┐рд╢реНрдЪрд┐рдд parameters рдХреЗ рдЕрдиреБрд╕рд╛рд░ valid рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ field `int` рд╣реИ, рдХреЛрдИ random string рдирд╣реАрдВред рдпрд╣ incoming data рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред + +Data validation system рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХреЛ рд╕рднреА checks рд╣рд╛рде рд╕реЗ, code рдореЗрдВ рдХрд░рдиреЗ рдкрдбрд╝рддреЗред + +рдпреЗ features рд╡рд╣реА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Marshmallow рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди library рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдЗрд╕реЗ Python type hints рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рд░ schema рдХреЛ define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Marshmallow рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП specific utils рдФрд░ classes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +"schemas" рдХреЛ define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП code рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ data types рдФрд░ validation, automatically рдкреНрд░рджрд╛рди рдХрд░реЗред + +/// + +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } + +APIs рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдПрдХ рдФрд░ рдмрдбрд╝рд╛ feature incoming requests рд╕реЗ data parsing рдХрд░рдирд╛ рд╣реИред + +Webargs рдПрдХ tool рд╣реИ рдЬрд┐рд╕реЗ Flask рд╕рд╣рд┐рдд рдХрдИ frameworks рдХреЗ рдКрдкрд░ рдпрд╣ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред + +рдпрд╣ data validation рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ Marshmallow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕реЗ рдЙрдиреНрд╣реАрдВ developers рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред + +рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди tool рд╣реИ рдФрд░ **FastAPI** рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред + +/// note | рдиреЛрдЯ + +Webargs рдХреЛ рдЙрдиреНрд╣реАрдВ Marshmallow developers рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +Incoming request data рдХрд╛ automatic validation рд╣реЛред + +/// + +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } + +Marshmallow рдФрд░ Webargs plug-ins рдХреЗ рд░реВрдк рдореЗрдВ validation, parsing рдФрд░ serialization рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред + +рд▓реЗрдХрд┐рди documentation рдЕрднреА рднреА missing рд╣реИред рдлрд┐рд░ APISpec рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред + +рдпрд╣ рдХрдИ frameworks рдХреЗ рд▓рд┐рдП рдПрдХ plug-in рд╣реИ (рдФрд░ Starlette рдХреЗ рд▓рд┐рдП рднреА рдПрдХ plug-in рд╣реИ)ред + +рдпрд╣ рдЬрд┐рд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк route handle рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ function рдХреА docstring рдХреЗ рдЕрдВрджрд░ YAML format рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ schema рдХреА definition рд▓рд┐рдЦрддреЗ рд╣реИрдВред + +рдФрд░ рдпрд╣ OpenAPI schemas generate рдХрд░рддрд╛ рд╣реИред + +Flask, Starlette, Responder, рдЖрджрд┐ рдореЗрдВ рдпрд╣ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдлрд┐рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд┐рд░ рд╕реЗ Python string (рдПрдХ рдмрдбрд╝рд╛ YAML) рдХреЗ рдЕрдВрджрд░ micro-syntax рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред + +Editor рдЗрд╕рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдФрд░ рдЕрдЧрд░ рд╣рдо parameters рдпрд╛ Marshmallow schemas modify рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ YAML docstring рдХреЛ рднреА modify рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ generated schema obsolete рд╣реЛ рдЬрд╛рдПрдЧрд╛ред + +/// note | рдиреЛрдЯ + +APISpec рдХреЛ рдЙрдиреНрд╣реАрдВ Marshmallow developers рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +APIs рдХреЗ рд▓рд┐рдП open standard, OpenAPI рдХреЛ support рдХрд┐рдпрд╛ рдЬрд╛рдПред + +/// + +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } + +рдпрд╣ рдПрдХ Flask plug-in рд╣реИ, рдЬреЛ Webargs, Marshmallow рдФрд░ APISpec рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред + +рдпрд╣ APISpec рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ OpenAPI schemas automatically generate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Webargs рдФрд░ Marshmallow рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред + +рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди tool рд╣реИ, рдмрд╣реБрдд underratedред рдЗрд╕реЗ рд╡рд╣рд╛рдБ рдореМрдЬреВрдж рдХрдИ Flask plug-ins рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ popular рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕рдХреА documentation рдХреЗ рдмрд╣реБрдд concise рдФрд░ abstract рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред + +рдЗрд╕рдиреЗ Python docstrings рдХреЗ рдЕрдВрджрд░ YAML (рдПрдХ рдФрд░ syntax) рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред + +Flask, Flask-apispec рдХреЛ Marshmallow рдФрд░ Webargs рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдпрд╣ combination **FastAPI** рдмрдирд╛рдиреЗ рддрдХ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ backend stack рдерд╛ред + +рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ Flask full-stack generators рдмрдиреЗред рдпреЗ рд╡реЗ main stacks рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ (рдФрд░ рдХрдИ external teams) рдЕрдм рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: + +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase) +* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb) + +рдФрд░ рдпрд╣реА full-stack generators [**FastAPI** Project Generators](project-generation.md) рдХрд╛ base рдереЗред + +/// note | рдиреЛрдЯ + +Flask-apispec рдХреЛ рдЙрдиреНрд╣реАрдВ Marshmallow developers рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +OpenAPI schema рдХреЛ automatically generate рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЙрд╕реА code рд╕реЗ рдЬреЛ serialization рдФрд░ validation define рдХрд░рддрд╛ рд╣реИред + +/// + +### [NestJS](https://nestjs.com/) (рдФрд░ [Angular](https://angular.io/)) { #nestjs-and-angular } + +рдпрд╣ Python рднреА рдирд╣реАрдВ рд╣реИ, NestJS Angular рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдПрдХ JavaScript (TypeScript) NodeJS framework рд╣реИред + +рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ Flask-apispec рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рдо рдЬреИрд╕рд╛ рд╣реИред + +рдЗрд╕рдореЗрдВ Angular 2 рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдПрдХ integrated dependency injection system рд╣реИред рдЗрд╕рдореЗрдВ "injectables" рдХреЛ pre-register рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЬреИрд╕реЗ рдореБрдЭреЗ рдЬреНрдЮрд╛рдд рд╕рднреА рдЕрдиреНрдп dependency injection systems рдореЗрдВ), рдЗрд╕рд▓рд┐рдП, рдпрд╣ verbosity рдФрд░ code repetition рдмрдврд╝рд╛рддрд╛ рд╣реИред + +рдХреНрдпреЛрдВрдХрд┐ parameters рдХреЛ TypeScript types (Python type hints рдХреЗ рд╕рдорд╛рди) рдХреЗ рд╕рд╛рде describe рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, editor support рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ TypeScript data compilation рдХреЗ рдмрд╛рдж JavaScript рдореЗрдВ preserve рдирд╣реАрдВ рд░рд╣рддрд╛, рдпрд╣ validation, serialization рдФрд░ documentation рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдкрд░ define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП types рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдФрд░ рдХреБрдЫ design decisions рдХреЗ рдХрд╛рд░рдг, validation, serialization рдФрд░ automatic schema generation рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рдЬрдЧрд╣ decorators рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХрд╛рдлреА verbose рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред + +рдпрд╣ nested models рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ handle рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ request рдореЗрдВ JSON body рдПрдХ JSON object рд╣реИ рдЬрд┐рд╕рдореЗрдВ inner fields рд╣реИрдВ рдЬреЛ рдЦреБрдж nested JSON objects рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдареАрдХ рд╕реЗ document рдФрд░ validate рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдмреЗрд╣рддрд░реАрди editor support рдХреЗ рд▓рд┐рдП Python types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред + +рдПрдХ powerful dependency injection system рд╣реЛред Code repetition рдХреЛ minimize рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛ рдЬрд╛рдПред + +/// + +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } + +рдпрд╣ `asyncio` рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд╣рд▓реЗ рдмреЗрд╣рдж рддреЗрдЬрд╝ Python frameworks рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ред рдЗрд╕реЗ Flask рдХреЗ рдмрд╣реБрдд рд╕рдорд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред + +/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг + +рдЗрд╕рдиреЗ default Python `asyncio` loop рдХреЗ рдмрдЬрд╛рдп [`uvloop`](https://github.com/MagicStack/uvloop) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣реА рдЗрд╕реЗ рдЗрддрдирд╛ рддреЗрдЬрд╝ рдмрдирд╛рддрд╛ рдерд╛ред + +рдЗрд╕рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Uvicorn рдФрд░ Starlette рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ open benchmarks рдореЗрдВ Sanic рд╕реЗ рддреЗрдЬрд╝ рд╣реИрдВред + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдмреЗрд╣рдж рддреЗрдЬрд╝ performance рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрд╛ рдЬрд╛рдПред + +рдЗрд╕реАрд▓рд┐рдП **FastAPI** Starlette рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рддреЗрдЬрд╝ framework рд╣реИ (third-party benchmarks рджреНрд╡рд╛рд░рд╛ tested)ред + +/// + +### [Falcon](https://falconframework.org/) { #falcon } + +Falcon рдПрдХ рдФрд░ high performance Python framework рд╣реИ, рдЗрд╕реЗ minimal рд╣реЛрдиреЗ рдФрд░ Hug рдЬреИрд╕реЗ рдЕрдиреНрдп frameworks рдХреА foundation рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред + +рдЗрд╕реЗ рдРрд╕реА functions рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛ parameters receive рдХрд░рддреА рд╣реИрдВ, рдПрдХ "request" рдФрд░ рдПрдХ "response"ред рдлрд┐рд░ рдЖрдк request рд╕реЗ parts "read" рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ response рдореЗрдВ parts "write" рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ design рдХреЗ рдХрд╛рд░рдг, standard Python type hints рдХреЗ рд╕рд╛рде function parameters рдХреЗ рд░реВрдк рдореЗрдВ request parameters рдФрд░ bodies declare рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред + +рдЗрд╕рд▓рд┐рдП, data validation, serialization, рдФрд░ documentation рдХреЛ code рдореЗрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, automatically рдирд╣реАрдВред рдпрд╛ рдЙрдиреНрд╣реЗрдВ Falcon рдХреЗ рдКрдкрд░ рдПрдХ framework рдХреЗ рд░реВрдк рдореЗрдВ implement рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕реЗ Hugред рдпрд╣реА рдЕрдВрддрд░ рдЙрди рдЕрдиреНрдп frameworks рдореЗрдВ рднреА рд╣реЛрддрд╛ рд╣реИ рдЬреЛ Falcon рдХреЗ design рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИрдВ, рдЬрд╣рд╛рдБ parameters рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ request object рдФрд░ рдПрдХ response object рд╣реЛрддрд╛ рд╣реИред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдмреЗрд╣рддрд░реАрди performance рдкрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЦреЛрдЬреЗ рдЬрд╛рдПрдБред + +Hug рдХреЗ рд╕рд╛рде (рдХреНрдпреЛрдВрдХрд┐ Hug Falcon рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ) рдЗрд╕рдиреЗ **FastAPI** рдХреЛ functions рдореЗрдВ `response` parameter declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред + +рд╣рд╛рд▓рд╛рдВрдХрд┐ FastAPI рдореЗрдВ рдпрд╣ optional рд╣реИ, рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ headers, cookies, рдФрд░ alternative status codes set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред + +/// + +### [Molten](https://moltenframework.com/) { #molten } + +рдореИрдВрдиреЗ **FastAPI** рдмрдирд╛рдиреЗ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ Molten рдЦреЛрдЬрд╛ред рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ: + +* Python type hints рдкрд░ рдЖрдзрд╛рд░рд┐рддред +* рдЗрди types рд╕реЗ validation рдФрд░ documentationред +* Dependency Injection systemред + +рдпрд╣ Pydantic рдЬреИрд╕реА data validation, serialization рдФрд░ documentation third-party library рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рдХреА рдЕрдкрдиреА library рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпреЗ data type definitions рдЙрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ reusable рдирд╣реАрдВ рд╣реЛрдВрдЧреАред + +рдЗрд╕реЗ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ verbose configurations рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ WSGI (ASGI рдХреЗ рдмрдЬрд╛рдп) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕реЗ Uvicorn, Starlette рдФрд░ Sanic рдЬреИрд╕реЗ tools рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП high performance рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП design рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред + +Dependency injection system рдХреЛ dependencies рдХреА pre-registration рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ dependencies declared types рдХреЗ рдЖрдзрд╛рд░ рдкрд░ solve рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд type рдХреЛ provide рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ "component" declare рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред + +Routes рдПрдХ рд╣реА рдЬрдЧрд╣ declare рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рджреВрд╕рд░реА рдЬрдЧрд╣реЛрдВ рдкрд░ declared functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (decorators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬрд┐рдиреНрд╣реЗрдВ endpoint handle рдХрд░рдиреЗ рд╡рд╛рд▓реА function рдХреЗ рдареАрдХ рдКрдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ Flask (рдФрд░ Starlette) рдХреЗ рддрд░реАрдХреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Django рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдЕрдзрд┐рдХ рдХрд░реАрдм рд╣реИред рдпрд╣ code рдореЗрдВ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд tightly coupled рд╣реИрдВред + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +Model attributes рдХреЗ "default" value рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ data types рдХреЗ рд▓рд┐рдП extra validations define рдХрд┐рдП рдЬрд╛рдПрдБред рдпрд╣ editor support рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ Pydantic рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред + +рдЗрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Pydantic рдХреЗ parts рдХреЛ update рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рд╡рд╣реА validation declaration style support рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдпрд╣ рд╕рд╛рд░реА functionality рдЕрдм Pydantic рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред + +/// + +### [Hug](https://github.com/hugapi/hug) { #hug } + +Hug рдЙрди рдкрд╣рд▓реЗ frameworks рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ рдЬрд┐рд╕рдиреЗ Python type hints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ API parameter types рдХреА declaration implement рдХреАред рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рд╡рд┐рдЪрд╛рд░ рдерд╛ рдЬрд┐рд╕рдиреЗ рдЕрдиреНрдп tools рдХреЛ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред + +рдЗрд╕рдиреЗ рдЕрдкрдиреА declarations рдореЗрдВ standard Python types рдХреЗ рдмрдЬрд╛рдп custom types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрджрдо рдЖрдЧреЗ рдерд╛ред + +рдпрд╣ рдкреВрд░реЗ API рдХреЛ JSON рдореЗрдВ declare рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ custom schema generate рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ frameworks рдореЗрдВ рд╕реЗ рднреА рдПрдХ рдерд╛ред + +рдпрд╣ OpenAPI рдФрд░ JSON Schema рдЬреИрд╕реЗ standard рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ Swagger UI рдЬреИрд╕реЗ рдЕрдиреНрдп tools рдХреЗ рд╕рд╛рде integrate рдХрд░рдирд╛ straightforward рдирд╣реАрдВ рд╣реЛрддрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдПрдХ рдмрд╣реБрдд innovative idea рдерд╛ред + +рдЗрд╕рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк, uncommon feature рд╣реИ: рдЙрд╕реА framework рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ APIs рдФрд░ CLIs рднреА рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред + +рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ synchronous Python web frameworks (WSGI) рдХреЗ рдкрд┐рдЫрд▓реЗ standard рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдпрд╣ Websockets рдФрд░ рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреЛ handle рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ performance рднреА high рд╣реИред + +/// note | рдиреЛрдЯ + +Hug рдХреЛ Timothy Crosley рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛, рд╡рд╣реА [`isort`](https://github.com/timothycrosley/isort) рдХреЗ creator рд╣реИрдВ, рдЬреЛ Python files рдореЗрдВ imports рдХреЛ automatically sort рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди tool рд╣реИред + +/// + +/// tip | **FastAPI** рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЪрд╛рд░ + +Hug рдиреЗ APIStar рдХреЗ parts рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдФрд░ APIStar рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдпрд╣ рдЙрди tools рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ promising рд▓рдЧреЗред + +Hug рдиреЗ **FastAPI** рдХреЛ parameters declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Python type hints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ, рдФрд░ API рдХреЛ automatically define рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ schema generate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред + +Hug рдиреЗ **FastAPI** рдХреЛ headers рдФрд░ cookies set рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП functions рдореЗрдВ `response` parameter declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред + +/// + +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } + +**FastAPI** рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдореБрдЭреЗ **APIStar** server рдорд┐рд▓рд╛ред рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд╣ рд╕рдм рдХреБрдЫ рдерд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рддрд▓рд╛рд╢ рдереА рдФрд░ рдЗрд╕рдХрд╛ design рдмреЗрд╣рддрд░реАрди рдерд╛ред + +рдпрд╣ рдЙрди рдкрд╣рд▓реЗ implementations рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдХрднреА рджреЗрдЦреЗ, рдЬрд┐рд╕рдореЗрдВ parameters рдФрд░ requests declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Python type hints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ framework рдерд╛ (NestJS рдФрд░ Molten рд╕реЗ рдкрд╣рд▓реЗ)ред рдореБрдЭреЗ рдпрд╣ Hug рдХреЗ рд▓рдЧрднрдЧ рдЙрд╕реА рд╕рдордп рдорд┐рд▓рд╛ред рд▓реЗрдХрд┐рди APIStar рдиреЗ OpenAPI standard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред + +рдЗрд╕рдореЗрдВ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдЙрдиреНрд╣реАрдВ type hints рдХреЗ рдЖрдзрд╛рд░ рдкрд░ automatic data validation, data serialization рдФрд░ OpenAPI schema generation рдерд╛ред + +Body schema definitions Pydantic рдЬреИрд╕реЗ Python type hints рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рдереАрдВ, рдпрд╣ Marshmallow рдХреЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдорд╛рди рдерд╛, рдЗрд╕рд▓рд┐рдП editor support рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, APIStar рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред + +рдЙрд╕ рд╕рдордп рдЗрд╕рдХреЗ performance benchmarks рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдереЗ (рд╕рд┐рд░реНрдл Starlette рдиреЗ surpass рдХрд┐рдпрд╛ рдерд╛)ред + +рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЗрд╕рдореЗрдВ automatic API documentation web UI рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдореЗрдВ Swagger UI рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдБред + +рдЗрд╕рдореЗрдВ dependency injection system рдерд╛ред рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп tools рдХреА рддрд░рд╣, рдЗрд╕рдореЗрдВ components рдХреА pre-registration рдЖрд╡рд╢реНрдпрдХ рдереАред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди feature рдерд╛ред + +рдореИрдВ рдХрднреА рднреА рдЗрд╕реЗ full project рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ security integration рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ Flask-apispec рдкрд░ рдЖрдзрд╛рд░рд┐рдд full-stack generators рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╕рднреА features рдХреЛ replace рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореЗрд░реЗ projects backlog рдореЗрдВ рдЙрд╕ functionality рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ pull request рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред + +рд▓реЗрдХрд┐рди рдлрд┐рд░, project рдХрд╛ focus shift рд╣реЛ рдЧрдпрд╛ред + +рдпрд╣ рдЕрдм API web framework рдирд╣реАрдВ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ creator рдХреЛ Starlette рдкрд░ focus рдХрд░рдирд╛ рдерд╛ред + +рдЕрдм APIStar OpenAPI specifications validate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tools рдХрд╛ рдПрдХ set рд╣реИ, web framework рдирд╣реАрдВред + +/// note | рдиреЛрдЯ + +APIStar рдХреЛ Tom Christie рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред рд╡рд╣реА рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдмрдирд╛рдпрд╛: + +* Django REST Framework +* Starlette (рдЬрд┐рд╕ рдкрд░ **FastAPI** рдЖрдзрд╛рд░рд┐рдд рд╣реИ) +* Uvicorn (Starlette рдФрд░ **FastAPI** рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) + +/// + +/// tip | **FastAPI** рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдХрд┐ + +рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдПред + +рдПрдХ рд╣реА Python types рдХреЗ рд╕рд╛рде рдХрдИ рдЪреАрдЬрд╝реЗрдВ (data validation, serialization рдФрд░ documentation) declare рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░, рдЬреЛ рд╕рд╛рде рд╣реА рдмреЗрд╣рддрд░реАрди editor support рднреА рджреЗрддрд╛ рдерд╛, рдореБрдЭреЗ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрд╛ред + +рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдорд╛рди framework рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ alternatives рдХреЛ test рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, APIStar рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред + +рдлрд┐рд░ APIStar рдиреЗ server рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рд╣рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ Starlette рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдФрд░ рдпрд╣ рдРрд╕реЗ system рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдмреЗрд╣рддрд░ foundation рдерд╛ред рдпрд╣реА **FastAPI** рдмрдирд╛рдиреЗ рдХреА рдЕрдВрддрд┐рдо рдкреНрд░реЗрд░рдгрд╛ рдереАред + +рдореИрдВ **FastAPI** рдХреЛ APIStar рдХрд╛ "spiritual successor" рдорд╛рдирддрд╛ рд╣реВрдБ, рдЬреЛ рдЗрди рд╕рднреА рдкрд┐рдЫрд▓реЗ tools рд╕реЗ рдорд┐рд▓реА рд╕реАрдЦ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ features, typing system, рдФрд░ рдЕрдиреНрдп parts рдХреЛ improve рдФрд░ increase рдХрд░рддрд╛ рд╣реИред + +/// + +## **FastAPI** рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ { #used-by-fastapi } + +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } + +Pydantic Python type hints рдХреЗ рдЖрдзрд╛рд░ рдкрд░ data validation, serialization рдФрд░ documentation (JSON Schema рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ library рд╣реИред + +рдпрд╣ рдЗрд╕реЗ рдмреЗрд╣рдж intuitive рдмрдирд╛рддрд╛ рд╣реИред + +рдпрд╣ Marshmallow рд╕реЗ comparable рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ benchmarks рдореЗрдВ рдпрд╣ Marshmallow рд╕реЗ рддреЗрдЬрд╝ рд╣реИред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдиреНрд╣реАрдВ Python type hints рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, editor support рдмреЗрд╣рддрд░реАрди рд╣реИред + +/// tip | **FastAPI** рдЗрд╕реЗ рдЗрди рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ + +рд╕рднреА data validation, data serialization рдФрд░ automatic model documentation (JSON Schema рдкрд░ рдЖрдзрд╛рд░рд┐рдд) handle рдХрд░рдирд╛ред + +рдлрд┐рд░ **FastAPI** рдЙрд╕ JSON Schema data рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ OpenAPI рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЙрди рд╕рднреА рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИред + +/// + +### [Starlette](https://www.starlette.dev/) { #starlette } + +Starlette рдПрдХ lightweight ASGI framework/toolkit рд╣реИ, рдЬреЛ high-performance asyncio services рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ideal рд╣реИред + +рдпрд╣ рдмрд╣реБрдд simple рдФрд░ intuitive рд╣реИред рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ extensible рд╣реЛрдиреЗ рдФрд░ modular components рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП design рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред + +рдЗрд╕рдореЗрдВ рд╣реИ: + +* рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА performance. +* WebSocket support. +* In-process background tasks. +* Startup рдФрд░ shutdown events. +* HTTPX рдкрд░ built test client. +* CORS, GZip, Static Files, Streaming responses. +* Session рдФрд░ Cookie support. +* 100% test coverage. +* 100% type annotated codebase. +* рдХреБрдЫ hard dependencies. + +Starlette рд╡рд░реНрддрдорд╛рди рдореЗрдВ tested рд╕рдмрд╕реЗ рддреЗрдЬрд╝ Python framework рд╣реИред рдХреЗрд╡рд▓ Uvicorn рдиреЗ рдЗрд╕реЗ surpass рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ framework рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ server рд╣реИред + +Starlette рд╕рднреА basic web microframework functionality рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдпрд╣ automatic data validation, serialization рдпрд╛ documentation рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ред + +рдпрд╣ рдЙрди рдореБрдЦреНрдп рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ **FastAPI** рдКрдкрд░ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╕рдм Python type hints (Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдкрд░ рдЖрдзрд╛рд░рд┐рддред рдЗрд╕рдХреЗ рд╕рд╛рде dependency injection system, security utilities, OpenAPI schema generation, рдЖрджрд┐ред + +/// note | рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг + +ASGI рдПрдХ рдирдпрд╛ "standard" рд╣реИ рдЬрд┐рд╕реЗ Django core team members рджреНрд╡рд╛рд░рд╛ develop рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА "Python standard" (рдПрдХ PEP) рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред + +рдлрд┐рд░ рднреА, рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ tools рджреНрд╡рд╛рд░рд╛ "standard" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ interoperability рдХреЛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Uvicorn рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп ASGI server (рдЬреИрд╕реЗ Daphne рдпрд╛ Hypercorn) рд╕реЗ switch рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк ASGI compatible tools, рдЬреИрд╕реЗ `python-socketio`, рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред + +/// + +/// tip | **FastAPI** рдЗрд╕реЗ рдЗрди рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ + +рд╕рднреА core web parts рдХреЛ handle рдХрд░рдирд╛ред рдКрдкрд░ рд╕реЗ features рдЬреЛрдбрд╝рдирд╛ред + +Class `FastAPI` рдЦреБрдж рд╕реАрдзреЗ class `Starlette` рд╕реЗ inherit рдХрд░рддреА рд╣реИред + +рдЗрд╕рд▓рд┐рдП, рдЬреЛ рдХреБрдЫ рднреА рдЖрдк Starlette рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЖрдк рд╕реАрдзреЗ **FastAPI** рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ steroids рдкрд░ Starlette рд╣реИред + +/// + +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } + +Uvicorn рдПрдХ lightning-fast ASGI server рд╣реИ, рдЬреЛ uvloop рдФрд░ httptools рдкрд░ рдмрдирд╛ рд╣реИред + +рдпрд╣ web framework рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ server рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ paths рджреНрд╡рд╛рд░рд╛ routing рдХреЗ рд▓рд┐рдП tools рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ Starlette (рдпрд╛ **FastAPI**) рдЬреИрд╕рд╛ framework рдКрдкрд░ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред + +рдпрд╣ Starlette рдФрд░ **FastAPI** рдХреЗ рд▓рд┐рдП recommended server рд╣реИред + +/// tip | **FastAPI** рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд░рддрд╛ рд╣реИ + +**FastAPI** applications рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП main web serverред + +рдЖрдк asynchronous multi-process server рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП `--workers` command line option рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг [Deployment](deployment/index.md) section рдореЗрдВ рджреЗрдЦреЗрдВред + +/// + +## Benchmarks рдФрд░ speed { #benchmarks-and-speed } + +Uvicorn, Starlette рдФрд░ FastAPI рдХреЗ рдмреАрдЪ рд╕рдордЭрдиреЗ, рддреБрд▓рдирд╛ рдХрд░рдиреЗ, рдФрд░ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, [Benchmarks](benchmarks.md) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ section рджреЗрдЦреЗрдВред diff --git a/docs/hi/docs/async.md b/docs/hi/docs/async.md new file mode 100644 index 000000000..8841c92be --- /dev/null +++ b/docs/hi/docs/async.md @@ -0,0 +1,444 @@ +# Concurrency рдФрд░ async / await { #concurrency-and-async-await } + +*path operation functions* рдХреЗ рд▓рд┐рдП `async def` syntax рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдФрд░ asynchronous code, concurrency, рдФрд░ parallelism рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ред + +## рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ? { #in-a-hurry } + +TL;DR: + +рдЕрдЧрд░ рдЖрдк third party libraries рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ `await` рдХреЗ рд╕рд╛рде call рдХрд░рдиреЗ рдХреЛ рдХрд╣рддреА рд╣реИрдВ, рдЬреИрд╕реЗ: + +```Python +results = await some_library() +``` + +рддреЛ, рдЕрдкрдиреЗ *path operation functions* рдХреЛ `async def` рдХреЗ рд╕рд╛рде declare рдХрд░реЗрдВ, рдЬреИрд╕реЗ: + +```Python hl_lines="2" +@app.get('/') +async def read_results(): + results = await some_library() + return results +``` + +/// note | рдиреЛрдЯ + +рдЖрдк `await` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ `async def` рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП functions рдХреЗ рдЕрдВрджрд░ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +/// + +--- + +рдЕрдЧрд░ рдЖрдк рдРрд╕реА third party library рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ (database, API, file system, рдЖрджрд┐) рд╕реЗ communicate рдХрд░рддреА рд╣реИ рдФрд░ `await` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ support рдирд╣реАрдВ рд░рдЦрддреА, (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ database libraries рдХреЗ рд╕рд╛рде рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ), рддреЛ рдЕрдкрдиреЗ *path operation functions* рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ `def` рдХреЗ рд╕рд╛рде declare рдХрд░реЗрдВ, рдЬреИрд╕реЗ: + +```Python hl_lines="2" +@app.get('/') +def results(): + results = some_library() + return results +``` + +--- + +рдЕрдЧрд░ рдЖрдкрдХреЗ application рдХреЛ (рдХрд┐рд╕реА рддрд░рд╣) рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ communicate рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ response рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рддреЛ `async def` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЛ рдЕрдВрджрд░ `await` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рди рд╣реЛред + +--- + +рдЕрдЧрд░ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп `def` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред + +--- + +**рдиреЛрдЯ**: рдЖрдк рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ *path operation functions* рдореЗрдВ `def` рдФрд░ `async def` рдХреЛ mix рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдПрдХ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ define рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред FastAPI рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред + +рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА case рдореЗрдВ, FastAPI рдлрд┐рд░ рднреА asynchronously рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдмреЗрд╣рдж рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред + +рд▓реЗрдХрд┐рди рдКрдкрд░ рджрд┐рдП рдЧрдП steps рдХреЛ follow рдХрд░рдиреЗ рд╕реЗ, рдпрд╣ рдХреБрдЫ performance optimizations рдХрд░ рдкрд╛рдПрдЧрд╛ред + +## рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг { #technical-details } + +Python рдХреЗ рдЖрдзреБрдирд┐рдХ versions **"asynchronous code"** рдХрд╛ support рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ **"coroutines"** рдирд╛рдо рдХреА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, **`async` рдФрд░ `await`** syntax рдХреЗ рд╕рд╛рдеред + +рдЖрдЗрдП рдиреАрдЪреЗ рдХреЗ sections рдореЗрдВ рдЗрд╕ phrase рдХреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ: + +* **Asynchronous Code** +* **`async` рдФрд░ `await`** +* **Coroutines** + +## Asynchronous Code { #asynchronous-code } + +Asynchronous code рдХрд╛ рдорддрд▓рдм рдмрд╕ рдпрд╣ рд╣реИ рдХрд┐ language ЁЯТм рдХреЗ рдкрд╛рд╕ computer / program ЁЯдЦ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ code рдореЗрдВ рдХрд┐рд╕реА point рдкрд░, рдЙрд╕реЗ ЁЯдЦ рдХрд╣реАрдВ рдФрд░ *рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝* рдХреЗ finish рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЙрд╕ *рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝* рдХреЛ "slow-file" ЁЯУЭ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред + +рддреЛ, рдЙрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, computer рдХреЛрдИ рдФрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ "slow-file" ЁЯУЭ finish рд╣реЛ рд░рд╣реА рд╣реЛрддреА рд╣реИред + +рдлрд┐рд░ computer / program ЁЯдЦ рд╣рд░ рдмрд╛рд░ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ рдЬрдм рдЙрд╕реЗ рдореМрдХрд╛ рдорд┐рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдЬрдм рднреА рд╡рд╣ ЁЯдЦ рдЙрд╕ point рдкрд░ рдЕрдкрдирд╛ рд╕рд╛рд░рд╛ рдХрд╛рдо finish рдХрд░ рд▓реЗрдЧрд╛ред рдФрд░ рд╡рд╣ ЁЯдЦ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдЬрд┐рди tasks рдХрд╛ рд╡рд╣ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдкрд╣рд▓реЗ рд╣реА finish рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдлрд┐рд░ рд╡рд╣ рдЬреЛ рднреА рдХрд░рдирд╛ рдерд╛ рдХрд░реЗрдЧрд╛ред + +рдЗрд╕рдХреЗ рдмрд╛рдж, рд╡рд╣ ЁЯдЦ finish рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ task рд▓реЗрддрд╛ рд╣реИ (рдорд╛рди рд▓реЗрдВ, рд╣рдорд╛рд░реА "slow-file" ЁЯУЭ) рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рднреА рдХрд░рдирд╛ рдерд╛ рдЙрд╕реЗ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред + +рд╡рд╣ "рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░" рдЖрдо рддреМрд░ рдкрд░ I/O operations рдХреЛ refer рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд "slow" рд╣реЛрддреЗ рд╣реИрдВ (processor рдФрд░ RAM memory рдХреА speed рдХреА рддреБрд▓рдирд╛ рдореЗрдВ), рдЬреИрд╕реЗ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛: + +* client рд╕реЗ data network рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХрд╛ +* рдЖрдкрдХреЗ program рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ data client рджреНрд╡рд╛рд░рд╛ network рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ receive рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ +* disk рдкрд░ рдХрд┐рд╕реА file рдХреА contents system рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рдФрд░ рдЖрдкрдХреЗ program рдХреЛ рджрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ +* рдЖрдкрдХреЗ program рджреНрд╡рд╛рд░рд╛ system рдХреЛ рджреА рдЧрдИ contents disk рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХрд╛ +* рдХрд┐рд╕реА remote API operation рдХрд╛ +* рдХрд┐рд╕реА database operation рдХреЗ finish рд╣реЛрдиреЗ рдХрд╛ +* рдХрд┐рд╕реА database query рджреНрд╡рд╛рд░рд╛ results return рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ +* рдЖрджрд┐ред + +рдХреНрдпреЛрдВрдХрд┐ execution time рдЬрд╝реНрдпрд╛рджрд╛рддрд░ I/O operations рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдиреЗ рдореЗрдВ consume рд╣реЛрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ "I/O bound" operations рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдЗрд╕реЗ "asynchronous" рдЗрд╕рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ computer / program рдХреЛ slow task рдХреЗ рд╕рд╛рде "synchronized" рд╣реЛрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА, task рдХреЗ finish рд╣реЛрдиреЗ рдХреЗ exact moment рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдХреБрдЫ рднреА рди рдХрд░рддреЗ рд╣реБрдП, рддрд╛рдХрд┐ рд╡рд╣ task result рд▓реЗ рд╕рдХреЗ рдФрд░ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗред + +рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, "asynchronous" system рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, task finish рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, computer / program рдХреЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рддрдХ рдереЛрдбрд╝рд╛ рд╕рд╛ line рдореЗрдВ wait рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдХреБрдЫ microseconds), рддрд╛рдХрд┐ computer / program рдЬреЛ рдХрд╛рдо рдХрд░рдиреЗ рдЧрдпрд╛ рдерд╛ рдЙрд╕реЗ finish рдХрд░реЗ, рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдЖрдХрд░ results рд▓реЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦреЗред + +"Synchronous" ("asynchronous" рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХреЗ рд▓рд┐рдП рд╡реЗ рдЖрдорддреМрд░ рдкрд░ "sequential" term рднреА use рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ computer / program рдХрд┐рд╕реА рдЕрд▓рдЧ task рдкрд░ switch рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ sequence рдореЗрдВ рд╕рднреА steps follow рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЙрди steps рдореЗрдВ рдЗрдВрддрдЬрд╝рд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛред + +### Concurrency рдФрд░ Burgers { #concurrency-and-burgers } + +рдКрдкрд░ describe рдХрд┐рдП рдЧрдП **asynchronous** code рдХреЗ рдЗрд╕ idea рдХреЛ рдХрднреА-рдХрднреА **"concurrency"** рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ **"parallelism"** рд╕реЗ рдЕрд▓рдЧ рд╣реИред + +**Concurrency** рдФрд░ **parallelism** рджреЛрдиреЛрдВ "рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬрд╝реЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рд╣реЛ рд░рд╣реА рд╣реИрдВ" рд╕реЗ related рд╣реИрдВред + +рд▓реЗрдХрд┐рди *concurrency* рдФрд░ *parallelism* рдХреЗ рдмреАрдЪ рдХреЗ details рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред + +рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, burgers рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрди story imagine рдХрд░реЗрдВ: + +### Concurrent Burgers { #concurrent-burgers } + +рдЖрдк рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде fast food рд▓реЗрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдк line рдореЗрдВ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ cashier рдЖрдкрдХреЗ рдЖрдЧреЗ рдХреЗ рд▓реЛрдЧреЛрдВ рд╕реЗ orders рд▓реЗ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред ЁЯШН + + + +рдлрд┐рд░ рдЖрдкрдХреА рдмрд╛рд░реА рдЖрддреА рд╣реИ, рдЖрдк рдЕрдкрдиреА crush рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП 2 рдмрд╣реБрдд fancy burgers рдХрд╛ order рджреЗрддреЗ рд╣реИрдВред ЁЯНФЁЯНФ + + + +Cashier kitchen рдореЗрдВ cook рд╕реЗ рдХреБрдЫ рдХрд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рд╣реЛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреЗ burgers prepare рдХрд░рдиреЗ рд╣реИрдВ (рднрд▓реЗ рд╣реА рд╡реЗ currently previous clients рдХреЗ burgers prepare рдХрд░ рд░рд╣реЗ рд╣реЛрдВ)ред + + + +рдЖрдк pay рдХрд░рддреЗ рд╣реИрдВред ЁЯТ╕ + +Cashier рдЖрдкрдХреЛ рдЖрдкрдХреА turn рдХрд╛ number рджреЗрддрд╛ рд╣реИред + + + +рдЬрдм рдЖрдк wait рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдк рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде рдПрдХ table рдЪреБрдирддреЗ рд╣реИрдВ, рдмреИрдарддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА crush рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ burgers рдмрд╣реБрдд fancy рд╣реИрдВ рдФрд░ prepare рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ)ред + +рдЬрдм рдЖрдк рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде table рдкрд░ рдмреИрдареЗ рд╣реЛрддреЗ рд╣реИрдВ, burgers рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЙрд╕ рд╕рдордп рдХреЛ рдпрд╣ admire рдХрд░рдиреЗ рдореЗрдВ spend рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА crush рдХрд┐рддрдиреА awesome, cute рдФрд░ smart рд╣реИ тЬиЁЯШНтЬиред + + + +Wait рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЕрдкрдиреА crush рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, time to time, рдЖрдк counter рдкрд░ displayed number check рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреА turn рдЖ рдЧрдИ рд╣реИред + +рдлрд┐рд░ рдХрд┐рд╕реА point рдкрд░, рдЖрдЦрд┐рд░рдХрд╛рд░ рдЖрдкрдХреА turn рдЖ рдЬрд╛рддреА рд╣реИред рдЖрдк counter рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ burgers рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ table рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред + + + +рдЖрдк рдФрд░ рдЖрдкрдХреА crush burgers рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВред тЬи + + + +/// note | рдиреЛрдЯ + +рд╕реБрдВрджрд░ illustrations [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) рджреНрд╡рд╛рд░рд╛ред ЁЯОи + +/// + +--- + +рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЙрд╕ story рдореЗрдВ рдЖрдк computer / program ЁЯдЦ рд╣реИрдВред + +рдЬрдм рдЖрдк line рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдк рдмрд╕ idle ЁЯШ┤ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдкрдиреА turn рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдХреБрдЫ рдмрд╣реБрдд "productive" рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗред рд▓реЗрдХрд┐рди line fast рд╣реИ рдХреНрдпреЛрдВрдХрд┐ cashier рдХреЗрд╡рд▓ orders рд▓реЗ рд░рд╣рд╛ рд╣реИ (рдЙрдиреНрд╣реЗрдВ prepare рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИред + +рдлрд┐рд░, рдЬрдм рдЖрдкрдХреА turn рдЖрддреА рд╣реИ, рдЖрдк actual "productive" work рдХрд░рддреЗ рд╣реИрдВ, menu process рдХрд░рддреЗ рд╣реИрдВ, decide рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдкрдиреА crush рдХреА choice рд▓реЗрддреЗ рд╣реИрдВ, pay рдХрд░рддреЗ рд╣реИрдВ, check рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк correct bill рдпрд╛ card рджреЗ рд░рд╣реЗ рд╣реИрдВ, check рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрд╕реЗ рд╕рд╣реА charge рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, check рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ order рдореЗрдВ correct items рд╣реИрдВ, рдЖрджрд┐ред + +рд▓реЗрдХрд┐рди рдлрд┐рд░, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА burgers рдирд╣реАрдВ рд╣реИрдВ, cashier рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ work "on pause" тП╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ burgers ready рд╣реЛрдиреЗ рдХрд╛ wait ЁЯХЩ рдХрд░рдирд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк counter рд╕реЗ рджреВрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА turn рдХреЗ number рдХреЗ рд╕рд╛рде table рдкрд░ рдмреИрдарддреЗ рд╣реИрдВ, рдЖрдк рдЕрдкрдирд╛ attention рдЕрдкрдиреА crush рдкрд░ switch ЁЯФА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рдкрд░ "work" тПп ЁЯдУ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдк рджреЛрдмрд╛рд░рд╛ рдХреБрдЫ рдмрд╣реБрдд "productive" рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрдкрдиреА crush ЁЯШН рдХреЗ рд╕рд╛рде flirtingред + +рдлрд┐рд░ cashier ЁЯТБ counter рдХреЗ display рдкрд░ рдЖрдкрдХрд╛ number рдбрд╛рд▓рдХрд░ рдХрд╣рддрд╛ рд╣реИ "рдореИрдВрдиреЗ burgers рдмрдирд╛ рд▓рд┐рдП рд╣реИрдВ", рд▓реЗрдХрд┐рди displayed number рдЖрдкрдХреА turn number рдореЗрдВ рдмрджрд▓рддреЗ рд╣реА рдЖрдк рддреБрд░рдВрдд рдкрд╛рдЧрд▓реЛрдВ рдХреА рддрд░рд╣ jump рдирд╣реАрдВ рдХрд░рддреЗред рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЖрдкрдХреЗ burgers рдирд╣реАрдВ рдЪреБрд░рд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдкрдХреА turn рдХрд╛ number рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрдирдХрд╛ред + +рддреЛ рдЖрдк рдЕрдкрдиреА crush рдХреЗ story finish рдХрд░рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (current work тПп / process рд╣реЛ рд░рд╣рд╛ task ЁЯдУ finish рд╣реЛрдирд╛), gentle smile рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк burgers рд▓реЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ тП╕ред + +рдлрд┐рд░ рдЖрдк counter ЁЯФА рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрд╕ initial task рдкрд░ рдЬреЛ рдЕрдм finish рд╣реЛ рдЪреБрдХрд╛ рд╣реИ тПп, burgers рдЙрдард╛рддреЗ рд╣реИрдВ, thanks рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ table рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ counter рдХреЗ рд╕рд╛рде interaction рдХрд╛ рд╡рд╣ step / task finish рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ тП╣ред рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ, "eating burgers" ЁЯФА тПп рдХрд╛ рдПрдХ рдирдпрд╛ task create рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "getting burgers" рд╡рд╛рд▓рд╛ previous task finish рд╣реЛ рдЪреБрдХрд╛ рд╣реИ тП╣ред + +### Parallel Burgers { #parallel-burgers } + +рдЕрдм imagine рдХрд░реЗрдВ рдХрд┐ рдпреЗ "Concurrent Burgers" рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ "Parallel Burgers" рд╣реИрдВред + +рдЖрдк рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде parallel fast food рд▓реЗрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред + +рдЖрдк line рдореЗрдВ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдХрдИ (рдорд╛рди рд▓реЗрдВ 8) cashiers, рдЬреЛ рдЙрд╕реА рд╕рдордп cooks рднреА рд╣реИрдВ, рдЖрдкрдХреЗ рдЖрдЧреЗ рдХреЗ рд▓реЛрдЧреЛрдВ рд╕реЗ orders рд▓реЗ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред + +рдЖрдкрд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдХреЛрдИ counter рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ burgers ready рд╣реЛрдиреЗ рдХрд╛ wait рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 8 cashiers рдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ next order рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреБрд░рдВрдд рдЬрд╛рдХрд░ burger prepare рдХрд░рддрд╛ рд╣реИред + + + +рдлрд┐рд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЖрдкрдХреА turn рдЖрддреА рд╣реИ, рдЖрдк рдЕрдкрдиреА crush рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП 2 рдмрд╣реБрдд fancy burgers рдХрд╛ order рджреЗрддреЗ рд╣реИрдВред + +рдЖрдк pay рдХрд░рддреЗ рд╣реИрдВ ЁЯТ╕ред + + + +Cashier kitchen рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред + +рдЖрдк counter ЁЯХЩ рдХреЗ рд╕рд╛рдордиреЗ рдЦрдбрд╝реЗ рд╣реЛрдХрд░ wait рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрдкрд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдФрд░ рдЖрдкрдХреЗ burgers рди рд▓реЗ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ turns рдХреЗ рд▓рд┐рдП рдХреЛрдИ numbers рдирд╣реАрдВ рд╣реИрдВред + + + +рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдФрд░ рдЖрдкрдХреА crush рдЗрд╕ рдмрд╛рдд рдореЗрдВ busy рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЖрдкрдХреЗ рдЖрдЧреЗ рди рдЖ рдЬрд╛рдП рдФрд░ рдЖрдкрдХреЗ burgers рдЖрддреЗ рд╣реА рдЙрдиреНрд╣реЗрдВ рди рд▓реЗ рдЬрд╛рдП, рдЖрдк рдЕрдкрдиреА crush рдкрд░ attention рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред ЁЯШЮ + +рдпрд╣ "synchronous" work рд╣реИ, рдЖрдк cashier/cook ЁЯСитАНЁЯН│ рдХреЗ рд╕рд╛рде "synchronized" рд╣реИрдВред рдЖрдкрдХреЛ wait ЁЯХЩ рдХрд░рдирд╛ рд╣реИ рдФрд░ exact moment рдкрд░ рд╡рд╣рд╛рдБ рд╣реЛрдирд╛ рд╣реИ рдЬрдм cashier/cook ЁЯСитАНЁЯН│ burgers finish рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рджреЗрддрд╛ рд╣реИ, рдирд╣реАрдВ рддреЛ рдХреЛрдИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред + + + +рдлрд┐рд░ рдЖрдкрдХрд╛ cashier/cook ЁЯСитАНЁЯН│ рд▓рдВрдмреЗ рд╕рдордп рддрдХ counter рдХреЗ рд╕рд╛рдордиреЗ wait ЁЯХЩ рдХрд░рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЦрд┐рд░рдХрд╛рд░ рдЖрдкрдХреЗ burgers рд▓реЗрдХрд░ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред + + + +рдЖрдк рдЕрдкрдиреЗ burgers рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде table рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред + +рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред тП╣ + + + +рдЬрд╝реНрдпрд╛рджрд╛ рдмрд╛рдд рдпрд╛ flirting рдирд╣реАрдВ рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрддрд░ рд╕рдордп counter рдХреЗ рд╕рд╛рдордиреЗ wait ЁЯХЩ рдХрд░рдиреЗ рдореЗрдВ spend рд╣реБрдЖред ЁЯШЮ + +/// note | рдиреЛрдЯ + +рд╕реБрдВрджрд░ illustrations [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot) рджреНрд╡рд╛рд░рд╛ред ЁЯОи + +/// + +--- + +Parallel burgers рдХреЗ рдЗрд╕ scenario рдореЗрдВ, рдЖрдк рдПрдХ computer / program ЁЯдЦ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ processors рд╣реИрдВ (рдЖрдк рдФрд░ рдЖрдкрдХреА crush), рджреЛрдиреЛрдВ wait ЁЯХЩ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ "counter рдкрд░ waiting" ЁЯХЩ рдореЗрдВ рдЕрдкрдирд╛ attention тПп dedicate рдХрд░ рд░рд╣реЗ рд╣реИрдВред + +Fast food store рдореЗрдВ 8 processors (cashiers/cooks) рд╣реИрдВред рдЬрдмрдХрд┐ concurrent burgers store рдореЗрдВ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ 2 (рдПрдХ cashier рдФрд░ рдПрдХ cook) рд░рд╣реЗ рд╣реЛрдВрдЧреЗред + +рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, final experience рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред ЁЯШЮ + +--- + +рдпрд╣ burgers рдХреЗ рд▓рд┐рдП parallel equivalent story рд╣реЛрдЧреАред ЁЯНФ + +рдЗрд╕рдХреЗ рдПрдХ рдФрд░ "real life" example рдХреЗ рд▓рд┐рдП, рдПрдХ bank imagine рдХрд░реЗрдВред + +рд╣рд╛рд▓ рддрдХ, рдЕрдзрд┐рдХрд╛рдВрд╢ banks рдореЗрдВ multiple cashiers ЁЯСитАНЁЯТ╝ЁЯСитАНЁЯТ╝ЁЯСитАНЁЯТ╝ЁЯСитАНЁЯТ╝ рдФрд░ рдПрдХ рдмрдбрд╝реА line ЁЯХЩЁЯХЩЁЯХЩЁЯХЩЁЯХЩЁЯХЩЁЯХЩЁЯХЩ рд╣реЛрддреА рдереАред + +рд╕рднреА cashiers рдПрдХ client рдХреЗ рдмрд╛рдж рджреВрд╕рд░реЗ client рдХреЗ рд╕рд╛рде рд╕рд╛рд░рд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рдереЗ ЁЯСитАНЁЯТ╝тПпред + +рдФрд░ рдЖрдкрдХреЛ line рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ wait ЁЯХЩ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдЖрдк рдЕрдкрдиреА turn рдЦреЛ рджреЗрддреЗ рд╣реИрдВред + +рдЖрдк рд╢рд╛рдпрдж рдЕрдкрдиреА crush ЁЯШН рдХреЛ bank ЁЯПж рдореЗрдВ errands рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд╛рде рдирд╣реАрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред + +### Burger рдирд┐рд╖реНрдХрд░реНрд╖ { #burger-conclusion } + +"рдЕрдкрдиреА crush рдХреЗ рд╕рд╛рде fast food burgers" рдХреЗ рдЗрд╕ scenario рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд waiting ЁЯХЩ рд╣реИ, concurrent system тП╕ЁЯФАтПп рд░рдЦрдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ sensible рд╣реИред + +рдЕрдзрд┐рдХрд╛рдВрд╢ web applications рдХреЗ рд▓рд┐рдП рдпрд╣реА case рд╣реИред + +рдмрд╣реБрдд, рдмрд╣реБрдд рд╕рд╛рд░реЗ users, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ server рдЙрдирдХреА not-so-good connection рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреА requests рднреЗрдЬрдиреЗ рдХрд╛ wait ЁЯХЩ рдХрд░ рд░рд╣рд╛ рд╣реИред + +рдФрд░ рдлрд┐рд░ responses рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХрд╛ рдлрд┐рд░ рд╕реЗ wait ЁЯХЩ рдХрд░ рд░рд╣рд╛ рд╣реИред + +рдпрд╣ "waiting" ЁЯХЩ microseconds рдореЗрдВ measure рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╕рдмрдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдЕрдВрдд рдореЗрдВ рдХрд╛рдлреА waiting рд╣реЛ рдЬрд╛рддреА рд╣реИред + +рдЗрд╕реАрд▓рд┐рдП web APIs рдХреЗ рд▓рд┐рдП asynchronous тП╕ЁЯФАтПп code use рдХрд░рдирд╛ рдмрд╣реБрдд sensible рд╣реИред + +рдЗрд╕реА рддрд░рд╣ рдХреА asynchronicity рдиреЗ NodeJS рдХреЛ popular рдмрдирд╛рдпрд╛ (рднрд▓реЗ рд╣реА NodeJS parallel рдирд╣реАрдВ рд╣реИ) рдФрд░ рдпрд╣реА Go рдХреА programming language рдХреЗ рд░реВрдк рдореЗрдВ strength рд╣реИред + +рдФрд░ рдпрд╣реА same level рдХреА performance рдЖрдкрдХреЛ **FastAPI** рдХреЗ рд╕рд╛рде рдорд┐рд▓рддреА рд╣реИред + +рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ parallelism рдФрд░ asynchronicity рдПрдХ рд╣реА рд╕рдордп рдкрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ tested NodeJS frameworks рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗ higher performance рдорд┐рд▓рддреА рд╣реИ рдФрд░ Go рдХреЗ рдмрд░рд╛рдмрд░, рдЬреЛ C рдХреЗ рдХрд░реАрдм рдПрдХ compiled language рд╣реИ [(рдпрд╣ рд╕рдм Starlette рдХреЗ рдХрд╛рд░рдг)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)ред + +### рдХреНрдпрд╛ concurrency parallelism рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ? { #is-concurrency-better-than-parallelism } + +рдирд╣реАрдВ! рдпрд╣ story рдХреА moral рдирд╣реАрдВ рд╣реИред + +Concurrency, parallelism рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдФрд░ рдпрд╣ рдЙрди **specific** scenarios рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ рдЬрд┐рдирдореЗрдВ рдмрд╣реБрдд waiting рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рдЗрд╕реА рдХрд╛рд░рдг, web application development рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ parallelism рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред + +рддреЛ, рдЗрд╕реЗ balance рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди short story imagine рдХрд░реЗрдВ: + +> рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝рд╛, рдЧрдВрджрд╛ house clean рдХрд░рдирд╛ рд╣реИред + +*рд╣рд╛рдБ, рдпрд╣реА рдкреВрд░реА story рд╣реИ*ред + +--- + +рдХрд╣реАрдВ рднреА рдХреЛрдИ waiting ЁЯХЩ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, house рдХреЗ multiple places рдореЗрдВред + +рдЖрдк burgers example рдХреА рддрд░рд╣ turns рд░рдЦ рд╕рдХрддреЗ рдереЗ, рдкрд╣рд▓реЗ living room, рдлрд┐рд░ kitchen, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ wait ЁЯХЩ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ, рдмрд╕ cleaning and cleaning рдХрд░ рд░рд╣реЗ рд╣реИрдВ, turns рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ affect рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред + +Turns (concurrency) рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ finish рдХрд░рдиреЗ рдореЗрдВ рдЙрддрдирд╛ рд╣реА time рд▓рдЧреЗрдЧрд╛ рдФрд░ рдЖрдкрдиреЗ рдЙрддрдирд╛ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред + +рд▓реЗрдХрд┐рди рдЗрд╕ case рдореЗрдВ, рдЕрдЧрд░ рдЖрдк 8 ex-cashier/cooks/now-cleaners рд▓рд╛ рд╕рдХреЗрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ (plus рдЖрдк) house рдХрд╛ рдПрдХ zone clean рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рд╕рдХреЗ, рддреЛ рдЖрдк extra help рдХреЗ рд╕рд╛рде рд╕рд╛рд░рд╛ рдХрд╛рдо **parallel** рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА finish рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдЗрд╕ scenario рдореЗрдВ, cleaners рдореЗрдВ рд╕реЗ рд╣рд░ рдПрдХ (рдЖрдк рд╕рд╣рд┐рдд) рдПрдХ processor рд╣реЛрдЧрд╛, job рдХрд╛ рдЕрдкрдирд╛ part рдХрд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред + +рдФрд░ рдХреНрдпреЛрдВрдХрд┐ execution time рдХрд╛ рдЕрдзрд┐рдХрддрд░ рд╣рд┐рд╕реНрд╕рд╛ actual work (waiting рдХреЗ рдмрдЬрд╛рдп) рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ computer рдореЗрдВ work CPU рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдЗрди problems рдХреЛ "CPU bound" рдХрд╣рддреЗ рд╣реИрдВред + +--- + +CPU bound operations рдХреЗ common examples рдРрд╕реА рдЪреАрдЬрд╝реЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ complex math processing рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИред + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: + +* **Audio** рдпрд╛ **image processing**ред +* **Computer vision**: рдПрдХ image millions of pixels рд╕реЗ composed рд╣реЛрддреА рд╣реИ, рд╣рд░ pixel рдореЗрдВ 3 values / colors рд╣реЛрддреЗ рд╣реИрдВ, рдЙрд╕реЗ process рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рддреМрд░ рдкрд░ рдЙрди pixels рдкрд░ рдХреБрдЫ compute рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╕рдм рдПрдХ рд╣реА рд╕рдордп рдкрд░ред +* **Machine Learning**: рдЗрд╕рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ "matrix" рдФрд░ "vector" multiplications рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИред Numbers рд╡рд╛рд▓реА рдПрдХ huge spreadsheet рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдкрд░ multiply рдХрд░рдирд╛ред +* **Deep Learning**: рдпрд╣ Machine Learning рдХрд╛ sub-field рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реИ рдХрд┐ multiply рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП numbers рдХреА рдПрдХ single spreadsheet рдирд╣реАрдВ рд╣реЛрддреА, рдмрд▓реНрдХрд┐ рдЙрдирдХрд╛ huge set рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХрдИ cases рдореЗрдВ, рдЖрдк рдЙрди models рдХреЛ build рдФрд░ / рдпрд╛ use рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ special processor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред + +### Concurrency + Parallelism: Web + Machine Learning { #concurrency-parallelism-web-machine-learning } + +**FastAPI** рдХреЗ рд╕рд╛рде рдЖрдк concurrency рдХрд╛ advantage рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ web development рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд common рд╣реИ (NodeJS рдХрд╛ рд╡рд╣реА main attraction)ред + +рд▓реЗрдХрд┐рди рдЖрдк Machine Learning systems рдЬреИрд╕реЗ **CPU bound** workloads рдХреЗ рд▓рд┐рдП parallelism рдФрд░ multiprocessing (multiple processes parallel рдореЗрдВ рдЪрд▓рд╛рдирд╛) рдХреЗ benefits рдХрд╛ рднреА exploit рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рд╡рд╣, рд╕рд╛рде рд╣реА рдпрд╣ simple fact рдХрд┐ Python **Data Science**, Machine Learning рдФрд░ рдЦрд╛рд╕рдХрд░ Deep Learning рдХреА main language рд╣реИ, FastAPI рдХреЛ Data Science / Machine Learning web APIs рдФрд░ applications (рдХрдИ рдЕрдиреНрдп рдХреЗ рдмреАрдЪ) рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ match рдмрдирд╛рддрд╛ рд╣реИред + +Production рдореЗрдВ рдЗрд╕ parallelism рдХреЛ рдХреИрд╕реЗ achieve рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП [Deployment](deployment/index.md) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ section рджреЗрдЦреЗрдВред + +## `async` рдФрд░ `await` { #async-and-await } + +Python рдХреЗ рдЖрдзреБрдирд┐рдХ versions рдореЗрдВ asynchronous code define рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд intuitive рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп "sequential" code рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА moments рдкрд░ рдЖрдкрдХреЗ рд▓рд┐рдП "awaiting" рдХрд░рддрд╛ рд╣реИред + +рдЬрдм рдХреЛрдИ operation results рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ waiting require рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрди рдирдП Python features рдХрд╛ support рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрд╕реЗ рдРрд╕реЗ code рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +```Python +burgers = await get_burgers(2) +``` + +рдпрд╣рд╛рдБ key `await` рд╣реИред рдпрд╣ Python рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ `burgers` рдореЗрдВ results store рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ `get_burgers(2)` рдХреЗ рдЕрдкрдирд╛ рдХрд╛рдо ЁЯХЩ finish рдХрд░рдиреЗ рдХрд╛ wait тП╕ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд╕реЗ, Python рдЬрд╛рди рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд╣ meanwhile рдХреБрдЫ рдФрд░ ЁЯФА тПп рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХреЛрдИ рджреВрд╕рд░реА request receive рдХрд░рдирд╛)ред + +`await` рдХреЗ work рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдРрд╕реЗ function рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ asynchronicity рдХреЛ support рдХрд░рддрд╛ рд╣реЛред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рдЗрд╕реЗ `async def` рдХреЗ рд╕рд╛рде declare рдХрд░рддреЗ рд╣реИрдВ: + +```Python hl_lines="1" +async def get_burgers(number: int): + # Burgers рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ asynchronous рдХрд╛рдо рдХрд░реЗрдВ + return burgers +``` + +...`def` рдХреЗ рдмрдЬрд╛рдп: + +```Python hl_lines="2" +# рдпрд╣ asynchronous рдирд╣реАрдВ рд╣реИ +def get_sequential_burgers(number: int): + # Burgers рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ sequential рдХрд╛рдо рдХрд░реЗрдВ + return burgers +``` + +`async def` рдХреЗ рд╕рд╛рде, Python рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ function рдХреЗ рдЕрдВрджрд░ рдЙрд╕реЗ `await` expressions рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ aware рд░рд╣рдирд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдЙрд╕ function рдХреЗ execution рдХреЛ "pause" тП╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдФрд░ ЁЯФА рдХрд░ рд╕рдХрддрд╛ рд╣реИред + +рдЬрдм рдЖрдк рдХрд┐рд╕реА `async def` function рдХреЛ call рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реЗ "await" рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛: + +```Python +# рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ get_burgers рдХреЛ async def рдХреЗ рд╕рд╛рде define рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ +burgers = get_burgers(2) +``` + +--- + +рддреЛ, рдЕрдЧрд░ рдЖрдк рдХреЛрдИ library use рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕реЗ `await` рдХреЗ рд╕рд╛рде call рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ *path operation functions* рдХреЛ `async def` рдХреЗ рд╕рд╛рде create рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ: + +```Python hl_lines="2-3" +@app.get('/burgers') +async def read_burgers(): + burgers = await get_burgers(2) + return burgers +``` + +### рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг { #more-technical-details } + +рдЖрдкрдиреЗ notice рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ `await` рдХреЗрд╡рд▓ `async def` рдХреЗ рд╕рд╛рде defined functions рдХреЗ рдЕрдВрджрд░ рд╣реА use рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдЙрд╕реА рд╕рдордп, `async def` рдХреЗ рд╕рд╛рде defined functions рдХреЛ "awaited" рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, `async def` рд╡рд╛рд▓реЗ functions рдХреЗрд╡рд▓ `async def` рдХреЗ рд╕рд╛рде defined functions рдХреЗ рдЕрдВрджрд░ рд╣реА call рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред + +рддреЛ, egg рдФрд░ chicken рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк first `async` function рдХреЛ рдХреИрд╕реЗ call рдХрд░рддреЗ рд╣реИрдВ? + +рдЕрдЧрд░ рдЖрдк **FastAPI** рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ "first" function рдЖрдкрдХрд╛ *path operation function* рд╣реЛрдЧрд╛, рдФрд░ FastAPI рдЬрд╛рдирддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╣реА рдХрд╛рдо рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред + +рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк FastAPI рдХреЗ рдмрд┐рдирд╛ `async` / `await` use рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +### рдЕрдкрдирд╛ async code рд▓рд┐рдЦреЗрдВ { #write-your-own-async-code } + +Starlette (рдФрд░ **FastAPI**) [AnyIO](https://anyio.readthedocs.io/en/stable/) рдкрд░ based рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ Python рдХреА standard library [asyncio](https://docs.python.org/3/library/asyncio-task.html) рдФрд░ [Trio](https://trio.readthedocs.io/en/stable/) рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде compatible рдмрдирд╛рддрд╛ рд╣реИред + +рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк рдЕрдкрдиреЗ advanced concurrency use cases рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ [AnyIO](https://anyio.readthedocs.io/en/stable/) use рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЗ рдЕрдкрдиреЗ code рдореЗрдВ рдЕрдзрд┐рдХ advanced patterns рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИред + +рдФрд░ рднрд▓реЗ рд╣реА рдЖрдк FastAPI use рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЖрдк high compatibility рдФрд░ рдЗрд╕рдХреЗ benefits (рдЬреИрд╕реЗ *structured concurrency*) рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП [AnyIO](https://anyio.readthedocs.io/en/stable/) рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ async applications рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред + +рдореИрдВрдиреЗ AnyIO рдХреЗ рдКрдкрд░ рдПрдХ рдФрд░ library рдмрдирд╛рдИ, рдКрдкрд░ рдПрдХ thin layer рдХреЗ рд░реВрдк рдореЗрдВ, рддрд╛рдХрд┐ type annotations рдХреЛ рдереЛрдбрд╝рд╛ improve рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдмреЗрд╣рддрд░ **autocompletion**, **inline errors**, рдЖрджрд┐ рдорд┐рд▓ рд╕рдХреЗрдВред рдЗрд╕рдореЗрдВ рдПрдХ friendly introduction рдФрд░ tutorial рднреА рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХреЛ **рд╕рдордЭрдиреЗ** рдФрд░ **рдЕрдкрдирд╛ async code** рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗ: [Asyncer](https://asyncer.tiangolo.com/)ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ useful рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ **async code рдХреЛ regular** (blocking/synchronous) code рдХреЗ рд╕рд╛рде **combine** рдХрд░рдирд╛ рд╣реЛред + +### Asynchronous code рдХреЗ рдЕрдиреНрдп forms { #other-forms-of-asynchronous-code } + +`async` рдФрд░ `await` use рдХрд░рдиреЗ рдХреА рдпрд╣ style language рдореЗрдВ relatively new рд╣реИред + +рд▓реЗрдХрд┐рди рдпрд╣ asynchronous code рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред + +рдпрд╣реА same syntax (рдпрд╛ рд▓рдЧрднрдЧ identical) рд╣рд╛рд▓ рд╣реА рдореЗрдВ JavaScript рдХреЗ modern versions (Browser рдФрд░ NodeJS рдореЗрдВ) рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред + +рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ, asynchronous code handle рдХрд░рдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ complex рдФрд░ difficult рдерд╛ред + +Python рдХреЗ previous versions рдореЗрдВ, рдЖрдк threads рдпрд╛ [Gevent](https://www.gevent.org/) use рдХрд░ рд╕рдХрддреЗ рдереЗред рд▓реЗрдХрд┐рди code рд╕рдордЭрдиреЗ, debug рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЕрдзрд┐рдХ complex рд╣реЛрддрд╛ рд╣реИред + +NodeJS / Browser JavaScript рдХреЗ previous versions рдореЗрдВ, рдЖрдк "callbacks" use рдХрд░рддреЗред рдЬреЛ "callback hell" рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред + +## Coroutines { #coroutines } + +**Coroutine** рдмрд╕ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд fancy term рд╣реИ рдЬреЛ рдХрд┐рд╕реА `async def` function рджреНрд╡рд╛рд░рд╛ return рдХреА рдЬрд╛рддреА рд╣реИред Python рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ function рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╣ start рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдХрд┐рд╕реА point рдкрд░ end рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ internally pause тП╕ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрдм рднреА рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ `await` рд╣реЛред + +рд▓реЗрдХрд┐рди asynchronous code рдХреЛ `async` рдФрд░ `await` рдХреЗ рд╕рд╛рде use рдХрд░рдиреЗ рдХреА рдпрд╣ рд╕рд╛рд░реА functionality рдХрдИ рдмрд╛рд░ "coroutines" use рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ summarize рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ Go рдХреА main key feature, "Goroutines" рд╕реЗ comparable рд╣реИред + +## рдирд┐рд╖реНрдХрд░реНрд╖ { #conclusion } + +рдЖрдЗрдП рдКрдкрд░ рд╡рд╛рд▓рд╛ рд╡рд╣реА phrase рджреЗрдЦреЗрдВ: + +> Python рдХреЗ рдЖрдзреБрдирд┐рдХ versions **"asynchronous code"** рдХрд╛ support рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ **"coroutines"** рдирд╛рдо рдХреА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, **`async` рдФрд░ `await`** syntax рдХреЗ рд╕рд╛рдеред + +рдЕрдм рдпрд╣ рдЕрдзрд┐рдХ sense рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред тЬи + +рдпрд╣ рд╕рдм FastAPI (Starlette рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЛ power рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрддрдиреА impressive performance рджреЗрддрд╛ рд╣реИред + +## рдмрд╣реБрдд рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг { #very-technical-details } + +/// warning | рдЪреЗрддрд╛рд╡рдиреА + +рдЖрдк рд╢рд╛рдпрдж рдЗрд╕реЗ skip рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдпреЗ **FastAPI** рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╣реБрдд technical details рд╣реИрдВред + +рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рдлреА technical knowledge (coroutines, threads, blocking, рдЖрджрд┐) рд╣реИ рдФрд░ рдЖрдк curious рд╣реИрдВ рдХрд┐ FastAPI `async def` рдмрдирд╛рдо normal `def` рдХреЛ рдХреИрд╕реЗ handle рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВред + +/// + +### Path operation functions { #path-operation-functions } + +рдЬрдм рдЖрдк рдХрд┐рд╕реА *path operation function* рдХреЛ `async def` рдХреЗ рдмрдЬрд╛рдп normal `def` рдХреЗ рд╕рд╛рде declare рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ directly call рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ server рдХреЛ block рдХрд░реЗрдЧрд╛), рдПрдХ external threadpool рдореЗрдВ run рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлрд┐рд░ awaited рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рджреВрд╕рд░реЗ async framework рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдКрдкрд░ described рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдЖрдк tiny performance gain (рд▓рдЧрднрдЧ 100 nanoseconds) рдХреЗ рд▓рд┐рдП trivial compute-only *path operation functions* рдХреЛ plain `def` рдХреЗ рд╕рд╛рде define рдХрд░рдиреЗ рдХреЗ рдЖрджреА рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ **FastAPI** рдореЗрдВ effect рдмрд┐рд▓реНрдХреБрд▓ рдЙрд▓реНрдЯрд╛ рд╣реЛрдЧрд╛ред рдЗрди cases рдореЗрдВ, `async def` use рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ *path operation functions* рдРрд╕рд╛ code use рди рдХрд░реЗрдВ рдЬреЛ blocking I/O perform рдХрд░рддрд╛ рд╣реЛред + +рдлрд┐рд░ рднреА, рджреЛрдиреЛрдВ situations рдореЗрдВ, рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ **FastAPI** рдЖрдкрдХреЗ previous framework рд╕реЗ [рдлрд┐рд░ рднреА рддреЗрдЬрд╝ рд╣реЛрдЧрд╛](index.md#performance) (рдпрд╛ рдХрдо рд╕реЗ рдХрдо comparable рд╣реЛрдЧрд╛)ред + +### Dependencies { #dependencies } + +[Dependencies](tutorial/dependencies/index.md) рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ dependency `async def` рдХреЗ рдмрдЬрд╛рдп standard `def` function рд╣реИ, рддреЛ рдЙрд╕реЗ external threadpool рдореЗрдВ run рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред + +### Sub-dependencies { #sub-dependencies } + +рдЖрдкрдХреЗ рдкрд╛рд╕ multiple dependencies рдФрд░ [sub-dependencies](tutorial/dependencies/sub-dependencies.md) рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ require рдХрд░рддреА рд╣реИрдВ (function definitions рдХреЗ parameters рдХреЗ рд░реВрдк рдореЗрдВ), рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ `async def` рдХреЗ рд╕рд╛рде created рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХреБрдЫ normal `def` рдХреЗ рд╕рд╛рдеред рдпрд╣ рдлрд┐рд░ рднреА work рдХрд░реЗрдЧрд╛, рдФрд░ normal `def` рдХреЗ рд╕рд╛рде created ones рдХреЛ "awaited" рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп external thread (threadpool рд╕реЗ) рдкрд░ call рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред + +### рдЕрдиреНрдп utility functions { #other-utility-functions } + +рдХреЛрдИ рднреА рдЕрдиреНрдп utility function рдЬрд┐рд╕реЗ рдЖрдк directly call рдХрд░рддреЗ рд╣реИрдВ, normal `def` рдпрд╛ `async def` рдХреЗ рд╕рд╛рде created рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ FastAPI рдЖрдкрдХреЗ рдЙрд╕реЗ call рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ affect рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред + +рдпрд╣ рдЙрди functions рдХреЗ contrast рдореЗрдВ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ FastAPI рдЖрдкрдХреЗ рд▓рд┐рдП call рдХрд░рддрд╛ рд╣реИ: *path operation functions* рдФрд░ dependenciesред + +рдЕрдЧрд░ рдЖрдкрдХрд╛ utility function `def` рд╡рд╛рд▓рд╛ normal function рд╣реИ, рддреЛ рдЙрд╕реЗ directly call рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЬреИрд╕рд╛ рдЖрдк рдЕрдкрдиреЗ code рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ), threadpool рдореЗрдВ рдирд╣реАрдВ; рдЕрдЧрд░ function `async def` рдХреЗ рд╕рд╛рде created рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ code рдореЗрдВ рдЙрд╕реЗ call рдХрд░рддреЗ рд╕рдордп рдЙрд╕ function рдХреЛ `await` рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред + +--- + +рдлрд┐рд░ рд╕реЗ, рдпреЗ рдмрд╣реБрдд technical details рд╣реИрдВ рдЬреЛ рд╢рд╛рдпрдж useful рд╣реЛрдВрдЧреЗ рдЕрдЧрд░ рдЖрдк рдЗрдиреНрд╣реЗрдВ search рдХрд░рддреЗ рд╣реБрдП рдЖрдП рд╣реИрдВред + +рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдКрдкрд░ рдХреЗ section рдХреА guidelines рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ?ред diff --git a/docs/hi/docs/benchmarks.md b/docs/hi/docs/benchmarks.md new file mode 100644 index 000000000..11a22bcb8 --- /dev/null +++ b/docs/hi/docs/benchmarks.md @@ -0,0 +1,34 @@ +# Benchmarks { #benchmarks } + +рд╕реНрд╡рддрдВрддреНрд░ TechEmpower benchmarks рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ Uvicorn рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ **FastAPI** applications [рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рддреЗрдЬрд╝ Python frameworks рдореЗрдВ рд╕реЗ рдПрдХ](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7) рд╣реИрдВ, рдХреЗрд╡рд▓ Starlette рдФрд░ Uvicorn рд╕реНрд╡рдпрдВ рд╕реЗ рдиреАрдЪреЗ (рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рджреНрд╡рд╛рд░рд╛ internally рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред + +рд▓реЗрдХрд┐рди benchmarks рдФрд░ comparisons рджреЗрдЦрддреЗ рд╕рдордп рдЖрдкрдХреЛ рдирд┐рдореНрди рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред + +## Benchmarks рдФрд░ speed { #benchmarks-and-speed } + +рдЬрдм рдЖрдк benchmarks рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ tools рдХреЛ equivalent рдорд╛рдирдХрд░ compare рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЖрдо рдмрд╛рдд рд╣реИред + +рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Uvicorn, Starlette рдФрд░ FastAPI рдХреЛ рдПрдХ рд╕рд╛рде compare рд╣реЛрддреЗ рджреЗрдЦрдирд╛ (рдХрдИ рдЕрдиреНрдп tools рдХреЗ рд╕рд╛рде)ред + +Tool рдЬрд┐рддрдиреА рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЙрддрдиреА рд╣реА рдмреЗрд╣рддрд░ performance рдорд┐рд▓реЗрдЧреАред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ benchmarks, tool рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрддрд┐рд░рд┐рдХреНрдд features рдХреЛ test рдирд╣реАрдВ рдХрд░рддреЗред + +Hierarchy рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: + +* **Uvicorn**: рдПрдХ ASGI server + * **Starlette**: (Uvicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдПрдХ web microframework + * **FastAPI**: (Starlette рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) APIs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд features рд╡рд╛рд▓рд╛ рдПрдХ API microframework, рдЬрд┐рд╕рдореЗрдВ data validation рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред + +* **Uvicorn**: + * рдЗрд╕рдХреА performance рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ server рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ extra code рдирд╣реАрдВ рд╣реЛрддрд╛ред + * рдЖрдк рд╕реАрдзреЗ Uvicorn рдореЗрдВ application рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ code рдореЗрдВ рдХрдореЛрдмреЗрд╢, рдХрдо рд╕реЗ рдХрдо, Starlette (рдпрд╛ **FastAPI**) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд╛рд░рд╛ code рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЖрдкрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛, рддреЛ рдЖрдкрдХреЗ final application рдореЗрдВ framework рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ app code рддрдерд╛ bugs рдХреЛ рдХрдо рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рд╣реА overhead рд╣реЛрдЧрд╛ред + * рдпрджрд┐ рдЖрдк Uvicorn рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ Daphne, Hypercorn, uWSGI рдЖрджрд┐ рд╕реЗ рдХрд░реЗрдВред Application servers рд╕реЗред +* **Starlette**: + * Uvicorn рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА performance рдЕрдЧрд▓реА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Starlette рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП Uvicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрднрд╡рддрдГ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ code execute рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг Uvicorn рд╕реЗ "рдзреАрдорд╛" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред + * рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ simple web applications рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП tools рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ paths рдкрд░ рдЖрдзрд╛рд░рд┐рдд routing рдЖрджрд┐ред + * рдпрджрд┐ рдЖрдк Starlette рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ Sanic, Flask, Django рдЖрджрд┐ рд╕реЗ рдХрд░реЗрдВред Web frameworks (рдпрд╛ microframeworks) рд╕реЗред +* **FastAPI**: + * рдЬреИрд╕реЗ Starlette, Uvicorn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рд╕реЗ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рд╡реИрд╕реЗ рд╣реА **FastAPI**, Starlette рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕рд╕реЗ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред + * FastAPI, Starlette рдХреЗ рдКрдкрд░ рдФрд░ features рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ features рдЬрд┐рдирдХреА рдЖрдкрдХреЛ APIs рдмрдирд╛рддреЗ рд╕рдордп рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ data validation рдФрд░ serializationред рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЛ automatic documentation рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ (automatic documentation running applications рдореЗрдВ overhead рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рддреА, рдпрд╣ startup рдкрд░ generate рд╣реЛрддреА рд╣реИ)ред + * рдпрджрд┐ рдЖрдкрдиреЗ FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рд╕реАрдзреЗ Starlette (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп tool, рдЬреИрд╕реЗ Sanic, Flask, Responder рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рддреЛ рдЖрдкрдХреЛ рд╕рднреА data validation рдФрд░ serialization рд╕реНрд╡рдпрдВ implement рдХрд░рдиреЗ рдкрдбрд╝реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ final application рдореЗрдВ рдлрд┐рд░ рднреА рдЙрддрдирд╛ рд╣реА overhead рд╣реЛрдЧрд╛ рдЬрд┐рддрдирд╛ FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╣реЛрддрд╛ред рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ data validation рдФрд░ serialization applications рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП code рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред + * рдЗрд╕рд▓рд┐рдП, FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк development time, bugs рдФрд░ lines of code рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╡рд╣реА performance (рдпрд╛ рдмреЗрд╣рддрд░) рдорд┐рд▓реЗрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдкрд░ рдорд┐рд▓рддреА (рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЖрдкрдХреЛ рдпрд╣ рд╕рдм рдЕрдкрдиреЗ code рдореЗрдВ implement рдХрд░рдирд╛ рдкрдбрд╝рддрд╛)ред + * рдпрджрд┐ рдЖрдк FastAPI рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдРрд╕реЗ web application framework (рдпрд╛ tools рдХреЗ set) рд╕реЗ рдХрд░реЗрдВ рдЬреЛ data validation, serialization рдФрд░ documentation рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реЛ, рдЬреИрд╕реЗ Flask-apispec, NestJS, Molten рдЖрджрд┐ред рдРрд╕реЗ frameworks рдЬрд┐рдирдореЗрдВ integrated automatic data validation, serialization рдФрд░ documentation рд╣реЛред diff --git a/docs/hi/docs/editor-support.md b/docs/hi/docs/editor-support.md new file mode 100644 index 000000000..eee38f058 --- /dev/null +++ b/docs/hi/docs/editor-support.md @@ -0,0 +1,23 @@ +# Editor Support { #editor-support } + +рдЖрдзрд┐рдХрд╛рд░рд┐рдХ [FastAPI Extension](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) рдЖрдкрдХреЗ FastAPI development workflow рдХреЛ *path operation* discovery, navigation, рд╕рд╛рде рд╣реА FastAPI Cloud deployment рдФрд░ live log streaming рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред + +Extension рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, [GitHub repository](https://github.com/fastapi/fastapi-vscode) рдкрд░ README рджреЗрдЦреЗрдВред + +## Setup рдФрд░ Installation { #setup-and-installation } + +**FastAPI Extension** [VS Code](https://code.visualstudio.com/) рдФрд░ [Cursor](https://www.cursor.com/) рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕реЗ рд╣рд░ editor рдХреЗ Extensions panel рд╕реЗ рд╕реАрдзреЗ "FastAPI" рдЦреЛрдЬрдХрд░ рдФрд░ **FastAPI Labs** рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд extension рдЪреБрдирдХрд░ install рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ extension browser-based editors рдЬреИрд╕реЗ [vscode.dev](https://vscode.dev) рдФрд░ [github.dev](https://github.dev) рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред + +### Application Discovery { #application-discovery } + +Default рд░реВрдк рд╕реЗ, extension рдЖрдкрдХреЗ workspace рдореЗрдВ `FastAPI()` instantiate рдХрд░рдиреЗ рд╡рд╛рд▓реА files рдХреЛ scan рдХрд░рдХреЗ FastAPI applications рдХреЛ рдЕрдкрдиреЗ-рдЖрдк discover рдХрд░реЗрдЧрд╛ред рдпрджрд┐ auto-detection рдЖрдкрдХреЗ project structure рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдЖрдк `pyproject.toml` рдореЗрдВ `[tool.fastapi]` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ module notation (рдЬреИрд╕реЗ `myapp.main:app`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ `fastapi.entryPoint` VS Code setting рдореЗрдВ entrypoint specify рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +## Features { #features } + +- **Path Operation Explorer** - рдЖрдкрдХреЗ application рдореЗрдВ рд╕рднреА *path operations* рдХрд╛ sidebar tree viewред рдХрд┐рд╕реА рднреА route рдпрд╛ router definition рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП click рдХрд░реЗрдВред +- **Route Search** - Ctrl + Shift + E (macOS рдкрд░: Cmd + Shift + E) рдХреЗ рд╕рд╛рде path, method, рдпрд╛ name рдХреЗ рдЖрдзрд╛рд░ рдкрд░ search рдХрд░реЗрдВред +- **CodeLens Navigation** - test client calls (рдЬреИрд╕реЗ `client.get('/items')`) рдХреЗ рдКрдкрд░ clickable links, рдЬреЛ tests рдФрд░ implementation рдХреЗ рдмреАрдЪ quick navigation рдХреЗ рд▓рд┐рдП matching *path operation* рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред +- **Deploy to FastAPI Cloud** - рдЖрдкрдХреА app рдХреЛ [FastAPI Cloud](https://fastapicloud.com/) рдкрд░ one-click deploymentред +- **Stream Application Logs** - level filtering рдФрд░ text search рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ FastAPI Cloud-deployed application рд╕реЗ real-time log streamingред + +рдпрджрд┐ рдЖрдк extension рдХреЗ features рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Command Palette (Ctrl + Shift + P рдпрд╛ macOS рдкрд░: Cmd + Shift + P) рдЦреЛрд▓рдХрд░ рдФрд░ "Welcome: Open walkthrough..." рдЪреБрдирдХрд░, рдлрд┐рд░ "Get started with FastAPI" walkthrough рдЪреБрдирдХрд░ extension walkthrough рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред diff --git a/docs/hi/docs/fastapi-cli.md b/docs/hi/docs/fastapi-cli.md new file mode 100644 index 000000000..87a1a983f --- /dev/null +++ b/docs/hi/docs/fastapi-cli.md @@ -0,0 +1,134 @@ +# FastAPI CLI { #fastapi-cli } + +**FastAPI CLI** рдПрдХ command line рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреЗ FastAPI рдРрдк рдХреЛ serve рдХрд░рдиреЗ, рдЕрдкрдиреЗ FastAPI project рдХреЛ manage рдХрд░рдиреЗ, рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдЬрдм рдЖрдк FastAPI install рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ `pip install "fastapi[standard]"` рдХреЗ рд╕рд╛рде), рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ command line рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк terminal рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред + +development рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ FastAPI рдРрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк `fastapi dev` command рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +
+ +```console +$ fastapi dev + + FastAPI Starting development server ЁЯЪА + + Searching for package file structure from directories with + __init__.py files + Importing from /home/user/code/awesomeapp + + module ЁЯРН main.py + + code Importing the FastAPI app object from the module with the + following code: + + from main import app + + app Using import string: main:app + + server Server started at http://127.0.0.1:8000 + server Documentation at http://127.0.0.1:8000/docs + + tip Running in development mode, for production use: + fastapi run + + Logs: + + INFO Will watch for changes in these directories: + ['/home/user/code/awesomeapp'] + INFO Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to + quit) + INFO Started reloader process [383138] using WatchFiles + INFO Started server process [383153] + INFO Waiting for application startup. + INFO Application startup complete. +``` + +
+ +/// tip | рд╕реБрдЭрд╛рд╡ + +production рдХреЗ рд▓рд┐рдП рдЖрдк `fastapi dev` рдХреА рдЬрдЧрд╣ `fastapi run` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред ЁЯЪА + +/// + +рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, **FastAPI CLI** [Uvicorn](https://www.uvicorn.dev) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ high-performance, production-ready, ASGI server рд╣реИред ЁЯШО + +`fastapi` CLI рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП FastAPI рдРрдк рдХреЛ рдЕрдкрдиреЗ-рдЖрдк detect рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ `main.py` file рдореЗрдВ `app` рдирд╛рдо рдХрд╛ object рд╣реИ (рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп variants рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ)ред + +рд▓реЗрдХрд┐рди рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдРрдк рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +## рдРрдк `entrypoint` рдХреЛ `pyproject.toml` рдореЗрдВ configure рдХрд░реЗрдВ { #configure-the-app-entrypoint-in-pyproject-toml } + +рдЖрдк `pyproject.toml` file рдореЗрдВ рдпрд╣ configure рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдРрдк рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ, рдЬреИрд╕реЗ: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +рд╡рд╣ `entrypoint` `fastapi` command рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЙрд╕реЗ рдРрдк рдХреЛ рдЗрд╕ рддрд░рд╣ import рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: + +```python +from main import app +``` + +рдЕрдЧрд░ рдЖрдкрдХрд╛ code рдЗрд╕ рддрд░рд╣ structured рдерд╛: + +``` +. +тФЬтФАтФА backend +тФВ┬а┬а тФЬтФАтФА main.py +тФВ┬а┬а тФЬтФАтФА __init__.py +``` + +рддреЛ рдЖрдк `entrypoint` рдХреЛ рдЗрд╕ рддрд░рд╣ set рдХрд░реЗрдВрдЧреЗ: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +рдЬреЛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛: + +```python +from backend.main import app +``` + +### path рдХреЗ рд╕рд╛рде рдпрд╛ `--entrypoint` CLI option рдХреЗ рд╕рд╛рде `fastapi dev` { #fastapi-dev-with-path-or-with-entrypoint-cli-option } + +рдЖрдк `fastapi dev` command рдХреЛ file path рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ FastAPI app object рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓реЗрдЧрд╛: + +```console +$ fastapi dev main.py +``` + +рдпрд╛, рдЖрдк `fastapi dev` command рдХреЛ `--entrypoint` option рднреА pass рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +```console +$ fastapi dev --entrypoint main:app +``` + +рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ `fastapi` command call рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА path\entrypoint pass рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред + +рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрдиреНрдп tools рдЗрд╕реЗ рдвреВрдБрдврдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП [VS Code рдПрдХреНрд╕рдЯреЗрдВрд╢рди](editor-support.md) рдпрд╛ [FastAPI Cloud](https://fastapicloud.com), рдЗрд╕рд▓рд┐рдП `pyproject.toml` рдореЗрдВ `entrypoint` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред + +## `fastapi dev` { #fastapi-dev } + +`fastapi dev` рдЪрд▓рд╛рдиреЗ рд╕реЗ development mode рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред + +Default рд░реВрдк рд╕реЗ, **auto-reload** enabled рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ code рдореЗрдВ changes рдХрд░рдиреЗ рдкрд░ server рдХреЛ рдЕрдкрдиреЗ-рдЖрдк reload рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ resource-intensive рд╣реИ рдФрд░ disabled рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо stable рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ development рдХреЗ рд▓рд┐рдП рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ IP address `127.0.0.1` рдкрд░ рднреА listen рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреА machine рдХрд╛ рдЦреБрдж рд╕реЗ рд╣реА communicate рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ IP рд╣реИ (`localhost`)ред + +## `fastapi run` { #fastapi-run } + +`fastapi run` execute рдХрд░рдиреЗ рд╕реЗ FastAPI production mode рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред + +Default рд░реВрдк рд╕реЗ, **auto-reload** disabled рд╣реЛрддрд╛ рд╣реИред рдпрд╣ IP address `0.0.0.0` рдкрд░ рднреА listen рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╕рднреА available IP addresses рд╣реИ, рдЗрд╕ рддрд░рд╣ рдпрд╣ рдЙрд╕ machine рд╕реЗ communicate рдХрд░ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП publicly accessible рд╣реЛрдЧрд╛ред рдЖрдо рддреМрд░ рдкрд░ рдЖрдк production рдореЗрдВ рдЗрд╕реЗ рдЗрд╕реА рддрд░рд╣ рдЪрд▓рд╛рдПрдБрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ container рдореЗрдВред + +рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдКрдкрд░ рд╕реЗ HTTPS handle рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ "termination proxy" рд╣реЛрдЧрд╛ (рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ application рдХреИрд╕реЗ deploy рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХрд╛ provider рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦреБрдж set up рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛ рд╕рдХрддреА рд╣реИред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ [deployment documentation](deployment/index.md) рдореЗрдВ рдФрд░ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред + +/// diff --git a/docs/hi/docs/features.md b/docs/hi/docs/features.md new file mode 100644 index 000000000..a3f52427d --- /dev/null +++ b/docs/hi/docs/features.md @@ -0,0 +1,201 @@ +# рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ { #features } + +## FastAPI рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ { #fastapi-features } + +**FastAPI** рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрддрд╛ рд╣реИ: + +### рдЦреБрд▓реЗ рдорд╛рдирдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд { #based-on-open-standards } + +* API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification), рдЬрд┐рд╕рдореЗрдВ path operations, parameters, request bodies, security, рдЖрджрд┐ рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред +* [**JSON Schema**](https://json-schema.org/) рдХреЗ рд╕рд╛рде automatic data model documentation (рдХреНрдпреЛрдВрдХрд┐ OpenAPI рд╕реНрд╡рдпрдВ JSON Schema рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред +* рдЗрди рдорд╛рдирдХреЛрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдПрдХ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рджред рдКрдкрд░ рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдкрд░рдд рдХреА рддрд░рд╣ рдирд╣реАрдВред +* рдпрд╣ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ automatic **client code generation** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред + +### Automatic docs { #automatic-docs } + +Interactive API documentation рдФрд░ exploration web user interfacesред рдХреНрдпреЛрдВрдХрд┐ framework OpenAPI рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ 2 default рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред + +* [**Swagger UI**](https://github.com/swagger-api/swagger-ui), interactive exploration рдХреЗ рд╕рд╛рде, рдЕрдкрдиреЗ API рдХреЛ рд╕реАрдзреЗ browser рд╕реЗ call рдФрд░ test рдХрд░реЗрдВред + +![Swagger UI рдЗрдВрдЯрд░реИрдХреНрд╢рди](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +* [**ReDoc**](https://github.com/Rebilly/ReDoc) рдХреЗ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ API documentationред + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### рд╕рд┐рд░реНрдлрд╝ рдЖрдзреБрдирд┐рдХ Python { #just-modern-python } + +рдпрд╣ рд╕рдм standard **Python type** declarations рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (Pydantic рдХреА рдмрджреМрд▓рдд)ред рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдпрд╛ syntax рдирд╣реАрдВред рд╕рд┐рд░реНрдлрд╝ standard modern Pythonред + +рдЕрдЧрд░ рдЖрдкрдХреЛ Python types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ 2 рдорд┐рдирдЯ рдХрд╛ рдЫреЛрдЯрд╛ refresher рдЪрд╛рд╣рд┐рдП (рднрд▓реЗ рд╣реА рдЖрдк FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рддреЗ рд╣реЛрдВ), рддреЛ рдЫреЛрдЯрд╛ tutorial рджреЗрдЦреЗрдВ: [Python Types](python-types.md)ред + +рдЖрдк types рдХреЗ рд╕рд╛рде standard Python рд▓рд┐рдЦрддреЗ рд╣реИрдВ: + +```Python +from datetime import date + +from pydantic import BaseModel + +# рдХрд┐рд╕реА variable рдХреЛ str рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ +# рдФрд░ function рдХреЗ рдЕрдВрджрд░ editor support рдкрд╛рдПрдБ +def main(user_id: str): + return user_id + + +# рдПрдХ Pydantic model +class User(BaseModel): + id: int + name: str + joined: date +``` + +рдлрд┐рд░ рдЙрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: + +```Python +my_user: User = User(id=3, name="John Doe", joined="2018-07-19") + +second_user_data = { + "id": 4, + "name": "Mary", + "joined": "2018-11-30", +} + +my_second_user: User = User(**second_user_data) +``` + +/// note | рдиреЛрдЯ + +`**second_user_data` рдХрд╛ рдорддрд▓рдм рд╣реИ: + +`second_user_data` dict рдХреА keys рдФрд░ values рдХреЛ рд╕реАрдзреЗ key-value arguments рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: `User(id=4, name="Mary", joined="2018-11-30")` + +/// + +### Editor support { #editor-support } + +рдкреВрд░реЗ framework рдХреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рд╕рд╣рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, development рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рднреА рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдХрдИ editors рдкрд░ test рдХрд┐рдпрд╛ рдЧрдпрд╛, рддрд╛рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ development experience рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред + +Python developer surveys рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ [рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ "autocompletion" рд╣реИ](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)ред + +рдкреВрд░рд╛ **FastAPI** framework рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Autocompletion рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред + +рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА docs рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред + +рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ editor рдЖрдкрдХреА рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ: + +* [Visual Studio Code](https://code.visualstudio.com/) рдореЗрдВ: + +![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) + +* [PyCharm](https://www.jetbrains.com/pycharm/) рдореЗрдВ: + +![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png) + +рдЖрдкрдХреЛ рдРрд╕реЗ code рдореЗрдВ completion рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рдЕрд╕рдВрднрд╡ рднреА рдорд╛рди рд╕рдХрддреЗ рдереЗред рдЬреИрд╕реЗ, рдХрд┐рд╕реА request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ JSON body (рдЬреЛ nested рднреА рд╣реЛ рд╕рдХрддрд╛ рдерд╛) рдХреЗ рдЕрдВрджрд░ `price` keyред + +рдЕрдм рдЧрд▓рдд key names рдЯрд╛рдЗрдк рдХрд░рдиреЗ, docs рдХреЗ рдмреАрдЪ рдЖрдЧреЗ-рдкреАрдЫреЗ рдЬрд╛рдиреЗ, рдпрд╛ рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░-рдиреАрдЪреЗ scroll рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдХрд┐ рдЖрдкрдиреЗ рдЖрдЦрд┐рд░ `username` рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдпрд╛ `user_name`ред + +### рд╕рдВрдХреНрд╖рд┐рдкреНрдд { #short } + +рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рдордЭрджрд╛рд░ **defaults** рд╣реИрдВ, рдФрд░ рд╣рд░ рдЬрдЧрд╣ optional configurations рд╣реИрдВред рд╕рднреА parameters рдХреЛ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА API define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fine-tune рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред + +рд▓реЗрдХрд┐рди default рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ **"рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"**ред + +### Validation { #validation } + +* рдЕрдзрд┐рдХрд╛рдВрд╢ (рдпрд╛ рд╕рднреА?) Python **data types** рдХреЗ рд▓рд┐рдП validation, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: + * JSON objects (`dict`)ред + * JSON array (`list`) рдЬреЛ item types define рдХрд░рддрд╛ рд╣реИред + * String (`str`) fields, рдЬрд┐рдирдореЗрдВ min рдФрд░ max lengths define рд╣реЛрддреА рд╣реИрдВред + * Numbers (`int`, `float`) рдЬрд┐рдирдореЗрдВ min рдФрд░ max values, рдЖрджрд┐ред + +* рдЕрдзрд┐рдХ рдЕрд╕рд╛рдорд╛рдиреНрдп types рдХреЗ рд▓рд┐рдП validation, рдЬреИрд╕реЗ: + * URLред + * Emailред + * UUIDред + * ...рдФрд░ рдЕрдиреНрдпред + +рд╕рд╛рд░реА validation well-established рдФрд░ robust **Pydantic** рджреНрд╡рд╛рд░рд╛ handle рдХреА рдЬрд╛рддреА рд╣реИред + +### Security рдФрд░ authentication { #security-and-authentication } + +Security рдФрд░ authentication integrated рд╣реИрдВред Databases рдпрд╛ data models рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА compromise рдХреЗ рдмрд┐рдирд╛ред + +OpenAPI рдореЗрдВ define рдХреА рдЧрдИ рд╕рднреА security schemes, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: + +* HTTP Basicред +* **OAuth2** (**JWT tokens** рдХреЗ рд╕рд╛рде рднреА)ред [OAuth2 with JWT](tutorial/security/oauth2-jwt.md) рдкрд░ tutorial рджреЗрдЦреЗрдВред +* API keys: + * Headers рдореЗрдВред + * Query parameters рдореЗрдВред + * Cookies рдореЗрдВ, рдЖрджрд┐ред + +рд╕рд╛рде рд╣реА Starlette рдХреА рд╕рднреА security features (рдЬрд┐рд╕рдореЗрдВ **session cookies** рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред + +рд╕рдм reusable tools рдФрд░ components рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЗ systems, data stores, relational рдФрд░ NoSQL databases, рдЖрджрд┐ рдХреЗ рд╕рд╛рде integrate рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред + +### Dependency Injection { #dependency-injection } + +FastAPI рдореЗрдВ рдПрдХ рдмреЗрд╣рдж рдЖрд╕рд╛рди, рд▓реЗрдХрд┐рди рдмреЗрд╣рдж рд╢рдХреНрддрд┐рд╢рд╛рд▓реА Dependency Injection system рд╢рд╛рдорд┐рд▓ рд╣реИред + +* Dependencies рдХреА рднреА dependencies рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ dependencies рдХреА hierarchy рдпрд╛ **"graph"** рдмрдирддрд╛ рд╣реИред +* рд╕рдм рдХреБрдЫ framework рджреНрд╡рд╛рд░рд╛ **automatically handled** рд╣реЛрддрд╛ рд╣реИред +* рд╕рднреА dependencies requests рд╕реЗ data рдорд╛рдВрдЧ рд╕рдХрддреА рд╣реИрдВ рдФрд░ **path operation** constraints рддрдерд╛ automatic documentation рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреА рд╣реИрдВред +* Dependencies рдореЗрдВ define рдХрд┐рдП рдЧрдП *path operation* parameters рдХреЗ рд▓рд┐рдП рднреА **automatic validation**ред +* рдЬрдЯрд┐рд▓ user authentication systems, **database connections**, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП supportред +* Databases, frontends, рдЖрджрд┐ рдХреЗ рд╕рд╛рде **рдХреЛрдИ compromise рдирд╣реАрдВ**ред рд▓реЗрдХрд┐рди рдЙрди рд╕рднреА рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди integrationред + +### рдЕрд╕реАрдорд┐рдд "plug-ins" { #unlimited-plug-ins } + +рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХрд╛ code import рдХрд░реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред + +рдХрд┐рд╕реА рднреА integration рдХреЛ (dependencies рдХреЗ рд╕рд╛рде) рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЗрддрдирд╛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА application рдХреЗ рд▓рд┐рдП рдЙрд╕реА structure рдФрд░ syntax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2 lines of code рдореЗрдВ рдПрдХ "plug-in" рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ *path operations* рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред + +### Tested { #tested } + +* 100% test coverageред +* 100% type annotated code baseред +* Production applications рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред + +## Starlette рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ { #starlette-features } + +**FastAPI** [**Starlette**](https://www.starlette.dev/) рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ compatible рд╣реИ (рдФрд░ рдЙрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд Starlette code рд╣реИ, рд╡рд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред + +`FastAPI` рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ `Starlette` рдХрд╛ рдПрдХ sub-class рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ Starlette рдЬрд╛рдирддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ functionality рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧреАред + +**FastAPI** рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ **Starlette** рдХреА рд╕рднреА features рдорд┐рд▓рддреА рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ FastAPI рдореВрд▓рддрдГ steroids рдкрд░ Starlette рд╣реИ): + +* рд╕рдЪрдореБрдЪ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА performanceред рдпрд╣ [рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рддреЗрдЬрд╝ Python frameworks рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, **NodeJS** рдФрд░ **Go** рдХреЗ рдмрд░рд╛рдмрд░](https://github.com/encode/starlette#performance)ред +* **WebSocket** supportред +* In-process background tasksред +* Startup рдФрд░ shutdown eventsред +* HTTPX рдкрд░ рдмрдирд╛ test clientред +* **CORS**, GZip, Static Files, Streaming responsesред +* **Session рдФрд░ Cookie** supportред +* 100% test coverageред +* 100% type annotated codebaseред + +## Pydantic рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ { #pydantic-features } + +**FastAPI** [**Pydantic**](https://docs.pydantic.dev/) рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ compatible рд╣реИ (рдФрд░ рдЙрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд Pydantic code рд╣реИ, рд╡рд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред + +рдЗрд╕рдореЗрдВ Pydantic рдкрд░ рдЖрдзрд╛рд░рд┐рдд external libraries рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ databases рдХреЗ рд▓рд┐рдП ORMs рдФрд░ ODMsред + +рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк request рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЙрд╕реА object рдХреЛ **рд╕реАрдзреЗ database рдореЗрдВ** рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ automatically validated рд╣реЛрддрд╛ рд╣реИред + +рдЙрд╕реА рддрд░рд╣ рдЙрд▓реНрдЯрд╛ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк database рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ object рдХреЛ **рд╕реАрдзреЗ client рдХреЛ** рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +**FastAPI** рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ **Pydantic** рдХреА рд╕рднреА features рдорд┐рд▓рддреА рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ FastAPI рд╕рднреА data handling рдХреЗ рд▓рд┐рдП Pydantic рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ): + +* **рдХреЛрдИ brainfuck рдирд╣реАрдВ**: + * рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирдИ schema definition micro-language рдирд╣реАрдВред + * рдЕрдЧрд░ рдЖрдк Python types рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Pydantic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред +* рдЖрдкрдХреЗ **IDE/linter/brain** рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: + * рдХреНрдпреЛрдВрдХрд┐ pydantic data structures рдХреЗрд╡рд▓ рдЙрди classes рдХреЗ instances рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк define рдХрд░рддреЗ рд╣реИрдВ; auto-completion, linting, mypy рдФрд░ рдЖрдкрдХреА intuition, рд╕рднреА рдЖрдкрдХреЗ validated data рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред +* **Complex structures** validate рдХрд░реЗрдВ: + * Hierarchical Pydantic models, Python `typing` рдХреЗ `List` рдФрд░ `Dict`, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧред + * рдФрд░ validators complex data schemas рдХреЛ JSON Schema рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ define, check рдФрд░ document рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред + * рдЖрдкрдХреЗ рдкрд╛рд╕ deeply **nested JSON** objects рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рднреА validated рдФрд░ annotated рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред +* **Extensible**: + * Pydantic custom data types рдХреЛ define рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЖрдк validator decorator рд╕реЗ decorated model рдкрд░ methods рдХреЗ рд╕рд╛рде validation extend рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +* 100% test coverageред diff --git a/docs/hi/docs/history-design-future.md b/docs/hi/docs/history-design-future.md new file mode 100644 index 000000000..a3b97d154 --- /dev/null +++ b/docs/hi/docs/history-design-future.md @@ -0,0 +1,79 @@ +# рдЗрддрд┐рд╣рд╛рд╕, рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рднрд╡рд┐рд╖реНрдп { #history-design-and-future } + +рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, [рдПрдХ **FastAPI** user рдиреЗ рдкреВрдЫрд╛](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920): + +> рдЗрд╕ project рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣реА рд╣рдлреНрддреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реАрдзреЗ рд╢рд╛рдирджрд╛рд░ рдмрди рдЧрдпрд╛ [...] + +рдпрд╣рд╛рдБ рдЙрд╕ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред + +## рд╡рд┐рдХрд▓реНрдк { #alternatives } + +рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЬрдЯрд┐рд▓ requirements рд╡рд╛рд▓реА APIs рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ (Machine Learning, distributed systems, asynchronous jobs, NoSQL databases, рдЖрджрд┐), рдФрд░ developers рдХреА рдХрдИ teams рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдБред + +рдЗрд╕рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдБрдЪ, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред + +**FastAPI** рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛рдлреА рд╣рдж рддрдХ рдЗрд╕рдХреЗ рдкреВрд░реНрд╡рд╡рд░реНрддрд┐рдпреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред + +рдЬреИрд╕рд╛ рдХрд┐ [рд╡рд┐рдХрд▓реНрдк](alternatives.md) section рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: + +
+ +рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рдо рдХреЗ рдмрд┐рдирд╛ **FastAPI** рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ред + +рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ tools рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА рд╣реИред + +рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдХ рдирдпрд╛ framework рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд░рд╣рд╛ред рдкрд╣рд▓реЗ рдореИрдВрдиреЗ **FastAPI** рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╕рднреА features рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ frameworks, plug-ins рдФрд░ tools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред + +рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░, рдРрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛ рдЬреЛ рдпреЗ рд╕рднреА features рдкреНрд░рджрд╛рди рдХрд░реЗ, рдкрд┐рдЫрд▓реЗ tools рд╕реЗ рд╕рд░реНрд╡реЛрддреНрддрдо ideas рд▓реЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝реЗ, рд╕рд╛рде рд╣реА рдРрд╕реА language features рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ рдЬреЛ рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз рднреА рдирд╣реАрдВ рдереАрдВ (Python 3.6+ type hints)ред + +
+ +## рдЬрд╛рдБрдЪ-рдкрдбрд╝рддрд╛рд▓ { #investigation } + +рд╕рднреА рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭреЗ рдЙрди рд╕рднреА рд╕реЗ рд╕реАрдЦрдиреЗ, ideas рд▓реЗрдиреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рддрдерд╛ рдЬрд┐рди developer teams рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓рд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЗрд╕реЗ standard Python type hints рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред + +рд╕рд╛рде рд╣реА, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж standards рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред + +рдЗрд╕рд▓рд┐рдП, **FastAPI** рдХреА coding рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА, рдореИрдВрдиреЗ OpenAPI, JSON Schema, OAuth2 рдЖрджрд┐ рдХреЗ specs рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдорд╣реАрдиреЗ рдмрд┐рддрд╛рдПред рдЙрдирдХреЗ рд╕рдВрдмрдВрдз, overlap рдФрд░ differences рдХреЛ рд╕рдордЭрд╛ред + +## рдбрд┐рдЬрд╝рд╛рдЗрди { #design } + +рдлрд┐рд░ рдореИрдВрдиреЗ рдЙрд╕ developer "API" рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛рдпрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХ user рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ (FastAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ developer рдХреЗ рд░реВрдк рдореЗрдВ)ред + +рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп Python editors рдореЗрдВ рдХрдИ ideas рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛: PyCharm, VS Code, Jedi рдЖрдзрд╛рд░рд┐рдд editorsред + +рдкрд┐рдЫрд▓реЗ [Python Developer Survey](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools) рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд▓рдЧрднрдЧ 80% users рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ **FastAPI** рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди editors рдХреЗ рд╕рд╛рде test рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ 80% Python developers рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЪреВрдБрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп editors рднреА рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рднреА рд▓рд╛рдн рд▓рдЧрднрдЧ рд╕рднреА editors рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдПред + +рдЗрд╕ рддрд░рд╣ рдореИрдВ code duplication рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рдХрд░рдиреЗ, рд╣рд░ рдЬрдЧрд╣ completion рдкрд╛рдиреЗ, type рдФрд░ error checks рдЖрджрд┐ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рдЦреЛрдЬ рд╕рдХрд╛ред + +рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рд╕рднреА developers рдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо development experience рдорд┐рд▓ рд╕рдХреЗред + +## Requirements { #requirements } + +рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рд▓рд┐рдП [**Pydantic**](https://docs.pydantic.dev/) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред + +рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдЗрд╕реЗ JSON Schema рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ compliant рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, constraint declarations рдХреЛ define рдХрд░рдиреЗ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдХрдИ editors рдореЗрдВ tests рдХреЗ рдЖрдзрд╛рд░ рдкрд░ editor support (type checks, autocompletion) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред + +Development рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ [**Starlette**](https://www.starlette.dev/) рдореЗрдВ рднреА рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛, рдЬреЛ рджреВрд╕рд░реА рдореБрдЦреНрдп requirement рдереАред + +## Development { #development } + +рдЬрдм рддрдХ рдореИрдВрдиреЗ **FastAPI** рдЦреБрдж рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддрдм рддрдХ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдереЗ, design рддрдп рд╣реЛ рдЪреБрдХрд╛ рдерд╛, requirements рдФрд░ tools рддреИрдпрд╛рд░ рдереЗ, рдФрд░ standards рддрдерд╛ specifications рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рд╕реНрдкрд╖реНрдЯ рдФрд░ рддрд╛рдЬрд╝рд╛ рдерд╛ред + +## рднрд╡рд┐рд╖реНрдп { #future } + +рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ **FastAPI** рдЕрдкрдиреЗ ideas рдХреЗ рд╕рд╛рде рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред + +рдЗрд╕реЗ рдХрдИ use cases рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪреБрдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред + +рдХрдИ developers рдФрд░ teams рдЕрдкрдиреЗ projects рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА **FastAPI** рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ (рдореЗрд░реЗ рдФрд░ рдореЗрд░реА team рд╕рд╣рд┐рдд)ред + +рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЕрднреА рдХрдИ improvements рдФрд░ features рдЖрдиреЗ рдмрд╛рдХреА рд╣реИрдВред + +**FastAPI** рдХрд╛ рднрд╡рд┐рд╖реНрдп рдмрд╣реБрдд рдЙрдЬреНрдЬреНрд╡рд▓ рд╣реИред + +рдФрд░ [рдЖрдкрдХреА рдорджрдж](help-fastapi.md) рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред diff --git a/docs/hi/docs/project-generation.md b/docs/hi/docs/project-generation.md new file mode 100644 index 000000000..747e4da53 --- /dev/null +++ b/docs/hi/docs/project-generation.md @@ -0,0 +1,28 @@ +# Full Stack FastAPI Template { #full-stack-fastapi-template } + +Templates рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ setup рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ flexible рдФрд░ customizable рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ project рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ modify рдФрд░ adapt рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдПрдХ рдмреЗрд╣рддрд░реАрди starting point рдмрди рдЬрд╛рддреЗ рд╣реИрдВред ЁЯПБ + +рдЖрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ template рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛ initial setup, security, database рдФрд░ рдХреБрдЫ API endpoints рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВред + +GitHub Repository: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) + +## Full Stack FastAPI Template - Technology Stack рдФрд░ Features { #full-stack-fastapi-template-technology-stack-and-features } + +- тЪб Python backend API рдХреЗ рд▓рд┐рдП [**FastAPI**](https://fastapi.tiangolo.com/hi)ред + - ЁЯз░ Python SQL database interactions (ORM) рдХреЗ рд▓рд┐рдП [SQLModel](https://sqlmodel.tiangolo.com)ред + - ЁЯФН data validation рдФрд░ settings management рдХреЗ рд▓рд┐рдП [Pydantic](https://docs.pydantic.dev), рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ FastAPI рдХрд░рддрд╛ рд╣реИред + - ЁЯТ╛ SQL database рдХреЗ рд░реВрдк рдореЗрдВ [PostgreSQL](https://www.postgresql.org)ред +- ЁЯЪА frontend рдХреЗ рд▓рд┐рдП [React](https://react.dev)ред + - ЁЯТГ TypeScript, hooks, Vite, рдФрд░ modern frontend stack рдХреЗ рдЕрдиреНрдп parts рдХрд╛ рдЙрдкрдпреЛрдЧред + - ЁЯОи frontend components рдХреЗ рд▓рд┐рдП [Tailwind CSS](https://tailwindcss.com) рдФрд░ [shadcn/ui](https://ui.shadcn.com)ред + - ЁЯдЦ рдПрдХ automatically generated frontend clientред + - ЁЯзк End-to-End testing рдХреЗ рд▓рд┐рдП [Playwright](https://playwright.dev)ред + - ЁЯжЗ Dark mode supportред +- ЁЯРЛ development рдФрд░ production рдХреЗ рд▓рд┐рдП [Docker Compose](https://www.docker.com)ред +- ЁЯФТ default рд░реВрдк рд╕реЗ secure password hashingред +- ЁЯФС JWT (JSON Web Token) authenticationред +- ЁЯУл Email рдЖрдзрд╛рд░рд┐рдд password recoveryред +- тЬЕ [Pytest](https://pytest.org) рдХреЗ рд╕рд╛рде testsред +- ЁЯУЮ reverse proxy / load balancer рдХреЗ рд░реВрдк рдореЗрдВ [Traefik](https://traefik.io)ред +- ЁЯЪв Docker Compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ deployment instructions, рдЬрд┐рд╕рдореЗрдВ automatic HTTPS certificates handle рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП frontend Traefik proxy setup рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред +- ЁЯПн GitHub Actions рдкрд░ рдЖрдзрд╛рд░рд┐рдд CI (continuous integration) рдФрд░ CD (continuous deployment)ред diff --git a/docs/hi/docs/python-types.md b/docs/hi/docs/python-types.md new file mode 100644 index 000000000..86522e18e --- /dev/null +++ b/docs/hi/docs/python-types.md @@ -0,0 +1,348 @@ +# Python Types рдкрд░рд┐рдЪрдп { #python-types-intro } + +Python рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ "type hints" (рдЬрд┐рдиреНрд╣реЗрдВ "type annotations" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред + +рдпреЗ **"type hints"** рдпрд╛ annotations рдПрдХ рд╡рд┐рд╢реЗрд╖ syntax рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА variable рдХрд╛ type рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред + +рдЕрдкрдиреЗ variables рдХреЗ рд▓рд┐рдП types рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ, editors рдФрд░ tools рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ support рджреЗ рд╕рдХрддреЗ рд╣реИрдВред + +рдпрд╣ Python type hints рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╕ рдПрдХ **рддреНрд╡рд░рд┐рдд tutorial / refresher** рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЙрддрдирд╛ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рддрдирд╛ рдЙрдиреНрд╣реЗрдВ **FastAPI** рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ... рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИред + +**FastAPI** рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдиреНрд╣реАрдВ type hints рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдпреЗ рдЗрд╕реЗ рдХрдИ рдлрд╛рдпрджреЗ рдФрд░ рд▓рд╛рдн рджреЗрддреЗ рд╣реИрдВред + +рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрднреА **FastAPI** рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рднреА рдХрд░рддреЗ, рддрдм рднреА рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реАрдЦрдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд▓рд╛рдн рд╣реЛрдЧрд╛ред + +/// note | рдиреЛрдЯ + +рдЕрдЧрд░ рдЖрдк Python expert рд╣реИрдВ, рдФрд░ type hints рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ chapter рдкрд░ рдЬрд╛рдПрдБред + +/// + +## рдкреНрд░реЗрд░рдгрд╛ { #motivation } + +рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: + +{* ../../docs_src/python_types/tutorial001_py310.py *} + +рдЗрд╕ program рдХреЛ call рдХрд░рдиреЗ рдкрд░ output рдЖрддрд╛ рд╣реИ: + +``` +John Doe +``` + +Function рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ: + +* рдПрдХ `first_name` рдФрд░ `last_name` рд▓реЗрддрд╛ рд╣реИред +* рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛ `title()` рдХреЗ рд╕рд╛рде upper case рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред +* рдЙрдиреНрд╣реЗрдВ рдмреАрдЪ рдореЗрдВ рдПрдХ space рдХреЗ рд╕рд╛рде Concatenate рдХрд░рддрд╛ рд╣реИред + +{* ../../docs_src/python_types/tutorial001_py310.py hl[2] *} + +### рдЗрд╕реЗ edit рдХрд░реЗрдВ { #edit-it } + +рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╕рд░рд▓ program рд╣реИред + +рд▓реЗрдХрд┐рди рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ scratch рд╕реЗ рд▓рд┐рдЦ рд░рд╣реЗ рдереЗред + +рдХрд┐рд╕реА point рдкрд░ рдЖрдк function define рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ parameters рддреИрдпрд╛рд░ рд╣реИрдВ... + +рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ "рд╡рд╣ method рдЬреЛ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛ upper case рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ" call рдХрд░рдирд╛ рд╣реИред + +рдХреНрдпрд╛ рд╡рд╣ `upper` рдерд╛? рдХреНрдпрд╛ рд╡рд╣ `uppercase` рдерд╛? `first_uppercase`? `capitalize`? + +рдлрд┐рд░, рдЖрдк programmer рдХреЗ рдкреБрд░рд╛рдиреЗ рджреЛрд╕реНрдд, editor autocompletion рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред + +рдЖрдк function рдХрд╛ рдкрд╣рд▓рд╛ parameter, `first_name`, рдлрд┐рд░ рдПрдХ dot (`.`) type рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ completion trigger рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `Ctrl+Space` рджрдмрд╛рддреЗ рд╣реИрдВред + +рд▓реЗрдХрд┐рди, рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдорд┐рд▓рддрд╛: + + + +### Types рдЬреЛрдбрд╝реЗрдВ { #add-types } + +рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ version рдХреА рдПрдХ single line рдмрджрд▓рддреЗ рд╣реИрдВред + +рд╣рдо рдареАрдХ рдЗрд╕ fragment рдХреЛ, function рдХреЗ parameters рдХреЛ, рдЗрд╕рд╕реЗ рдмрджрд▓реЗрдВрдЧреЗ: + +```Python + first_name, last_name +``` + +рдЗрд╕рдореЗрдВ: + +```Python + first_name: str, last_name: str +``` + +рдмрд╕ рдЗрддрдирд╛ рд╣реАред + +рдпрд╣реА "type hints" рд╣реИрдВ: + +{* ../../docs_src/python_types/tutorial002_py310.py hl[1] *} + +рдпрд╣ default values declare рдХрд░рдиреЗ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╣реЛрддрд╛: + +```Python + first_name="john", last_name="doe" +``` + +рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЪреАрдЬрд╝ рд╣реИред + +рд╣рдо colons (`:`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, equals (`=`) рдХрд╛ рдирд╣реАрдВред + +рдФрд░ type hints рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдпрд╣ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рдХрд┐ рдмрд┐рдирд╛ рдЙрдирдХреЗ рдЬреЛ рд╣реЛрддрд╛, рд╡рд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ред + +рд▓реЗрдХрд┐рди рдЕрдм, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдлрд┐рд░ рд╕реЗ рдЙрд╕ function рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди type hints рдХреЗ рд╕рд╛рдеред + +рдЙрд╕реА point рдкрд░, рдЖрдк `Ctrl+Space` рдХреЗ рд╕рд╛рде autocomplete trigger рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ: + + + +рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк options рджреЗрдЦрддреЗ рд╣реБрдП scroll рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдЖрдкрдХреЛ рд╡рд╣ рди рдорд┐рд▓ рдЬрд╛рдП рдЬреЛ "рдкрд╣рдЪрд╛рдирд╛ рд╣реБрдЖ рд▓рдЧреЗ": + + + +## рдФрд░ рдкреНрд░реЗрд░рдгрд╛ { #more-motivation } + +рдЗрд╕ function рдХреЛ рджреЗрдЦреЗрдВ, рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ type hints рд╣реИрдВ: + +{* ../../docs_src/python_types/tutorial003_py310.py hl[1] *} + +рдХреНрдпреЛрдВрдХрд┐ editor variables рдХреЗ types рдЬрд╛рдирддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ completion рд╣реА рдирд╣реАрдВ рдорд┐рд▓рддрд╛, рдЖрдкрдХреЛ error checks рднреА рдорд┐рд▓рддреЗ рд╣реИрдВ: + + + +рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╣реИ, `age` рдХреЛ `str(age)` рдХреЗ рд╕рд╛рде string рдореЗрдВ convert рдХрд░рдирд╛ рд╣реИ: + +{* ../../docs_src/python_types/tutorial004_py310.py hl[2] *} + +## Types declare рдХрд░рдирд╛ { #declaring-types } + +рдЖрдкрдиреЗ рдЕрднреА type hints declare рдХрд░рдиреЗ рдХреА рдореБрдЦреНрдп рдЬрдЧрд╣ рджреЗрдЦреАред Function parameters рдХреЗ рд░реВрдк рдореЗрдВред + +рдпрд╣реА рд╡рд╣ рдореБрдЦреНрдп рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЙрдиреНрд╣реЗрдВ **FastAPI** рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред + +### Simple types { #simple-types } + +рдЖрдк рд╕рднреА standard Python types declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ `str` рд╣реА рдирд╣реАрдВред + +рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +* `int` +* `float` +* `bool` +* `bytes` + +{* ../../docs_src/python_types/tutorial005_py310.py hl[1] *} + +### `typing` module { #typing-module } + +рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд use cases рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ standard library рдХреЗ `typing` module рд╕реЗ рдХреБрдЫ рдЪреАрдЬрд╝реЗрдВ import рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдк declare рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ "рдХреЛрдИ рднреА type" рд╣реИ, рддреЛ рдЖрдк `typing` рд╕реЗ `Any` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +```python +from typing import Any + + +def some_function(data: Any): + print(data) +``` + +### Generic types { #generic-types } + +рдХреБрдЫ types square brackets рдореЗрдВ "type parameters" рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрдирдХреЗ internal types define рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "strings рдХреА list" рдХреЛ `list[str]` declare рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред + +рдЬреЛ types type parameters рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ **Generic types** рдпрд╛ **Generics** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдЖрдк рдЙрдиреНрд╣реАрдВ builtin types рдХреЛ generics рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (square brackets рдФрд░ рдЕрдВрджрд░ types рдХреЗ рд╕рд╛рде): + +* `list` +* `tuple` +* `set` +* `dict` + +#### List { #list } + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ variable рдХреЛ `str` рдХреА `list` рдХреЗ рд░реВрдк рдореЗрдВ define рдХрд░рддреЗ рд╣реИрдВред + +Variable рдХреЛ рдЙрд╕реА colon (`:`) syntax рдХреЗ рд╕рд╛рде declare рдХрд░реЗрдВред + +Type рдХреЗ рд░реВрдк рдореЗрдВ, `list` рд░рдЦреЗрдВред + +рдХреНрдпреЛрдВрдХрд┐ list рдПрдХ рдРрд╕рд╛ type рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ internal types рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ square brackets рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ: + +{* ../../docs_src/python_types/tutorial006_py310.py hl[1] *} + +/// note | рдиреЛрдЯ + +Square brackets рдореЗрдВ рдореМрдЬреВрдж рдЙрди internal types рдХреЛ "type parameters" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдЗрд╕ case рдореЗрдВ, `str` рд╡рд╣ type parameter рд╣реИ рдЬреЛ `list` рдХреЛ pass рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред + +/// + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ: "variable `items` рдПрдХ `list` рд╣реИ, рдФрд░ рдЗрд╕ list рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ item рдПрдХ `str` рд╣реИ"ред + +рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рдЖрдкрдХрд╛ editor list рд╕реЗ items process рдХрд░рддреЗ рд╕рдордп рднреА support рджреЗ рд╕рдХрддрд╛ рд╣реИ: + + + +Types рдХреЗ рдмрд┐рдирд╛, рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред + +рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ variable `item`, list `items` рдХреЗ elements рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред + +рдФрд░ рдлрд┐рд░ рднреА, editor рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ `str` рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП support рджреЗрддрд╛ рд╣реИред + +#### Tuple рдФрд░ Set { #tuple-and-set } + +рдЖрдк `tuple`s рдФрд░ `set`s declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ: + +{* ../../docs_src/python_types/tutorial007_py310.py hl[1] *} + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ: + +* Variable `items_t` 3 items рд╡рд╛рд▓рд╛ рдПрдХ `tuple` рд╣реИ, рдПрдХ `int`, рджреВрд╕рд░рд╛ `int`, рдФрд░ рдПрдХ `str`ред +* Variable `items_s` рдПрдХ `set` рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ item рдХрд╛ type `bytes` рд╣реИред + +#### Dict { #dict } + +`dict` define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк 2 type parameters pass рдХрд░рддреЗ рд╣реИрдВ, commas рд╕реЗ separatedред + +рдкрд╣рд▓рд╛ type parameter `dict` рдХреА keys рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред + +рджреВрд╕рд░рд╛ type parameter `dict` рдХреА values рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ: + +{* ../../docs_src/python_types/tutorial008_py310.py hl[1] *} + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ: + +* Variable `prices` рдПрдХ `dict` рд╣реИ: + * рдЗрд╕ `dict` рдХреА keys `str` type рдХреА рд╣реИрдВ (рдорд╛рди рд▓реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ item рдХрд╛ рдирд╛рдо)ред + * рдЗрд╕ `dict` рдХреА values `float` type рдХреА рд╣реИрдВ (рдорд╛рди рд▓реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ item рдХреА price)ред + +#### Union { #union } + +рдЖрдк declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ variable **рдХрдИ types** рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ `int` рдпрд╛ рдПрдХ `str`ред + +рдЗрд╕реЗ define рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛрдиреЛрдВ types рдХреЛ separate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП vertical bar (`|`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред + +рдЗрд╕реЗ "union" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ variable рдЙрди рджреЛ type sets рдХреЗ union рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред + +```Python hl_lines="1" +{!> ../../docs_src/python_types/tutorial008b_py310.py!} +``` + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ `item` рдПрдХ `int` рдпрд╛ рдПрдХ `str` рд╣реЛ рд╕рдХрддрд╛ рд╣реИред + +#### рд╕рдВрднрд╡рддрдГ `None` { #possibly-none } + +рдЖрдк declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА value рдХрд╛ type, рдЬреИрд╕реЗ `str`, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ `None` рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред + +//// tab | Python 3.10+ + +```Python hl_lines="1" +{!> ../../docs_src/python_types/tutorial009_py310.py!} +``` + +//// + +рд╕рд┐рд░реНрдл `str` рдХреЗ рдмрдЬрд╛рдп `str | None` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ editor рдЖрдкрдХреЛ рдЙрди errors рдХреЛ detect рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдБ рдЖрдк рдпрд╣ рдорд╛рди рд░рд╣реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ value рд╣рдореЗрд╢рд╛ `str` рд╣реИ, рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ `None` рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред + +### Classes рдХреЛ types рдХреЗ рд░реВрдк рдореЗрдВ { #classes-as-types } + +рдЖрдк рдХрд┐рд╕реА class рдХреЛ рднреА variable рдХреЗ type рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдорд╛рди рд▓реЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ class `Person` рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ name рд╣реИ: + +{* ../../docs_src/python_types/tutorial010_py310.py hl[1:3] *} + +рдлрд┐рд░ рдЖрдк рдХрд┐рд╕реА variable рдХреЛ `Person` type рдХрд╛ declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: + +{* ../../docs_src/python_types/tutorial010_py310.py hl[6] *} + +рдФрд░ рдлрд┐рд░, рдлрд┐рд░ рд╕реЗ, рдЖрдкрдХреЛ рдкреВрд░рд╛ editor support рдорд┐рд▓рддрд╛ рд╣реИ: + + + +рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ "`one_person`, class `Person` рдХрд╛ рдПрдХ **instance** рд╣реИ"ред + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ "`one_person`, `Person` рдирд╛рдо рдХреА **class** рд╣реИ"ред + +## Pydantic models { #pydantic-models } + +[Pydantic](https://docs.pydantic.dev/) data validation рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Python library рд╣реИред + +рдЖрдк data рдХреА "shape" рдХреЛ attributes рд╡рд╛рд▓реА classes рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд░рддреЗ рд╣реИрдВред + +рдФрд░ рдкреНрд░рддреНрдпреЗрдХ attribute рдХрд╛ рдПрдХ type рд╣реЛрддрд╛ рд╣реИред + +рдлрд┐рд░ рдЖрдк рдХреБрдЫ values рдХреЗ рд╕рд╛рде рдЙрд╕ class рдХрд╛ рдПрдХ instance create рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ values рдХреЛ validate рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ appropriate type рдореЗрдВ convert рдХрд░реЗрдЧрд╛ (рдЕрдЧрд░ рдРрд╕рд╛ case рд╣реИ) рдФрд░ рдЖрдкрдХреЛ рдкреВрд░реЗ data рд╡рд╛рд▓рд╛ рдПрдХ object рджреЗрдЧрд╛ред + +рдФрд░ рдЙрд╕ resulting object рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдкреВрд░рд╛ editor support рдорд┐рд▓рддрд╛ рд╣реИред + +Official Pydantic docs рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг: + +{* ../../docs_src/python_types/tutorial011_py310.py *} + +/// note | рдиреЛрдЯ + +рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП [Pydantic, рдЗрд╕рдХреЗ docs рджреЗрдЦреЗрдВ](https://docs.pydantic.dev/)ред + +/// + +**FastAPI** рдкреВрд░реА рддрд░рд╣ рд╕реЗ Pydantic рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред + +рдЖрдк рдпрд╣ рд╕рдм practice рдореЗрдВ [Tutorial - User Guide](tutorial/index.md) рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреЗрдЦреЗрдВрдЧреЗред + +## Metadata Annotations рдХреЗ рд╕рд╛рде Type Hints { #type-hints-with-metadata-annotations } + +Python рдореЗрдВ рдПрдХ feature рднреА рд╣реИ рдЬреЛ `Annotated` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди type hints рдореЗрдВ **рдЕрддрд┐рд░рд┐рдХреНрдд metadata** рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред + +рдЖрдк `typing` рд╕реЗ `Annotated` import рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +{* ../../docs_src/python_types/tutorial013_py310.py hl[1,4] *} + +Python рдЦреБрдж рдЗрд╕ `Annotated` рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ред рдФрд░ editors рдФрд░ рдЕрдиреНрдп tools рдХреЗ рд▓рд┐рдП, type рдЕрднреА рднреА `str` рд╣реИред + +рд▓реЗрдХрд┐рди рдЖрдк `Annotated` рдореЗрдВ рдЗрд╕ рдЬрдЧрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ **FastAPI** рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд metadata рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреА application рдХреЛ рдХреИрд╕реЗ behave рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред + +рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ `Annotated` рдХреЛ pass рдХрд┐рдпрд╛ рдЧрдпрд╛ **рдкрд╣рд▓рд╛ *type parameter*** рд╣реА **actual type** рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдм, рдЕрдиреНрдп tools рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ metadata рд╣реИред + +рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реИ рдХрд┐ `Annotated` рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдпрд╣ standard Python рд╣реИред ЁЯШО + +рдмрд╛рдж рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ **powerful** рд╣реЛ рд╕рдХрддрд╛ рд╣реИред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ **standard Python** рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ editor рдореЗрдВ, рдЕрдкрдиреЗ code рдХреЛ analyze рдФрд░ refactor рдХрд░рдиреЗ рд╡рд╛рд▓реЗ tools рдХреЗ рд╕рд╛рде, рдЖрджрд┐, рдЕрднреА рднреА **рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ possible developer experience** рдорд┐рд▓реЗрдЧрд╛ред тЬи + +рдФрд░ рдпрд╣ рднреА рдХрд┐ рдЖрдкрдХрд╛ code рдХрдИ рдЕрдиреНрдп Python tools рдФрд░ libraries рдХреЗ рд╕рд╛рде рдмрд╣реБрдд compatible рд╣реЛрдЧрд╛ред ЁЯЪА + +/// + +## **FastAPI** рдореЗрдВ Type hints { #type-hints-in-fastapi } + +**FastAPI** рдЗрди type hints рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдХрдИ рдЪреАрдЬрд╝реЗрдВ рдХрд░рддрд╛ рд╣реИред + +**FastAPI** рдХреЗ рд╕рд╛рде рдЖрдк type hints рдХреЗ рд╕рд╛рде parameters declare рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ: + +* **Editor support**ред +* **Type checks**ред + +...рдФрд░ **FastAPI** рдЙрдиреНрд╣реАрдВ declarations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: + +* **Requirements define** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: request path parameters, query parameters, headers, bodies, dependencies, рдЖрджрд┐ рд╕реЗред +* **Data convert** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: request рд╕реЗ required type рдореЗрдВред +* **Data validate** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдкреНрд░рддреНрдпреЗрдХ request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ data рдХреЛ: + * Data invalid рд╣реЛрдиреЗ рдкрд░ client рдХреЛ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ **automatic errors** generate рдХрд░рдирд╛ред +* OpenAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ API рдХреЛ **document** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: + * рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд┐рд░ automatic interactive documentation user interfaces рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред + +рдпрд╣ рд╕рдм abstract рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдЖрдк рдпрд╣ рд╕рдм action рдореЗрдВ [Tutorial - User Guide](tutorial/index.md) рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред + +рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ standard Python types рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рд╣реА рдЬрдЧрд╣ рдкрд░ (рдЕрдзрд┐рдХ classes, decorators, рдЖрджрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп), **FastAPI** рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдХрд╛рдо рдХрд░ рджреЗрдЧрд╛ред + +/// note | рдиреЛрдЯ + +рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реЗ tutorial рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ types рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрдП рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ resource [`mypy` рдХреА "cheat sheet"](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html) рд╣реИред + +/// diff --git a/docs/hi/docs/virtual-environments.md b/docs/hi/docs/virtual-environments.md new file mode 100644 index 000000000..cacadd0df --- /dev/null +++ b/docs/hi/docs/virtual-environments.md @@ -0,0 +1,864 @@ +# Virtual Environments { #virtual-environments } + +рдЬрдм рдЖрдк Python projects рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╣рд░ project рдХреЗ рд▓рд┐рдП install рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ packages рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ **virtual environment** (рдпрд╛ рдХреЛрдИ рд╕рдорд╛рди рддрд░реАрдХрд╛) рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред + +/// note | рдиреЛрдЯ + +рдЕрдЧрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ virtual environments рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рд╣реИ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ section рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред ЁЯдУ + +/// + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдПрдХ **virtual environment**, рдПрдХ **environment variable** рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред + +рдПрдХ **environment variable** system рдореЗрдВ рдПрдХ variable рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ programs рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдПрдХ **virtual environment** рдПрдХ directory рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ files рд╣реЛрддреА рд╣реИрдВред + +/// + +/// note | рдиреЛрдЯ + +рдпрд╣ рдкреЗрдЬ рдЖрдкрдХреЛ **virtual environments** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рдЦрд╛рдПрдЧрд╛ред + +рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП **рд╕рдм рдХреБрдЫ manage рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ tool** рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ (рдЬрд┐рд╕рдореЗрдВ Python install рдХрд░рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ), рддреЛ [uv](https://github.com/astral-sh/uv) рдЖрдЬрд╝рдорд╛рдПрдБред + +/// + +## Project рдмрдирд╛рдПрдБ { #create-a-project } + +рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ project рдХреЗ рд▓рд┐рдП рдПрдХ directory рдмрдирд╛рдПрдБред + +рдореИрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЕрдкрдиреА home/user directory рдХреЗ рдЕрдВрджрд░ `code` рдирд╛рдо рдХреА рдПрдХ directory рдмрдирд╛рддрд╛ рд╣реВрдБред + +рдФрд░ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рд╣рд░ project рдХреЗ рд▓рд┐рдП рдПрдХ directory рдмрдирд╛рддрд╛ рд╣реВрдБред + +
+ +```console +// home directory рдореЗрдВ рдЬрд╛рдПрдБ +$ cd +// рдЕрдкрдиреЗ рд╕рднреА code projects рдХреЗ рд▓рд┐рдП рдПрдХ directory рдмрдирд╛рдПрдБ +$ mkdir code +// рдЙрд╕ code directory рдореЗрдВ рдЬрд╛рдПрдБ +$ cd code +// рдЗрд╕ project рдХреЗ рд▓рд┐рдП рдПрдХ directory рдмрдирд╛рдПрдБ +$ mkdir awesome-project +// рдЙрд╕ project directory рдореЗрдВ рдЬрд╛рдПрдБ +$ cd awesome-project +``` + +
+ +## Virtual Environment рдмрдирд╛рдПрдБ { #create-a-virtual-environment } + +рдЬрдм рдЖрдк рдХрд┐рд╕реА Python project рдкрд░ **рдкрд╣рд▓реА рдмрд╛рд░** рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ virtual environment **рдЕрдкрдиреЗ project рдХреЗ рдЕрдВрджрд░** рдмрдирд╛рдПрдБред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдкрдХреЛ рдпрд╣ **рд╣рд░ project рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░** рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рд░ рдмрд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВред + +/// + +//// tab | `venv` + +Virtual environment рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк Python рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ `venv` module рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +
+ +```console +$ python -m venv .venv +``` + +
+ +/// details | рдЙрд╕ command рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ + +* `python`: `python` рдирд╛рдо рдХреЗ program рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ +* `-m`: рдХрд┐рд╕реА module рдХреЛ script рдХреА рддрд░рд╣ call рдХрд░реЗрдВ, рдЕрдЧрд▓рд╛ рд╣рдо рдЙрд╕реЗ рдмрддрд╛рдПрдБрдЧреЗ рдХрд┐ рдХреМрди-рд╕рд╛ module +* `venv`: `venv` рдирд╛рдо рдХреЗ module рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ Python рдХреЗ рд╕рд╛рде install рдЖрддрд╛ рд╣реИ +* `.venv`: рдирдИ directory `.venv` рдореЗрдВ virtual environment рдмрдирд╛рдПрдБ + +/// + +//// + +//// tab | `uv` + +рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ [`uv`](https://github.com/astral-sh/uv) install рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ virtual environment рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +
+ +```console +$ uv venv +``` + +
+ +/// tip | рд╕реБрдЭрд╛рд╡ + +Default рд░реВрдк рд╕реЗ, `uv` `.venv` рдирд╛рдо рдХреА directory рдореЗрдВ virtual environment рдмрдирд╛рдПрдЧрд╛ред + +рд▓реЗрдХрд┐рди рдЖрдк directory рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд argument рджреЗрдХрд░ рдЗрд╕реЗ customize рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +/// + +//// + +рд╡рд╣ command `.venv` рдирд╛рдо рдХреА directory рдореЗрдВ рдПрдХ рдирдпрд╛ virtual environment рдмрдирд╛рддрд╛ рд╣реИред + +/// details | `.venv` рдпрд╛ рдХреЛрдИ рджреВрд╕рд░рд╛ рдирд╛рдо + +рдЖрдк virtual environment рдХреЛ рдХрд┐рд╕реА рджреВрд╕рд░реА directory рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ `.venv` рдХрд╣рдиреЗ рдХреА рдПрдХ convention рд╣реИред + +/// + +## Virtual Environment activate рдХрд░реЗрдВ { #activate-the-virtual-environment } + +рдирдП virtual environment рдХреЛ activate рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЬреЛ рднреА Python command рдЪрд▓рд╛рдПрдБ рдпрд╛ рдЬреЛ package install рдХрд░реЗрдВ, рд╡рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред + +/// tip | рд╕реБрдЭрд╛рд╡ + +Project рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рд╣рд░ рдмрд╛рд░** рдЬрдм рдЖрдк рдПрдХ **рдирдпрд╛ terminal session** рд╢реБрд░реВ рдХрд░реЗрдВ, рддреЛ рдпрд╣ рдХрд░реЗрдВред + +/// + +//// tab | Linux, macOS + +
+ +```console +$ source .venv/bin/activate +``` + +
+ +//// + +//// tab | Windows PowerShell + +
+ +```console +$ .venv\Scripts\Activate.ps1 +``` + +
+ +//// + +//// tab | Windows Bash + +рдпрд╛ рдЕрдЧрд░ рдЖрдк Windows рдХреЗ рд▓рд┐рдП Bash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ [Git Bash](https://gitforwindows.org/)): + +
+ +```console +$ source .venv/Scripts/activate +``` + +
+ +//// + +/// tip | рд╕реБрдЭрд╛рд╡ + +рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрд╕ environment рдореЗрдВ рдХреЛрдИ **рдирдпрд╛ package** install рдХрд░реЗрдВ, рддреЛ environment рдХреЛ рдлрд┐рд░ рд╕реЗ **activate** рдХрд░реЗрдВред + +рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЙрд╕ package рджреНрд╡рд╛рд░рд╛ install рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ **terminal (CLI) program** рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ virtual environment рд╡рд╛рд▓рд╛ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреЛрдИ рдФрд░ рдирд╣реАрдВ рдЬреЛ global рд░реВрдк рд╕реЗ install рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рд╕реЗ рдЕрд▓рдЧ version рдХреЗ рд╕рд╛рдеред + +/// + +## рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ Virtual Environment Active рд╣реИ { #check-the-virtual-environment-is-active } + +рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ virtual environment active рд╣реИ (рдкрд┐рдЫрд▓реА command рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛)ред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдпрд╣ **рд╡реИрдХрд▓реНрдкрд┐рдХ** рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ **рдЬрд╛рдБрдЪрдиреЗ** рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк рд╡рд╣реА virtual environment рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдЗрд░рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ред + +/// + +//// tab | Linux, macOS, Windows Bash + +
+ +```console +$ which python + +/home/user/code/awesome-project/.venv/bin/python +``` + +
+ +рдЕрдЧрд░ рдпрд╣ `.venv/bin/python` рдкрд░ `python` binary рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЗ project рдХреЗ рдЕрдВрджрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ `awesome-project`), рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред ЁЯОЙ + +//// + +//// tab | Windows PowerShell + +
+ +```console +$ Get-Command python + +C:\Users\user\code\awesome-project\.venv\Scripts\python +``` + +
+ +рдЕрдЧрд░ рдпрд╣ `.venv\Scripts\python` рдкрд░ `python` binary рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЗ project рдХреЗ рдЕрдВрджрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ `awesome-project`), рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред ЁЯОЙ + +//// + +## `pip` Upgrade рдХрд░реЗрдВ { #upgrade-pip } + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЕрдЧрд░ рдЖрдк [`uv`](https://github.com/astral-sh/uv) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪреАрдЬреЗрдВ install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `pip` рдХреА рдмрдЬрд╛рдп рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ `pip` upgrade рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред ЁЯШО + +/// + +рдЕрдЧрд░ рдЖрдк packages install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `pip` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╣ Python рдХреЗ рд╕рд╛рде default рд░реВрдк рд╕реЗ рдЖрддрд╛ рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ latest version рдореЗрдВ **upgrade** рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред + +рдХрд┐рд╕реА package рдХреЛ install рдХрд░рддреЗ рд╕рдордп рдХрдИ рдЕрдЬреАрдм errors рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ `pip` upgrade рдХрд░рдиреЗ рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдпрд╣ **рдПрдХ рдмрд╛рд░** рдХрд░реЗрдВрдЧреЗ, virtual environment рдмрдирд╛рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рджред + +/// + +рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ virtual environment active рд╣реИ (рдКрдкрд░ рд╡рд╛рд▓реА command рд╕реЗ) рдФрд░ рдлрд┐рд░ рдЪрд▓рд╛рдПрдБ: + +
+ +```console +$ python -m pip install --upgrade pip + +---> 100% +``` + +
+ +/// tip | рд╕реБрдЭрд╛рд╡ + +рдХрднреА-рдХрднреА, pip upgrade рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ **`No module named pip`** error рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред + +рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдиреАрдЪреЗ рджреА рдЧрдИ command рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ pip install рдФрд░ upgrade рдХрд░реЗрдВ: + +
+ +```console +$ python -m ensurepip --upgrade + +---> 100% +``` + +
+ +рдпрд╣ command pip рдХреЛ install рдХрд░реЗрдЧреА рдЕрдЧрд░ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ install рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧреА рдХрд┐ install рдХрд┐рдпрд╛ рдЧрдпрд╛ pip рдХрд╛ version рдХрдо рд╕реЗ рдХрдо `ensurepip` рдореЗрдВ рдЙрдкрд▓рдмреНрдз version рдЬрд┐рддрдирд╛ рдирдпрд╛ рд╣реЛред + +/// + +## `.gitignore` рдЬреЛрдбрд╝реЗрдВ { #add-gitignore } + +рдЕрдЧрд░ рдЖрдк **Git** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЖрдкрдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП), рддреЛ рдЕрдкрдиреА `.venv` рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ Git рд╕реЗ exclude рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ `.gitignore` file рдЬреЛрдбрд╝реЗрдВред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЕрдЧрд░ рдЖрдкрдиреЗ virtual environment рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП [`uv`](https://github.com/astral-sh/uv) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рдХрд░ рдЪреБрдХрд╛ рд╣реИ, рдЖрдк рдпрд╣ step рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред ЁЯШО + +/// + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдпрд╣ **рдПрдХ рдмрд╛рд░** рдХрд░реЗрдВ, virtual environment рдмрдирд╛рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рджред + +/// + +
+ +```console +$ echo "*" > .venv/.gitignore +``` + +
+ +/// details | рдЙрд╕ command рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ + +* `echo "*"`: terminal рдореЗрдВ text `*` рдХреЛ "print" рдХрд░реЗрдЧрд╛ (рдЕрдЧрд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ) +* `>`: `>` рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╡рд╛рд▓реА command рджреНрд╡рд╛рд░рд╛ terminal рдореЗрдВ print рдХреА рдЧрдИ рдХреЛрдИ рднреА рдЪреАрдЬрд╝ print рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ `>` рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╡рд╛рд▓реА file рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП +* `.gitignore`: рдЙрд╕ file рдХрд╛ рдирд╛рдо рдЬрд╣рд╛рдБ text рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП + +рдФрд░ Git рдХреЗ рд▓рд┐рдП `*` рдХрд╛ рдорддрд▓рдм "рд╕рдм рдХреБрдЫ" рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ `.venv` directory рдореЗрдВ рд╕рдм рдХреБрдЫ ignore рдХрд░реЗрдЧрд╛ред + +рд╡рд╣ command `.gitignore` file рдмрдирд╛рдПрдЧреА, рдЗрд╕ content рдХреЗ рд╕рд╛рде: + +```gitignore +* +``` + +/// + +## Packages install рдХрд░реЗрдВ { #install-packages } + +Environment activate рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕рдореЗрдВ packages install рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЬрдм рдЖрдк рдЕрдкрдиреЗ project рдХреЗ рд▓рд┐рдП required packages install рдпрд╛ upgrade рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдпрд╣ **рдПрдХ рдмрд╛рд░** рдХрд░реЗрдВред + +рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА version рдХреЛ upgrade рдХрд░рдирд╛ рд╣реЛ рдпрд╛ рдХреЛрдИ рдирдпрд╛ package рдЬреЛрдбрд╝рдирд╛ рд╣реЛ, рддреЛ рдЖрдк **рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВрдЧреЗ**ред + +/// + +### рд╕реАрдзреЗ Packages install рдХрд░реЗрдВ { #install-packages-directly } + +рдЕрдЧрд░ рдЖрдк рдЬрд▓реНрджреА рдореЗрдВ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ project рдХреА package requirements declare рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ file рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ install рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдкрдХреЗ program рдХреЛ рдЬрд┐рди packages рдФрд░ versions рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ file рдореЗрдВ рд░рдЦрдирд╛ (рдмрд╣реБрдд) рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `requirements.txt` рдпрд╛ `pyproject.toml`)ред + +/// + +//// tab | `pip` + +
+ +```console +$ pip install "fastapi[standard]" + +---> 100% +``` + +
+ +//// + +//// tab | `uv` + +рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ [`uv`](https://github.com/astral-sh/uv) рд╣реИ: + +
+ +```console +$ uv pip install "fastapi[standard]" +---> 100% +``` + +
+ +//// + +### `requirements.txt` рд╕реЗ install рдХрд░реЗрдВ { #install-from-requirements-txt } + +рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `requirements.txt` рд╣реИ, рддреЛ рдЕрдм рдЖрдк рдЗрд╕рдХреЗ packages install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +//// tab | `pip` + +
+ +```console +$ pip install -r requirements.txt +---> 100% +``` + +
+ +//// + +//// tab | `uv` + +рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ [`uv`](https://github.com/astral-sh/uv) рд╣реИ: + +
+ +```console +$ uv pip install -r requirements.txt +---> 100% +``` + +
+ +//// + +/// details | `requirements.txt` + +рдХреБрдЫ packages рд╡рд╛рд▓рд╛ `requirements.txt` рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: + +```requirements.txt +fastapi[standard]==0.113.0 +pydantic==2.8.0 +``` + +/// + +## рдЕрдкрдирд╛ Program рдЪрд▓рд╛рдПрдБ { #run-your-program } + +Virtual environment activate рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдирд╛ program рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрдкрдХреЗ virtual environment рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЙрди packages рдХреЗ рд╕рд╛рде рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдиреЗ рд╡рд╣рд╛рдБ install рдХрд┐рдпрд╛ рд╣реИред + +
+ +```console +$ python main.py + +Hello World +``` + +
+ +## рдЕрдкрдирд╛ Editor Configure рдХрд░реЗрдВ { #configure-your-editor } + +рдЖрдк рд╢рд╛рдпрдж рдПрдХ editor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЙрд╕реА virtual environment рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП configure рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ (рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕реЗ autodetect рдХрд░ рд▓реЗрдЧрд╛), рддрд╛рдХрд┐ рдЖрдкрдХреЛ autocompletion рдФрд░ inline errors рдорд┐рд▓ рд╕рдХреЗрдВред + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: + +* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment) +* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html) + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдпрд╣ рдХреЗрд╡рд▓ **рдПрдХ рдмрд╛рд░** рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк virtual environment рдмрдирд╛рддреЗ рд╣реИрдВред + +/// + +## Virtual Environment deactivate рдХрд░реЗрдВ { #deactivate-the-virtual-environment } + +рдЬрдм рдЖрдк рдЕрдкрдиреЗ project рдкрд░ рдХрд╛рдо рдХрд░ рд▓реЗрдВ, рддреЛ рдЖрдк virtual environment рдХреЛ **deactivate** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +
+ +```console +$ deactivate +``` + +
+ +рдЗрд╕ рддрд░рд╣, рдЬрдм рдЖрдк `python` рдЪрд▓рд╛рдПрдБрдЧреЗ, рддреЛ рдпрд╣ рд╡рд╣рд╛рдБ install packages рд╡рд╛рд▓реЗ рдЙрд╕ virtual environment рд╕реЗ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред + +## рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ { #ready-to-work } + +рдЕрдм рдЖрдк рдЕрдкрдиреЗ project рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред + + + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдХреНрдпрд╛ рдЖрдк рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдКрдкрд░ рдХреА рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ рдХреНрдпрд╛ рд╣реИрдВ? + +рдЖрдЧреЗ рдкрдврд╝рддреЗ рд░рд╣реЗрдВред ЁЯСЗЁЯдУ + +/// + +## Virtual Environments рдХреНрдпреЛрдВ { #why-virtual-environments } + +FastAPI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ [Python](https://www.python.org/) install рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред + +рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ FastAPI рдФрд░ рдХреЛрдИ рднреА рдЕрдиреНрдп **packages** рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, **install** рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред + +Packages install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд╛рдорд╛рдиреНрдпрддрдГ Python рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА `pip` command (рдпрд╛ рд╕рдорд╛рди alternatives) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред + +рдлрд┐рд░ рднреА, рдЕрдЧрд░ рдЖрдк рд╕реАрдзреЗ `pip` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ packages рдЖрдкрдХреЗ **global Python environment** (Python рдХреА global installation) рдореЗрдВ install рд╣реЛ рдЬрд╛рдПрдБрдЧреЗред + +### рд╕рдорд╕реНрдпрд╛ { #the-problem } + +рддреЛ, global Python environment рдореЗрдВ packages install рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? + +рдХрд┐рд╕реА рд╕рдордп, рдЖрдк рд╢рд╛рдпрдж рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ programs рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ **рдЕрд▓рдЧ-рдЕрд▓рдЧ packages** рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЬрд┐рди projects рдкрд░ рдЖрдк рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЙрд╕реА package рдХреЗ **рдЕрд▓рдЧ-рдЕрд▓рдЧ versions** рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдВрдЧреЗред ЁЯШ▒ + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк `philosophers-stone` рдирд╛рдо рдХрд╛ рдПрдХ project рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ program **`harry`, version `1`** рдирд╛рдо рдХреЗ рдХрд┐рд╕реА рджреВрд╕рд░реЗ package рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ `harry` install рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред + +```mermaid +flowchart LR + stone(philosophers-stone) -->|requires| harry-1[harry v1] +``` + +рдлрд┐рд░, рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдЖрдк `prisoner-of-azkaban` рдирд╛рдо рдХрд╛ рджреВрд╕рд░рд╛ project рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ project рднреА `harry` рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ project рдХреЛ **`harry` version `3`** рдЪрд╛рд╣рд┐рдПред + +```mermaid +flowchart LR + azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3] +``` + +рд▓реЗрдХрд┐рди рдЕрдм рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк packages рдХреЛ local **virtual environment** рдореЗрдВ install рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп globally (global environment рдореЗрдВ) install рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ `harry` рдХрд╛ рдХреМрди-рд╕рд╛ version install рдХрд░рдирд╛ рд╣реИред + +рдЕрдЧрд░ рдЖрдк `philosophers-stone` рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ `harry` version `1` install рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: + +
+ +```console +$ pip install "harry==1" +``` + +
+ +рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ global Python environment рдореЗрдВ `harry` version `1` install рд╣реЛ рдЬрд╛рдПрдЧрд╛ред + +```mermaid +flowchart LR + subgraph global[global env] + harry-1[harry v1] + end + subgraph stone-project[philosophers-stone project] + stone(philosophers-stone) -->|requires| harry-1 + end +``` + +рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдЧрд░ рдЖрдк `prisoner-of-azkaban` рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ `harry` version `1` uninstall рдХрд░рдХреЗ `harry` version `3` install рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рд╕рд┐рд░реНрдл version `3` install рдХрд░рдиреЗ рд╕реЗ version `1` automatically uninstall рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред + +
+ +```console +$ pip install "harry==3" +``` + +
+ +рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ global Python environment рдореЗрдВ `harry` version `3` install рд╣реЛ рдЬрд╛рдПрдЧрд╛ред + +рдФрд░ рдЕрдЧрд░ рдЖрдк `philosophers-stone` рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ **рдХрд╛рдо рди рдХрд░реЗ** рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ `harry` version `1` рдЪрд╛рд╣рд┐рдПред + +```mermaid +flowchart LR + subgraph global[global env] + harry-1[harry v1] + style harry-1 fill:#ccc,stroke-dasharray: 5 5 + harry-3[harry v3] + end + subgraph stone-project[philosophers-stone project] + stone(philosophers-stone) -.-x|тЫФя╕П| harry-1 + end + subgraph azkaban-project[prisoner-of-azkaban project] + azkaban(prisoner-of-azkaban) --> |requires| harry-3 + end +``` + +/// tip | рд╕реБрдЭрд╛рд╡ + +Python packages рдореЗрдВ **рдирдП versions** рдореЗрдВ **breaking changes рд╕реЗ рдмрдЪрдиреЗ** рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдирдП versions рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рддрдерд╛ рддрдм install рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм рдЖрдк tests рдЪрд▓рд╛рдХрд░ рдЬрд╛рдБрдЪ рд╕рдХреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред + +/// + +рдЕрдм, рдпрд╣реА рдЪреАрдЬрд╝ рдЙрди **рдХрдИ** рдЕрдиреНрдп **packages** рдХреЗ рд╕рд╛рде рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдХреЗ рд╕рднреА **projects рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ**ред рдЗрд╕реЗ manage рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдк рдХреБрдЫ projects рдХреЛ packages рдХреЗ рдХреБрдЫ **incompatible versions** рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рджреЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдБрдЧреЗ рдХрд┐ рдХреБрдЫ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ред + +рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ operating system (рдЬреИрд╕реЗ Linux, Windows, macOS) рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрд╕рдореЗрдВ Python рдкрд╣рд▓реЗ рд╕реЗ install рдЖрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдХреБрдЫ packages рдХреБрдЫ specific versions рдХреЗ рд╕рд╛рде pre-installed рд╣реЛрдВрдЧреЗ рдЬреЛ **рдЖрдкрдХреЗ system рдХреЗ рд▓рд┐рдП required** рд╣реИрдВред рдЕрдЧрд░ рдЖрдк global Python environment рдореЗрдВ packages install рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ operating system рдХреЗ рд╕рд╛рде рдЖрдП рдХреБрдЫ programs рдХреЛ **break** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +## Packages рдХрд╣рд╛рдБ install рд╣реЛрддреЗ рд╣реИрдВ { #where-are-packages-installed } + +рдЬрдм рдЖрдк Python install рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ computer рдкрд░ рдХреБрдЫ files рд╡рд╛рд▓реА рдХреБрдЫ directories рдмрдирд╛рддрд╛ рд╣реИред + +рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ directories рд╡реЗ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ install рдХрд┐рдП рдЧрдП рд╕рднреА packages рдХреЛ рд░рдЦрдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреА рд╣реИрдВред + +рдЬрдм рдЖрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ: + +
+ +```console +// рдЗрд╕реЗ рдЕрднреА рди рдЪрд▓рд╛рдПрдБ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ ЁЯдУ +$ pip install "fastapi[standard]" +---> 100% +``` + +
+ +рддреЛ рдпрд╣ FastAPI code рд╡рд╛рд▓реА рдПрдХ compressed file download рдХрд░реЗрдЧрд╛, рд╕рд╛рдорд╛рдиреНрдпрддрдГ [PyPI](https://pypi.org/project/fastapi/) рд╕реЗред + +рдпрд╣ рдЙрди рдЕрдиреНрдп packages рдХреА files рднреА **download** рдХрд░реЗрдЧрд╛ рдЬрд┐рди рдкрд░ FastAPI рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред + +рдлрд┐рд░ рдпрд╣ рдЙрди рд╕рднреА files рдХреЛ **extract** рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреЗ computer рдХреА рдПрдХ directory рдореЗрдВ рд░рдЦреЗрдЧрд╛ред + +Default рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрди downloaded рдФрд░ extracted files рдХреЛ рдЙрд╕ directory рдореЗрдВ рд░рдЦреЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреА Python installation рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИ, рд╡рд╣реА **global environment** рд╣реИред + +## Virtual Environments рдХреНрдпрд╛ рд╣реИрдВ { #what-are-virtual-environments } + +рд╕рднреА packages рдХреЛ global environment рдореЗрдВ рд░рдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рднреА project рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП **рдПрдХ virtual environment** рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред + +рдПрдХ virtual environment рдПрдХ **directory** рд╣реИ, global рд╡рд╛рд▓реА рдХреЗ рдмрд╣реБрдд рд╕рдорд╛рди, рдЬрд╣рд╛рдБ рдЖрдк рдХрд┐рд╕реА project рдХреЗ рд▓рд┐рдП packages install рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +рдЗрд╕ рддрд░рд╣, рд╣рд░ project рдХрд╛ рдЕрдкрдирд╛ virtual environment (`.venv` directory) рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ packages рдХреЗ рд╕рд╛рдеред + +```mermaid +flowchart TB + subgraph stone-project[philosophers-stone project] + stone(philosophers-stone) --->|requires| harry-1 + subgraph venv1[.venv] + harry-1[harry v1] + end + end + subgraph azkaban-project[prisoner-of-azkaban project] + azkaban(prisoner-of-azkaban) --->|requires| harry-3 + subgraph venv2[.venv] + harry-3[harry v3] + end + end + stone-project ~~~ azkaban-project +``` + +## Virtual Environment activate рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ { #what-does-activating-a-virtual-environment-mean } + +рдЬрдм рдЖрдк рдХрд┐рд╕реА virtual environment рдХреЛ activate рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: + +//// tab | Linux, macOS + +
+ +```console +$ source .venv/bin/activate +``` + +
+ +//// + +//// tab | Windows PowerShell + +
+ +```console +$ .venv\Scripts\Activate.ps1 +``` + +
+ +//// + +//// tab | Windows Bash + +рдпрд╛ рдЕрдЧрд░ рдЖрдк Windows рдХреЗ рд▓рд┐рдП Bash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ [Git Bash](https://gitforwindows.org/)): + +
+ +```console +$ source .venv/Scripts/activate +``` + +
+ +//// + +рд╡рд╣ command рдХреБрдЫ [environment variables](environment-variables.md) рдмрдирд╛рдПрдЧреА рдпрд╛ modify рдХрд░реЗрдЧреА, рдЬреЛ рдЕрдЧрд▓реА commands рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред + +рдЙрди variables рдореЗрдВ рд╕реЗ рдПрдХ `PATH` variable рд╣реИред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдЖрдк [Environment Variables](environment-variables.md#path-environment-variable) section рдореЗрдВ `PATH` environment variable рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред + +/// + +Virtual environment activate рдХрд░рдиреЗ рд╕реЗ рдЙрд╕рдХрд╛ path `.venv/bin` (Linux рдФрд░ macOS рдкрд░) рдпрд╛ `.venv\Scripts` (Windows рдкрд░) `PATH` environment variable рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред + +рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ environment activate рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, `PATH` variable рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рдерд╛: + +//// tab | Linux, macOS + +```plaintext +/usr/bin:/bin:/usr/sbin:/sbin +``` + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system programs рдХреЛ рдЗрдирдореЗрдВ рдЦреЛрдЬрддрд╛: + +* `/usr/bin` +* `/bin` +* `/usr/sbin` +* `/sbin` + +//// + +//// tab | Windows + +```plaintext +C:\Windows\System32 +``` + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system programs рдХреЛ рдЗрд╕рдореЗрдВ рдЦреЛрдЬрддрд╛: + +* `C:\Windows\System32` + +//// + +Virtual environment activate рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, `PATH` variable рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛: + +//// tab | Linux, macOS + +```plaintext +/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin +``` + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system рдЕрдм рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ programs рдХреЛ рдпрд╣рд╛рдБ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛: + +```plaintext +/home/user/code/awesome-project/.venv/bin +``` + +рдмрд╛рдХреА directories рдореЗрдВ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред + +рддреЛ, рдЬрдм рдЖрдк terminal рдореЗрдВ `python` type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ system Python program рдХреЛ рдпрд╣рд╛рдБ рдкрд╛рдПрдЧрд╛ + +```plaintext +/home/user/code/awesome-project/.venv/bin/python +``` + +рдФрд░ рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред + +//// + +//// tab | Windows + +```plaintext +C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32 +``` + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ system рдЕрдм рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ programs рдХреЛ рдпрд╣рд╛рдБ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛: + +```plaintext +C:\Users\user\code\awesome-project\.venv\Scripts +``` + +рдмрд╛рдХреА directories рдореЗрдВ рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред + +рддреЛ, рдЬрдм рдЖрдк terminal рдореЗрдВ `python` type рдХрд░рддреЗ рд╣реИрдВ, рддреЛ system Python program рдХреЛ рдпрд╣рд╛рдБ рдкрд╛рдПрдЧрд╛ + +```plaintext +C:\Users\user\code\awesome-project\.venv\Scripts\python +``` + +рдФрд░ рдЙрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред + +//// + +рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг detail рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ virtual environment path рдХреЛ `PATH` variable рдХреА **рд╢реБрд░реБрдЖрдд** рдореЗрдВ рд░рдЦреЗрдЧрд╛ред System рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз Python рд╕реЗ **рдкрд╣рд▓реЗ** рдкрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣, рдЬрдм рдЖрдк `python` рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп `python` (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, global environment рд╡рд╛рд▓рд╛ `python`) рдХреЗ рдмрдЬрд╛рдп **virtual environment рд╕реЗ** Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред + +Virtual environment activate рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдФрд░ рдЪреАрдЬреЗрдВ рднреА рдмрджрд▓рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред + +## Virtual Environment рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ { #checking-a-virtual-environment } + +рдЬрдм рдЖрдк рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ virtual environment active рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: + +//// tab | Linux, macOS, Windows Bash + +
+ +```console +$ which python + +/home/user/code/awesome-project/.venv/bin/python +``` + +
+ +//// + +//// tab | Windows PowerShell + +
+ +```console +$ Get-Command python + +C:\Users\user\code\awesome-project\.venv\Scripts\python +``` + +
+ +//// + +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреЛ `python` program рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ **virtual environment рдореЗрдВ** рдореМрдЬреВрдж рд╣реИред + +рдЖрдк Linux рдФрд░ macOS рдореЗрдВ `which` рдФрд░ Windows PowerShell рдореЗрдВ `Get-Command` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред + +рд╡рд╣ command рдЬрд┐рд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ `PATH` environment variable рдореЗрдВ рдЬрд╛рдХрд░ **рд╣рд░ path рдХреЛ рдХреНрд░рдо рд╕реЗ** check рдХрд░реЗрдЧреА, `python` рдирд╛рдо рдХреЗ program рдХреЛ рдЦреЛрдЬрддреЗ рд╣реБрдПред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЙрд╕реЗ рдвреВрдБрдв рд▓реЗрддреА рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдЙрд╕ program рдХрд╛ **path рджрд┐рдЦрд╛рдПрдЧреА**ред + +рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк `python` call рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣реА exact "`python`" execute рд╣реЛрдЧрд╛ред + +рддреЛ, рдЖрдк confirm рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рд╣реА virtual environment рдореЗрдВ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред + +/// tip | рд╕реБрдЭрд╛рд╡ + +рдПрдХ virtual environment activate рдХрд░рдирд╛, рдПрдХ Python рдкрд╛рдирд╛, рдФрд░ рдлрд┐рд░ **рджреВрд╕рд░реЗ project рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рдирд╛** рдЖрд╕рд╛рди рд╣реИред + +рдФрд░ рджреВрд╕рд░рд╛ project **рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛** рдХреНрдпреЛрдВрдХрд┐ рдЖрдк **рдЧрд▓рдд Python** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ project рдХреЗ virtual environment рд╕реЗ рд╣реИред + +рдпрд╣ check рдХрд░ рдкрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдХреМрди-рд╕рд╛ `python` рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИред ЁЯдУ + +/// + +## Virtual Environment deactivate рдХреНрдпреЛрдВ рдХрд░реЗрдВ { #why-deactivate-a-virtual-environment } + +рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк `philosophers-stone` project рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, **рдЙрд╕ virtual environment рдХреЛ activate** рдХрд░рдХреЗ, packages install рдХрд░рдХреЗ рдФрд░ рдЙрд╕ environment рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдХреЗред + +рдФрд░ рдлрд┐рд░ рдЖрдк **рдХрд┐рд╕реА рджреВрд╕рд░реЗ project** `prisoner-of-azkaban` рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред + +рдЖрдк рдЙрд╕ project рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ: + +
+ +```console +$ cd ~/code/prisoner-of-azkaban +``` + +
+ +рдЕрдЧрд░ рдЖрдк `philosophers-stone` рдХреЗ рд▓рд┐рдП virtual environment рдХреЛ deactivate рдирд╣реАрдВ рдХрд░рддреЗ, рддреЛ рдЬрдм рдЖрдк terminal рдореЗрдВ `python` рдЪрд▓рд╛рдПрдБрдЧреЗ, рдпрд╣ `philosophers-stone` рд╕реЗ Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред + +
+ +```console +$ cd ~/code/prisoner-of-azkaban + +$ python main.py + +// sirius import рдХрд░рдиреЗ рдореЗрдВ error, рдпрд╣ install рдирд╣реАрдВ рд╣реИ ЁЯШ▒ +Traceback (most recent call last): + File "main.py", line 1, in + import sirius +``` + +
+ +рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк virtual environment deactivate рдХрд░рдХреЗ `prisoner-of-azkaban` рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╡рд╛рд▓рд╛ activate рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк `python` рдЪрд▓рд╛рдПрдБрдЧреЗ, рдпрд╣ `prisoner-of-azkaban` рдореЗрдВ рдореМрдЬреВрдж virtual environment рд╕реЗ Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред + +
+ +```console +$ cd ~/code/prisoner-of-azkaban + +// deactivate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреА directory рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЬрд╣рд╛рдБ рднреА рд╣реЛрдВ рд╡рд╣рд╛рдБ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреВрд╕рд░реЗ project рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА ЁЯШО +$ deactivate + +// prisoner-of-azkaban/.venv рдореЗрдВ virtual environment activate рдХрд░реЗрдВ ЁЯЪА +$ source .venv/bin/activate + +// рдЕрдм рдЬрдм рдЖрдк python рдЪрд▓рд╛рдПрдБрдЧреЗ, рддреЛ рдпрд╣ рдЗрд╕ virtual environment рдореЗрдВ install package sirius рдХреЛ рдкрд╛рдПрдЧрд╛ тЬи +$ python main.py + +I solemnly swear ЁЯР║ +``` + +
+ +## Alternatives { #alternatives } + +рдпрд╣ рдЖрдкрдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ guide рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ **рдЕрдВрджрд░ рд╕реЗ** рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред + +Virtual environments, package dependencies (requirements), projects рдХреЛ manage рдХрд░рдиреЗ рдХреЗ рдХрдИ **alternatives** рд╣реИрдВред + +рдЬрдм рдЖрдк рддреИрдпрд╛рд░ рд╣реЛрдВ рдФрд░ **рдкреВрд░реЗ project рдХреЛ manage** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ tool рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, package dependencies, virtual environments рдЖрджрд┐ рд╕рд╣рд┐рдд, рддреЛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдБрдЧрд╛ рдХрд┐ рдЖрдк [uv](https://github.com/astral-sh/uv) рдЖрдЬрд╝рдорд╛рдПрдБред + +`uv` рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: + +* рдЖрдкрдХреЗ рд▓рд┐рдП **Python install** рдХрд░рдирд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ versions рд╕рд╣рд┐рдд +* рдЖрдкрдХреЗ projects рдХреЗ рд▓рд┐рдП **virtual environment** manage рдХрд░рдирд╛ +* **Packages** install рдХрд░рдирд╛ +* рдЖрдкрдХреЗ project рдХреЗ рд▓рд┐рдП package **dependencies рдФрд░ versions** manage рдХрд░рдирд╛ +* рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ install рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП packages рдФрд░ versions рдХрд╛ **exact** set рд╣реЛ, рдЙрдирдХреА dependencies рд╕рд╣рд┐рдд, рддрд╛рдХрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ project рдХреЛ production рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ development рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ computer рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ **locking** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ +* рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреАрдЬрд╝реЗрдВ + +## рдирд┐рд╖реНрдХрд░реНрд╖ { #conclusion } + +рдЕрдЧрд░ рдЖрдкрдиреЗ рдпрд╣ рд╕рдм рдкрдврд╝рд╛ рдФрд░ рд╕рдордЭрд╛ рд╣реИ, рддреЛ рдЕрдм **рдЖрдк virtual environments рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ** рд╡рд╣рд╛рдБ рдореМрдЬреВрдж рдХрдИ developers рд╕реЗ рдХрд╣реАрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред ЁЯдУ + +рдЗрди details рдХреЛ рдЬрд╛рдирдирд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрд╕ рд╕рдордп рдмрд╣реБрдд рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЛ debug рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдЬреЛ complex рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ **рдпрд╣ рд╕рдм рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ**ред ЁЯШО diff --git a/docs/hi/llm-prompt.md b/docs/hi/llm-prompt.md index 337ea3823..b626ea586 100644 --- a/docs/hi/llm-prompt.md +++ b/docs/hi/llm-prompt.md @@ -3,3 +3,56 @@ Translate to Hindi (рд╣рд┐рдиреНрджреА). Language code: hi. + +For the following terms, use these specific choices: + +* path (URL path): path (do not transliterate as "рдкрд╛рде") +* path parameter / path operation: keep in English +* query / query parameter: keep in English (do not transliterate as "рдХреНрд╡реЗрд░реА") +* parameter: parameter (do not transliterate as "рдкреИрд░рд╛рдореАрдЯрд░") +* header / headers (HTTP): keep in English (do not translate as "рд╣реЗрдбрд░" / "рд╢реАрд░реНрд╖рдХ") +* cookie / cookies: keep in English (do not transliterate as "рдХреБрдХреА") +* form / form data: keep in English (do not transliterate as "рдлрд╝реЙрд░реНрдо" / "рдлрд╝реЙрд░реНрдо рдбреЗрдЯрд╛") +* field / fields: keep in English (do not transliterate as "рдлрд╝реАрд▓реНрдбреНрд╕") +* body / request body / response body: keep in English (do not transliterate as "рдмреЙрдбреА" / "рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдмреЙрдбреА") +* request / response: keep in English (do not translate as "рдЕрдиреБрд░реЛрдз" / "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛") +* required: required (do not translate as "рдЖрд╡рд╢реНрдпрдХ") +* route / router / endpoint: keep in English +* framework: framework +* middleware: middleware (do not transliterate as "рдорд┐рдбрд▓рд╡реЗрдпрд░") +* lifespan: lifespan (do not translate as "рдЬреАрд╡рдирдХрд╛рд▓") +* context manager: keep in English +* CORS: keep in English +* function: function (do not transliterate as "рдлрд╝рдВрдХреНрд╢рди") +* variable: variable (do not transliterate as "рд╡реЗрд░рд┐рдПрдмрд▓") +* model / Pydantic model: keep in English (do not transliterate as "рдореЙрдбрд▓") +* value: value (do not translate as "рдорд╛рди") +* spec / specification: keep in English (do not translate as "рд╕реНрдкреЗрдХ" / "рд╡рд┐рдирд┐рд░реНрджреЗрд╢") +* Enum / enumeration: keep in English +* data: data (do not transliterate as "рдбреЗрдЯрд╛") +* parsing: parsing (do not transliterate as "рдкрд╛рд░реНрд╕рд┐рдВрдЧ") +* conversion: conversion (do not translate as "рд░реВрдкрд╛рдВрддрд░рдг") +* virtual environment: virtual environment (do not transliterate as "рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ") +* environment variable: environment variable (do not transliterate as "рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓") +* directory: directory (do not transliterate as "рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА") +* package: package (do not transliterate as "рдкреИрдХреЗрдЬ") +* file / files: keep in English (do not transliterate as "рдлрд╝рд╛рдЗрд▓") +* install / installation: keep in English (do not transliterate as "рдЗрдВрд╕реНрдЯреЙрд▓") +* setup: setup (do not transliterate as "рд╕реЗрдЯрдЕрдк") +* section: section (do not transliterate as "рд╕реЗрдХреНрд╢рди") +* editor / editor support: keep in English (do not transliterate as "рдПрдбрд┐рдЯрд░ рд╕рдкреЛрд░реНрдЯ") +* application discovery: keep in English +* event / events: event (do not transliterate as "рдЗрд╡реЗрдВрдЯреНрд╕") +* startup / shutdown: keep in English (do not transliterate as "рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк") +* worker / worker process: keep in English (do not translate as "рд╡рд░реНрдХрд░" / "рд╢реНрд░рдорд┐рдХ") +* activate / deactivate: keep in English (do not translate as "рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ" / "рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВ") +* development: development (do not transliterate as "рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ") +* production: production (do not transliterate as "рдкреНрд░реЛрдбрдХреНрд╢рди") +* feature: feature (do not transliterate as "рдлреАрдЪрд░") +* tool: tool (do not transliterate as "рдЯреВрд▓") +* project: project (do not transliterate as "рдкреНрд░реЛрдЬреЗрдХреНрдЯ") +* developer / team: keep in English +* default: default (do not transliterate as "рдбрд┐рдлрд╝реЙрд▓реНрдЯ") +* standard: standard (do not translate as "рдорд╛рдирдХ") +* asynchronous: asynchronous (do not transliterate as "рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕") +* Recap (section heading): keep in English (do not translate as "рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди") diff --git a/docs/ru/docs/deployment/concepts.md b/docs/ru/docs/deployment/concepts.md index 23c62b8d3..86dbdabe5 100644 --- a/docs/ru/docs/deployment/concepts.md +++ b/docs/ru/docs/deployment/concepts.md @@ -27,13 +27,13 @@ ╨Т [╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╡╨╣ ╨│╨╗╨░╨▓╨╡ ╨┐╤А╨╛ HTTPS](https.md) ╨╝╤Л ╤А╨░╨╖╨╛╨▒╤А╨░╨╗╨╕╤Б╤М, ╨║╨░╨║ HTTPS ╨╛╨▒╨╡╤Б╨┐╨╡╤З╨╕╨▓╨░╨╡╤В ╤И╨╕╤Д╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨┤╨╗╤П ╨▓╨░╤И╨╡╨│╨╛ API. -╨в╨░╨║╨╢╨╡ ╨╝╤Л ╤Г╨▓╨╕╨┤╨╡╨╗╨╕, ╤З╤В╨╛ HTTPS ╨╛╨▒╤Л╤З╨╜╨╛ ╨╛╨▒╨╡╤Б╨┐╨╡╤З╨╕╨▓╨░╨╡╤В ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В, **╨▓╨╜╨╡╤И╨╜╨╕╨╣** ╨┐╨╛ ╨╛╤В╨╜╨╛╤И╨╡╨╜╨╕╤О ╨║ ╤Б╨╡╤А╨▓╨╡╤А╤Г ╨▓╨░╤И╨╡╨│╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П тАФ **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**. +╨в╨░╨║╨╢╨╡ ╨╝╤Л ╤Г╨▓╨╕╨┤╨╡╨╗╨╕, ╤З╤В╨╛ HTTPS ╨╛╨▒╤Л╤З╨╜╨╛ ╨╛╨▒╨╡╤Б╨┐╨╡╤З╨╕╨▓╨░╨╡╤В ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В, **╨▓╨╜╨╡╤И╨╜╨╕╨╣** ╨┐╨╛ ╨╛╤В╨╜╨╛╤И╨╡╨╜╨╕╤О ╨║ ╤Б╨╡╤А╨▓╨╡╤А╤Г ╨▓╨░╤И╨╡╨│╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П тАФ **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**. ╨Ш ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▒╤Л╤В╤М ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В, ╨╛╤В╨▓╨╡╤З╨░╤О╤Й╨╕╨╣ ╨╖╨░ **╨╛╨▒╨╜╨╛╨▓╨╗╨╡╨╜╨╕╨╡ HTTPSтАС╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╨╛╨▓** тАФ ╤Н╤В╨╛ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╤В╨╛╤В ╨╢╨╡ ╤Б╨░╨╝╤Л╨╣ ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В ╨╕╨╗╨╕ ╨╛╤В╨┤╨╡╨╗╤М╨╜╤Л╨╣. ### ╨Я╤А╨╕╨╝╨╡╤А╤Л ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В╨╛╨▓ ╨┤╨╗╤П HTTPS { #example-tools-for-https } -╨Э╨╡╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В╤Л, ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╝╨╛╨╢╨╜╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М ╨║╨░╨║ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕: +╨Э╨╡╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В╤Л, ╨║╨╛╤В╨╛╤А╤Л╨╡ ╨╝╨╛╨╢╨╜╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М ╨║╨░╨║ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕: * Traefik * ╨Р╨▓╤В╨╛╨╝╨░╤В╨╕╤З╨╡╤Б╨║╨╕ ╨╛╨▒╨╜╨╛╨▓╨╗╤П╨╡╤В ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╤Л тЬи @@ -47,7 +47,7 @@ * ╨б ╨▓╨╜╨╡╤И╨╜╨╕╨╝ ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В╨╛╨╝ (╨╜╨░╨┐╤А╨╕╨╝╨╡╤А, cert-manager) ╨┤╨╗╤П ╨╛╨▒╨╜╨╛╨▓╨╗╨╡╨╜╨╕╤П ╤Б╨╡╤А╤В╨╕╤Д╨╕╨║╨░╤В╨╛╨▓ * ╨Ю╨▒╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В╤Б╤П ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨▒╨╗╨░╤З╨╜╨╛╨│╨╛ ╨┐╤А╨╛╨▓╨░╨╣╨┤╨╡╤А╨░ ╨║╨░╨║ ╤З╨░╤Б╤В╤М ╨╡╨│╨╛ ╤Г╤Б╨╗╤Г╨│ (╤Б╨╝. ╨╜╨╕╨╢╨╡ ЁЯСЗ) -╨Ф╤А╤Г╨│╨╛╨╣ ╨▓╨░╤А╨╕╨░╨╜╤В тАФ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М **╨╛╨▒╨╗╨░╤З╨╜╤Л╨╣ ╤Б╨╡╤А╨▓╨╕╤Б**, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨▓╨╛╨╖╤М╨╝╤С╤В ╨╜╨░ ╤Б╨╡╨▒╤П ╨▒╨╛╨╗╤М╤И╨╡ ╨╖╨░╨┤╨░╤З, ╨▓╨║╨╗╤О╤З╨░╤П ╨╜╨░╤Б╤В╤А╨╛╨╣╨║╤Г HTTPS. ╨в╨░╨╝ ╨╝╨╛╨│╤Г╤В ╨▒╤Л╤В╤М ╨╛╨│╤А╨░╨╜╨╕╤З╨╡╨╜╨╕╤П ╨╕╨╗╨╕ ╨┤╨╛╨┐╨╛╨╗╨╜╨╕╤В╨╡╨╗╤М╨╜╨░╤П ╤Б╤В╨╛╨╕╨╝╨╛╤Б╤В╤М ╨╕ ╤В.╨┐., ╨╜╨╛ ╨▓ ╤В╨░╨║╨╛╨╝ ╤Б╨╗╤Г╤З╨░╨╡ ╨▓╨░╨╝ ╨╜╨╡ ╨┐╤А╨╕╨┤╤С╤В╤Б╤П ╤Б╨░╨╝╨╕╨╝ ╨╜╨░╤Б╤В╤А╨░╨╕╨▓╨░╤В╤М ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕. +╨Ф╤А╤Г╨│╨╛╨╣ ╨▓╨░╤А╨╕╨░╨╜╤В тАФ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М **╨╛╨▒╨╗╨░╤З╨╜╤Л╨╣ ╤Б╨╡╤А╨▓╨╕╤Б**, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨▓╨╛╨╖╤М╨╝╤С╤В ╨╜╨░ ╤Б╨╡╨▒╤П ╨▒╨╛╨╗╤М╤И╨╡ ╨╖╨░╨┤╨░╤З, ╨▓╨║╨╗╤О╤З╨░╤П ╨╜╨░╤Б╤В╤А╨╛╨╣╨║╤Г HTTPS. ╨в╨░╨╝ ╨╝╨╛╨│╤Г╤В ╨▒╤Л╤В╤М ╨╛╨│╤А╨░╨╜╨╕╤З╨╡╨╜╨╕╤П ╨╕╨╗╨╕ ╨┤╨╛╨┐╨╛╨╗╨╜╨╕╤В╨╡╨╗╤М╨╜╨░╤П ╤Б╤В╨╛╨╕╨╝╨╛╤Б╤В╤М ╨╕ ╤В.╨┐., ╨╜╨╛ ╨▓ ╤В╨░╨║╨╛╨╝ ╤Б╨╗╤Г╤З╨░╨╡ ╨▓╨░╨╝ ╨╜╨╡ ╨┐╤А╨╕╨┤╤С╤В╤Б╤П ╤Б╨░╨╝╨╕╨╝ ╨╜╨░╤Б╤В╤А╨░╨╕╨▓╨░╤В╤М ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕. ╨Т ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╤Е ╨│╨╗╨░╨▓╨░╤Е ╤П ╨┐╨╛╨║╨░╨╢╤Г ╨║╨╛╨╜╨║╤А╨╡╤В╨╜╤Л╨╡ ╨┐╤А╨╕╨╝╨╡╤А╤Л. diff --git a/docs/ru/docs/deployment/docker.md b/docs/ru/docs/deployment/docker.md index c3cf9a328..1a7586f53 100644 --- a/docs/ru/docs/deployment/docker.md +++ b/docs/ru/docs/deployment/docker.md @@ -273,9 +273,9 @@ CMD fastapi run app/main.py --port 80 тФФтФАтФА requirements.txt ``` -#### ╨Ч╨░ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ { #behind-a-tls-termination-proxy } +#### ╨Ч╨░ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ { #behind-a-tls-termination-proxy } -╨Х╤Б╨╗╨╕ ╨▓╤Л ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╨╡ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А ╨╖╨░ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ (╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨╛╨╝ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕), ╤В╨░╨║╨╕╨╝ ╨║╨░╨║ Nginx ╨╕╨╗╨╕ Traefik, ╨┤╨╛╨▒╨░╨▓╤М╤В╨╡ ╨╛╨┐╤Ж╨╕╤О `--proxy-headers`. ╨н╤В╨╛ ╤Б╨╛╨╛╨▒╤Й╨╕╤В Uvicorn (╤З╨╡╤А╨╡╨╖ FastAPI CLI), ╤З╤В╨╛ ╨╝╨╛╨╢╨╜╨╛ ╨┤╨╛╨▓╨╡╤А╤П╤В╤М ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨░╨╝, ╨╛╤В╨┐╤А╨░╨▓╨╗╨╡╨╜╨╜╤Л╨╝ ╤Н╤В╨╕╨╝ ╨┐╤А╨╛╨║╤Б╨╕ ╨╕ ╤Б╨╛╨╛╨▒╤Й╨░╤О╤Й╨╕╨╝, ╤З╤В╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡ ╤А╨░╨▒╨╛╤В╨░╨╡╤В ╨╖╨░ HTTPS, ╨╕ ╤В.╨┤. +╨Х╤Б╨╗╨╕ ╨▓╤Л ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╨╡ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А ╨╖╨░ ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ (╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨╛╨╝ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕), ╤В╨░╨║╨╕╨╝ ╨║╨░╨║ Nginx ╨╕╨╗╨╕ Traefik, ╨┤╨╛╨▒╨░╨▓╤М╤В╨╡ ╨╛╨┐╤Ж╨╕╤О `--proxy-headers`. ╨н╤В╨╛ ╤Б╨╛╨╛╨▒╤Й╨╕╤В Uvicorn (╤З╨╡╤А╨╡╨╖ FastAPI CLI), ╤З╤В╨╛ ╨╝╨╛╨╢╨╜╨╛ ╨┤╨╛╨▓╨╡╤А╤П╤В╤М ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨░╨╝, ╨╛╤В╨┐╤А╨░╨▓╨╗╨╡╨╜╨╜╤Л╨╝ ╤Н╤В╨╕╨╝ ╨┐╤А╨╛╨║╤Б╨╕ ╨╕ ╤Б╨╛╨╛╨▒╤Й╨░╤О╤Й╨╕╨╝, ╤З╤В╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡ ╤А╨░╨▒╨╛╤В╨░╨╡╤В ╨╖╨░ HTTPS, ╨╕ ╤В.╨┤. ```Dockerfile CMD ["fastapi", "run", "app/main.py", "--proxy-headers", "--port", "80"] @@ -462,17 +462,17 @@ CMD ["fastapi", "run", "main.py", "--port", "80"] ### ╨С╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕ { #load-balancer } -╨Я╤А╨╕ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╨╕ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨╛╨▓ ╨╛╨▒╤Л╤З╨╜╨╛ ╨╡╤Б╤В╤М ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В, **╤Б╨╗╤Г╤И╨░╤О╤Й╨╕╨╣ ╨│╨╗╨░╨▓╨╜╤Л╨╣ ╨┐╨╛╤А╤В**. ╨н╤В╨╛ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨┤╤А╤Г╨│╨╛╨╣ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А тАФ **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕** ╨┤╨╗╤П ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ **HTTPS** ╨╕╨╗╨╕ ╨┐╨╛╤Е╨╛╨╢╨╕╨╣ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В. +╨Я╤А╨╕ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╨╕ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨╛╨▓ ╨╛╨▒╤Л╤З╨╜╨╛ ╨╡╤Б╤В╤М ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В, **╤Б╨╗╤Г╤И╨░╤О╤Й╨╕╨╣ ╨│╨╗╨░╨▓╨╜╤Л╨╣ ╨┐╨╛╤А╤В**. ╨н╤В╨╛ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨┤╤А╤Г╨│╨╛╨╣ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А тАФ **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕** ╨┤╨╗╤П ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ **HTTPS** ╨╕╨╗╨╕ ╨┐╨╛╤Е╨╛╨╢╨╕╨╣ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В. ╨Я╨╛╤Б╨║╨╛╨╗╤М╨║╤Г ╤Н╤В╨╛╤В ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В ╨┐╤А╨╕╨╜╨╕╨╝╨░╨╡╤В **╨╜╨░╨│╤А╤Г╨╖╨║╤Г** ╨╖╨░╨┐╤А╨╛╤Б╨╛╨▓ ╨╕ ╤А╨░╤Б╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╤В ╨╡╤С ╨╝╨╡╨╢╨┤╤Г ╨▓╨╛╤А╨║╨╡╤А╨░╨╝╨╕ **╤Б╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╨░╨╜╨╜╨╛**, ╨╡╨│╨╛ ╤З╨░╤Б╤В╨╛ ╨╜╨░╨╖╤Л╨▓╨░╤О╤В **╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨╛╨╝ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕**. /// tip | ╨Я╨╛╨┤╤Б╨║╨░╨╖╨║╨░ -╨в╨╛╤В ╨╢╨╡ ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨╛╨▒╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В HTTPS, ╤Б╨║╨╛╤А╨╡╨╡ ╨▓╤Б╨╡╨│╨╛ ╤В╨░╨║╨╢╨╡ ╨▒╤Г╨┤╨╡╤В **╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨╛╨╝ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕**. +╨в╨╛╤В ╨╢╨╡ ╨║╨╛╨╝╨┐╨╛╨╜╨╡╨╜╤В **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**, ╨║╨╛╤В╨╛╤А╤Л╨╣ ╨╛╨▒╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В HTTPS, ╤Б╨║╨╛╤А╨╡╨╡ ╨▓╤Б╨╡╨│╨╛ ╤В╨░╨║╨╢╨╡ ╨▒╤Г╨┤╨╡╤В **╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨╛╨╝ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕**. /// -╨Я╤А╨╕ ╤А╨░╨▒╨╛╤В╨╡ ╤Б ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨░╨╝╨╕ ╤Б╨╕╤Б╤В╨╡╨╝╨░, ╨║╨╛╤В╨╛╤А╤Г╤О ╨▓╤Л ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╨╡ ╨┤╨╗╤П ╨╖╨░╨┐╤Г╤Б╨║╨░ ╨╕ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨╕╨╝╨╕, ╤Г╨╢╨╡ ╨╕╨╝╨╡╨╡╤В ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Б╤В╨▓╨░ ╨┤╨╗╤П ╨┐╨╡╤А╨╡╨┤╨░╤З╨╕ **╤Б╨╡╤В╨╡╨▓╨╛╨│╨╛ ╨▓╨╖╨░╨╕╨╝╨╛╨┤╨╡╨╣╤Б╤В╨▓╨╕╤П** (╨╜╨░╨┐╤А╨╕╨╝╨╡╤А, HTTP-╨╖╨░╨┐╤А╨╛╤Б╨╛╨▓) ╨╛╤В **╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨░ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕** (╨║╨╛╤В╨╛╤А╤Л╨╣ ╤В╨░╨║╨╢╨╡ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**) ╨║ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╤Г(-╨░╨╝) ╤Б ╨▓╨░╤И╨╕╨╝ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡╨╝. +╨Я╤А╨╕ ╤А╨░╨▒╨╛╤В╨╡ ╤Б ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨░╨╝╨╕ ╤Б╨╕╤Б╤В╨╡╨╝╨░, ╨║╨╛╤В╨╛╤А╤Г╤О ╨▓╤Л ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╨╡ ╨┤╨╗╤П ╨╖╨░╨┐╤Г╤Б╨║╨░ ╨╕ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨╕╨╝╨╕, ╤Г╨╢╨╡ ╨╕╨╝╨╡╨╡╤В ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Б╤В╨▓╨░ ╨┤╨╗╤П ╨┐╨╡╤А╨╡╨┤╨░╤З╨╕ **╤Б╨╡╤В╨╡╨▓╨╛╨│╨╛ ╨▓╨╖╨░╨╕╨╝╨╛╨┤╨╡╨╣╤Б╤В╨▓╨╕╤П** (╨╜╨░╨┐╤А╨╕╨╝╨╡╤А, HTTP-╨╖╨░╨┐╤А╨╛╤Б╨╛╨▓) ╨╛╤В **╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║╨░ ╨╜╨░╨│╤А╤Г╨╖╨║╨╕** (╨║╨╛╤В╨╛╤А╤Л╨╣ ╤В╨░╨║╨╢╨╡ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М **╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А╨╛╨╝ TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕**) ╨║ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╤Г(-╨░╨╝) ╤Б ╨▓╨░╤И╨╕╨╝ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡╨╝. ### ╨Ю╨┤╨╕╨╜ ╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╤Й╨╕╨║ тАФ ╨╜╨╡╤Б╨║╨╛╨╗╤М╨║╨╛ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨╛╨▓-╨▓╨╛╤А╨║╨╡╤А╨╛╨▓ { #one-load-balancer-multiple-worker-containers } diff --git a/docs/ru/llm-prompt.md b/docs/ru/llm-prompt.md index 9131a5d3b..6760609e2 100644 --- a/docs/ru/llm-prompt.md +++ b/docs/ru/llm-prompt.md @@ -21,7 +21,7 @@ For the following technical terms, use these specific translations to ensure con * path operation: ╨╛╨┐╨╡╤А╨░╤Ж╨╕╤П ╨┐╤Г╤В╨╕ (optionally clarify as `╨╛╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨┐╤Г╤В╨╕`) * path operation function: ╤Д╤Г╨╜╨║╤Ж╨╕╤П-╨╛╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║ ╨┐╤Г╤В╨╕ (or `╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ ╨┐╤Г╤В╨╕`) * proprietary: ╨┐╤А╨╛╨┐╤А╨╕╨╡╤В╨░╤А╨╜╤Л╨╣ -* benchmark: ╨▒╨╡╨╜╤З╨╝╨░╤А╨║ (add (`╤В╨╡╤Б╤В ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕`) if clarification is needed or use just `╤В╨╡╤Б╤В ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕`) +* benchmark: ╨▒╨╡╨╜╤З╨╝╨░╤А╨║ (add `(╤В╨╡╤Б╤В ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕)` if clarification is needed or use just `╤В╨╡╤Б╤В ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕`) * ASGI server: ASGI-╤Б╨╡╤А╨▓╨╡╤А * In a hurry? : ╨Э╨╡╤В ╨▓╤А╨╡╨╝╨╡╨╜╨╕? * response status code: ╤Б╤В╨░╤В╤Г╤Б-╨║╨╛╨┤ ╨╛╤В╨▓╨╡╤В╨░ @@ -42,7 +42,7 @@ For the following technical terms, use these specific translations to ensure con * include: ╨▓╨║╨╗╤О╤З╨░╤В╤М (add `╨▓ ╤Б╨╡╨▒╤П` if it's appropriate, or use `╤Б╨╛╨┤╨╡╤А╨╢╨░╤В╤М` as an alternative) * virtual environment: ╨▓╨╕╤А╤В╤Г╨░╨╗╤М╨╜╨╛╨╡ ╨╛╨║╤А╤Г╨╢╨╡╨╜╨╕╨╡ * framework: ╤Д╤А╨╡╨╣╨╝╨▓╨╛╤А╨║ -* path paremeter: path-╨┐╨░╤А╨░╨╝╨╡╤В╤А +* path parameter: path-╨┐╨░╤А╨░╨╝╨╡╤В╤А * path (as in URL path): ╨┐╤Г╤В╤М * form (as in HTML form): ╤Д╨╛╤А╨╝╨░ * media type: ╤В╨╕╨┐ ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨│╨╛ (or `╨╝╨╡╨┤╨╕╨░-╤В╨╕╨┐`) @@ -76,9 +76,9 @@ For the following technical terms, use these specific translations to ensure con * have the next best performance, after: ╨▒╤Л╤В╤М ╨╜╨░ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╝ ╨╝╨╡╤Б╤В╨╡ ╨┐╨╛ ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╤В╨╡╨╗╤М╨╜╨╛╤Б╤В╨╕ ╨┐╨╛╤Б╨╗╨╡ * timing attack: ╤В╨░╨╣╨╝╨╕╨╜╨│╨╛╨▓╨░╤П ╨░╤В╨░╨║╨░ (clarify `╨░╤В╨░╨║╨░ ╨┐╨╛ ╨▓╤А╨╡╨╝╨╡╨╜╨╕` if needed) * OAuth2 scope: OAuth2 scope (clarify `╨╛╨▒╨╗╨░╤Б╤В╤М` if needed) -* TLS Termination Proxy: ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TSL-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ +* TLS Termination Proxy: ╨┐╤А╨╛╨║╤Б╨╕-╤Б╨╡╤А╨▓╨╡╤А TLS-╤В╨╡╤А╨╝╨╕╨╜╨░╤Ж╨╕╨╕ * utilize (resources): ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М -* ╤Бontent: ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡ (or `╨║╨╛╨╜╤В╨╡╨╜╤В`) +* content: ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡ (or `╨║╨╛╨╜╤В╨╡╨╜╤В`) * raise exception: ╨▓╤Л╨╖╨▓╨░╤В╤М ╨╕╤Б╨║╨╗╤О╤З╨╡╨╜╨╕╨╡ (also possible to use `╤Б╨│╨╡╨╜╨╡╤А╨╕╤А╨╛╨▓╨░╤В╤М ╨╕╤Б╨║╨╗╤О╤З╨╡╨╜╨╕╨╡` or `╨▓╤Л╨▒╤А╨╛╤Б╨╕╤В╤М ╨╕╤Б╨║╨╗╤О╤З╨╡╨╜╨╕╨╡`) * password flow: password flow (clarify as `╨░╤Г╤В╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤Ж╨╕╤П ╨┐╨╛ ╨┐╨░╤А╨╛╨╗╤О` if needed) * tutorial: ╤А╤Г╨║╨╛╨▓╨╛╨┤╤Б╤В╨▓╨╛ (or `╤Г╤З╨╡╨▒╨╜╨╕╨║`) @@ -95,7 +95,7 @@ For the following technical terms, use these specific translations to ensure con * submodule: ╨┐╨╛╨┤╨╝╨╛╨┤╤Г╨╗╤М * subpackage: ╨┐╨╛╨┤╨┐╨░╨║╨╡╤В * router: ╤А╨╛╤Г╤В╨╡╤А -* building, deploying, accessing (when describing features of FastAPI Cloud): ╤Б╨╛╨╖╨┤╨░╨╜╨╕e ╨╛╨▒╤А╨░╨╖╨░, ╤А╨░╨╖╨▓╨╡╤А╤В╤Л╨▓╨░╨╜╨╕╨╡ ╨╕ ╨┤╨╛╤Б╤В╤Г╨┐ +* building, deploying, accessing (when describing features of FastAPI Cloud): ╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨╛╨▒╤А╨░╨╖╨░, ╤А╨░╨╖╨▓╨╡╤А╤В╤Л╨▓╨░╨╜╨╕╨╡ ╨╕ ╨┤╨╛╤Б╤В╤Г╨┐ * type checker tool: ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В ╨┐╤А╨╛╨▓╨╡╤А╨║╨╕ ╤В╨╕╨┐╨╛╨▓ Do not add whitespace in `╤В.╨┤.`, `╤В.╨┐.`.