О книге «FastAPI» Билла Любановича
Насколько я знаю, это первая книга, целиком посвященная FastAPI. Ждал её с нетерпением – мне почему-то казалось, что это будет своего рода «исчерпывающее руководство» по разработке веб-сервисов на FastAPI. Забегая вперёд, скажу, что мои ожидания не оправдались. Но давайте обо всём по порядку!
Краткий обзор глав книги
Сквозной «сюжет» книги – разработка простенького API для доступа к БД о фантастических тварях и их искателях. Стиль изложения легкий, с шутками-прибаутками различной степени плоскости. Книга совсем небольшая, содержит 280 страниц, и хорошо структурирована.
В первой главе Modern Web коротко представлена история развития Веба и понятия API, REST, JSON, concurrency и прочие необходимые вводные.
Вторая глава Modern Python очень кратко рассматривает базовые инструменты и возможности Python, владение которыми необходимо для разработки с FastAPI.
Если вы не первый раз берётесь за разработку API на Python, то первые две главы можно пропускать. Хотя написаны они интересно, и содержат ссылки на некоторые познавательные материалы, так что при наличии времени почитать стоит.
Вторая часть – A FastAPI tour – представляет обзор FastAPI «с высоты полёта дрона», как выразился автор.
В третьей главе мы пишем простейший «Hello world!» на FastAPI.
Следующие две главы снова обзорные: четвертая посвящения темам concurrency, asyncio
, и т.п., а пятая – type hints и библиотеке pydantic
.
Глава 6 рассказывает, как FastAPI использует Dependency Injection для передачи необходимых данных в обработчики эндпоинтов.
В главе 7 представлено кратоке сравнение возможностей FastAPI с Flask и Django.
Далее мы наконец-то добираемся до самого интересного!
В восьмой главе пишем веб-слой нашего приложения, с фейковым сервисным слоем (в котором живут hard-coded данные) для удобства написания изолированных тестов.
Далее, в девятой главе – пишем сервисный слой и тесты к нему.
Наконец, в десятой главе реализуем реальный слой данных с использование SQLite. Обработку ошибок предложено выполнять при помощи исключений, что здорово. К сожалению, автор отказался от рассмотрения SQLAlchemy + PostgreSQL – «чтобы не отвлекать внимание от работы непосредственно с FastAPI». На мой взгляд, это большой недостаток книги!
В 11-й главе разбираемся с понятиями аутентификации и авторизации. Пишем аутентификацию с использованием JWT и соответствующие тесты. К сожалению, ни в одном эндпоинте эта аутентификация не будет использована!
Глава 12 более детально посвящена тестированию при помощи pytest
. Хотя много тестов уже написано к этому моменту, более детально рассматриваются возможности pytest
и особенности архитектуры тестов в рассматриваемом приложении – в частности, изоляция слоёв для проведения unit-тестов. Из минусов – не рассказано, как настроить pytest
, чтобы запустить все тесты одной командой. Это не сложно сделать, но хотелось бы увидеть рекомендации в книге. Приведен интересный инструмент, schemathesis
, для автоматизированного тестирования API по автоматически сгенерированной документации. Вкратце упоминается нагрузочное тестирование при помощи Locust
.
Следующие главы совсем обзорные, поэтому о них буквально по паре слов.
Глава 13 – О деплое приложения на FastAPI. Готовых рецептов не приведено: даны общие рекомендации и ссылки на хорошие дополнительные ресурсы.
Глава 14 – Обзор баз данных (SQL, NoSQL, и даже PostSQL) и средств для работы с ними. Про Data Science и AI я пролистал, тема заезженная, и рассмотрена поверхностно.
Глава 15 – Работа с файлами. Слабовато, это всё отлично описано в документации. Даже не упомянуто про загрузку нескольких файлов одновременно! И хотелось бы увидеть, как писать тесты на эндпоинты, принимающие файлы...
Глава 16 – Азы работы с формами и шаблонами.
Завершается книга скоманно: в двух последних главах рассматривается визуализация данных и наброски примитивной игры, несколько отклоняясь от основной темы издания.
Общий недостаток всех глав: довольно много ошибок в коде – временами используются неверные переменные, некорректные сигнатуры функций, ошибки в именах модулей в импортах, забытые импорты, неверные роуты в декораторах... В общем, надо смотреть в оба, и при разборе примеров код творчески дорабатывать – заодно и разобраться можно получше 😄!
Что вы найдёте в книге, а чего нет
Итак, чему можно научиться из книги 👍:
- ✅ Приложение разбито на независимые слои
- ✅ Реализованы изолированные тесты отдельных слоёв на
pytest
- ✅ Аутентификация при помощи JWT
- ✅ Приложение упаковано в Docker-образ
Чего в книге нет 👎:
- 🚫 Как работать с БД через async SQLAlchemy
- 🚫 Как подключить PostgreSQL
- 🚫 Тесты async SQLAlchemy + PostgreSQL
- 🚫 Конфигурация в отдельном файле с использованием
BaseSettings
- 🚫 Logging
- 🚫 Доступ к эндпоинтам только аутентифицированных пользователей
- 🚫 Разработка Middleware
- 🚫 Observability – подключение Sentry, Loki, Prometheus, Grafana
Прикольные цитаты
Follow one rule from Ghostbusters: Don’t cross the streams. That is, don’t let web details leak out of the Web layer, or database details out of the Data layer. (p.11)
Technically, we’re not creating anything, so a POST isn’t kosher, but if the RESTful Overlords sue us, then hey, check out the cool courthouse. (p.54)
Подведём итоги
Рассматриваемое в качестве примера приложение неплохо структурировано – разбито на слои, для каждого слоя написаны тесты. Реализована обработка основных ошибок при помощи исключений. Упаковано в Docker. Рассмотрена аутентификация (при этом, эндпоинт для неё есть, но больше она нигде не используется!). Всё остальное – либо поверхностно, либо приведены ссылки и отдано на откуп читателю. Ссылки на хорошие материалы, тут вопросов нет, но и они не покрывают все вопросы – готовьтесь искать вручную. Бесполезные приложения про фантастические создания и их исследователей, на этом фоне, вызывают ещё большее недоумение.
Данная книга подойдёт для первого знакомства с FastAPI неискушенных читателей, которые и с Python, возможно, только знакомятся. Для разработки более-менее серьезных приложений, потребуется дополнительно изучить большой объем учебных и справочных материалов.
Ниже я хочу собрать ссылки на наиболее качественные материалы по FastAPI, которые, в дополнение к книге, помогут научиться решать типовые задачи при работе с этим замечательным фреймворком.
Качественные материалы по FastAPI
Этот список будет постепенно дополняться. Буду рад вашим ссылкам на хорошие статьи!
- Общее
- Документация FastAPI. Она действительно отличная, просто пример для подражания. Наверное, даже лучше рассматриваемой книги!
- The Ultimate FastAPI Tutorial . Хороший туториал, рекомендован автором книги. Покрывает множество вопросов, и вполне актуален, хоть и написан в 2021 г.
- A curated list of awesome things related to FastAPI
- Структура приложения
- Работа с SQLAlchemy и PostgreSQL
- Аутентификация
- Деплой
Отправить сообщение
С помощью формы ниже, вы можете связаться с автором сайта. Пожалуйста, укажите ваш ник в Телеграме или e-mail, чтобы я смог вам ответить!