-# Альтернативи, натхнення та порівняння
+# Альтернативи, натхнення та порівняння { #alternatives-inspiration-and-comparisons }
-Що надихнуло на створення **FastAPI**, який він у порінянні з іншими альтернативами та чого він у них навчився.
+Що надихнуло **FastAPI**, як він порівнюється з альтернативами та чого він у них навчився.
-## Вступ
+## Вступ { #intro }
**FastAPI** не існувало б, якби не попередні роботи інших.
Але в якийсь момент не було іншого виходу, окрім створення чогось, що надавало б усі ці функції, взявши найкращі ідеї з попередніх інструментів і поєднавши їх найкращим чином, використовуючи мовні функції, які навіть не були доступні раніше (Python 3.6+ підказки типів).
-## Попередні інструменти
+## Попередні інструменти { #previous-tools }
-### <a href="https://www.djangoproject.com/" class="external-link" target="_blank">Django</a>
+### <a href="https://www.djangoproject.com/" class="external-link" target="_blank">Django</a> { #django }
Це найпопулярніший фреймворк Python, який користується широкою довірою. Він використовується для створення таких систем, як Instagram.
Він відносно тісно пов’язаний з реляційними базами даних (наприклад, MySQL або PostgreSQL), тому мати базу даних NoSQL (наприклад, Couchbase, MongoDB, Cassandra тощо) як основний механізм зберігання не дуже просто.
-Він був створений для створення HTML у серверній частині, а не для створення API, які використовуються сучасним інтерфейсом (як-от React, Vue.js і Angular) або іншими системами (як-от <abbr title="Internet of Things">IoT</abbr > пристрої), які спілкуються з ним.
+Він був створений для створення HTML у серверній частині, а не для створення API, які використовуються сучасним інтерфейсом (як-от React, Vue.js і Angular) або іншими системами (як-от <abbr title="Internet of Things - Інтернет речей">IoT</abbr> пристрої), які спілкуються з ним.
-### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a>
+### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> { #django-rest-framework }
Фреймворк Django REST був створений як гнучкий інструментарій для створення веб-інтерфейсів API використовуючи Django в основі, щоб покращити його можливості API.
///
-### <a href="https://flask.palletsprojects.com" class="external-link" target="_blank">Flask</a>
+### <a href="https://flask.palletsprojects.com" class="external-link" target="_blank">Flask</a> { #flask }
Flask — це «мікрофреймворк», він не включає інтеграцію бази даних, а також багато речей, які за замовчуванням є в Django.
///
-### <a href="https://requests.readthedocs.io" class="external-link" target="_blank">Requests</a>
+### <a href="https://requests.readthedocs.io" class="external-link" target="_blank">Requests</a> { #requests }
**FastAPI** насправді не є альтернативою **Requests**. Сфера їх застосування дуже різна.
response = requests.get("http://example.com/some/url")
```
-Відповідна операція *роуту* API FastAPI може виглядати так:
+Відповідна операція шляху API FastAPI може виглядати так:
```Python hl_lines="1"
@app.get("/some/url")
def read_url():
- return {"message": "Hello World"}
+ return {"message": "Hello World"}
```
Зверніть увагу на схожість у `requests.get(...)` і `@app.get(...)`.
/// check | Надихнуло **FastAPI** на
* Майте простий та інтуїтивно зрозумілий API.
- * Використовуйте імена (операції) методів HTTP безпосередньо, простим та інтуїтивно зрозумілим способом.
- * Розумні параметри за замовчуванням, але потужні налаштування.
+* Використовуйте імена (операції) методів HTTP безпосередньо, простим та інтуїтивно зрозумілим способом.
+* Розумні параметри за замовчуванням, але потужні налаштування.
///
-### <a href="https://swagger.io/" class="external-link" target="_blank">Swagger</a> / <a href="https://github.com/OAI /OpenAPI-Specification/" class="external-link" target="_blank">OpenAPI</a>
+### <a href="https://swagger.io/" class="external-link" target="_blank">Swagger</a> / <a href="https://github.com/OAI/OpenAPI-Specification/" class="external-link" target="_blank">OpenAPI</a> { #swagger-openapi }
Головною функцією, яку я хотів від Django REST Framework, була автоматична API документація.
Інтегрувати інструменти інтерфейсу на основі стандартів:
- * <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Інтерфейс Swagger</a>
- * <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>
+* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Інтерфейс Swagger</a>
+* <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>
Ці два було обрано через те, що вони досить популярні та стабільні, але, виконавши швидкий пошук, ви можете знайти десятки додаткових альтернативних інтерфейсів для OpenAPI (які можна використовувати з **FastAPI**).
///
-### Фреймворки REST для Flask
+### Фреймворки REST для Flask { #flask-rest-frameworks }
Існує кілька фреймворків Flask REST, але, витративши час і роботу на їх дослідження, я виявив, що багато з них припинено або залишено, з кількома постійними проблемами, які зробили їх непридатними.
-### <a href="https://marshmallow.readthedocs.io/en/stable/" class="external-link" target="_blank">Marshmallow</a>
+### <a href="https://marshmallow.readthedocs.io/en/stable/" class="external-link" target="_blank">Marshmallow</a> { #marshmallow }
Однією з головних функцій, необхідних для систем API, є "<abbr title="також звана marshalling, conversion">серіалізація</abbr>", яка бере дані з коду (Python) і перетворює їх на щось, що можна надіслати через мережу. Наприклад, перетворення об’єкта, що містить дані з бази даних, на об’єкт JSON. Перетворення об’єктів `datetime` на строки тощо.
///
-### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a>
+### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a> { #webargs }
Іншою важливою функцією, необхідною для API, є <abbr title="читання та перетворення даних Python">аналіз</abbr> даних із вхідних запитів.
///
-### <a href="https://apispec.readthedocs.io/en/stable/" class="external-link" target="_blank">APISpec</a>
+### <a href="https://apispec.readthedocs.io/en/stable/" class="external-link" target="_blank">APISpec</a> { #apispec }
Marshmallow і Webargs забезпечують перевірку, аналіз і серіалізацію як плагіни.
///
-### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a>
+### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a> { #flask-apispec }
Це плагін Flask, який об’єднує Webargs, Marshmallow і APISpec.
///
-### <a href="https://nestjs.com/" class="external-link" target="_blank">NestJS</a> (та <a href="https://angular.io/ " class="external-link" target="_blank">Angular</a>)
+### <a href="https://nestjs.com/" class="external-link" target="_blank">NestJS</a> (та <a href="https://angular.io/" class="external-link" target="_blank">Angular</a>) { #nestjs-and-angular }
Це навіть не Python, NestJS — це фреймворк NodeJS JavaScript (TypeScript), натхненний Angular.
Це досягає чогось подібного до того, що можна зробити з Flask-apispec.
-Він має інтегровану систему впровадження залежностей, натхненну Angular two. Він потребує попередньої реєстрації «injectables» (як і всі інші системи впровадження залежностей, які я знаю), тому це збільшує багатослівність та повторення коду.
+Він має інтегровану систему впровадження залежностей, натхненну Angular 2. Він потребує попередньої реєстрації «injectables» (як і всі інші системи впровадження залежностей, які я знаю), тому це збільшує багатослівність та повторення коду.
Оскільки параметри описані за допомогою типів TypeScript (подібно до підказок типу Python), підтримка редактора досить хороша.
///
-### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a>
+### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a> { #sanic }
Це був один із перших надзвичайно швидких фреймворків Python на основі `asyncio`. Він був дуже схожий на Flask.
///
-### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a>
+### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a> { #falcon }
Falcon — ще один високопродуктивний фреймворк Python, він розроблений як мінімальний і працює як основа інших фреймворків, таких як Hug.
///
-### <a href="https://moltenframework.com/" class="external-link" target="_blank">Molten</a>
+### <a href="https://moltenframework.com/" class="external-link" target="_blank">Molten</a> { #molten }
Я відкрив для себе Molten на перших етапах створення **FastAPI**. І він має досить схожі ідеї:
///
-### <a href="https://github.com/hugapi/hug" class="external-link" target="_blank">Hug</a>
+### <a href="https://github.com/hugapi/hug" class="external-link" target="_blank">Hug</a> { #hug }
Hug був одним із перших фреймворків, який реалізував оголошення типів параметрів API за допомогою підказок типу Python. Це була чудова ідея, яка надихнула інші інструменти зробити те саме.
///
-### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0,5)
+### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0,5) { #apistar-0-5 }
Безпосередньо перед тим, як вирішити створити **FastAPI**, я знайшов сервер **APIStar**. Він мав майже все, що я шукав, і мав чудовий дизайн.
APIStar створив Том Крісті. Той самий хлопець, який створив:
- * Django REST Framework
- * Starlette (на якому базується **FastAPI**)
- * Uvicorn (використовується Starlette і **FastAPI**)
+* Django REST Framework
+* Starlette (на якому базується **FastAPI**)
+* Uvicorn (використовується Starlette і **FastAPI**)
///
І після тривалого пошуку подібної структури та тестування багатьох різних альтернатив, APIStar став найкращим доступним варіантом.
- Потім APIStar перестав існувати як сервер, і було створено Starlette, який став новою кращою основою для такої системи. Це стало останнім джерелом натхнення для створення **FastAPI**. Я вважаю **FastAPI** «духовним спадкоємцем» APIStar, удосконалюючи та розширюючи функції, систему введення тексту та інші частини на основі досвіду, отриманого від усіх цих попередніх інструментів.
+ Потім APIStar перестав існувати як сервер, і було створено Starlette, який став новою кращою основою для такої системи. Це стало останнім джерелом натхнення для створення **FastAPI**.
+
+ Я вважаю **FastAPI** «духовним спадкоємцем» APIStar, удосконалюючи та розширюючи функції, систему типізації та інші частини на основі досвіду, отриманого від усіх цих попередніх інструментів.
///
-## Використовується **FastAPI**
+## Використовується **FastAPI** { #used-by-fastapi }
-### <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>
+### <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> { #pydantic }
Pydantic — це бібліотека для визначення перевірки даних, серіалізації та документації (за допомогою схеми JSON) на основі підказок типу Python.
///
-### <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a>
+### <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> { #starlette }
-Starlette — це легкий фреймворк/набір інструментів <abbr title="The new standard for build asynchronous Python web">ASGI</abbr>, який ідеально підходить для створення високопродуктивних asyncio сервісів.
+Starlette — це легкий фреймворк/набір інструментів <abbr title="Новий стандарт для створення асинхронних Python вебзастосунків">ASGI</abbr>, який ідеально підходить для створення високопродуктивних asyncio сервісів.
Він дуже простий та інтуїтивно зрозумілий. Його розроблено таким чином, щоб його можна було легко розширювати та мати модульні компоненти.
///
-### <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a>
+### <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a> { #uvicorn }
Uvicorn — це блискавичний сервер ASGI, побудований на uvloop і httptools.
Основний веб-сервер для запуску програм **FastAPI**.
- Ви можете поєднати його з Gunicorn, щоб мати асинхронний багатопроцесний сервер.
+ Ви також можете використати параметр командного рядка `--workers`, щоб мати асинхронний багатопроцесний сервер.
Додаткову інформацію див. у розділі [Розгортання](deployment/index.md){.internal-link target=_blank}.
///
-## Орієнтири та швидкість
+## Орієнтири та швидкість { #benchmarks-and-speed }
Щоб зрозуміти, порівняти та побачити різницю між Uvicorn, Starlette і FastAPI, перегляньте розділ про [Бенчмарки](benchmarks.md){.internal-link target=_blank}.
-# FastAPI CLI
+# FastAPI CLI { #fastapi-cli }
-**FastAPI CLI** це програма командного рядка, яку Ви можете використовувати, щоб обслуговувати Ваш додаток FastAPI, керувати Вашими FastApi проектами, тощо.
+**FastAPI CLI** — це програма командного рядка, яку ви можете використовувати, щоб обслуговувати ваш застосунок FastAPI, керувати вашим проєктом FastAPI тощо.
-Ð\9aоли Ð\92и вÑ\81Ñ\82ановлÑ\8eÑ\94Ñ\82е FastApi (Ñ\82обÑ\82о виконÑ\83Ñ\94Ñ\82е `pip install "fastapi[standard]"`), Ð\92и Ñ\82акож вÑ\81Ñ\82ановлÑ\8eÑ\94Ñ\82е пакÑ\83нок `fastapi-cli`, Ñ\86ей пакÑ\83нок надаÑ\94 командÑ\83 `fastapi` в терміналі.
+Ð\9aоли ви вÑ\81Ñ\82ановлÑ\8eÑ\94Ñ\82е FastAPI (напÑ\80иклад, за допомогоÑ\8e `pip install "fastapi[standard]"`), вÑ\96н вклÑ\8eÑ\87аÑ\94 пакеÑ\82 пÑ\96д назвоÑ\8e `fastapi-cli`, Ñ\86ей пакеÑ\82 надаÑ\94 командÑ\83 `fastapi` Ñ\83 терміналі.
-Ð\94лÑ\8f запÑ\83Ñ\81кÑ\83 Ð\92аÑ\88ого FastAPI пÑ\80оекÑ\82Ñ\83 длÑ\8f Ñ\80озÑ\80обки, Ð\92и можеÑ\82е Ñ\81коÑ\80иÑ\81Ñ\82аÑ\82иÑ\81Ñ\8c командоÑ\8e `fastapi dev`:
+Щоб запÑ\83Ñ\81Ñ\82иÑ\82и ваÑ\88 заÑ\81Ñ\82оÑ\81Ñ\83нок FastAPI длÑ\8f Ñ\80озÑ\80обки, ви можеÑ\82е викоÑ\80иÑ\81Ñ\82аÑ\82и командÑ\83 `fastapi dev`:
<div class="termy">
```console
-$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:single">main.py</u>
-<font color="#3465A4">INFO </font> Using path <font color="#3465A4">main.py</font>
-<font color="#3465A4">INFO </font> Resolved absolute path <font color="#75507B">/home/user/code/awesomeapp/</font><font color="#AD7FA8">main.py</font>
-<font color="#3465A4">INFO </font> Searching for package file structure from directories with <font color="#3465A4">__init__.py</font> files
-<font color="#3465A4">INFO </font> Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
-
- ╭─ <font color="#8AE234"><b>Python module file</b></font> ─╮
- │ │
- │ 🐍 main.py │
- │ │
- ╰──────────────────────╯
-
-<font color="#3465A4">INFO </font> Importing module <font color="#4E9A06">main</font>
-<font color="#3465A4">INFO </font> Found importable FastAPI app
-
- ╭─ <font color="#8AE234"><b>Importable FastAPI app</b></font> ─╮
- │ │
- │ <span style="background-color:#272822"><font color="#FF4689">from</font></span><span style="background-color:#272822"><font color="#F8F8F2"> main </font></span><span style="background-color:#272822"><font color="#FF4689">import</font></span><span style="background-color:#272822"><font color="#F8F8F2"> app</font></span><span style="background-color:#272822"> </span> │
- │ │
- ╰──────────────────────────╯
-
-<font color="#3465A4">INFO </font> Using import string <font color="#8AE234"><b>main:app</b></font>
-
- <span style="background-color:#C4A000"><font color="#2E3436">╭────────── FastAPI CLI - Development mode ───────────╮</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ Serving at: http://127.0.0.1:8000 │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ API docs: http://127.0.0.1:8000/docs │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ Running in development mode, for production use: │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ </font></span><span style="background-color:#C4A000"><font color="#555753"><b>fastapi run</b></font></span><span style="background-color:#C4A000"><font color="#2E3436"> │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span>
- <span style="background-color:#C4A000"><font color="#2E3436">╰─────────────────────────────────────────────────────╯</font></span>
-
-<font color="#4E9A06">INFO</font>: Will watch for changes in these directories: ['/home/user/code/awesomeapp']
-<font color="#4E9A06">INFO</font>: Uvicorn running on <b>http://127.0.0.1:8000</b> (Press CTRL+C to quit)
-<font color="#4E9A06">INFO</font>: Started reloader process [<font color="#34E2E2"><b>2265862</b></font>] using <font color="#34E2E2"><b>WatchFiles</b></font>
-<font color="#4E9A06">INFO</font>: Started server process [<font color="#06989A">2265873</font>]
-<font color="#4E9A06">INFO</font>: Waiting for application startup.
-<font color="#4E9A06">INFO</font>: Application startup complete.
+$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
+
+ <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀
+
+ Searching for package file structure from directories with
+ <font color="#3465A4">__init__.py</font> files
+ Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with the
+ following code:
+
+ <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
+ <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
+ <b>fastapi run</b>
+
+ Logs:
+
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
+ <b>[</b><font color="#4E9A06">'/home/user/code/awesomeapp'</font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C to
+ quit<b>)</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
+ <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
```
</div>
-Програма командного рядка `fastapi` це **FastAPI CLI**.
+Програма командного рядка під назвою `fastapi` — це **FastAPI CLI**.
-FastAPI CLI пÑ\80иймаÑ\94 Ñ\88лÑ\8fÑ\85 до Ð\92аÑ\88оÑ\97 Python пÑ\80огÑ\80ами (напÑ\80. `main.py`) Ñ\96 авÑ\82омаÑ\82иÑ\87но виÑ\8fвлÑ\8fÑ\94 екземплÑ\8fÑ\80 `FastAPI` (зазвиÑ\87ай названий `app`), обиÑ\80аÑ\94 коÑ\80екÑ\82ний процес імпорту, а потім обслуговує його.
+FastAPI CLI беÑ\80е Ñ\88лÑ\8fÑ\85 до ваÑ\88оÑ\97 Python-пÑ\80огÑ\80ами (напÑ\80иклад, `main.py`) Ñ\96 авÑ\82омаÑ\82иÑ\87но виÑ\8fвлÑ\8fÑ\94 екземплÑ\8fÑ\80 `FastAPI` (зазвиÑ\87ай з назвоÑ\8e `app`), визнаÑ\87аÑ\94 пÑ\80авилÑ\8cний процес імпорту, а потім обслуговує його.
-Ð\9dаÑ\82омÑ\96Ñ\81Ñ\82Ñ\8c, длÑ\8f запÑ\83Ñ\81кÑ\83 Ñ\83 пÑ\80одакÑ\88н викоÑ\80иÑ\81Ñ\82овÑ\83йÑ\82е `fastapi run`. 🚀
+Ð\9dаÑ\82омÑ\96Ñ\81Ñ\82Ñ\8c, длÑ\8f пÑ\80одакÑ\88н ви викоÑ\80иÑ\81Ñ\82али б `fastapi run`. 🚀
-Всередині **FastAPI CLI** використовує <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>, високопродуктивний, production-ready, ASGI cервер. 😎
+Внутрішньо **FastAPI CLI** використовує <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>, високопродуктивний, production-ready, ASGI сервер. 😎
-## `fastapi dev`
+## `fastapi dev` { #fastapi-dev }
-Ð\92икоÑ\80иÑ\81Ñ\82аннÑ\8f `fastapi dev` ініціює режим розробки.
+Ð\97апÑ\83Ñ\81к `fastapi dev` ініціює режим розробки.
-За замовчуванням, **автоматичне перезавантаження** увімкнене, автоматично перезавантажуючи сервер кожного разу, коли Ви змінюєте Ваш код. Це ресурсо-затратно, та може бути менш стабільним, ніж коли воно вимкнене. Ви повинні використовувати його тільки під час розробки. Воно також слухає IP-адресу `127.0.0.1`, що є IP Вашого девайсу для самостійної комунікації з самим собою (`localhost`).
+За замовчуванням **auto-reload** увімкнено, і сервер автоматично перезавантажується, коли ви вносите зміни у ваш код. Це ресурсоємно та може бути менш стабільним, ніж коли його вимкнено. Вам слід використовувати це лише для розробки. Також він слухає IP-адресу `127.0.0.1`, яка є IP-адресою для того, щоб ваша машина могла взаємодіяти лише сама з собою (`localhost`).
-## `fastapi run`
+## `fastapi run` { #fastapi-run }
-Виконання `fastapi run` запустить FastAPI у продакшн-режимі за замовчуванням.
+Виконання `fastapi run` за замовчуванням запускає FastAPI у продакшн-режимі.
-За замовчуванням, **автоматичне перезавантаження** вимкнене. Воно також прослуховує IP-адресу `0.0.0.0`, що означає всі доступні IP адреси, тим самим даючи змогу будь-кому комунікувати з девайсом. Так Ви зазвичай будете запускати його у продакшн, наприклад у контейнері.
+За замовчуванням **auto-reload** вимкнено. Також він слухає IP-адресу `0.0.0.0`, що означає всі доступні IP-адреси, таким чином він буде публічно доступним для будь-кого, хто може взаємодіяти з машиною. Зазвичай саме так ви запускатимете його в продакшн, наприклад у контейнері.
-Ð\92 бÑ\96лÑ\8cÑ\88оÑ\81Ñ\82Ñ\96 випадкÑ\96в Ð\92и можеÑ\82е (Ñ\96 маÑ\94Ñ\82е) маÑ\82и "termination proxy", Ñ\8fкий обÑ\80облÑ\8fÑ\94 HTTPS длÑ\8f Ð\92аÑ\81, Ñ\86е залежиÑ\82Ñ\8c вÑ\96д Ñ\81поÑ\81обÑ\83 Ñ\80озгоÑ\80Ñ\82аннÑ\8f ваÑ\88ого додаÑ\82кÑ\83, Ð\92аÑ\88 пÑ\80овайдеÑ\80 може зÑ\80обиÑ\82и Ñ\86е длÑ\8f Ð\92аÑ\81, або Ð\92ам поÑ\82Ñ\80Ñ\96бно налаÑ\88Ñ\82Ñ\83ваÑ\82и його самостійно.
+У бÑ\96лÑ\8cÑ\88оÑ\81Ñ\82Ñ\96 випадкÑ\96в ви (Ñ\96 вам Ñ\81лÑ\96д) маÑ\82имеÑ\82е «termination proxy», Ñ\8fкий обÑ\80облÑ\8fÑ\94 HTTPS длÑ\8f ваÑ\81 звеÑ\80Ñ\85Ñ\83; Ñ\86е залежаÑ\82име вÑ\96д Ñ\82ого, Ñ\8fк ви Ñ\80озгоÑ\80Ñ\82аÑ\94Ñ\82е ваÑ\88 заÑ\81Ñ\82оÑ\81Ñ\83нок: ваÑ\88 пÑ\80овайдеÑ\80 може зÑ\80обиÑ\82и Ñ\86е за ваÑ\81, або вам може знадобиÑ\82иÑ\81Ñ\8f налаÑ\88Ñ\82Ñ\83ваÑ\82и Ñ\86е самостійно.
-/// tip
+/// tip | Порада
-Ð\92и можеÑ\82е дÑ\96знаÑ\82иÑ\81Ñ\8c бÑ\96лÑ\8cÑ\88е пÑ\80о Ñ\86е Ñ\83 [докÑ\83менÑ\82аÑ\86Ñ\96Ñ\97 пÑ\80о Ñ\80озгоÑ\80Ñ\82Ñ\83вання](deployment/index.md){.internal-link target=_blank}.
+Ð\92и можеÑ\82е дÑ\96знаÑ\82иÑ\81Ñ\8f бÑ\96лÑ\8cÑ\88е пÑ\80о Ñ\86е в [докÑ\83менÑ\82аÑ\86Ñ\96Ñ\97 з Ñ\80озгоÑ\80Ñ\82ання](deployment/index.md){.internal-link target=_blank}.
///
-# Функціональні можливості
+# Функціональні можливості { #features }
-## Функціональні можливості FastAPI
+## Функціональні можливості FastAPI { #fastapi-features }
**FastAPI** надає вам такі можливості:
-### Ð\92икоÑ\80иÑ\81Ñ\82аннÑ\8f вÑ\96дкÑ\80иÑ\82иÑ\85 Ñ\81Ñ\82андаÑ\80Ñ\82Ñ\96в
+### Ð\9dа оÑ\81новÑ\96 вÑ\96дкÑ\80иÑ\82иÑ\85 Ñ\81Ñ\82андаÑ\80Ñ\82Ñ\96в { #based-on-open-standards }
* <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> для створення API, включаючи оголошення <abbr title="також відомі як: endpoints, маршрути">шляхів</abbr>, <abbr title="також відомі як HTTP-методи, наприклад, POST, GET, PUT, DELETE">операцій</abbr>, параметрів, тіл запитів, безпеки тощо.
* Автоматична документація моделей даних за допомогою <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> (оскільки OpenAPI базується саме на JSON Schema).
* Розроблено на основі цих стандартів після ретельного аналізу, а не як додатковий рівень поверх основної архітектури.
-* Це Ñ\82акож даÑ\94 змогÑ\83 авÑ\82омаÑ\82иÑ\87но **генеÑ\80Ñ\83ваÑ\82и код клÑ\96Ñ\94нÑ\82а** багатьма мовами.
+* Це Ñ\82акож даÑ\94 змогÑ\83 викоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и авÑ\82омаÑ\82иÑ\87нÑ\83 **генеÑ\80аÑ\86Ñ\96Ñ\8e клÑ\96Ñ\94нÑ\82Ñ\81Ñ\8cкого кодÑ\83** багатьма мовами.
-### Ð\90вÑ\82омаÑ\82иÑ\87на генеÑ\80аÑ\86Ñ\96Ñ\8f докÑ\83менÑ\82аÑ\86Ñ\96Ñ\97
+### Ð\90вÑ\82омаÑ\82иÑ\87на докÑ\83менÑ\82аÑ\86Ñ\96Ñ\8f { #automatic-docs }
-Інтерактивна документація API та вебінтерфейс для його дослідження. Оскільки фреймворк базується на OpenAPI, є кілька варіантів, два з яких включені за замовчуванням.
+Інтерактивна документація API та вебінтерфейси для його дослідження. Оскільки фреймворк базується на OpenAPI, є кілька варіантів, 2 з яких включені за замовчуванням.
-* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a> â\80\94 дозволÑ\8fÑ\94 Ñ\96нÑ\82еÑ\80акÑ\82ивно пеÑ\80еглÑ\8fдаÑ\82и API, викликаÑ\82и Ñ\82а Ñ\82еÑ\81Ñ\82Ñ\83ваÑ\82и його пÑ\80Ñ\8fмо Ñ\83 бÑ\80аÑ\83зеÑ\80Ñ\96.
+* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a> â\80\94 з Ñ\96нÑ\82еÑ\80акÑ\82ивним доÑ\81лÑ\96дженнÑ\8fм, викликом Ñ\96 Ñ\82еÑ\81Ñ\82Ñ\83ваннÑ\8fм ваÑ\88ого API пÑ\80Ñ\8fмо з бÑ\80аÑ\83зеÑ\80а.


-### ТÑ\96лÑ\8cки Ñ\81Ñ\83Ñ\87аÑ\81ний Python
+### Ð\9bиÑ\88е Ñ\81Ñ\83Ñ\87аÑ\81ний Python { #just-modern-python }
-FastAPI використовує стандартні **типи Python** (завдяки Pydantic). Вам не потрібно вивчати новий синтаксис — лише стандартний сучасний Python.
+Усе базується на стандартних оголошеннях **типів Python** (завдяки Pydantic). Жодного нового синтаксису для вивчення. Лише стандартний сучасний Python.
-ЯкÑ\89о вам поÑ\82Ñ\80Ñ\96бне коÑ\80оÑ\82ке нагадÑ\83ваннÑ\8f пÑ\80о викоÑ\80иÑ\81Ñ\82аннÑ\8f Ñ\82ипÑ\96в Ñ\83 Python (навÑ\96Ñ\82Ñ\8c Ñ\8fкÑ\89о ви не викоÑ\80иÑ\81Ñ\82овÑ\83Ñ\94Ñ\82е FastAPI), пеÑ\80еглÑ\8fнÑ\8cÑ\82е коÑ\80оÑ\82кий пÑ\96дÑ\80Ñ\83Ñ\87ник: [Ð\92Ñ\81Ñ\82Ñ\83п до Ñ\82ипÑ\96в Python](python-types.md){.internal-link target=_blank}.
+ЯкÑ\89о вам поÑ\82Ñ\80Ñ\96бно 2-Ñ\85вилинне нагадÑ\83ваннÑ\8f пÑ\80о Ñ\82е, Ñ\8fк викоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ñ\82ипи Python (навÑ\96Ñ\82Ñ\8c Ñ\8fкÑ\89о ви не викоÑ\80иÑ\81Ñ\82овÑ\83Ñ\94Ñ\82е FastAPI), пеÑ\80еглÑ\8fнÑ\8cÑ\82е коÑ\80оÑ\82кий пÑ\96дÑ\80Ñ\83Ñ\87ник: [Типи Python](python-types.md){.internal-link target=_blank}.
-Ð\9eÑ\81Ñ\8c пÑ\80иклад Ñ\81Ñ\82андаÑ\80Ñ\82ного Python-кодÑ\83 з типами:
+Ð\92и пиÑ\88еÑ\82е Ñ\81Ñ\82андаÑ\80Ñ\82ний Python з типами:
```Python
from datetime import date
+
from pydantic import BaseModel
-# Ð\9eголоÑ\88еннÑ\8f змÑ\96нноÑ\97 як str
-# з підтримкою автодоповнення у редакторі
+# Ð\9eголоÑ\81Ñ\96Ñ\82Ñ\8c змÑ\96ннÑ\83 як str
+# та отримайте підтримку редактора всередині функції
def main(user_id: str):
return user_id
+
# Модель Pydantic
class User(BaseModel):
id: int
joined: date
```
-Ð\9fÑ\80иклад викоÑ\80иÑ\81Ñ\82аннÑ\8f Ñ\86Ñ\96Ñ\94Ñ\97 моделÑ\96:
+Ð\94алÑ\96 Ñ\86е можна викоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ñ\82ак:
```Python
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
`**second_user_data` означає:
-Передати ключі та значення словника `second_user_data` як аргументи у вигляді "ключ-значення", еквівалентно `User(id=4, name="Mary", joined="2018-11-30")`.
+Передати ключі та значення словника `second_user_data` безпосередньо як аргументи у вигляді «ключ-значення», еквівалентно: `User(id=4, name="Mary", joined="2018-11-30")`
///
-### Підтримка редакторів (IDE)
+### Підтримка редакторів (IDE) { #editor-support }
-ФÑ\80еймвоÑ\80к Ñ\81пÑ\80оÑ\94кÑ\82ований Ñ\82ак, Ñ\89об бÑ\83Ñ\82и легким Ñ\96 Ñ\96нÑ\82Ñ\83Ñ\97Ñ\82ивно зÑ\80озÑ\83мÑ\96лим. УÑ\81Ñ\96 Ñ\80Ñ\96Ñ\88еннÑ\8f Ñ\82еÑ\81Ñ\82Ñ\83валиÑ\81Ñ\8f Ñ\83 Ñ\80Ñ\96зниÑ\85 Ñ\80едакÑ\82оÑ\80аÑ\85 Ñ\89е до поÑ\87аÑ\82кÑ\83 Ñ\80озÑ\80обки, Ñ\89об забезпеÑ\87иÑ\82и найкÑ\80аÑ\89ий доÑ\81вÑ\96д пÑ\80огÑ\80амÑ\83ваннÑ\8f.
+УвеÑ\81Ñ\8c Ñ\84Ñ\80еймвоÑ\80к Ñ\81пÑ\80оÑ\94кÑ\82овано Ñ\82ак, Ñ\89об ним бÑ\83ло легко Ñ\82а Ñ\96нÑ\82Ñ\83Ñ\97Ñ\82ивно коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\82иÑ\81Ñ\8f; Ñ\83Ñ\81Ñ\96 Ñ\80Ñ\96Ñ\88еннÑ\8f Ñ\82еÑ\81Ñ\82Ñ\83валиÑ\81Ñ\8f Ñ\83 кÑ\96лÑ\8cкоÑ\85 Ñ\80едакÑ\82оÑ\80аÑ\85 Ñ\89е до поÑ\87аÑ\82кÑ\83 Ñ\80озÑ\80обки, Ñ\89об забезпеÑ\87иÑ\82и найкÑ\80аÑ\89ий доÑ\81вÑ\96д Ñ\80озÑ\80обки.
-За результатами опитувань розробників Python <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">однією з найпопулярніших функцій є "автодоповнення"</a>.
+З опитувань розробників Python зрозуміло <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">що однією з найуживаніших функцій є «автодоповнення»</a>.
-**FastAPI** повністю підтримує автодоповнення у всіх місцях, тому вам рідко доведеться повертатися до документації.
+Увесь фреймворк **FastAPI** побудований так, щоб це забезпечити. Автодоповнення працює всюди.
-Приклад автодоповнення у редакторах:
+Вам рідко доведеться повертатися до документації.
+
+Ось як ваш редактор може вам допомогти:
* у <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a>:

