如何使用Ariadne获取Resolver函数中请求的GraphQl查询属性
我已经在Python中创建了烧瓶服务器,并使用Ariadne将Python函数绑定到Apollo GraphQl架构。我遵循了本指南 -
”按预期工作,但我只想查询客户端从GraphQl查询请求的基础数据源中的这些字段。因此,我需要访问解析器函数中请求的查询,我无法弄清楚如何。
这是我的烧瓶 /graphQl api:
import json
from api import app
from ariadne.constants import PLAYGROUND_HTML
from flask import request, jsonify
from ariadne import load_schema_from_path, make_executable_schema, snake_case_fallback_resolvers, graphql_sync, ObjectType
from queries import get_asset_resolver
query = ObjectType("Query")
query.set_field("getAsset", get_asset_resolver)
type_defs = load_schema_from_path("./schema.graphql")
schema = make_executable_schema(type_defs, query, snake_case_fallback_resolvers)
@app.route("/graphql", methods=["GET"])
def graphql_playground():
return PLAYGROUND_HTML, 200
@app.route("/graphql", methods=["POST"])
def graphql_server():
data = request.get_json()
print('GraphQL request: ', data)
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=app.debug
)
print('Result from resolver: ', success, result)
status_code = 200 if success else 400
return jsonify(result), status_code
这是我的解析器函数:
from ariadne import convert_kwargs_to_snake_case
import sqlquerybuilder
import runquery
@convert_kwargs_to_snake_case
def get_asset_resolver(obj, info, filters):
# I want to fetch the requested query attributes here
query = sqlquerybuilder.build_query_for_assets(filters)
assets = runquery.run_query_for_assets(query)
return assets
I have created a Flask server in Python and used Ariadne to bind Python functions to Apollo GraphQL schema. I have followed this guide - Apollo GraphQL with Python
It's working as expected but I want to query only those fields in my underlying data source which the client requests from the GraphQL query. So, I need to access the requested query in the resolver function, which I am unable to figure out how.
This is my Flask /graphQL API:
import json
from api import app
from ariadne.constants import PLAYGROUND_HTML
from flask import request, jsonify
from ariadne import load_schema_from_path, make_executable_schema, snake_case_fallback_resolvers, graphql_sync, ObjectType
from queries import get_asset_resolver
query = ObjectType("Query")
query.set_field("getAsset", get_asset_resolver)
type_defs = load_schema_from_path("./schema.graphql")
schema = make_executable_schema(type_defs, query, snake_case_fallback_resolvers)
@app.route("/graphql", methods=["GET"])
def graphql_playground():
return PLAYGROUND_HTML, 200
@app.route("/graphql", methods=["POST"])
def graphql_server():
data = request.get_json()
print('GraphQL request: ', data)
success, result = graphql_sync(
schema,
data,
context_value=request,
debug=app.debug
)
print('Result from resolver: ', success, result)
status_code = 200 if success else 400
return jsonify(result), status_code
And this is my resolver function:
from ariadne import convert_kwargs_to_snake_case
import sqlquerybuilder
import runquery
@convert_kwargs_to_snake_case
def get_asset_resolver(obj, info, filters):
# I want to fetch the requested query attributes here
query = sqlquerybuilder.build_query_for_assets(filters)
assets = runquery.run_query_for_assets(query)
return assets
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论