Благодарю за видео, Тагир, уже прошел год с момента публикации видео, будет еще контент? Хотел также предложить свою помощь (на безвозмездной основе), может смогу способствовать развитию канала. Жду обратной связи)
@rozovayautopiya6 ай бұрын
Превосходно
@rozovayautopiya6 ай бұрын
Лучший
@semimaks7 ай бұрын
Спасибо за краткое объяснение без лишней воды! Я так понимаю вы применяете в своём подходе методологию чистой архитектуры?
@bgs128 ай бұрын
10 тыс просмотров на февраль 2024 года. Это успех! Давай ещё ролики про архитектуру FAST API
@lianakalpakchyan44548 ай бұрын
Greeaat❤❤❤ Why just 2 videos?😢
@zrxmax_11 ай бұрын
можно писать просто from .routes import Route . обозначит текущий каталог
@tagirkhalilov822711 ай бұрын
Привет, это обозначает текущий каталог, из которого запущено приложение, поэтому относительных импортов/путей лучше избегать и использовать абсолютные
@MDFireX511 ай бұрын
Шакальное качество, тупо скипаю
@MB-mi4ed Жыл бұрын
Вот бы еще грамотно asyncpg с pool в шаблон завести.
@ГубкаБоб-р8ъ Жыл бұрын
интересное и полезное видео. странно что у канала так мало подписчиков
@alexeymatveev9031 Жыл бұрын
что -то не получается, жалко нет requirements.txt... A, все, заработало. Спасибо! Супер видео, вернулся спустя время, очень в тему!
@Aleksey-t9b Жыл бұрын
Благодарю, Отличное видео. Интересно было бы увидеть реализацию авторизации и регистрации через FastAPI-users или другую библиотеку👍
@АртемАртеменконезабывайвыходит Жыл бұрын
Ох ты тут намудрил а не проще было класический SOA?
@АртемАртеменконезабывайвыходит Жыл бұрын
о давай больше про микросервисы а rabbitmq знаешь?
@Chel1k7 Жыл бұрын
А как тему пайчарма в vsc впихнуть?
@iswearican__ Жыл бұрын
я бы и не заметил, если бы не комент лол
@tagirkhalilov8227 Жыл бұрын
Привет, вот это расширение для VCS marketplace.visualstudio.com/items?itemName=garytyler.darcula-pycharm
@citieslg Жыл бұрын
Видео классное!!! Я в полном восторге! Приступаю к ручному копированию)
@citieslg Жыл бұрын
Спасибо за урок. Прошел с удовольствием Огромная просба продолжай плиз
@isded1681 Жыл бұрын
Архитектура похожа на архитектуру в Go
@fast_code Жыл бұрын
Когда продолжение?
@tagirkhalilov8227 Жыл бұрын
Привет! Очень загружен работой, очень надеюсь, что в ближайшие пару дней успею отснять и загрузить материал)
@fast_code Жыл бұрын
@@tagirkhalilov8227 Круто, понимая сам загружен. Продолжай в том же духе, мне очень понравился твой подход к архитектуре.
@wadyn95 Жыл бұрын
Какое-то странное стремление всё сделать в ООП стиле, лишнее усложнени
@annaarbuz Жыл бұрын
Ужос
@degtuarevvladimir9559 Жыл бұрын
Если снимешь для Redash, буду очень благодарен 😊
@deymonster2u Жыл бұрын
Приветствую! Можешь сделать видео по интеграции в эту связку еще postgresql и pgadmin в docer-compose?
@unstoppableharrison140 Жыл бұрын
Какие главные сильные стороны у FastAPI?
@tagirkhalilov8227 Жыл бұрын
Привет! Скорость и асинхронность за счет того, что основан на Starlette; поддержка OpenAPI и Swagger, что позволяет быстро генерировать документацию к своему API; расширяемость - есть много плагинов и расширений для FastAPI, поэтому можно легко дополнять встроенные возможности фреймворка и увеличивать функциональность
@unstoppableharrison140 Жыл бұрын
@@tagirkhalilov8227 спасибо за ответ!
@aiornerok3931 Жыл бұрын
А еще видео будет?
@tagirkhalilov8227 Жыл бұрын
Привет! Да, будет, сейчас собираю материалы для следующего ролика
@MrHopeOrLess Жыл бұрын
Отличное видео! Как сделать себе такие же иконки в ВСе?)))))
@tagirkhalilov8227 Жыл бұрын
Привет! Вот ссылка на расширение для VS Code - marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons
@sergeydostovalov6180 Жыл бұрын
Автор, если честно, то это не архитектура, а какая то жесть. Полностью статический класс сервера - это какое то мохровое древнее зло, зачем вам класс для него? Использование датаклассов подобным образом - издевательство над самой сутью датаклассов, просто кровь из глаз. Эвенты для выполнения периодических тасков бизнеслогики - это что-то с чем-то. Нейминг pkg internal - что ты такое? Писали раньше на го? Такое ощущение, что вы где то начитались антипатернов и решили так потролить общественность.
@ukratitelkisok9726 Жыл бұрын
Нужно ответное видео "что не так" я бы глянул
@umni_kot Жыл бұрын
У вас есть репозиторий с примером FastApi проекта? Я бы глянул. Без негатива, посмотрел бы как лучше делать.
@misterex99 Жыл бұрын
Что вам мешает сделать ролик как нужно и ответом сюда отправить? Он не претендует на идеальную архитектуру, это просто пример связки контейнеров и библиотек, чтоб у новичков было представление что и как работает в связке, а дальше люди посмотрят надо им это или нет, или просто возьмут другой фрейворк для своих нужд.
@andreynd Жыл бұрын
Классное видео, спасибо! Если снимешь еще по теме торговых алгоритмов, с использованием продвинутых технологий вроде редиса и докера, посмотрю с большим интересом.
@alexeymatveev9031 Жыл бұрын
спасибо, очень здорово, хотелось бы посмотреть как это прикручивается к фронтенду
@kab_psih Жыл бұрын
Спасибо, отличный подход!
@xewuss3750 Жыл бұрын
Радует, когда видишь, что у других тоже не с первого раза получается )))
@ffff00-korj Жыл бұрын
Класс, давно искал такой, формат
@eugeneshershen7027 Жыл бұрын
структура проэкта хуйня полная
@ivan_inanych Жыл бұрын
Очень полезное видео полного развёртывания, понятно хоть, как и что друг с другом взаимодействует, было бы интересно посмотреть развёртывание какого-нибудь простенького, но полноценного веб-приложения с фронтом на вью или другом фрейме для фронта, и с бэком на fastapi или асинхронном flask, например, c авторизацией и, может даже, пагинацией
@Dem0rey Жыл бұрын
В конце видео вы показали способ получать сразу весь список пар, но по нему же будет не удобно искать, т.к. каждая пара это элемент списка, а не ключ и придется либо для более быстрого поиска все равно перепаковать все в словарь, либо же каждый раз пробегаться по всем элементам до тех пор пока не найдем запрошенную пару, или есть какие то более быстрые методы поиска по такому списку?
@tagirkhalilov8227 Жыл бұрын
Привет! Воспользовавшись API Binance для получения списка всех пар, можно при помощи pydantic преобразовать полученный JSON в список словарей, а далее воспользовавшись функцией filter() получать данные нужной пары, например: list(filter(lambda currency: currency['symbol'] == 'BTCUSDT', currencyList)) Где curencyList - это список словарей, полученный из JSON Этот однострочник вернет такой ответ: [{'symbol': 'BTCUSDT', 'price': '23681.28000000'}]
@Dem0rey Жыл бұрын
@@tagirkhalilov8227 понял спасибо)
@АнтонКородян Жыл бұрын
Спасибо вам большое , было очень полезно ;))
@tagirkhalilov8227 Жыл бұрын
Привет! Рад, что видео было интересным для вас)
@ac130kz Жыл бұрын
fastapi utils не поддерживается уже 3 года
@tagirkhalilov8227 Жыл бұрын
Привет! Но тем не менее в таких базовых примерах создания запланированных задач fastapi utils все ещё работает
@ac130kz Жыл бұрын
@@tagirkhalilov8227 ну такое, я бы не использовал такие библиотеки, у fastapi быстрый цикл разработки, это не джанго с дооолгими LTS. Как альтернатива - это портировать небольшими кусками в утилиты самому
@lil_fix Жыл бұрын
Мммм, что-то знакомое Можно ссылку на оригинальный проект?
@tagirkhalilov8227 Жыл бұрын
У тебя эта ссылка и так есть)
@arka4443 Жыл бұрын
Для чего это морока с роутами? Есть какой то аргумент в пользу ооп здесь?
@tagirkhalilov8227 Жыл бұрын
Привет! Удобство навигации и заклад на масшатабируемость
@arka4443 Жыл бұрын
@@tagirkhalilov8227 удобство? Масштабируемость? В этих классах наоборот легче запутаться, а что насчет масштабируемости? Фреймворк ты не будешь менять, что будет масштабироваться?
@tagirkhalilov8227 Жыл бұрын
Будут добавляться сопутствующие технологии, orm, базы данных, брокеры сообщений и для взаимодействия со всем этим нужно все правильно разбить по пакетам и модулям. А насчет удобства - мне удобно, когда все лежит на своих полках, когда каждый класс и модуль отвечает за определенное действие. Может кому-то удобно по-другому. В видео я описал свое видение и показал то, что удобно мне, полагая, что поделюсь с другими, кто ищет удобную архитектуру для своих проектов. Я не надеюсь на то, что с этим согласятся все. Мое желание - это поделиться
@arka4443 Жыл бұрын
@@tagirkhalilov8227 а чем фп не угодило? Тоже ведь можно разбить на модули) и каждая функция имеет свою зону ответственности. Ну раз уж так тебе вкусно, то вопросов нет, но как по мне это просто злоупотребление ООП
@tagirkhalilov8227 Жыл бұрын
Несомненно, каждая функция будет иметь свою зону ответственности. Однако на мне лично не удобно читать код, когда все в одном файле. В маленьких проектах можно этого не заметить, а при крупной разработке, а уже тем более в enterprise, когда бизнес-логика часто меняется - это становится, в каком-то смысле, просто невыносимо
@АлександрТезин-м6ъ Жыл бұрын
Интересно посмотреть на другие архитектуры но я обычно немного другую использую
@tagirkhalilov8227 Жыл бұрын
Привет! Если у тебя есть репозиторий с примером твоей архитектуры, то мог бы ты дать ссылку? Я бы с удовольствием посмотрел)
@Syberby Жыл бұрын
@@tagirkhalilov8227 я бы тоже)
@TheVenelo Жыл бұрын
Правильно ли я понимаю, что events - startup и shutdown, что нужно сделать при старте приложения и что при его завершении? Пытаюсь понять нужно ли мне это использовать. Я low level в python. Первый раз увидел у кого то использование ... вместо pass. Так же написание осмысленных буковок в init файлы пакетов python, обычно какие ролики не смотрел обучающие никто особо не разбирал такое, но когда смотрел исходный код в библиотеках часто это видел и не особо понимал как с этим взаимодействовать, да и сейчас не сильно понимаю. Судя по всему в init файлы прописывают импорты, чтобы дальше в файле.py можно было проще импортировать(или вообще не импортировать) и использовать функции/методы класса. __routes__ это магический метод? как я понял они дефолтные типо __eq__, я не прав? Раздробленность проекта интересная.
@tagirkhalilov8227 Жыл бұрын
Привет! Да, насчёт events ты все верно понял. А init файлы используют в основном для удобства импортирования, но они предоставляют гораздо больше возможностей, например, пара из них: 1) Указание магического поля ___all___ для удобства импортивания модулей пакета через * 2) Проверка зависимостей перед использованием пакета Насчёт __routes__ - это не магический атрибут, нижнее подчёркивание по бокам - это лишь синтактический сахар) Да и у магических методов/атрибутов - по 2 подчеркивания по бокам, а тут одно
@TheVenelo Жыл бұрын
@@tagirkhalilov8227Спасибо за развернутый ответ!
@sashass099 Жыл бұрын
Спасибо за отличные видео, неглядя лайк и подписка. Подскажи, в чем может быть проблема.. Всё сделал как у тебя: структура, содержимое, уделил этому время. Всё запускается, но почему-то тупо не работают ивенты, которые запланированы в on_startup и on_loop_startup. Уже всё облазил, вроде бы всё соответствует твоему коду, но тупо не работают эти ивенты, ошибок никаких нет. Ссылки на binance переписал верно, в postmanе проверил. Может обновишь репозиторий в соответствии с кодом из этого видео?
@tagirkhalilov8227 Жыл бұрын
Привет! Спасибо за фидбек) Вот ссылка на репозиторий - github.com/geekceo/FastAPI-app-Redis-Docker Если вдруг не поможет, то отпиши под этим комментом, свяжемся в тг и я помогу тебе
@sashass099 Жыл бұрын
@@tagirkhalilov8227 всё ок уже, какая-то странная ерунда была с os.getenv(..) Спасибо за репозиторий!!! Давай больше видео, давай еще подконнектим sqlalchemy асинхронный и вообще эндпоинты асинхронные) Чтоб всё по красоте) И еще RabbitMQ / Celery а затем CI/CD вот это будет самый нужный стек игрушек)
@tagirkhalilov8227 Жыл бұрын
Рад, что заработало) Да, у меня в планах как раз эти технологии. Но я хочу разбить это на несколько видео, чтобы не вываливать большой поток информации в одном огромном видео)
@TheVenelo Жыл бұрын
Не много странно, что в описании не указана ссылка на такой шаблон, для более наглядного изучения вне видео. Спасибо за контент)
@tagirkhalilov8227 Жыл бұрын
Привет! Спасибо, что указал на это, добавил в описание. Ссылка - github.com/geekceo/FastAPI-app-Structure-Template
@bxxdan Жыл бұрын
Можете создать репозиторий этого шаблона на гитхабе?
@tagirkhalilov8227 Жыл бұрын
Привет! Создал, вот ссылка на репозиторий - github.com/geekceo/FastAPI-app-Structure-Template
@annasmur4556 Жыл бұрын
Спасибо за подробное и наглядное объяснение!
@Анатолий-л6я5е Жыл бұрын
Спасибо. Отличное видео. Очень хочется увидеть полный проект, который максимально приближен к "боевым" проектам. и связка в базой, брокерами, обработчиками и тд...
@tagirkhalilov8227 Жыл бұрын
Привет, спасибо за фидбек) Готовлю материал для этого видео, в скором времени выложу)
@АлАп-э5о Жыл бұрын
Круто, отличный ролик!
@romanok2014 Жыл бұрын
Мне понравился гайд, понятно и без воды. Но мне интересно есть ли смысл так усложнять код через такие абстракции с классами. Например подход как тут (гитхаб) AlexDemure/fastapi-architecture выглядит проще и в то же время такой же понятный для командной разработки. Хотелось бы услышать мнение на счет этого
@tagirkhalilov8227 Жыл бұрын
Привет! Спасибо за отзыв) Касательно отличий между подходами в моем видео и в проекте AlexDemure: 1) Пройдясь по структуре проекта AlexDemure можно заметить, что там много пакетов, действительно, в этом нет ничего страшного, ведь проекты могут быть сколько угодно огромными. Тут дело в том, что некоторые из них можно классифицировать по роду назначения и разбить на отдельные родительские пакеты. Именно это я показывал, когда создавал 3 основных пакета и говоря про их назначение. Это намного упростит навигацию по проекту, так как разработчик будет сразу знать, где нужный ему модуль. Это позволит не отвлекаться на поиск среди множества пакетов, находящихся в одной директории. 2) Далее, касательно самой абстракции, в самом определении абстракции дается хороший совет о том, что каждый модуль/класс должен выполнять конкретную задачу и должен быть хорош именно в ней. Если задуматься - то это очень упрощает дальнейшую разработку. Ведь мы всегда знаем какой модуль за что отвечает. Один за инициализацию сервера, второй за регистрацию путей, третий за события. Каждый хорош в своем. Мы всегда знаем в какой модуль залезть для правок и обновлений. В свой подходе AlexDemure старался придерживаться этого, но не везде, из-за этого есть путаница, например в самом модуле main.py в пакете core. Вроде бы у него есть отдельный модуль для регистрации путей, но все равно в модуле main опять происходит регистрация, и описание событий там же, и запуск uvicorn там тоже. Получается сборная солянка и при дальнейшей работе нужно будет думать и искать - а где же я оставил события, какая из регистраций путей нужна мне сейчас? В файле urls.py или которую я в main писал? В подходе, который описан в видео такой путаницы быть не может, так как каждый пакет отвечает за конкретные модули, связанные "родом деятельности", и каждый модуль выполняет ровно одну свою задачу. Свой подход я выработал на основе именно коммерческой разработки, где так же сталкивался с разным описанием архитектуры приложения разной степени эффективности и удобства. В конце концов подытожил все в такой вид, о котором говорил и показывал в видео)