Построение GraphQL API с помощью FastAPI
GraphQL завоевал огромную популярность благодаря своей гибкости и эффективности при разработке API. В сочетании с FastAPI, современным веб-фреймворком для создания API на Python, вы получаете мощную комбинацию, которая упрощает процесс создания надежных API. В этой статье мы рассмотрим шаги по созданию GraphQL API с помощью FastAPI.
Необходимые условия
Прежде чем приступить к созданию GraphQL API с помощью FastAPI, убедитесь, что на вашей машине установлены следующие предварительные требования:
- Python
- FastAPI
- Ariadne
Github: https://github.com/gshr/blog-platform
Шаг 1: Создание приложения FastAPI
Код создает экземпляр приложения FastAPI, включая необходимые импорты и настройку маршрутизации. Метод app.include_router() используется для включения маршрутизатора GraphQL.
from fastapi import FastAPI
from api.models.models import *
from api.graphql.main import router
app = FastAPI()
app.include_router(router=router)
Шаг 2: Определение схемы GraphQL
Определена схема GraphQL, включающая типы для пользователей, постов, комментариев к постам, мутаций и запросов. Эта схема определяет структуру и операции вашего GraphQL API.
type User {
id: Int
username: String
email: String
posts: [Post]
comments: [PostComment]
}
type Query {
users: [User]
user(id: Int!): User
}
Шаг 3: Создание резольверов
Ariadne используется для определения резольверов для GraphQL-запросов и мутаций. Каждая функция resolver соответствует запросу или мутации, определенным в вашей схеме. Эти функции-резольверы взаимодействуют с вашими данными и возвращают результаты.
Например, вот резольвер для запроса “users”:
@query.field("users")
def resolve_users(_, info):
return get_all_users()
def get_all_users(db: Session = SessionLocal()):
return db.query(User).all()
Шаг 4: Создание маршрутизатора GraphQL
Для обработки запросов GraphQL создается маршрутизатор FastAPI. Он прослушивает POST-запросы и использует функцию graphql_sync для выполнения схемы GraphQL.
@router.post("/")
async def graphql_server(request: Request, currentuser: User = Depends(current_user), db: Session = Depends(get_db)):
data = await request.json()
value = {"request": request, "currentuser": currentuser, "db": db}
success, result = graphql_sync(schema, data, context_value=value)
status_code = 200 if success else 400
return JSONResponse(result, status_code=status_code)
Шаг 5: Запуск приложения
Приложение FastAPI запускается с помощью сервера Uvicorn. После запуска этого кода ваш GraphQL API должен быть доступен по соответствующей конечной точке (например, http://localhost:8000/graphql).
Обратите внимание, что для работы данного кода необходимо установить необходимые зависимости, такие как FastAPI, Ariadne и SQLAlchemy. Кроме того, необходимо импортировать необходимые функции и модули, в том числе из api.models.models, api.graphql.main, api.helper, api.authentication.auth и api.models.db.
Этот код закладывает прочный фундамент для создания GraphQL API с помощью FastAPI. Тем не менее вам придется реализовать недостающие функции и логику для операций с базой данных, аутентификации и других частей вашего приложения, исходя из ваших конкретных требований.
Github: https://github.com/gshr/blog-platform
В этом репозитории github содержится полный исходный код для создания GraphQL API с помощью FAST API.