Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Создание REST API часто представляет собой механическую задачу, включающую в себя множество шаблонных конструкций и механического программирования. К счастью, такие инструменты, как FastAPI, избавляют от многих утомительных деталей.

Используя FastAPI, вы можете быстро создать эффективный полноценный REST API для своего CRUD-приложения. Используя MongoDB в качестве источника данных, это руководство поможет вам быстро настроить собственный API.

Что такое FastAPI?

FastAPI — это быстрая веб-инфраструктура Python с открытым исходным кодом для создания API. Он обеспечивает встроенную поддержку асинхронных запросов, автоматическую проверку данных и автоматическое документирование конечных точек API.

Преимущества FastAPI перед другими фреймворками Python

  • FastAPI относительно быстрее, чем другие фреймворки, такие как Django и Flask. Это связано с тем, что FastAPI построен на основе asyncio, библиотеки асинхронного ввода-вывода для Python, которая может быстрее обрабатывать параллельные запросы.
    instagram viewer
  • FastAPI предоставляет чистый и простой способ создания API с минимальными усилиями, поскольку требует меньше кода, чем Flask или Django.
  • Наконец, FastAPI упрощает создание документации для конечных точек. Он использует Swagger для создания документации, которую можно использовать для тестирования конечных точек, выполняя запросы и просматривая ответы.

Настройка базы данных MongoDB

Для начала вам потребуется настроить базу данных MongoDB локально. Кроме того, вы можете выбрать более простой вариант настройка кластера MongoDB в облаке.

Затем, используя установленный инструмент графического пользовательского интерфейса MongoDB Compass, создайте соединение с базой данных. Нажмите на Новое соединение кнопку и укажите URI подключения, чтобы установить соединение с сервером MongoDB, работающим локально.

Наконец, создайте новую базу данных и коллекцию для хранения данных вашего тестового API.

Настройте сервер FastAPI

Используя терминал, создайте папку проекта и войдите в этот новый каталог.

Вы можете найти код этого проекта в его Репозиторий GitHub.

Затем убедитесь, что вы используете Python версии 3.6+. Если нет, установите последнюю питон версия.

питон --версия

После этого установите Virtualenv, чтобы создать изолированную виртуальную среду разработки. Это настоятельно рекомендуется, поскольку позволяет избежать конфликтов, особенно если вы используете разные версии пакетов для разных проектов.

пип установить виртуалэнв

Затем создайте виртуальную среду под названием «venv» в вашем текущем каталоге:

виртуальный

Наконец, активируйте виртуальную среду.

# В Unix или MacOS: 
источник venv/bin/активировать

# В Windows:
 .\venv\скрипты\активировать

После настройки виртуальной среды установите пакеты FastAPI, PyMongo и Uvicorn.

pip установить fastapi pymongo uvicorn

PyMongo — это библиотека на основе Python для работы с базой данных MongoDB. Он предоставляет API, который поддерживает все функции MongoDB и позволяет вам взаимодействовать с MongoDB без необходимости писать необработанные запросы MongoDB.

Uvicorn, с другой стороны, представляет собой асинхронный веб-сервер, основанный на модуле Python asyncio. Его главная особенность — горячая перезагрузка ваших серверов FastAPI на ходу. Использование Uvicorn похоже на работа с нодемон.

Создайте сервер FastAPI

Наконец, создайте простой сервер FastAPI, который прослушивает запросы, поступающие с домашнего маршрута. В корневом каталоге папки вашего проекта создайте файл server.py и добавьте приведенный ниже код.

от Фастапи Импортировать FastAPI
приложение = FastAPI()

@приложение.получить("/")
асинхронныйдефдом():
возвращаться {"сообщение": "Привет, мир"}

Наконец, запустите приведенную ниже команду, чтобы запустить сервер разработки. Uvicorn будет обслуживать ваше приложение на порту 8000.

сервер uvicon: приложение --reload

Идите вперед и просмотрите ответ сервера в своем браузере по адресу http://localhost: 8000.

Создайте REST API с операциями CRUD

Теперь создайте REST API, реализующий методы CRUD (создание, чтение, обновление и удаление). В корневом каталоге папки вашего проекта создайте четыре папки: config, models, route и schemas.

├── конфиг
├── модели
├── маршруты
├── схемы
└── server.py

1. Настройка подключения к базе данных

В каталоге config создайте новый файл db.py и добавьте приведенный ниже код.

от пимонго Импортировать MongoClient
db_connection = MongoClient("mongodb://локальный хост: 27017")
db = db_connection.database_name
коллекция = БД ["имя_коллекции"]
  • Используйте метод MongoClient() для создания подключения к базе данных MongoDB. Он принимает строку URI подключения в качестве аргумента, указывающего хост и порт сервера MongoDB.
  • Две переменные указывают, к какой базе данных и коллекции на вашем сервере MongoDB сервер должен получить доступ.

2. Определить модель данных

Эта модель будет определять структуру ваших данных в базе данных, включая поля и типы данных.

В каталоге модели создайте новый файл user_model.py и добавьте приведенный ниже код.