-### Короткий код
-FastAPI має розумні налаштування **за замовчуванням**, але всі параметри можна налаштовувати відповідно до ваших потреб. Однак за замовчуванням все "просто працює".
+Ви отримаєте автодоповнення в коді, який раніше могли вважати навіть неможливим. Наприклад, для ключа `price` всередині JSON body (який міг бути вкладеним), що надходить із запиту.
+
+Більше не доведеться вводити неправильні назви ключів, постійно повертатися до документації або прокручувати вгору-вниз, щоб знайти, чи ви зрештою використали `username` чи `user_name`.
+
+### Короткий код { #short }
+
+FastAPI має розумні **налаштування за замовчуванням** для всього, з можливістю конфігурації всюди. Усі параметри можна точно налаштувати під ваші потреби та визначити потрібний вам API.
+
+Але за замовчуванням усе **«просто працює»**.
+
+### Валідація { #validation }
-### Валідація
* Підтримка валідації для більшості (або всіх?) **типів даних Python**, зокрема:
* JSON-об'єктів (`dict`).
- * JSON-списків (`list`) з визначенням типів елементів.
- * Ð Ñ\8fдкÑ\96в (`str`) Ñ\96з мÑ\96нÑ\96малÑ\8cноÑ\8e Ñ\82а макÑ\81ималÑ\8cноÑ\8e довжиноÑ\8e.
- * ЧиÑ\81ел (`int`, `float`) з обмеженнÑ\8fми мÑ\96нÑ\96малÑ\8cниÑ\85 Ñ\82а макÑ\81ималÑ\8cниÑ\85 знаÑ\87енÑ\8c тощо.
+ * JSON-масивів (`list`) із визначенням типів елементів.
+ * Ð\9fолÑ\96в-Ñ\80Ñ\8fдкÑ\96в (`str`) Ñ\96з визнаÑ\87еннÑ\8fм мÑ\96нÑ\96малÑ\8cноÑ\97 Ñ\82а макÑ\81ималÑ\8cноÑ\97 довжини.
+ * ЧиÑ\81ел (`int`, `float`) з мÑ\96нÑ\96малÑ\8cними Ñ\82а макÑ\81ималÑ\8cними знаÑ\87еннÑ\8fми тощо.
-* Валідація складніших типів, таких як:
+* Валідація для більш екзотичних типів, як-от:
* URL.
* Email.
* UUID.
Уся валідація виконується через надійний та перевірений **Pydantic**.
-### Безпека та автентифікація
+### Безпека та автентифікація { #security-and-authentication }
-**FastAPI** підтримує вбудовану автентифікацію та авторизацію, без прив’язки до конкретних баз даних чи моделей даних.
+Інтегровані безпека та автентифікація. Без жодних компромісів із базами даних чи моделями даних.
-Підтримуються всі схеми безпеки OpenAPI, включаючи:
+Підтримуються всі схеми безпеки, визначені в OpenAPI, включно з:
* HTTP Basic.
-* **OAuth2** (також із підтримкою **JWT-токенів**). Див. підручник: [OAuth2 із JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}.
+* **OAuth2** (також із підтримкою **JWT tokens**). Перегляньте підручник: [OAuth2 із JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}.
* Ключі API в:
* Заголовках.
* Параметрах запиту.
* Cookies тощо.
-А також усі можливості безпеки від Starlette (зокрема **сесійні cookies**).
+А також усі можливості безпеки від Starlette (зокрема **session cookies**).
-Усі вони створені як багаторазові інструменти та компоненти, які легко інтегруються з вашими системами, сховищами даних, реляційними та NoSQL базами даних тощо.
+Усе це зроблено як багаторазові інструменти та компоненти, які легко інтегруються з вашими системами, сховищами даних, реляційними та NoSQL базами даних тощо.
-### Впровадження залежностей
+### Впровадження залежностей { #dependency-injection }
-**FastAPI** містить надзвичайно просту у використанні, але потужну систему впровадження залежностей.
+FastAPI містить надзвичайно просту у використанні, але надзвичайно потужну систему <abbr title='також відоме як: "components", "resources", "services", "providers"'><strong>Dependency Injection</strong></abbr>.
-* Ð\97алежноÑ\81Ñ\82Ñ\96 можÑ\83Ñ\82Ñ\8c маÑ\82и влаÑ\81нÑ\96 залежноÑ\81Ñ\82Ñ\96, Ñ\83Ñ\82воÑ\80Ñ\8eÑ\8eÑ\87и Ñ\96Ñ\94Ñ\80аÑ\80Ñ\85Ñ\96Ñ\8e або **"гÑ\80аÑ\84 залежноÑ\81Ñ\82ей"**.
-* Усі залежності автоматично керуються фреймворком.
-* УÑ\81Ñ\96 залежноÑ\81Ñ\82Ñ\96 можÑ\83Ñ\82Ñ\8c оÑ\82Ñ\80имÑ\83ваÑ\82и данÑ\96 з запиÑ\82Ñ\96в Ñ\96 Ñ\80озÑ\88иÑ\80Ñ\8eваÑ\82и **обмеженнÑ\8f опеÑ\80аÑ\86Ñ\96Ñ\97 за Ñ\88лÑ\8fÑ\85ом** та автоматичну документацію.
-* **Автоматична валідація** навіть для параметрів *операцій шляху*, визначених у залежностях.
-* Ð\9fÑ\96дÑ\82Ñ\80имка Ñ\81кладниÑ\85 Ñ\81иÑ\81Ñ\82ем авÑ\82енÑ\82иÑ\84Ñ\96каÑ\86Ñ\96Ñ\97 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, **з'Ñ\94днанÑ\8c Ñ\96з базами даних** тощо.
-* **Ð\96одниÑ\85 обмеженÑ\8c** Ñ\89одо викоÑ\80иÑ\81Ñ\82аннÑ\8f баз даниÑ\85, Ñ\84Ñ\80онÑ\82ендÑ\96в Ñ\82оÑ\89о, але водноÑ\87аÑ\81 проста інтеграція з усіма ними.
+* Ð\9dавÑ\96Ñ\82Ñ\8c залежноÑ\81Ñ\82Ñ\96 можÑ\83Ñ\82Ñ\8c маÑ\82и влаÑ\81нÑ\96 залежноÑ\81Ñ\82Ñ\96, Ñ\83Ñ\82воÑ\80Ñ\8eÑ\8eÑ\87и Ñ\96Ñ\94Ñ\80аÑ\80Ñ\85Ñ\96Ñ\8e або **«гÑ\80аÑ\84» залежноÑ\81Ñ\82ей**.
+* Усе **автоматично обробляється** фреймворком.
+* УÑ\81Ñ\96 залежноÑ\81Ñ\82Ñ\96 можÑ\83Ñ\82Ñ\8c вимагаÑ\82и данÑ\96 Ñ\96з запиÑ\82Ñ\96в Ñ\96 **Ñ\80озÑ\88иÑ\80Ñ\8eваÑ\82и обмеженнÑ\8f опеÑ\80аÑ\86Ñ\96Ñ\97 Ñ\88лÑ\8fÑ\85Ñ\83** та автоматичну документацію.
+* **Автоматична валідація** навіть для параметрів *операції шляху*, визначених у залежностях.
+* Ð\9fÑ\96дÑ\82Ñ\80имка Ñ\81кладниÑ\85 Ñ\81иÑ\81Ñ\82ем авÑ\82енÑ\82иÑ\84Ñ\96каÑ\86Ñ\96Ñ\97 коÑ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, **пÑ\96дклÑ\8eÑ\87енÑ\8c до баз даних** тощо.
+* **Ð\96одниÑ\85 компÑ\80омÑ\96Ñ\81Ñ\96в** Ñ\96з базами даниÑ\85, Ñ\84Ñ\80онÑ\82ендами Ñ\82оÑ\89о. Ð\90ле проста інтеграція з усіма ними.
-### Ð\9dемаÑ\94 обмеженÑ\8c на "плагÑ\96ни"
+### Ð\9dеобмеженÑ\96 «плагÑ\96ни» { #unlimited-plug-ins }
-Ð\90бо Ñ\96нÑ\88ими Ñ\81ловами, вони не поÑ\82Ñ\80Ñ\96бнÑ\96 â\80\93 пÑ\80оÑ\81Ñ\82о Ñ\96мпоÑ\80Ñ\82Ñ\83йÑ\82е Ñ\82а викоÑ\80иÑ\81Ñ\82овÑ\83йÑ\82е необÑ\85Ñ\96дний код.
+Ð\86накÑ\88е кажÑ\83Ñ\87и, вони не поÑ\82Ñ\80Ñ\96бнÑ\96 â\80\94 Ñ\96мпоÑ\80Ñ\82Ñ\83йÑ\82е Ñ\82а викоÑ\80иÑ\81Ñ\82овÑ\83йÑ\82е код, Ñ\8fкий вам поÑ\82Ñ\80Ñ\96бен.
-Будь-яка інтеграція спроєктована настільки просто (з використанням залежностей), що ви можете створити "плагін" для свого застосунку всього у 2 рядках коду, використовуючи ту саму структуру та синтаксис, що й для ваших *операцій шляху*.
+Будь-яка інтеграція спроєктована так, щоб її було дуже просто використовувати (із залежностями), тож ви можете створити «плагін» для свого застосунку у 2 рядках коду, використовуючи ту саму структуру та синтаксис, що й для ваших *операцій шляху*.
-### Протестовано
+### Протестовано { #tested }
* 100% <abbr title="Обсяг коду, що автоматично тестується">покриття тестами</abbr>.
* 100% <abbr title="Анотації типів у Python, завдяки яким ваш редактор і зовнішні інструменти можуть надавати кращу підтримку">анотована типами</abbr> кодова база.
-* Використовується у робочих середовищах.
+* Використовується в production-застосунках.
-## Можливості Starlette
+## Можливості Starlette { #starlette-features }
**FastAPI** повністю сумісний із (та побудований на основі) <a href="https://www.starlette.dev/" class="external-link" target="_blank"><strong>Starlette</strong></a>. Тому будь-який додатковий код Starlette, який ви маєте, також працюватиме.
-**FastAPI** фактично є підкласом **Starlette**. Тому, якщо ви вже знайомі зі Starlette або використовуєте його, більшість функціональності працюватиме так само.
+`FastAPI` фактично є підкласом `Starlette`. Тому, якщо ви вже знайомі зі Starlette або використовуєте його, більшість функціональності працюватиме так само.
-З **FastAPI** ви отримуєте всі можливості **Starlette** (адже FastAPI — це, по суті, Starlette на стероїдах):
+З **FastAPI** ви отримуєте всі можливості **Starlette** (адже FastAPI — це просто Starlette на стероїдах):
-* Разюча продуктивність. Це <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">один із найшвидших фреймворків на Python</a>, на рівні з **NodeJS** і **Go**.
+* Разюча продуктивність. Це <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">один із найшвидших доступних Python-фреймворків, на рівні з **NodeJS** і **Go**</a>.
* Підтримка **WebSocket**.
* Фонові задачі у процесі.
* Події запуску та завершення роботи.
* 100% покриття тестами.
* 100% анотована типами кодова база.
-## Можливості Pydantic
+## Можливості Pydantic { #pydantic-features }
**FastAPI** повністю сумісний із (та побудований на основі) <a href="https://docs.pydantic.dev/" class="external-link" target="_blank"><strong>Pydantic</strong></a>. Тому будь-який додатковий код Pydantic, який ви маєте, також працюватиме.
-Ð\92клÑ\8eÑ\87аÑ\8eÑ\87и зовнÑ\96Ñ\88нÑ\96 бÑ\96блÑ\96оÑ\82еки, побÑ\83дованÑ\96 Ñ\82акож на Pydantic, Ñ\82акÑ\96 Ñ\8fк <abbr title="Object-Relational Mapper">ORM</abbr>, <abbr title="Object-Document Mapper">ODM</abbr> для баз даних.
+Ð\92клÑ\8eÑ\87но Ñ\96з зовнÑ\96Ñ\88нÑ\96ми бÑ\96блÑ\96оÑ\82еками, Ñ\8fкÑ\96 Ñ\82акож базÑ\83Ñ\8eÑ\82Ñ\8cÑ\81Ñ\8f на Pydantic, Ñ\8fк-оÑ\82 <abbr title="Object-Relational Mapper - Ð\9eб'Ñ\94кÑ\82но-Ñ\80елÑ\8fÑ\86Ñ\96йний вÑ\96добÑ\80ажÑ\83ваÑ\87">ORM</abbr>-и, <abbr title="Object-Document Mapper - Ð\9eб'Ñ\94кÑ\82но-докÑ\83менÑ\82ний вÑ\96добÑ\80ажÑ\83ваÑ\87">ODM</abbr>-и для баз даних.
-Це також означає, що в багатьох випадках ви можете передати той самий об'єкт, який отримуєте з запиту, **безпосередньо в базу даних**, оскільки все автоматично перевіряється.
+Це також означає, що в багатьох випадках ви можете передати той самий об'єкт, який отримуєте із запиту, **безпосередньо в базу даних**, оскільки все автоматично перевіряється.
-Те ж саме відбувається й у зворотному напрямку — у багатьох випадках ви можете просто передати об'єкт, який отримуєте з бази даних, **безпосередньо клієнту**.
+Те саме застосовується й у зворотному напрямку — у багатьох випадках ви можете просто передати об'єкт, який отримуєте з бази даних, **безпосередньо клієнту**.
З **FastAPI** ви отримуєте всі можливості **Pydantic** (адже FastAPI базується на Pydantic для обробки всіх даних):
-* **Ніякої плутанини** :
- * Не потрібно вчити нову мову для визначення схем.
+* **Ніякої плутанини**:
+ * Не потрібно вчити нову мікромову для визначення схем.
* Якщо ви знаєте типи Python, ви знаєте, як використовувати Pydantic.
-* Легко працює з вашим **<abbr title="Інтегроване середовище розробки, схоже на редактор коду">IDE</abbr>/<abbr title="Програма, яка перевіряє помилки в коді">лінтером</abbr>/мозком**:
- * Оскільки структури даних Pydantic є просто екземплярами класів, які ви визначаєте; автодоповнення, лінтинг, mypy і ваша інтуїція повинні добре працювати з вашими перевіреними даними.
-* Валідація **складних структур**:
- * Використання ієрархічних моделей Pydantic. Python `typing`, `List` і `Dict` тощо.
- * Ð\92алÑ\96даÑ\82оÑ\80и дозволÑ\8fÑ\8eÑ\82Ñ\8c Ñ\87Ñ\96Ñ\82ко Ñ\96 пÑ\80оÑ\81Ñ\82о визнаÑ\87аÑ\82и, пеÑ\80евÑ\96Ñ\80Ñ\8fÑ\82и й докÑ\83менÑ\82Ñ\83ваÑ\82и Ñ\81кладнÑ\96 Ñ\81Ñ\85еми даниÑ\85 Ñ\83 виглÑ\8fдÑ\96 JSON-Ñ\81Ñ\85еми.
- * Ви можете мати глибоко **вкладені JSON об'єкти** та перевірити та анотувати їх всі.
+* Легко працює з вашим **<abbr title="Integrated Development Environment - Інтегроване середовище розробки: схоже на код-редактор">IDE</abbr>/<abbr title="Програма, що перевіряє код на помилки">linter</abbr>/мозком**:
+ * Оскільки структури даних pydantic є просто екземплярами класів, які ви визначаєте; автодоповнення, лінтинг, mypy і ваша інтуїція повинні добре працювати з вашими перевіреними даними.
+* Валідує **складні структури**:
+ * Використання ієрархічних моделей Pydantic, Python `typing`’s `List` і `Dict` тощо.
+ * Ð\92алÑ\96даÑ\82оÑ\80и даÑ\8eÑ\82Ñ\8c змогÑ\83 Ñ\81кладнÑ\96 Ñ\81Ñ\85еми даниÑ\85 Ñ\87Ñ\96Ñ\82ко й пÑ\80оÑ\81Ñ\82о визнаÑ\87аÑ\82и, пеÑ\80евÑ\96Ñ\80Ñ\8fÑ\82и й докÑ\83менÑ\82Ñ\83ваÑ\82и Ñ\8fк JSON Schema.
+ * Ви можете мати глибоко **вкладені JSON** об'єкти, і всі вони будуть валідовані та анотовані.
* **Розширюваність**:
- * Pydantic дозволяє визначати користувацькі типи даних або розширювати валідацію методами в моделі декоратором `validator`.
+ * Pydantic дозволяє визначати користувацькі типи даних або ви можете розширити валідацію методами в моделі, позначеними декоратором validator.
* 100% покриття тестами.