GraphQL / Flask

GraphQLについて、下記で簡単に取り上げましたが、今回はもう少し実用的に試してみました。

GraphQL / Python FastAPI

環境) Python 3.9.6 / Mac(arm64)

インストール)

% pip install flask
% pip install flask_graphql
% pip install flask_cors
% pip install “graphql-core<3”
% pip install “graphene<3”

% pip freeze
aniso8601==7.0.0
blinker==1.7.0
click==8.1.7
Flask==3.0.0
Flask-Cors==4.0.0
Flask-GraphQL==2.0.1
graphene==2.1.9
graphql-core==2.3.2
graphql-relay==2.0.1
graphql-server-core==1.2.0
importlib-metadata==7.0.1
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
promise==2.3
Rx==1.6.3
six==1.16.0
Werkzeug==3.0.1
zipp==3.17.0

※バージョンを下げないと依存性が解決できなかった点がちょっと気になる・・

参考) 
https://www.magata.net/memo/index.php?GraphQL%C6%FE%CC%E7#ze68b00b

schema01.py

※こちらのmainは動かさず、参考まで。

flask_app.py

※graphiql=True でGUIツールを表示

起動)

% pyton flask_app.py

localhost:5000

curlでも確認

% curl http://127.0.0.1:5000/ –data query=’mutation { createUser(name:”name04″, age:40) { user {id, name, age}, created }}’
{“data”:{“createUser”:{“user”:{“id”:”4″,”name”:”name04″,”age”:40},”created”:true}}}%

% curl http://127.0.0.1:5000/ –data query=’query { user(id: “4”) { id, name, age}}’
“data”:{“user”:{“id”:”4″,”name”:”name04″,”age”:40}}}%

データの追加も確認できました。永続性は別途考慮する必要があリます。
他の実装もまた調査してみたいです。

参考)
https://github.com/graphql-python/graphene/blob/master/examples/context_example.py

https://docs.graphene-python.org/en/latest/execution/execute/