Построение GraphQL API с помощью FastAPI

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

Необходимые условия

Прежде чем приступить к созданию GraphQL API с помощью FastAPI, убедитесь, что на вашей машине установлены следующие предварительные требования:

  1. Python
  2. FastAPI
  3. 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.

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *