💡
GraphQL入門チュートリアル(Python/Graphene使用)
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つのクエリを定義しています:
-
books
: すべての書籍を取得 -
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を使用した実装方法を学びました。ここでカバーした内容は以下の通りです:
- 基本的なGraphQLスキーマの定義
- クエリの作成と実行
- ミューテーションの定義と実行
GraphQLを使うことで、クライアントが必要なデータだけを柔軟に取得でき、オーバーフェッチングやアンダーフェッチングの問題を解決できます。
より詳細な情報や高度な使用方法については、GraphQLの公式ドキュメントやGrapheneのドキュメントを参照してください。
Discussion