Перейти к содержанию

GraphQL

Так как FastAPI основан на стандарте ASGI, очень легко интегрировать любую библиотеку GraphQL, также совместимую с ASGI.

Вы можете комбинировать обычные операции пути FastAPI с GraphQL в одном приложении.

Совет

GraphQL решает некоторые очень специфические задачи.

У него есть как преимущества, так и недостатки по сравнению с обычными веб-API.

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

Библиотеки GraphQL

Ниже приведены некоторые библиотеки GraphQL с поддержкой ASGI. Их можно использовать с FastAPI:

GraphQL со Strawberry

Если вам нужно или хочется работать с GraphQL, Strawberryрекомендуемая библиотека, так как её дизайн ближе всего к дизайну FastAPI, всё основано на аннотациях типов.

В зависимости от вашего сценария использования вы можете предпочесть другую библиотеку, но если бы вы спросили меня, я, скорее всего, предложил бы попробовать Strawberry.

Вот небольшой пример того, как можно интегрировать Strawberry с FastAPI:

import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter


@strawberry.type
class User:
    name: str
    age: int


@strawberry.type
class Query:
    @strawberry.field
    def user(self) -> User:
        return User(name="Patrick", age=100)


schema = strawberry.Schema(query=Query)


graphql_app = GraphQLRouter(schema)

app = FastAPI()
app.include_router(graphql_app, prefix="/graphql")

Подробнее о Strawberry можно узнать в документации Strawberry.

А также в документации по интеграции Strawberry с FastAPI.

Устаревший GraphQLApp из Starlette

В предыдущих версиях Starlette был класс GraphQLApp для интеграции с Graphene.

Он был объявлен устаревшим в Starlette, но если у вас есть код, который его использовал, вы можете легко мигрировать на starlette-graphene3, который решает ту же задачу и имеет почти идентичный интерфейс.

Совет

Если вам нужен GraphQL, я всё же рекомендую посмотреть Strawberry, так как он основан на аннотациях типов, а не на пользовательских классах и типах.

Подробнее

Подробнее о GraphQL вы можете узнать в официальной документации GraphQL.

Также можно почитать больше о каждой из указанных выше библиотек по приведённым ссылкам.