GraphQLはFacebookにより開発されたオープンソースの言語。
以降では、GraphQLの考え方と簡単な環境構築を行う。
pythonライブラリ graphene を使用してサーバ環境を構築する。
pythonの仮想環境を作って graphene をインストールしておく。
※WebAPIとして提供する為、flask と flask-graphql も同時にインストール。
pip install pipenv pipenv --python 3.7 pipenv install graphene pipenv install flask pipenv install flask-grapphql
動作確認用に仮想環境のシェルを起動しておく
pipenv shell
schema.py
import graphene class User(graphene.ObjectType): # graphene.ObjectType を継承してスキーマ定義 """スキーマの定義.""" id = graphene.ID() name = graphene.String() age = graphene.Int() class Query(graphene.ObjectType): """リゾルバ関数の定義.""" user = graphene.Field(User) def resolve_user(self, info, id): #「resolve_変数名」でリゾルバ関数を定義する return User(id=1, name="Taro", age=20) # スキーマを生成 schema = graphene.Schema(query=Query)
test_schema.py
from sample_schema import schema if __name__ == "__main__": query = """ query something { user(id: "1") { id name age } } """ result = schema.execute(query) #result = schema.execute(query, {"id": "1"}) if result.errors: print(result.errors) else: print(result.data)
動作確認の実行
python test_schema.py OrderedDict([('user', OrderedDict([('id', '1'), ('name', 'Taro'), ('age', 20)]))])
app.py
from schema import schema from flask import Flask from flask_graphql import GraphQLView app = Flask(__name__) app.debug = True app.add_url_rule( '/', view_func=GraphQLView.as_view( 'graphql', schema=schema, graphiql=True # テスト時などにブラウザから利用できるAPIコンソールをONにしておく ) ) if __name__ == '__main__': app.run()
サーバ起動
python app.py
curl http://127.0.0.1:5000/ --data query='{ user(id: "1") { id, name, age}}' {"data":{"user":{"id":"1","name":"Taro","age":20}}}
※ graphiql=True で起動している場合は、ブラウザから任意のQueryを発行する為の、コンソール画面も提供される。