О книге «FastAPI» Билла Любановича

FastAPI by Bill Lubanovic - обложка

Краткий обзор глав книги

Сквозной «сюжет» книги – разработка простенького 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, которые, в дополнение к книге, помогут научиться решать типовые задачи при работе с этим замечательным фреймворком.

Качественные материалы по FastAPI

Этот список будет постепенно дополняться. Буду рад вашим ссылкам на хорошие статьи!

Отправить сообщение

С помощью формы ниже, вы можете связаться с автором сайта. Пожалуйста, укажите ваш ник в Телеграме или e-mail, чтобы я смог вам ответить!