committed by
GitHub
16 changed files with 1027 additions and 1073 deletions
@ -1,37 +1,34 @@ |
|||
# Замеры производительности |
|||
# Бенчмарки |
|||
|
|||
Независимые тесты производительности приложений от TechEmpower показывают, что **FastAPI** под управлением Uvicorn <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">один из самых быстрых Python-фреймворков</a> и уступает только Starlette и Uvicorn (которые используются в FastAPI). (*) |
|||
Независимые тесты производительности TechEmpower показывают, что приложения на **FastAPI**, работающие под управлением Uvicorn, <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">являются одними из самых быстрых Python-фреймворков</a>, уступая только Starlette и Uvicorn (которые используются внутри FastAPI). |
|||
|
|||
Но при просмотре и сравнении замеров производительности следует иметь в виду нижеописанное. |
|||
Но при просмотре бенчмарков и сравнений следует иметь в виду следующее. |
|||
|
|||
## Замеры производительности и скорости |
|||
## Бенчмарки и скорость |
|||
|
|||
В подобных тестах часто можно увидеть, что инструменты разного типа сравнивают друг с другом, как аналогичные. |
|||
При просмотре бенчмарков часто можно увидеть, что инструменты разных типов сравниваются как эквивалентные. |
|||
|
|||
В частности, сравнивают вместе Uvicorn, Starlette и FastAPI (среди многих других инструментов). |
|||
В частности, Uvicorn, Starlette и FastAPI зачастую сравниваются вместе (среди множества других инструментов). |
|||
|
|||
Чем проще проблема, которую решает инструмент, тем выше его производительность. И большинство тестов не проверяют дополнительные функции, предоставляемые инструментом. |
|||
Чем проще проблема, решаемая инструментом, тем выше будет его производительность. И большинство бенчмарков не тестируют дополнительные функции, предоставляемые инструментом. |
|||
|
|||
Иерархия инструментов имеет следующий вид: |
|||
Иерархия выглядит так: |
|||
|
|||
* **Uvicorn**: ASGI-сервер |
|||
* **Starlette** (использует Uvicorn): веб-микрофреймворк |
|||
* **FastAPI** (использует Starlette): API-микрофреймворк с дополнительными функциями для создания API, с валидацией данных и т.д. |
|||
* **Starlette**: (использует Uvicorn) веб-микрофреймворк |
|||
* **FastAPI**: (использует Starlette) микрофреймворк для API с несколькими дополнительными функциями для создания API, с валидацией данных и т.д. |
|||
|
|||
* **Uvicorn**: |
|||
* Будет иметь наилучшую производительность, так как не имеет большого количества дополнительного кода, кроме самого сервера. |
|||
* Вы не будете писать приложение на Uvicorn напрямую. Это означало бы, что Ваш код должен включать как минимум весь |
|||
код, предоставляемый Starlette (или **FastAPI**). И если Вы так сделаете, то в конечном итоге Ваше приложение будет иметь те же накладные расходы, что и при использовании фреймворка, минимизирующего код Вашего приложения и Ваши ошибки. |
|||
* Uvicorn подлежит сравнению с Daphne, Hypercorn, uWSGI и другими веб-серверами. |
|||
|
|||
* Вы не будете писать приложение на Uvicorn напрямую. Это означало бы, что ваш код должен включать, как минимум, весь код, предоставляемый Starlette (или **FastAPI**). И если вы так сделали бы, то в конечном итоге ваше приложение имело бы те же накладные расходы, что и при использовании фреймворка, минимизирующего код вашего приложения и ваши ошибки. |
|||
* Если вы сравниваете Uvicorn, сравнивайте его с Daphne, Hypercorn, uWSGI и другими серверами приложений. |
|||
* **Starlette**: |
|||
* Будет уступать Uvicorn по производительности. Фактически Starlette управляется Uvicorn и из-за выполнения большего количества кода он не может быть быстрее, чем Uvicorn. |
|||
* Зато он предоставляет Вам инструменты для создания простых веб-приложений с обработкой маршрутов URL и т.д. |
|||
* Starlette следует сравнивать с Sanic, Flask, Django и другими веб-фреймворками (или микрофреймворками). |
|||
|
|||
* Следующей по производительности будет Starlette, после Uvicorn. Фактически, Starlette использует Uvicorn для запуска. Таким образом, она может быть "медленнее" Uvicorn только из-за выполнения большего объема кода. |
|||
* Но она предоставляет инструменты для создания простых веб-приложений, с маршрутизацией на основе путей и т.д. |
|||
* Если вы сравниваете Starlette, сравнивайте ее с Sanic, Flask, Django и другими веб-фреймворками (или микрофреймворками). |
|||
* **FastAPI**: |
|||
* Так же как Starlette использует Uvicorn и не может быть быстрее него, **FastAPI** использует Starlette, то есть он не может быть быстрее Starlette. |
|||
* FastAPI предоставляет больше возможностей поверх Starlette, которые наверняка Вам понадобятся при создании API, такие как проверка данных и сериализация. В довесок Вы ещё и получаете автоматическую документацию (автоматическая документация даже не увеличивает накладные расходы при работе приложения, так как она создается при запуске). |
|||
* Если Вы не используете FastAPI, а используете Starlette напрямую (или другой инструмент вроде Sanic, Flask, Responder и т.д.), Вам пришлось бы самостоятельно реализовать валидацию и сериализацию данных. То есть, в итоге, Ваше приложение имело бы такие же накладные расходы, как если бы оно было создано с использованием FastAPI. И во многих случаях валидация и сериализация данных представляют собой самый большой объём кода, написанного в приложениях. |
|||
* Таким образом, используя FastAPI Вы потратите меньше времени на разработку, уменьшите количество ошибок, строк кода и, вероятно, получите ту же производительность (или лучше), как и если бы не использовали его (поскольку Вам пришлось бы реализовать все его возможности в своем коде). |
|||
* FastAPI должно сравнивать с фреймворками веб-приложений (или наборами инструментов), которые обеспечивают валидацию и сериализацию данных, а также предоставляют автоматическую документацию, такими как Flask-apispec, NestJS, Molten и им подобные. |
|||
* Так же как Starlette использует Uvicorn и не может быть быстрее его, **FastAPI** использует Starlette, так что он не может быть быстрее нее. |
|||
* FastAPI предоставляет больше возможностей на базе Starlette. Возможности, которые, скорее всего, понадобятся вам при создании API, такие как валидация и сериализация данных. И благодаря этому вы получаете автоматическую документацию "бесплатно" (автоматическая документация даже не увеличивает накладные расходы при работе приложения, так как она создается при запуске). |
|||
* Если вы не использовали FastAPI и использовали Starlette напрямую (или другой инструмент, такой как Sanic, Flask, Responder и т.д.), вам пришлось бы самостоятельно реализовать всю валидацию и сериализацию данных. То есть, в итоге, ваше приложение имело бы такие же накладные расходы, как если бы оно было создано с использованием FastAPI. И во многих случаях валидация и сериализация данных представляют собой самый большой объем кода, написанного в приложениях. |
|||
* Таким образом, используя FastAPI, вы экономите время разработки, сокращаете количество ошибок, количество строк кода и, вероятно, получите такую же производительность (или лучше), какую получили бы, если бы не использовали его (так как вам пришлось бы реализовать все это в своем коде). |
|||
* Если вы сравниваете FastAPI, сравнивайте его с фреймворками веб-приложений (или наборами инструментов), которые обеспечивают валидацию и сериализацию данных, а также предоставляют автоматическую документацию, такими как Flask-apispec, NestJS, Molten и им подобные. Фреймворки с интегрированной автоматической валидацией данных, сериализацией и документацией. |
|||
|
@ -1,163 +1,157 @@ |
|||
# Запуск сервера вручную - Uvicorn |
|||
# Запуск сервера вручную |
|||
|
|||
Для запуска приложения **FastAPI** на удалённой серверной машине вам необходим программный сервер, поддерживающий протокол ASGI, такой как **Uvicorn**. |
|||
## Используйте команду `fastapi run` |
|||
|
|||
Существует три наиболее распространённые альтернативы: |
|||
Кратко говоря, используйте `fastapi run` для запуска вашего приложения FastAPI: |
|||
|
|||
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>: высокопроизводительный ASGI сервер. |
|||
* <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a>: ASGI сервер, помимо прочего поддерживающий HTTP/2 и Trio. |
|||
* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>: ASGI сервер, созданный для Django Channels. |
|||
|
|||
## Сервер как машина и сервер как программа |
|||
|
|||
В этих терминах есть некоторые различия и вам следует запомнить их. 💡 |
|||
|
|||
Слово "**сервер**" чаще всего используется в двух контекстах: |
|||
<div class="termy"> |
|||
|
|||
- удалённый или расположенный в "облаке" компьютер (физическая или виртуальная машина). |
|||
- программа, запущенная на таком компьютере (например, Uvicorn). |
|||
```console |
|||
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u> |
|||
|
|||
Просто запомните, если вам встретился термин "сервер", то обычно он подразумевает что-то из этих двух смыслов. |
|||
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting production server 🚀 |
|||
|
|||
Когда имеют в виду именно удалённый компьютер, часто говорят просто **сервер**, но ещё его называют **машина**, **ВМ** (виртуальная машина), **нода**. Все эти термины обозначают одно и то же - удалённый компьютер, обычно под управлением Linux, на котором вы запускаете программы. |
|||
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 |
|||
|
|||
Вы можете установить сервер, совместимый с протоколом ASGI, так: |
|||
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with |
|||
the following code: |
|||
|
|||
//// tab | Uvicorn |
|||
<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> |
|||
|
|||
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>, очень быстрый ASGI сервер, основанный на библиотеках uvloop и httptools. |
|||
<span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font> |
|||
|
|||
<div class="termy"> |
|||
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0: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://0.0.0.0:8000/docs</u></font> |
|||
|
|||
```console |
|||
$ pip install "uvicorn[standard]" |
|||
Logs: |
|||
|
|||
---> 100% |
|||
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>2306215</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. |
|||
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font> <b>(</b>Press CTRL+C |
|||
to quit<b>)</b> |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// tip | Подсказка |
|||
Это подойдет для большинства случаев. 😎 |
|||
|
|||
С опцией `standard`, Uvicorn будет устанавливаться и использоваться с некоторыми дополнительными рекомендованными зависимостями. |
|||
Вы можете использовать эту команду, например, для запуска вашего приложения **FastAPI** в контейнере, на сервере и т. д. |
|||
|
|||
В них входит `uvloop`, высокопроизводительная замена `asyncio`, которая значительно ускоряет работу асинхронных программ. |
|||
## ASGI-серверы |
|||
|
|||
/// |
|||
Давайте углубимся в детали. |
|||
|
|||
//// |
|||
FastAPI использует стандарт для создания веб-фреймворков и серверов на Python под названием <abbr title="Asynchronous Server Gateway Interface">ASGI</abbr>. FastAPI — это веб-фреймворк на основе ASGI. |
|||
|
|||
//// tab | Hypercorn |
|||
Основное, что вам требуется для запуска приложения **FastAPI** (или любого другого приложения на основе ASGI) на удаленной серверной машине — это программа ASGI-сервера, такая как **Uvicorn**, именно она используется по умолчанию в команде `fastapi`. |
|||
|
|||
* <a href="https://github.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>, ASGI сервер, поддерживающий протокол HTTP/2. |
|||
Существует несколько альтернатив, включая: |
|||
|
|||
<div class="termy"> |
|||
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>: высокопроизводительный ASGI-сервер. |
|||
* <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a>: ASGI-сервер, поддерживающий HTTP/2 и Trio среди прочих возможностей. |
|||
* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>: ASGI-сервер, созданный для Django Channels. |
|||
* <a href="https://github.com/emmett-framework/granian" class="external-link" target="_blank">Granian</a>: HTTP-сервер на Rust для Python-приложений. |
|||
* <a href="https://unit.nginx.org/howto/fastapi/" class="external-link" target="_blank">NGINX Unit</a>: NGINX Unit — легковесная и универсальная среда выполнения веб-приложений. |
|||
|
|||
```console |
|||
$ pip install hypercorn |
|||
|
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
...или какой-либо другой ASGI сервер. |
|||
|
|||
//// |
|||
## Сервер как машина и сервер как программа |
|||
|
|||
## Запуск серверной программы |
|||
Есть небольшая деталь в названиях, о которой стоит помнить. 💡 |
|||
|
|||
Затем запустите ваше приложение так же, как было указано в руководстве ранее, но без опции `--reload`: |
|||
Слово "**сервер**" обычно используется для обозначения как удаленного/облачного компьютера (физической или виртуальной машины), так и программы, которая на этой машине работает (например, Uvicorn). |
|||
|
|||
//// tab | Uvicorn |
|||
Просто имейте в виду, что когда вы видите "сервер", это может относиться к одному из этих двух значений. |
|||
|
|||
<div class="termy"> |
|||
Когда речь идет о удаленной машине, часто используется термин **сервер**, но также можно встретить **машина**, **ВМ** (виртуальная машина), **нода**. Все это обозначает какую-то удаленную машину, обычно под управлением Linux, на которой вы запускаете программы. |
|||
|
|||
```console |
|||
$ uvicorn main:app --host 0.0.0.0 --port 80 |
|||
## Установка программного сервера |
|||
|
|||
<span style="color: green;">INFO</span>: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) |
|||
``` |
|||
При установке FastAPI он поставляется с продакшн-сервером Uvicorn, и его можно запустить с помощью команды `fastapi run`. |
|||
|
|||
</div> |
|||
Но вы также можете установить ASGI-сервер вручную. |
|||
|
|||
//// |
|||
Убедитесь, что вы создали [виртуальное окружение](../virtual-environments.md){.internal-link target=_blank}, активировали его, а затем вы можете установить приложение сервера. |
|||
|
|||
//// tab | Hypercorn |
|||
Например, для установки Uvicorn: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ hypercorn main:app --bind 0.0.0.0:80 |
|||
$ pip install "uvicorn[standard]" |
|||
|
|||
Running on 0.0.0.0:8080 over http (CTRL + C to quit) |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
Схожий процесс применим к любым другим программам ASGI-серверов. |
|||
|
|||
/// warning | Предупреждение |
|||
/// tip | Подсказка |
|||
|
|||
Не забудьте удалить опцию `--reload`, если ранее пользовались ею. |
|||
Добавляя `standard`, Uvicorn установит и будет использовать некоторые рекомендованные дополнительные зависимости. |
|||
|
|||
Включение опции `--reload` требует дополнительных ресурсов, влияет на стабильность работы приложения и может повлечь прочие неприятности. |
|||
Сюда входит `uvloop`, высокопроизводительная замена для `asyncio`, которая дает значительное ускорение производительности асинхронных программ. |
|||
|
|||
Она сильно помогает во время **разработки**, но **не следует** использовать её при **реальной работе** приложения. |
|||
Когда вы устанавливаете FastAPI подобно `pip install "fastapi[standard]"`, вы уже получаете `uvicorn[standard]`. |
|||
|
|||
/// |
|||
|
|||
## Hypercorn с Trio |
|||
## Запуск программы сервера |
|||
|
|||
Starlette и **FastAPI** основаны на <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a>, которая делает их совместимыми как с <a href="https://docs.python.org/3/library/asyncio-task.html" class="external-link" target="_blank">asyncio</a> - стандартной библиотекой Python, так и с <a href="https://trio.readthedocs.io/en/stable/" class="external-link" target="_blank">Trio</a>. |
|||
|
|||
|
|||
Тем не менее Uvicorn совместим только с asyncio и обычно используется совместно с <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a>, высокопроизводительной заменой `asyncio`. |
|||
|
|||
Но если вы хотите использовать **Trio** напрямую, то можете воспользоваться **Hypercorn**, так как они совместимы. ✨ |
|||
|
|||
### Установка Hypercorn с Trio |
|||
|
|||
Для начала, вам нужно установить Hypercorn с поддержкой Trio: |
|||
Если вы установили ASGI-сервер вручную, обычно вам нужно передать импортную строку в специальном формате, чтобы он импортировал ваше FastAPI приложение: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "hypercorn[trio]" |
|||
---> 100% |
|||
$ uvicorn main:app --host 0.0.0.0 --port 80 |
|||
|
|||
<span style="color: green;">INFO</span>: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
### Запуск с Trio |
|||
/// note | Примечание |
|||
|
|||
Далее запустите Hypercorn с опцией `--worker-class` и аргументом `trio`: |
|||
Команда `uvicorn main:app` относится к: |
|||
|
|||
<div class="termy"> |
|||
* `main`: файл `main.py` (Python "модуль"). |
|||
* `app`: объект, созданный внутри `main.py` с помощью строки `app = FastAPI()`. |
|||
|
|||
```console |
|||
$ hypercorn main:app --worker-class trio |
|||
Это эквивалентно: |
|||
|
|||
```Python |
|||
from main import app |
|||
``` |
|||
|
|||
</div> |
|||
/// |
|||
|
|||
Hypercorn, в свою очередь, запустит ваше приложение использующее Trio. |
|||
Каждая из альтернативных программ ASGI-серверов будет иметь аналогичную команду, вы можете узнать больше в их документации. |
|||
|
|||
Таким образом, вы сможете использовать Trio в своём приложении. Но лучше использовать AnyIO, для сохранения совместимости и с Trio, и с asyncio. 🎉 |
|||
/// warning | Предупреждение |
|||
|
|||
Uvicorn и другие серверы поддерживают опцию `--reload`, которая полезна в процессе разработки. |
|||
|
|||
Опция `--reload` потребляет гораздо больше ресурсов, более нестабильна и т. д. |
|||
|
|||
Она очень помогает во время **разработки**, но **не следует** использовать её в **продакшне**. |
|||
|
|||
/// |
|||
|
|||
## Концепции развёртывания |
|||
|
|||
В вышеприведённых примерах серверные программы (например Uvicorn) запускали только **один процесс**, принимающий входящие запросы с любого IP (на это указывал аргумент `0.0.0.0`) на определённый порт (в примерах мы указывали порт `80`). |
|||
Эти примеры запускают программное обеспечение сервера (например, Uvicorn), начиная **один процесс**, слушающий все IP (`0.0.0.0`) на заранее определенном порту (например, `80`). |
|||
|
|||
Это основная идея. Но возможно, вы озаботитесь добавлением дополнительных возможностей, таких как: |
|||
Это основная идея. Но, вероятно, вам захочется позаботиться о некоторых дополнительных вещах, таких как: |
|||
|
|||
* Использование более безопасного протокола HTTPS |
|||
* Настройки запуска приложения |
|||
* Перезагрузка приложения |
|||
* Запуск нескольких экземпляров приложения |
|||
* Управление памятью |
|||
* Использование перечисленных функций перед запуском приложения. |
|||
* Безопасность - HTTPS |
|||
* Запуск при старте |
|||
* Перезапуски |
|||
* Репликация (количество запущенных процессов) |
|||
* Память |
|||
* Предварительные действия перед запуском |
|||
|
|||
Я расскажу вам больше о каждой из этих концепций в следующих главах, с конкретными примерами стратегий работы с ними. 🚀 |
|||
Я расскажу вам больше о каждой из этих концепций, как о них думать и приведу конкретные примеры со стратегиями их решения в следующих главах. 🚀 |
|||
|
@ -1,84 +1,28 @@ |
|||
# Генераторы проектов - Шаблоны |
|||
|
|||
Чтобы начать работу быстрее, Вы можете использовать "генераторы проектов", в которые включены множество начальных настроек для функций безопасности, баз данных и некоторые <dfn title="также известные как маршруты, URLы, ручки, ">эндпоинты</dfn> API. |
|||
|
|||
В генераторе проектов всегда будут предустановлены какие-то настройки, которые Вам следует обновить и подогнать под свои нужды, но это может быть хорошей отправной точкой для Вашего проекта. |
|||
|
|||
## Full Stack FastAPI PostgreSQL |
|||
|
|||
GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-postgresql</a> |
|||
|
|||
### Full Stack FastAPI PostgreSQL - Особенности |
|||
|
|||
* Полностью интегрирован с **Docker** (основан на Docker). |
|||
* Развёртывается в режиме Docker Swarm. |
|||
* Интегрирован с **Docker Compose** и оптимизирован для локальной разработки. |
|||
* **Готовый к реальной работе** веб-сервер Python использующий Uvicorn и Gunicorn. |
|||
* Бэкенд построен на фреймворке <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">**FastAPI**</a>: |
|||
* **Быстрый**: Высокопроизводительный, на уровне **NodeJS** и **Go** (благодаря Starlette и Pydantic). |
|||
* **Интуитивно понятный**: Отличная поддержка редактора. <dfn title="также известное как автозаполнение, интеллектуальность, автозавершение">Автодополнение кода</dfn> везде. Меньше времени на отладку. |
|||
* **Простой**: Разработан так, чтоб быть простым в использовании и изучении. Меньше времени на чтение документации. |
|||
* **Лаконичный**: Минимизировано повторение кода. Каждый объявленный параметр определяет несколько функций. |
|||
* **Надёжный**: Получите готовый к работе код. С автоматической интерактивной документацией. |
|||
* **Стандартизированный**: Основан на открытых стандартах API (<a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> и <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>) и полностью совместим с ними. |
|||
* <a href="https://fastapi.tiangolo.com/features/" class="external-link" target="_blank">**Множество других возможностей**</a> включая автоматическую проверку и сериализацию данных, интерактивную документацию, аутентификацию с помощью OAuth2 JWT-токенов и т.д. |
|||
* **Безопасное хранение паролей**, которые хэшируются по умолчанию. |
|||
* Аутентификация посредством **JWT-токенов**. |
|||
* <dfn title="Python-объекты связанные с базами данных">Модели</dfn> **SQLAlchemy** (независящие от расширений Flask, а значит могут быть непосредственно использованы процессами Celery). |
|||
* Базовая модель пользователя (измените или удалите её по необходимости). |
|||
* **Alembic** для организации миграций. |
|||
* **CORS** (Совместное использование ресурсов из разных источников). |
|||
* **Celery**, процессы которого могут выборочно импортировать и использовать модели и код из остальной части бэкенда. |
|||
* Тесты, на основе **Pytest**, интегрированные в Docker, чтобы Вы могли полностью проверить Ваше API, независимо от базы данных. Так как тесты запускаются в Docker, для них может создаваться новое хранилище данных каждый раз (Вы можете, по своему желанию, использовать ElasticSearch, MongoDB, CouchDB или другую СУБД, только лишь для проверки - будет ли Ваше API работать с этим хранилищем). |
|||
* Простая интеграция Python с **Jupyter Kernels** для разработки удалённо или в Docker с расширениями похожими на Atom Hydrogen или Visual Studio Code Jupyter. |
|||
* Фронтенд построен на фреймворке **Vue**: |
|||
* Сгенерирован с помощью Vue CLI. |
|||
* Поддерживает **аутентификацию с помощью JWT-токенов**. |
|||
* Страница логина. |
|||
* Перенаправление на страницу главной панели мониторинга после логина. |
|||
* Главная страница мониторинга с возможностью создания и изменения пользователей. |
|||
* Пользователь может изменять свои данные. |
|||
* **Vuex**. |
|||
* **Vue-router**. |
|||
* **Vuetify** для конструирования красивых компонентов страниц. |
|||
* **TypeScript**. |
|||
* Сервер Docker основан на **Nginx** (настроен для удобной работы с Vue-router). |
|||
* Многоступенчатая сборка Docker, то есть Вам не нужно сохранять или коммитить скомпилированный код. |
|||
* Тесты фронтенда запускаются во время сборки (можно отключить). |
|||
* Сделан настолько модульно, насколько возможно, поэтому работает "из коробки", но Вы можете повторно сгенерировать фронтенд с помощью Vue CLI или создать то, что Вам нужно и повторно использовать то, что захотите. |
|||
* **PGAdmin** для СУБД PostgreSQL, которые легко можно заменить на PHPMyAdmin и MySQL. |
|||
* **Flower** для отслеживания работы Celery. |
|||
* Балансировка нагрузки между фронтендом и бэкендом с помощью **Traefik**, а значит, Вы можете расположить их на одном домене, разделив url-пути, так как они обслуживаются разными контейнерами. |
|||
* Интеграция с Traefik включает автоматическую генерацию сертификатов Let's Encrypt для поддержки протокола **HTTPS**. |
|||
* GitLab **CI** (непрерывная интеграция), которая включает тестирование фронтенда и бэкенда. |
|||
|
|||
## Full Stack FastAPI Couchbase |
|||
|
|||
GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-couchbase</a> |
|||
|
|||
⚠️ **ПРЕДУПРЕЖДЕНИЕ** ⚠️ |
|||
|
|||
Если Вы начинаете новый проект, ознакомьтесь с представленными здесь альтернативами. |
|||
|
|||
Например, генератор проектов <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">Full Stack FastAPI PostgreSQL</a> может быть более подходящей альтернативой, так как он активно поддерживается и используется. И он включает в себя все новые возможности и улучшения. |
|||
|
|||
Но никто не запрещает Вам использовать генератор с СУБД Couchbase, возможно, он всё ещё работает нормально. Или у Вас уже есть проект, созданный с помощью этого генератора ранее, и Вы, вероятно, уже обновили его в соответствии со своими потребностями. |
|||
|
|||
Вы можете прочитать о нём больше в документации соответствующего репозитория. |
|||
|
|||
## Full Stack FastAPI MongoDB |
|||
|
|||
...может быть когда-нибудь появится, в зависимости от наличия у меня свободного времени и прочих факторов. 😅 🎉 |
|||
|
|||
## Модели машинного обучения на основе spaCy и FastAPI |
|||
|
|||
GitHub: <a href="https://github.com/microsoft/cookiecutter-spacy-fastapi" class="external-link" target="_blank">https://github.com/microsoft/cookiecutter-spacy-fastapi</a> |
|||
|
|||
### Модели машинного обучения на основе spaCy и FastAPI - Особенности |
|||
|
|||
* Интеграция с моделями **spaCy** NER. |
|||
* Встроенный формат запросов к **когнитивному поиску Azure**. |
|||
* **Готовый к реальной работе** веб-сервер Python использующий Uvicorn и Gunicorn. |
|||
* Встроенное развёртывание на основе **Azure DevOps** Kubernetes (AKS) CI/CD. |
|||
* **Многоязычность**. Лёгкий выбор одного из встроенных в spaCy языков во время настройки проекта. |
|||
* **Легко подключить** модели из других фреймворков (Pytorch, Tensorflow) не ограничиваясь spaCy. |
|||
# Full Stack FastAPI Шаблон |
|||
|
|||
Шаблоны, хотя и содержат определённые настройки, разработаны для гибкости и настраиваемости. Это позволяет вам модифицировать и адаптировать их в соответствии с требованиями вашего проекта, делая их отличной отправной точкой. 🏁 |
|||
|
|||
Вы можете использовать этот шаблон, чтобы быстрее начать работу, так как он включает в себя множество начальных настроек, функции безопасности, баз данных и несколько эндпоинтов API. |
|||
|
|||
Репозиторий GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-template" class="external-link" target="_blank">Full Stack FastAPI Template</a> |
|||
|
|||
## Full Stack FastAPI Шаблон - Технологический стек и функциональные возможности |
|||
|
|||
- ⚡ [**FastAPI**](https://fastapi.tiangolo.com) для Python-бэкенда API. |
|||
- 🧰 [SQLModel](https://sqlmodel.tiangolo.com) для взаимодействия с SQL-базами данных на Python (ORM). |
|||
- 🔍 [Pydantic](https://docs.pydantic.dev), используемый FastAPI, для валидации данных и управления настройками. |
|||
- 💾 [PostgreSQL](https://www.postgresql.org) как SQL база данных. |
|||
- 🚀 [React](https://react.dev) для фронтенда. |
|||
- 💃 Использование TypeScript, хуков, [Vite](https://vitejs.dev) и других компонентов современного стека фронтенда. |
|||
- 🎨 [Chakra UI](https://chakra-ui.com) для фронтенд-компонентов. |
|||
- 🤖 Автоматически сгенерированный фронтенд-клиент. |
|||
- 🧪 [Playwright](https://playwright.dev) для End-to-End тестирования. |
|||
- 🦇 Поддержка тёмного режима. |
|||
- 🐋 [Docker Compose](https://www.docker.com) для разработки и продакшна. |
|||
- 🔒 Безопасное хэширование паролей по умолчанию. |
|||
- 🔑 Аутентификация на основе JWT токенов. |
|||
- 📫 Восстановление пароля через email. |
|||
- ✅ Тесты с использованием [Pytest](https://pytest.org). |
|||
- 📞 [Traefik](https://traefik.io) в качестве реверс-прокси / балансировщика нагрузки. |
|||
- 🚢 Инструкции по развертыванию с использованием Docker Compose, включая настройку фронтенд-прокси Traefik для автоматической обработки HTTPS-сертификатов. |
|||
- 🏭 CI (непрерывная интеграция) и CD (непрерывное развёртывание) на базе GitHub Actions. |
|||
|
Loading…
Reference in new issue