GraphQL¶
FastAPIはASGI標準に基づいているため、ASGIにも対応しているGraphQLライブラリを簡単に統合できます。
通常のFastAPIのパス操作とGraphQLを同じアプリケーションで組み合わせることができます。
ヒント
GraphQLは、非常に特定のユースケースを解決します。
一般的なウェブAPIと比較して、長所と短所があります。
ユースケースにおける利点が欠点を上回るかどうかを評価してください。🤓
GraphQLライブラリ¶
ASGIサポートを持ついくつかのGraphQLライブラリをご紹介します。これらをFastAPIで使用できます。
- Strawberry 🍓
- Ariadne
- Tartiflette
- ASGI統合を提供するTartiflette ASGI付き
- Graphene
Strawberryを使ったGraphQL¶
GraphQLを使用する必要がある場合、または使用する場合は、Strawberryが推奨されるライブラリです。これは、FastAPIの設計に最も近い設計であり、すべて型アノテーションに基づいているためです。
ユースケースによっては、別のライブラリを使用する方が適切な場合がありますが、私に尋ねれば、おそらくStrawberryを試してみることをお勧めします。
StrawberryをFastAPIと統合する方法の簡単な例を以下に示します。
import strawberry
from fastapi import FastAPI
from strawberry.asgi import GraphQL
@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 = GraphQL(schema)
app = FastAPI()
app.add_route("/graphql", graphql_app)
app.add_websocket_route("/graphql", graphql_app)
StrawberryのドキュメントでStrawberryの詳細を学ぶことができます。
また、FastAPIとStrawberryに関するドキュメントも参照してください。
Starletteの古いGraphQLApp
¶
以前のバージョンのStarletteには、Grapheneと統合するためのGraphQLApp
クラスが含まれていました。
Starletteから非推奨となりましたが、それを用いたコードがある場合は、同じユースケースをカバーし、ほぼ同一のインターフェースを持つstarlette-graphene3に簡単に移行できます。
ヒント
GraphQLが必要な場合は、カスタムクラスや型ではなく型アノテーションに基づいているため、Strawberryを確認することをお勧めします。
詳細情報¶
公式GraphQLドキュメントでGraphQLの詳細を学ぶことができます。
上記で説明した各ライブラリについては、それぞれのリンクで詳細を読むことができます。