Pull to refresh

Comments 17

Подскажите, а для чего в Dockerfile есть

COPY .app/ .app/

Если в docker-compose директория прокидывается через volume и работать будет и без COPY

Да, вы абсолютно правы, эту строчку можно вообще убрать из докер-файла

Стоп, почему убирать? Docker compose же нужен для локальной разработки

Потому волюм в docker-compose и так прокидывает эту директорию в контейнер. Docker compose не всегда нужен только для локальной разработки. Например, с его помощью можно накатывать ПО для заказчиков и не возиться с особенностями установленной у него операционки

А не проще использовать готовые шаблоны, например Cookiecutter? Для Джанго приложений полностью на него перешёл - удобно и быстро, только надо разобраться в структуре проекта)

В зависимости от того, что вам нужно. Шаблон Cookiecutter для fastapi содержит в себе очень много всего, не всегда столько нужно для простого api. Да и кажется его больше не поддерживают (последнее обновление 4 года назад)

На всякий случай - uvicorn с опцией --reload потребляет очень много ресурсов и может тормозить, о чём говорится прям в документации) поэтому использовать на проде крайне не рекомендуется (можно в том случае, если ресурсов предостаточно, или высокая производительность не требуется)

А SQLModel пробовали? Он объединяет Sqlalchemy с Pydantic. В моих проектах на fastapi хорошо заходит, но бывают некоторые неудобства из-за абстракции поверх алхимии.

Пока не пробовал. Наверное, стоит попробовать. Есть либа, которая позволяет маппить модели sqlalchemy в модели pydantic. Называется pydantic-marshals, тоже довольно удобная вещь

И ещё вопрос, почему requirements.txt, а не pyproject.toml, где можно гибко управлять зависимостями?

Потому что это самый простой вариант. Его всегда можно легко и просто заменить на pyproject.toml, при желании

Мне кажется, в тексте не хватает двух слов о существующих шаблонах "FastAPI приложений", которых на GitHub действительно много. Например, full-stack-fastapi-template от tiangolo, создателя этого фреймворка. Мотивация автора понятна, но совсем не понятно, почему не решили использовать один из существующих шаблонов? Что в этом шаблоне есть такого, чего нет в уже существующих?

Также хочу отметить, что вы лишаете свое приложение гибкости и масштабируемости, используя подобную структуру. FastAPI - это микрофреймворк. Легкий инструмент, чтобы принимать запросы, передавать полученную информацию куда-то еще, возвращать ответ пользователю. Веб-фреймворк принадлежит к "внешнему кругу", если выражаться в терминах чистой архитектуры, и это неспроста. Роль FastAPI в приложении весьма примитивна и ограниченна, однако в такой структуре он стоит в центре, что подтверждает и автор статьи:

все эти папки (за исключение, наверное, api/) опциональны...

В случае автора статьи эта проблема может быть и не проблемой, поскольку мотивация в разворачивании "простеньких" апишек для тестирования фронтенда. Но для некоторых читателей однажды это может стать причиной серьезного рефакторинга, когда с разрастанием кодовой базы станут очевидны недостатки, превращающиеся в боли.

Спасибо за конструктивный комментарий, постараюсь так же конструктивно ответить.

Я не упоминал о существующих шаблонах, по нескольким причинам:
1) Я с ними слабо знаком и не использую их (хотя я понимаю, что стоит ознакомиться)
2) Они часто имеют избыточный функционал (как пример, cookiecutter содержит в себе фронт на Vue, а зачем он мне нужен, если я пишу простые CRUD'ы просто чтобы попрактиковаться)

Насчет гибкости и масштабируемости хотел бы узнать более подробно. Почему моя структура плоха? Не могли бы еще привести пример проблем моего подхода с разрастанием кодовой базы? Это позволило бы мне пересмотреть свой подход и улучшить его.

Я только начал пытаться, было интересно почитать

Sign up to leave a comment.

Articles