Учебник FastAPI
FastAPI — это современный, быстрый (высокопроизводительный) веб-фреймворк Python для создания API, специально разработанный для создания RESTful API.
FastAPI использует Python 3.8+ и построен на стандартных аннотациях типов Python, используя Starlette и Pydantic, что обеспечивает автоматическую генерацию документации API и валидацию данных.
Для кого этот урок?
Этот учебник подходит разработчикам, имеющим основы Python. Если вы уже понимаете базовый синтаксис Python и аннотации типов, вы сможете быстро начать работу с FastAPI.
Что нужно знать перед прохождением этого руководства
Прежде чем изучать это руководство, вам нужно понимать некоторые базовые знания о Web иБазовое руководство по Python 3.xЕсли вы не знакомы с методами HTTP-запросов (GET, POST и т. д.), рекомендуется сначала прочитать.Учебник по HTTP。
Возможности FastAPI
FastAPI выделяется среди веб-фреймворков Python, главным образом благодаря следующим особенностям:
| Особенности | Описание |
|---|---|
| Высокая производительность | Основан на Starlette и Pydantic, по производительности сопоставим с NodeJS и Go, это один из самых быстрых Python-фреймворков. |
| Быстрая разработка | Скорость разработки увеличивается примерно на 200%-300%, а стандартные объявления типов обеспечивают валидацию данных и генерацию документации. |
| Сокращение ошибок | Сокращает количество человеческих ошибок примерно на 40%, а система типов автоматически выявляет распространённые проблемы. |
| Автоматическая документация | Автоматически генерирует интерактивную документацию API (Swagger UI и ReDoc), устраняя необходимость в ручном сопровождении. |
| Типобезопасность | Основан на стандартных аннотациях типов Python, обеспечивая полноценное автодополнение и проверку ошибок в редакторах. |
| Поддержка асинхронности | Нативная поддержка async/await, эффективно обрабатывает задачи, интенсивно использующие IO. |
Сценарии применения FastAPI
| Сценарии | Описание |
|---|---|
| Создание бэкендов API | Используется для создания RESTful API, поддерживая веб-приложения с разделённым фронтендом и бэкендом. |
| Архитектура микросервисов | Лёгкий и эффективный, подходит в качестве бэкенд-фреймворка для микросервисов. |
| API для обработки данных | Подходит для сервисов обработки данных, которые принимают и возвращают данные JSON. |
| Коммуникация в реальном времени | Поддерживает WebSocket, подходит для сценариев связи в реальном времени. |
| Сервисы машинного обучения | Позволяет оборачивать обученные модели в API, что удобно для вызова из фронтенда и других сервисов. |
Технологический стек FastAPI
FastAPI построен на основе двух ключевых библиотек:
| Компоненты | Функция | Описание |
|---|---|---|
| Starlette | Уровень веб-фреймворка | Предоставляет базовые веб-возможности, такие как маршрутизация, middleware и WebSocket; FastAPI напрямую наследуется от Starlette. |
| Pydantic | Уровень валидации данных | Выполняет валидацию данных, сериализацию и создание документации на основе аннотаций типов Python. |
| Uvicorn | ASGI-сервер | Высокопроизводительный ASGI-сервер на основе uvloop и httptools, используемый для запуска приложений FastAPI |
FastAPI является подклассом Starlette, поэтому можно использовать все возможности Starlette. В то же время FastAPI полностью совместим с Pydantic, включая внешние библиотеки на основе Pydantic ORM (например, SQLModel).
Почему стоит выбрать FastAPI?
| Критерий сравнения | FastAPI | Flask | Django |
|---|---|---|---|
| Производительность | Высокая (async, ASGI) | Средний (sync, WSGI) | Средний (sync, WSGI) |
| Автоматическая документация | Встроенный (Swagger UI + ReDoc) | Требует сторонних расширений | Требует сторонних расширений |
| Валидация типов | Встроенный (Pydantic) | Требуется ручная реализация | Требуется ручная реализация |
| Поддержка асинхронности | Нативная поддержка | нужно расширять | поддержка 3.1+ |
| Кривая обучения | Низкая | Низкая | Повышенный |
| Применимый масштаб | Малые и средние / микросервисы | малые и средние | Крупные / Full-stack |
Связанные ссылки
| Ресурсы | Адрес |
|---|---|
| Официальная документация FastAPI | https://fastapi.tiangolo.com/zh/ |
| Исходный код FastAPI | https://github.com/tiangolo/fastapi |
| Документация Starlette | https://www.starlette.dev/ |
| Документация Pydantic | https://docs.pydantic.dev/ |