💡

GraphQL入門チュートリアル(Python/Graphene使用)

2024/08/24に公開

GraphQLは、APIのためのクエリ言語であり、既存のデータに対するクエリを実行するためのランタイムです。このチュートリアルでは、PythonとGrapheneライブラリを使用して、簡単なGraphQLサーバーを構築する方法を学びます。

1. 環境設定

まず、必要なライブラリをインストールします:

pip install graphene

2. 基本的な構造

以下のコードは、書籍情報を管理する簡単なGraphQLサーバーの基本構造です:

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

# データベースの代わりとなるリスト
books = [
    {"id": 1, "title": "Pythonプログラミング", "author": "山田太郎"},
    {"id": 2, "title": "GraphQL入門", "author": "佐藤花子"}
]

class Book(ObjectType):
    id = Int()
    title = String()
    author = String()

class Query(ObjectType):
    books = List(Book)
    book = Field(Book, id=Int(required=True))

    def resolve_books(self, info):
        return books

    def resolve_book(self, info, id):
        for book in books:
            if book["id"] == id:
                return book
        return None

schema = Schema(query=Query)

3. クエリの定義

GraphQLでは、クエリを使ってデータを取得します。上記のコードでは、以下の2つのクエリを定義しています:

  1. books: すべての書籍を取得
  2. book: IDを指定して1冊の書籍を取得

4. クエリの実行

クエリを実行するには、以下のようにします:

# すべての書籍を取得
query_string = '''
{
    books {
        id
        title
        author
    }
}
'''

result = schema.execute(query_string)
print(result.data)

# 特定の書籍を取得
single_book_query = '''
{
    book(id: 2) {
        title
        author
    }
}
'''

result = schema.execute(single_book_query)
print(result.data)

5. ミューテーションの追加

データを変更するには、ミューテーションを使用します。以下のコードで新しい書籍を追加するミューテーションを定義します:

class CreateBook(Mutation):
    class Arguments:
        title = String(required=True)
        author = String(required=True)

    book = Field(Book)

    def mutate(self, info, title, author):
        new_id = max(book["id"] for book in books) + 1
        new_book = {"id": new_id, "title": title, "author": author}
        books.append(new_book)
        return CreateBook(book=new_book)

class Mutations(ObjectType):
    create_book = CreateBook.Field()

# スキーマにミューテーションを追加
schema = Schema(query=Query, mutation=Mutations)

6. ミューテーションの実行

新しい書籍を追加するミューテーションを実行するには、以下のようにします:

mutation_string = '''
mutation {
    createBook(title: "GraphQL実践", author: "鈴木一郎") {
        book {
            id
            title
            author
        }
    }
}
'''

result = schema.execute(mutation_string)
print(result.data)

まとめ

このチュートリアルでは、GraphQLの基本的な概念と、PythonとGrapheneを使用した実装方法を学びました。ここでカバーした内容は以下の通りです:

  1. 基本的なGraphQLスキーマの定義
  2. クエリの作成と実行
  3. ミューテーションの定義と実行

GraphQLを使うことで、クライアントが必要なデータだけを柔軟に取得でき、オーバーフェッチングやアンダーフェッチングの問題を解決できます。

より詳細な情報や高度な使用方法については、GraphQLの公式ドキュメントGrapheneのドキュメントを参照してください。

Discussion