コンテンツにスキップ

GraphQL

🌐 AI と人間による翻訳

この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝

原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖

AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。

英語版

FastAPIASGI 標準に基づいているため、ASGI に対応した任意の GraphQL ライブラリを簡単に統合できます。

同じアプリケーション内で通常の FastAPI の path operation と GraphQL を組み合わせて使えます。

豆知識

GraphQL は非常に特定のユースケースを解決します。

一般的な Web API と比べると、長所短所 があります。

ご自身のユースケースで得られる 利点欠点 を補うかどうかを評価してください。 🤓

GraphQL ライブラリ

ASGI をサポートする GraphQL ライブラリの一部を以下に示します。FastAPI と組み合わせて使用できます:

Strawberry で GraphQL

GraphQL が必要、または利用したい場合は、Strawberry推奨します。FastAPI の設計に最も近く、すべてが型アノテーションに基づいています。

ユースケースによっては他のライブラリを選ぶ方がよい場合もありますが、私に尋ねられれば、おそらく Strawberry を試すことを勧めるでしょう。

FastAPI と Strawberry を統合する方法の簡単なプレビューです:

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 と FastAPI の連携に関するドキュメントもあります。

Starlette の旧 GraphQLApp

以前の Starlette には、Graphene と統合するための GraphQLApp クラスが含まれていました。

これは Starlette からは非推奨になりましたが、もしそれを使用しているコードがある場合は、同じユースケースをカバーし、ほぼ同一のインターフェースを持つ starlette-graphene3 へ容易に移行できます。

豆知識

GraphQL が必要であれば、依然として Strawberry の利用を推奨します。独自のクラスや型ではなく、型アノテーションに基づいているためです。

さらに学ぶ

GraphQL については、公式 GraphQL ドキュメントでさらに学べます。

上記の各ライブラリについては、リンク先のドキュメントをご参照ください。