GraphQLのクエリビルダー作った
2019-09-12
tl; dr
- https://github.com/youyo/gql-query-builder
- GraphQLの勉強がてら作った
なぜ作った?
GraphQLの勉強をしようと思ったときに, pythonのサンプルを見るとクエリが直書きでした。
ref: https://github.com/prisma/python-graphql-client#usage
from graphqlclient import GraphQLClient
client = GraphQLClient('http://graphql-swapi.parseapp.com/')
result = client.execute('''
{
allFilms {
films {
title
}
}
}
''')
print(result)
まぁいい感じのクエリビルダーあるだろ~って思ってたら案外見つけられなかったっていうのと, とりあえずGraphQLに触れて学べたらなってことで作ってみることにしました。車輪の再発明になったとしてもokということで。
(ちなみにpython以外ならクエリビルダーあった。)
gql-query-builder
Install
pip
でどうぞ。
pip install gql-query-builder
Usage
ベーシックな使い方です。
method chainで繋いでいきます。
- query
from gql_query_builder import GqlQuery
query = GqlQuery().fields(['name']).query('hero').operation().generate()
print(query)
"""
query {
hero {
name
}
}
"""
- mutation
from gql_query_builder import GqlQuery
query = GqlQuery().fields(['stars', 'commentary']).query('createReview', input={"episode": "$ep", "review": "$review"}).operation('mutation', name='CreateReviewForEpisode', input={"$ep": "Episode!", "$review": "ReviewInput!"}).generate()
print(query)
"""
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
"""
https://graphql.org/learn/queries/ に書かれているクエリの作る例をGithubにあげているのでこちらも参考に。
実例
実際に動くコードだと下記のようになります。
Public GraphQL APIsに国情報を取得できるAPIがあったのでそこにリクエストするコードです。
from gql_query_builder import GqlQuery
from graphqlclient import GraphQLClient
if __name__ == '__main__':
# create client
client = GraphQLClient('https://countries.trevorblades.com/')
# generate query
query = GqlQuery()\
.fields(['name', 'native', 'emoji'])\
.query('country', input={"code": '"JP"'})\
.operation('query')\
.generate()
# execute
response = client.execute(query)
print(response)
まとめ
- 機能的に足りない部分もあると思うけども, とりあえず基本的なクエリは作れると思う
- GraphQLの理解は進んだので目的達成