7.3 クエリとミューテーションの定義

7.3 クエリとミューテーションの定義 #

この記事では、GraphQLのクエリとミューテーションを定義する方法を説明します。

スキーマ定義 #

以下に、Userモデルとそれを取得するクエリ、そして新しいユーザーを作成するためのミューテーションを定義する例を示します。

from graphene import ObjectType, String, Schema, Field, Mutation

class User(ObjectType):
    id = String()
    name = String()

class Query(ObjectType):
    user = Field(User, id=String(required=True))

    def resolve_user(self, info, id):
        # ここでDBからユーザー情報を取得する処理を書きます
        return User(id=id, name="John Doe") # 仮のデータ

class CreateUser(Mutation):
    class Arguments:
        name = String(required=True)

    user = Field(User)

    def mutate(self, info, name):
        # ここでDBに新しいユーザーを保存する処理を書きます
        return CreateUser(user=User(id="2", name=name)) # 仮のデータ

class Mutation(ObjectType):
    create_user = CreateUser.Field()

schema = Schema(query=Query, mutation=Mutation)

Flaskと統合 #

次に、このスキーマをFlaskと統合します。これにより、特定のエンドポイントにGraphQLリクエストを送信すると、上記のスキーマに基づいて処理が行われます。

from flask import Flask
from flask_graphql import GraphQLView

app = Flask(__name__)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

if __name__ == '__main__':
    app.run()

クエリとミューテーションの実行 #

GraphQLエンドポイントが準備できたら、クライアントからクエリとミューテーションを送信できます。例えば、以下のクエリは特定のユーザーを取得します。

query {
  user(id: "1") {
    name
  }
}

次に、新しいユーザーを作成するためのミューテーションの例です。

mutation {
  createUser(name: "Jane Doe") {
    user {
      id
      name
    }
  }
}

以上がFlaskとGrapheneを使ってGraphQLのクエリとミューテーションを定義する基本的な方法です。ただし、実際のデータベースとの接続、認証やエラーハンドリングなど、本番環境で使用するためには考慮すべき点がまだあります。このガイドはあくまで基本的な概念を理解するためのものであります。