Изграждането на REST API често е механична задача, включваща много шаблонен дизайн и програмиране наизуст. За щастие, инструменти като FastAPI могат да облекчат много от досадните детайли.
Използвайки FastAPI, можете бързо да изградите ефективен, пълен REST API за вашето CRUD приложение. С MongoDB като източник на данни, този урок ще ви насочи към настройване на ваш собствен API за нула време.
Какво е FastAPI?
FastAPI е бърза уеб рамка на Python с отворен код за изграждане на API. Той осигурява вградена поддръжка за асинхронни заявки, автоматично валидиране на данни и автоматично документиране на крайни точки на API.
Предимствата на FastAPI пред други рамки на Python
- FastAPI е относително по-бърз от други рамки като Django и Flask. Това е така, защото FastAPI се основава на asyncio, асинхронна I/O библиотека за Python, която може да обработва едновременни заявки по-бързо.
- FastAPI предоставя чист и лесен начин за изграждане на API с минимални усилия, тъй като изисква по-малко код от Flask или Django.
- И накрая, FastAPI улеснява генерирането на документация за крайни точки. Той използва Swagger за създаване на документация, която можете да използвате за тестване на крайни точки чрез изпълнение на заявки и преглеждане на отговори.
Настройте база данни MongoDB
За да започнете, ще трябва да настройте MongoDB база данни локално. Като алтернатива можете да изберете по-лесния вариант на настройка на MongoDB клъстер в облака.
След това, като използвате инсталирания инструмент за графичен потребителски интерфейс MongoDB, Compass, създайте връзка с база данни. Щракнете върху Нова връзка бутон и осигурете URI на връзката, за да установите връзка със сървъра MongoDB, работещ локално.
И накрая, създайте нова база данни и колекция, за да съхранявате вашите тестови API данни.
Настройте FastAPI сървър
С помощта на терминал създайте папка на проекта и въведете тази нова директория.
Можете да намерите кода на този проект в него GitHub хранилище.
След това проверете дали използвате Python версия 3.6+. Ако не, инсталирайте най-новата Python версия.
python --версия
След това инсталирайте Virtualenv, за да създадете изолирана виртуална среда за разработка. Това е силно препоръчително, защото ви позволява да избегнете конфликти, особено ако използвате различни версии на пакети за различни проекти.
pip инсталирайте virtualenv
След това създайте виртуална среда, наречена "venv" във вашата текуща директория:
virtualenv venv
Накрая активирайте виртуалната среда.
# Под Unix или MacOS:
източник venv/bin/activate
# В Windows:
.\venv\Scripts\activate
След като конфигурирате виртуалната среда, инсталирайте пакетите FastAPI, PyMongo и Uvicorn.
pip инсталирайте fastapi pymongo uvicorn
PyMongo е базирана на Python библиотека за работа с базата данни MongoDB. Той предоставя API, който поддържа всички функции на MongoDB и ви позволява да взаимодействате с MongoDB, без да се налага да пишете сурови MongoDB заявки.
Uvicorn, от друга страна, е асинхронен уеб сървър, базиран на Python asyncio модула. Основната му функция е горещо презареждане на вашите FastAPI сървъри в движение. Използването на Uvicorn е подобно на работа с Nodemon.
Създайте сървъра FastAPI
И накрая, създайте прост FastAPI сървър, който слуша, за да получи заявки, идващи от началния маршрут. В главната директория на папката на вашия проект създайте файл server.py и добавете кода по-долу.
от fastapi импортиране FastAPI
приложение = FastAPI()
@app.get("/")
асинхронендефУ дома():
връщане {"съобщение": "Здравей свят"}
И накрая, изпълнете командата по-долу, за да завъртите сървъра за разработка. Uvicorn ще обслужва вашето приложение на порт 8000.
uvicon сървър: приложение --презареждане
Продължете и вижте отговора на сървъра в браузъра си на http://localhost: 8000.
Създайте REST API с CRUD операции
Сега изградете REST API, който прилага CRUD методите (създаване, четене, актуализиране и изтриване). В главната директория на папката на вашия проект създайте четири папки: config, models, routes и schemas.
├── конфиг
├── модели
├── маршрути
├── схеми
└── server.py
1. Конфигурирайте връзката към базата данни
В конфигурационната директория създайте нов файл db.py и добавете кода по-долу.
от пимонго импортиране MongoClient
db_connection = MongoClient("mongodb://localhost: 27017")
db = db_connection.database_name
колекция = db["име_на_колекция"]
- Използвайте метода MongoClient(), за да създадете връзка към база данни MongoDB. Той приема URI низ за връзка като аргумент, който указва хоста и порта на MongoDB сървъра.
- Двете променливи указват до коя база данни и колекция във вашия MongoDB сървър сървърът трябва да има достъп.
2. Дефиниране на модел на данни
Този модел ще дефинира структурата на вашите данни в базата данни, включително полетата и типовете данни.
В директорията на модела създайте нов файл, user_model.py, и добавете кода по-долу.
от пидантичен импортиране BaseModel
класПотребител(Базов модел):
име: ул
роля: ул
- Кодът по-горе създава клас, наречен User, който е подклас на класа BaseModel от библиотеката Pydantic. Потребителският клас има две полета, име и роля с техните типове данни, зададени като низове.
- Можете да използвате библиотеката Pydantic с FastAPI за създаване на модели на данни. Можете също да го използвате за валидиране на данни, сериализиране (JSON към Python) и десериализиране (Python към JSON).
3. Дефиниране на схема на данни
От създадения модел на данни можете да дефинирате схемата за вашите данни. В директорията със схеми създайте нов файл: user_schema.py и добавете кода по-долу.
дефпотребителски_сериализатор(потребител) -> dict:
връщане {
'документ за самоличност':str (потребител ["_документ за самоличност"]),
име:потребител["име"],
"роля":потребител["роля"]
}
дефпотребителски_сериализатор(потребители) -> списък:
връщане [user_serializer (потребител) за потребител в потребители]
4. Дефинирайте API маршрутите
И накрая, дефинирайте маршрутите за различните CRUD операции.
В директорията с маршрути създайте нов файл: user_routes.py и добавете кода по-долу.
Добавете данни с метода Post
Създайте маршрута за публикация, за да добавите данни.
от fastapi импортиране APIRouter
от модели.user_model импортиране Потребител
от schemas.user_schema импортиране потребителски_сериализатор
от bson импортиране ObjectId
от config.db импортиране колекцияпотребител = APIRouter()
@user.post("/")
асинхронендефcreate_user(потребител: потребител):
_id = collection.insert_one (dict (потребител))
потребител = users_serializer (collection.find({"_документ за самоличност": _id.inserted_id}))
връщане {"статус": "Добре","данни": потребител}
- FastAPI предоставя метода APIRouter(), който дефинира обект на рутер, който предоставя интерфейс за отправяне на API заявки към сървър.
- Задайте маршрут за публикуване, който създава нов потребителски обект в базата данни чрез вмъкване на данните в колекцията след сериализирането им. След това запазете и предайте inserted_id, за да намерите асоциираните данни в колекцията, и накрая върнете състояние „Ok“ с данните в отговора, ако заявката за публикуване е успешна.
- Методите insert_one и find се дефинират от клиента на PyMongo.
Сега добавете кода по-долу към server.py, за да инициализирате маршрутите.
от routes.user_routes импортиране потребител
app.include_router (потребител)
Продължете и тествайте маршрута за публикуване във вашия браузър, като използвате инструмента Swagger UI API, предоставен от FastAPI.
Четете данни с метода Get
След като дефинирате пост маршрута и инициализирате маршрутите, дефинирайте останалите маршрути.
@user.get("/")
асинхронендефнамери_всички_потребители():
потребители = потребителски_сериализатор (collection.find())
връщане {"статус": "Добре","данни": потребители}
@user.get("/{id}")
асинхронендефget_one_user(id: str):
потребител = users_serializer (collection.find({"_документ за самоличност": ObjectId (id)}))
връщане {"статус": "Добре","данни": потребител}
Дефинирайте два маршрута за получаване, които извличат всички данни в колекцията и извличат конкретни данни от колекцията въз основа на идентификатора.
Актуализирайте данните с метода Put
Създайте пътния маршрут за актуализиране на съхранените данни в базата данни.
@user.put("/{id}")
асинхронендефupdate_user(id: str, потребител: потребител):
collection.find_one_and_update(
{
"_документ за самоличност": ObjectId (id)
},
{
"$set": dict (потребител)
})
потребител = users_serializer (collection.find({"_документ за самоличност": ObjectId (id)}))
връщане {"статус": "Добре","данни": потребител}
Методът put използва идентификатора, за да намери конкретните данни в колекцията и актуализира стойността на полетата в документа с новите данни, предадени от API. След това можете да търсите актуализираните данни по ID и да ги върнете в отговора на API.
Изтриване на данни с метода за изтриване
Създайте маршрут за изтриване, за да изтриете съхранените данни в базата данни.
@user.delete("/{id}")
асинхронендефdelete_user(id: str):
collection.find_one_and_delete({"_документ за самоличност": ObjectId (id)})
потребители = потребителски_сериализатор (collection.find())
връщане {"статус": "Добре","данни": []}
Маршрутът за изтриване приема идентификатора на конкретния документ, който искате да изтриете от колекцията.
Създайте REST API с FastAPI
FastAPI предоставя чудесен начин за удобно изграждане на бекенд Python уеб API. Неговите вградени инструменти за интегриране на бази данни и автоматично производство на API правят процеса прост.
Можете дори да направите крачка напред и да създадете пълноценни приложения. Опитайте да интегрирате клиент отпред, като използвате популярни технологии като React, Angular или Vue.