- Видео 2
- Просмотров 30 403
Tagir Khalilov
Добавлен 28 июл 2021
FastAPI приложение | Redis + Docker
В этом видео я покажу Вам, как можно связать FastAPI и Redis, а так же обернуть все приложение в Docker контейнеры с последующей оркестрацией
Ссылка на видео со структурой FastAPI приложения - ruclips.net/video/IpSRs6ZNA5k/видео.html&ab_channel=TagirKhalilov
Ссылка на репозиторий с кодом проекта - github.com/geekceo/FastAPI-app-Redis-Docker
Ссылка на видео со структурой FastAPI приложения - ruclips.net/video/IpSRs6ZNA5k/видео.html&ab_channel=TagirKhalilov
Ссылка на репозиторий с кодом проекта - github.com/geekceo/FastAPI-app-Redis-Docker
Просмотров: 13 474
Видео
Архитектура FastAPI приложения | Шаблон
Просмотров 17 тыс.Год назад
В данном видео вы увидите, как можно легко организовать базовую структуру приложения FastAPI для дальнейшего удобного масштабирования проекта, не упираясь в ограничения архитектуры. Сможете получить удобство навигации по проекту и эффективность в командной разработке Ссылка на GitHub шаблона - github.com/geekceo/FastAPI-app-Structure-Template
Превосходно
Лучший
Спасибо за краткое объяснение без лишней воды! Я так понимаю вы применяете в своём подходе методологию чистой архитектуры?
10 тыс просмотров на февраль 2024 года. Это успех! Давай ещё ролики про архитектуру FAST API
Greeaat❤❤❤ Why just 2 videos?😢
можно писать просто from .routes import Route . обозначит текущий каталог
Привет, это обозначает текущий каталог, из которого запущено приложение, поэтому относительных импортов/путей лучше избегать и использовать абсолютные
Шакальное качество, тупо скипаю
Вот бы еще грамотно asyncpg с pool в шаблон завести.
интересное и полезное видео. странно что у канала так мало подписчиков
что -то не получается, жалко нет requirements.txt... A, все, заработало. Спасибо! Супер видео, вернулся спустя время, очень в тему!
Благодарю, Отличное видео. Интересно было бы увидеть реализацию авторизации и регистрации через FastAPI-users или другую библиотеку👍
Ох ты тут намудрил а не проще было класический SOA?
о давай больше про микросервисы а rabbitmq знаешь?
А как тему пайчарма в vsc впихнуть?
я бы и не заметил, если бы не комент лол
Привет, вот это расширение для VCS marketplace.visualstudio.com/items?itemName=garytyler.darcula-pycharm
Видео классное!!! Я в полном восторге! Приступаю к ручному копированию)
Спасибо за урок. Прошел с удовольствием Огромная просба продолжай плиз
Архитектура похожа на архитектуру в Go
Когда продолжение?
Привет! Очень загружен работой, очень надеюсь, что в ближайшие пару дней успею отснять и загрузить материал)
@@tagirkhalilov8227 Круто, понимая сам загружен. Продолжай в том же духе, мне очень понравился твой подход к архитектуре.
Какое-то странное стремление всё сделать в ООП стиле, лишнее усложнени
Ужос
Если снимешь для Redash, буду очень благодарен 😊
Приветствую! Можешь сделать видео по интеграции в эту связку еще postgresql и pgadmin в docer-compose?
Какие главные сильные стороны у FastAPI?
Привет! Скорость и асинхронность за счет того, что основан на Starlette; поддержка OpenAPI и Swagger, что позволяет быстро генерировать документацию к своему API; расширяемость - есть много плагинов и расширений для FastAPI, поэтому можно легко дополнять встроенные возможности фреймворка и увеличивать функциональность
@@tagirkhalilov8227 спасибо за ответ!
А еще видео будет?
Привет! Да, будет, сейчас собираю материалы для следующего ролика
Отличное видео! Как сделать себе такие же иконки в ВСе?)))))
Привет! Вот ссылка на расширение для VS Code - marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons
Автор, если честно, то это не архитектура, а какая то жесть. Полностью статический класс сервера - это какое то мохровое древнее зло, зачем вам класс для него? Использование датаклассов подобным образом - издевательство над самой сутью датаклассов, просто кровь из глаз. Эвенты для выполнения периодических тасков бизнеслогики - это что-то с чем-то. Нейминг pkg internal - что ты такое? Писали раньше на го? Такое ощущение, что вы где то начитались антипатернов и решили так потролить общественность.
Нужно ответное видео "что не так" я бы глянул
У вас есть репозиторий с примером FastApi проекта? Я бы глянул. Без негатива, посмотрел бы как лучше делать.
Что вам мешает сделать ролик как нужно и ответом сюда отправить? Он не претендует на идеальную архитектуру, это просто пример связки контейнеров и библиотек, чтоб у новичков было представление что и как работает в связке, а дальше люди посмотрят надо им это или нет, или просто возьмут другой фрейворк для своих нужд.
Классное видео, спасибо! Если снимешь еще по теме торговых алгоритмов, с использованием продвинутых технологий вроде редиса и докера, посмотрю с большим интересом.
спасибо, очень здорово, хотелось бы посмотреть как это прикручивается к фронтенду
Спасибо, отличный подход!
Радует, когда видишь, что у других тоже не с первого раза получается )))
Класс, давно искал такой, формат
структура проэкта хуйня полная
Очень полезное видео полного развёртывания, понятно хоть, как и что друг с другом взаимодействует, было бы интересно посмотреть развёртывание какого-нибудь простенького, но полноценного веб-приложения с фронтом на вью или другом фрейме для фронта, и с бэком на fastapi или асинхронном flask, например, c авторизацией и, может даже, пагинацией
В конце видео вы показали способ получать сразу весь список пар, но по нему же будет не удобно искать, т.к. каждая пара это элемент списка, а не ключ и придется либо для более быстрого поиска все равно перепаковать все в словарь, либо же каждый раз пробегаться по всем элементам до тех пор пока не найдем запрошенную пару, или есть какие то более быстрые методы поиска по такому списку?
Привет! Воспользовавшись API Binance для получения списка всех пар, можно при помощи pydantic преобразовать полученный JSON в список словарей, а далее воспользовавшись функцией filter() получать данные нужной пары, например: list(filter(lambda currency: currency['symbol'] == 'BTCUSDT', currencyList)) Где curencyList - это список словарей, полученный из JSON Этот однострочник вернет такой ответ: [{'symbol': 'BTCUSDT', 'price': '23681.28000000'}]
@@tagirkhalilov8227 понял спасибо)
Спасибо вам большое , было очень полезно ;))
Привет! Рад, что видео было интересным для вас)
fastapi utils не поддерживается уже 3 года
Привет! Но тем не менее в таких базовых примерах создания запланированных задач fastapi utils все ещё работает
@@tagirkhalilov8227 ну такое, я бы не использовал такие библиотеки, у fastapi быстрый цикл разработки, это не джанго с дооолгими LTS. Как альтернатива - это портировать небольшими кусками в утилиты самому
Мммм, что-то знакомое Можно ссылку на оригинальный проект?
У тебя эта ссылка и так есть)
Для чего это морока с роутами? Есть какой то аргумент в пользу ооп здесь?
Привет! Удобство навигации и заклад на масшатабируемость
@@tagirkhalilov8227 удобство? Масштабируемость? В этих классах наоборот легче запутаться, а что насчет масштабируемости? Фреймворк ты не будешь менять, что будет масштабироваться?
Будут добавляться сопутствующие технологии, orm, базы данных, брокеры сообщений и для взаимодействия со всем этим нужно все правильно разбить по пакетам и модулям. А насчет удобства - мне удобно, когда все лежит на своих полках, когда каждый класс и модуль отвечает за определенное действие. Может кому-то удобно по-другому. В видео я описал свое видение и показал то, что удобно мне, полагая, что поделюсь с другими, кто ищет удобную архитектуру для своих проектов. Я не надеюсь на то, что с этим согласятся все. Мое желание - это поделиться
@@tagirkhalilov8227 а чем фп не угодило? Тоже ведь можно разбить на модули) и каждая функция имеет свою зону ответственности. Ну раз уж так тебе вкусно, то вопросов нет, но как по мне это просто злоупотребление ООП
Несомненно, каждая функция будет иметь свою зону ответственности. Однако на мне лично не удобно читать код, когда все в одном файле. В маленьких проектах можно этого не заметить, а при крупной разработке, а уже тем более в enterprise, когда бизнес-логика часто меняется - это становится, в каком-то смысле, просто невыносимо
Интересно посмотреть на другие архитектуры но я обычно немного другую использую
Привет! Если у тебя есть репозиторий с примером твоей архитектуры, то мог бы ты дать ссылку? Я бы с удовольствием посмотрел)
@@tagirkhalilov8227 я бы тоже)
Правильно ли я понимаю, что events - startup и shutdown, что нужно сделать при старте приложения и что при его завершении? Пытаюсь понять нужно ли мне это использовать. Я low level в python. Первый раз увидел у кого то использование ... вместо pass. Так же написание осмысленных буковок в init файлы пакетов python, обычно какие ролики не смотрел обучающие никто особо не разбирал такое, но когда смотрел исходный код в библиотеках часто это видел и не особо понимал как с этим взаимодействовать, да и сейчас не сильно понимаю. Судя по всему в init файлы прописывают импорты, чтобы дальше в файле.py можно было проще импортировать(или вообще не импортировать) и использовать функции/методы класса. __routes__ это магический метод? как я понял они дефолтные типо __eq__, я не прав? Раздробленность проекта интересная.
Привет! Да, насчёт events ты все верно понял. А init файлы используют в основном для удобства импортирования, но они предоставляют гораздо больше возможностей, например, пара из них: 1) Указание магического поля ___all___ для удобства импортивания модулей пакета через * 2) Проверка зависимостей перед использованием пакета Насчёт __routes__ - это не магический атрибут, нижнее подчёркивание по бокам - это лишь синтактический сахар) Да и у магических методов/атрибутов - по 2 подчеркивания по бокам, а тут одно
@@tagirkhalilov8227Спасибо за развернутый ответ!
Спасибо за отличные видео, неглядя лайк и подписка. Подскажи, в чем может быть проблема.. Всё сделал как у тебя: структура, содержимое, уделил этому время. Всё запускается, но почему-то тупо не работают ивенты, которые запланированы в on_startup и on_loop_startup. Уже всё облазил, вроде бы всё соответствует твоему коду, но тупо не работают эти ивенты, ошибок никаких нет. Ссылки на binance переписал верно, в postmanе проверил. Может обновишь репозиторий в соответствии с кодом из этого видео?
Привет! Спасибо за фидбек) Вот ссылка на репозиторий - github.com/geekceo/FastAPI-app-Redis-Docker Если вдруг не поможет, то отпиши под этим комментом, свяжемся в тг и я помогу тебе
@@tagirkhalilov8227 всё ок уже, какая-то странная ерунда была с os.getenv(..) Спасибо за репозиторий!!! Давай больше видео, давай еще подконнектим sqlalchemy асинхронный и вообще эндпоинты асинхронные) Чтоб всё по красоте) И еще RabbitMQ / Celery а затем CI/CD вот это будет самый нужный стек игрушек)
Рад, что заработало) Да, у меня в планах как раз эти технологии. Но я хочу разбить это на несколько видео, чтобы не вываливать большой поток информации в одном огромном видео)
Не много странно, что в описании не указана ссылка на такой шаблон, для более наглядного изучения вне видео. Спасибо за контент)
Привет! Спасибо, что указал на это, добавил в описание. Ссылка - github.com/geekceo/FastAPI-app-Structure-Template
Можете создать репозиторий этого шаблона на гитхабе?
Привет! Создал, вот ссылка на репозиторий - github.com/geekceo/FastAPI-app-Structure-Template
Спасибо за подробное и наглядное объяснение!
Спасибо. Отличное видео. Очень хочется увидеть полный проект, который максимально приближен к "боевым" проектам. и связка в базой, брокерами, обработчиками и тд...
Привет, спасибо за фидбек) Готовлю материал для этого видео, в скором времени выложу)
Круто, отличный ролик!
Мне понравился гайд, понятно и без воды. Но мне интересно есть ли смысл так усложнять код через такие абстракции с классами. Например подход как тут (гитхаб) AlexDemure/fastapi-architecture выглядит проще и в то же время такой же понятный для командной разработки. Хотелось бы услышать мнение на счет этого
Привет! Спасибо за отзыв) Касательно отличий между подходами в моем видео и в проекте AlexDemure: 1) Пройдясь по структуре проекта AlexDemure можно заметить, что там много пакетов, действительно, в этом нет ничего страшного, ведь проекты могут быть сколько угодно огромными. Тут дело в том, что некоторые из них можно классифицировать по роду назначения и разбить на отдельные родительские пакеты. Именно это я показывал, когда создавал 3 основных пакета и говоря про их назначение. Это намного упростит навигацию по проекту, так как разработчик будет сразу знать, где нужный ему модуль. Это позволит не отвлекаться на поиск среди множества пакетов, находящихся в одной директории. 2) Далее, касательно самой абстракции, в самом определении абстракции дается хороший совет о том, что каждый модуль/класс должен выполнять конкретную задачу и должен быть хорош именно в ней. Если задуматься - то это очень упрощает дальнейшую разработку. Ведь мы всегда знаем какой модуль за что отвечает. Один за инициализацию сервера, второй за регистрацию путей, третий за события. Каждый хорош в своем. Мы всегда знаем в какой модуль залезть для правок и обновлений. В свой подходе AlexDemure старался придерживаться этого, но не везде, из-за этого есть путаница, например в самом модуле main.py в пакете core. Вроде бы у него есть отдельный модуль для регистрации путей, но все равно в модуле main опять происходит регистрация, и описание событий там же, и запуск uvicorn там тоже. Получается сборная солянка и при дальнейшей работе нужно будет думать и искать - а где же я оставил события, какая из регистраций путей нужна мне сейчас? В файле urls.py или которую я в main писал? В подходе, который описан в видео такой путаницы быть не может, так как каждый пакет отвечает за конкретные модули, связанные "родом деятельности", и каждый модуль выполняет ровно одну свою задачу. Свой подход я выработал на основе именно коммерческой разработки, где так же сталкивался с разным описанием архитектуры приложения разной степени эффективности и удобства. В конце концов подытожил все в такой вид, о котором говорил и показывал в видео)
Интересно! Продолжай)