Appearance
FastAPI — основы
FastAPI — это мощный инструмент для создания современных и высокопроизводительных API. Он сочетает в себе простоту использования, скорость разработки и гибкость. Благодаря поддержке аннотаций типов и автоматической документации разработчики могут значительно ускорить процесс создания API, минимизируя количество ошибок.
FastAPI подходит как для небольших проектов, так и для крупных систем, требующих высокой производительности.
Что такое FastAPI?
FastAPI — это асинхронный веб-фреймворк, созданный на базе Starlette (веб-фреймворка) и Pydantic (библиотеки для валидации данных). Он предлагает множество удобных инструментов для разработки API, таких как автоматическая документация, встроенная валидация данных и высокая производительность благодаря использованию асинхронных вызовов.
Основные преимущества FastAPI
Высокая производительность
FastAPI работает на основе асинхронного веб-сервера ASGI, что делает его одним из самых быстрых Python-фреймворков.Аннотации типов
Использование типов в Python (например,str,int,List) позволяетFastAPIавтоматически проверять значения запросов и генерировать документацию.Автоматическая документация
FastAPIавтоматически создаёт документациюAPIс помощьюSwagger UIиReDoc. Это упрощает тестирование и работу сAPI.Простота использования
Несмотря на свою мощь,FastAPIостаётся интуитивно понятным и легко изучаемым.Асинхронность
Поддержка асинхронных функций позволяет обрабатывать множество запросов одновременно, улучшая производительность.
Установка FastAPI в виртуальное окружение:
Устанавливать пакет лучше используя виртуальное окружение это позволяет:
- создать изоляцию зависимостей проекта от глобальных пакетов.
- предотвращение конфликтов версий.
- позволяет легко управлять разными версиями FastAPI для разных проектов.
Из минусов только требует дополнительных шагов для создания и активации окружения.
Создать виртуальное окружение:
shellpython3 -m venv .venv (для Python 3.3 и выше)Активировать виртуальное окружение:
shellsource .venv/bin/activate (Linux/macOS) .venv\Scripts\activate (Windows)Установить
FastAPI:shellpip install fastapi[all]pip install fastapi[all]: устанавливаетFastAPIи все рекомендуемые зависимости, включая:uvicorn:ASGI-сервер для запуска приложения.pydantic: для валидации данных.httpx: для выполненияHTTP-запросов.starlette: основа FastAPI.- и другие полезные пакеты.
Пример простого приложения
Вот минимальный пример API на FastAPI:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return "Добро пожаловать в локальный FastAPI!"
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}Создание приложения
app = FastAPI()— это объект приложения FastAPI.Маршруты (Endpoints)
Используются декораторы типа@app.get()для определения маршрутов.- В примере выше, запрос к
GET /вернёт сообщение. - Запрос к
GET /items/{item_id}позволяет передать путьitem_idи необязательный параметрq.
- В примере выше, запрос к
Запуск приложения
Для запуска приложения используйте сервер Uvicorn:
bash
uvicorn main:app --reloadmain— относительный путь к файлу (без.py), начиная с корневой папки проекта.app— объект приложения FastAPI.--reload— автоматическая перезагрузка при изменении кода (удобно для разработки).
После запуска приложение будет доступно по адресу: http://127.0.0.1:8000.
Автоматическая документация
FastAPI автоматически генерирует документацию API. После запуска приложения вы можете открыть:
Swagger UI— доступен по адресуhttp://127.0.0.1:8000/docs. Это интерактивный интерфейс для тестированияAPI.ReDoc— доступен по адресуhttp://127.0.0.1:8000/redoc. Это статическая документацияAPI.
Проверка работы
Откройте браузер на http://127.0.0.1:8000/.
Вы увидите следующий текст:
Добро пожаловать в локальный FastAPI!Откройте браузер на http://127.0.0.1:8000/items/5?q=somequery.
Вы увидите следующий JSON ответ:
json
{"item_id": 5, "q": "somequery"}Вы уже создали API, который:
Получает HTTP-запросы по путям / и /items/{item_id}.
И первый и второй путь используют GET операции (также известные как HTTP методы).
- путь
/items/{item_id}имеет параметр путиitem_id, который должен бытьint. - путь
/items/{item_id}имеет необязательныйstrпараметр запросаq.
Работа с параметрами запросов
Параметры пути указываются в фигурных скобках {}. Например:
python
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}В данном случае user_id будет автоматически преобразован в int, а если тип не совпадает, FastAPI вернёт ошибку.