在aiohttp和graphql核心之上构建的asyncio graphql客户机next
aiographql-client的Python项目详细描述
Asyncio GraphQL客户端
接下来是在aiohttp和graphql核心之上构建的asyncio graphql客户机。默认情况下,客户机会在发送到服务器之前对模式进行内省并验证所有查询。
安装
pip install aiographql-client
示例用法
下面是这个客户机实现的一些示例用法。这些示例使用Hasura GraphQL Engine。
简单查询
asyncdefget_bots():client=GraphQLClient(endpoint="http://localhost:8080/v1alpha1/graphql",headers={"x-hasura-admin-secret":"myadminsecretkey"},)request=GraphQLRequest(query=""" query get_bots { chatbot { id, bot_name } } """)transaction=awaitclient.post(request)# display the query usedprint(transaction.request.query)# dump the response dataprint(transaction.response.data)
查询订阅
asyncdefget_bots():client=GraphQLClient(endpoint="http://localhost:8080/v1alpha1/graphql",headers={"x-hasura-admin-secret":"myadminsecretkey"},)request=GraphQLRequest(query=""" subscription get_bot_updates { chatbot { id, bot_name } } """)# configure callbacks, here we simply print the event message when a data event# (`GraphQLSubscriptionEvent`) is received.callbacks=CallbackRegistry()callbacks.register(GraphQLSubscriptionEventType.DATA,lambdaevent:print(event.message))subscription:GraphQLSubscription=awaitclient.subscribe(request,callbacks)awaitsubscription.task
查询验证失败
如果您的查询无效,感谢graphql core next,我们将在回溯中得到一个详细的异常。
aiographql.client.exceptions.GraphQLClientValidationException: Query validation failed
Cannot query field 'ids' on type 'chatbot'. Did you mean 'id'?
GraphQL request (4:13)
3: chatbot {
4: ids, bot_names
^
5: }
Cannot query field 'bot_names' on type 'chatbot'. Did you mean 'bot_name' or 'bot_language'?
GraphQL request (4:18)
3: chatbot {
4: ids, bot_names
^
5: }
示例请求
使用variables
和operationName
GraphQLRequest(query=""" query get_bot_created($id: Int) { chatbot(where: {id: {_eq: $id}}) { id, created } } query get_bot_name($id: Int) { chatbot(where: {id: {_eq: $id}}) { id, bot_name } } """,variables={'id':'109'},operationName='get_bot_name')