Перейти до змісту

GraphQL

🌐 Переклад ШІ та людьми

Цей переклад виконано ШІ під керівництвом людей. 🤝

Можливі помилки через неправильне розуміння початкового змісту або неприродні формулювання тощо. 🤖

Ви можете покращити цей переклад, допомігши нам краще спрямовувати AI LLM.

Англійська версія

Оскільки 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")
🤓 Other versions and variants
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.

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