от пидантичный Импортировать Базовая модель 

сортПользователь(Базовая модель):
название: ул.
роль: ул.

  • Приведенный выше код создает класс User, который является подклассом класса BaseModel из библиотеки Pydantic. Класс User имеет два поля, имя и роль, а их типы данных заданы как строки.
  • Вы можете использовать библиотеку Pydantic с FastAPI для создания моделей данных. Вы также можете использовать его для проверки данных, их сериализации (из JSON в Python) и их десериализации (из Python в JSON).

3. Определить схему данных

Из созданной модели данных вы можете определить схему для ваших данных. В каталоге схем создайте новый файл: user_schema.py и добавьте приведенный ниже код.

дефuser_serializer(пользователь) -> дикт:
возвращаться {
'идентификатор':str (пользователь["_идентификатор"]),
'имя':пользователь["имя"],
'роль':пользователь["роль"]
}

дефusers_serializer(пользователи) -> список:
возвращаться [user_serializer (пользователь) для пользователь в пользователи]

4. Определите маршруты API

Наконец, определите маршруты для различных операций CRUD.

В каталоге маршрутов создайте новый файл: user_routes.py и добавьте приведенный ниже код.

Добавьте данные с помощью метода Post

Создайте почтовый маршрут для добавления данных.

от Фастапи Импортировать APIмаршрутизатор
от модели.user_model Импортировать Пользователь
от схемы.user_schema Импортировать users_serializer
от бсон Импортировать идентификатор объекта
от config.db Импортировать коллекция

пользователь = APIRouter()

@user.post("/")
асинхронныйдефСоздать пользователя(пользователь: Пользователь):
_id = collection.insert_one (dict (пользователь))
пользователь = users_serializer (коллекция.find({"_идентификатор": _id.inserted_id}))
возвращаться {"положение дел": "Хорошо","данные": пользователь}

  • FastAPI предоставляет метод APIRouter(), который определяет объект маршрутизатора, предоставляющий интерфейс для выполнения запросов API к серверу.
  • Укажите почтовый маршрут, который создает новый пользовательский объект в базе данных, вставляя данные в коллекцию после ее сериализации. Затем сохраните и передайте вставленный_ид, чтобы найти связанные данные в коллекции, и, наконец, верните статус «ОК» с данными в ответе, если запрос на публикацию выполнен успешно.
  • Методы insert_one и find определяются клиентом PyMongo.

Теперь добавьте приведенный ниже код в server.py для инициализации маршрутов.

от маршруты.user_routes Импортировать пользователь
app.include_router (пользователь)

Протестируйте почтовый маршрут в своем браузере с помощью инструмента Swagger UI API, предоставляемого FastAPI.

Чтение данных с помощью метода Get

После определения почтового маршрута и инициализации маршрутов определите остальные другие маршруты.

@user.get("/")
асинхронныйдефfind_all_users():
пользователи = users_serializer (коллекция.find())
возвращаться {"положение дел": "Хорошо","данные": пользователи}

@user.get("/{id}")
асинхронныйдефget_one_user(идентификатор: улица):
пользователь = users_serializer (коллекция.find({"_идентификатор": ObjectId (идентификатор)}))
возвращаться {"положение дел": "Хорошо","данные": пользователь}

Определите два маршрута получения, которые извлекают все данные из коллекции и извлекают определенные данные из коллекции на основе идентификатора.

Обновление данных с помощью метода Put

Создайте маршрут put для обновления сохраненных данных в базе данных.

@user.put("/{id}")
асинхронныйдефupdate_user(идентификатор: улица, пользователь: Пользователь):
collection.find_one_and_update(
{
"_идентификатор": идентификатор объекта (идентификатор)
},
{
"$ установить": дикт (пользователь)
})
пользователь = users_serializer (коллекция.find({"_идентификатор": ObjectId (идентификатор)}))
возвращаться {"положение дел": "Хорошо","данные": пользователь}

Метод put использует идентификатор для поиска определенных данных в коллекции и обновляет значение полей в документе новыми данными, переданными из API. Затем вы можете искать обновленные данные по идентификатору и возвращать их в ответе API.

Удалить данные с помощью метода Delete

Создайте маршрут удаления, чтобы удалить сохраненные данные в базе данных.

@user.delete("/{id}")
асинхронныйдефdelete_user(идентификатор: улица):
collection.find_one_and_delete({"_идентификатор": ObjectId (идентификатор)})
пользователи = users_serializer (коллекция.find())
возвращаться {"положение дел": "Хорошо","данные": []}

Маршрут удаления принимает идентификатор конкретного документа, который вы хотите удалить из коллекции.

Создавайте REST API с помощью FastAPI

FastAPI предоставляет отличный способ удобного создания серверных веб-API Python. Встроенные инструменты для интеграции баз данных и автоматического создания API упрощают процесс.

Вы даже можете пойти дальше и создавать полноценные приложения. Попробуйте интегрировать внешний клиент с помощью популярных технологий, таких как React, Angular или Vue.