通过aiohttp运行tartiflette graphql引擎
tartiflette-aiohttp的Python项目详细描述
tartiflette aiohttp是aiohttp
的包装,其中包括tartiflette graphql引擎。你可以看看Tartiflette API documentation。
用法
# main.pyfromaiohttpimportwebfromtartifletteimportResolverfromtartiflette_aiohttpimportregister_graphql_handlers@Resolver("Query.hello")asyncdefresolver_hello(parent,args,ctx,info):return"hello "+args["name"]sdl=""" type Query { hello(name: String): String }"""web.run_app(register_graphql_handlers(web.Application(),engine_sdl=sdl))
保存文件并启动服务器。
$ python main.py ======== Running on http://0.0.0.0:8080 ========(Press CTRL+C to quit)
Note: The server will be listening on the
/graphql
path by default.
向服务器发送请求
curl -v -d '{"query": "query { hello(name: "Chuck") }"}' -H "Content-Type: application/json" http://localhost:8080/graphql
安装
tartiflette-aiohttp
在pypi.org上可用。
警告:不要忘记安装tartiflette dependencies beforehand as explained in the tutorial。
pip install tartiflette-aiohttp
如何使用
与内置Tartiflette发动机一起使用
与aiohttp
一起使用tartiflette的基本和常见方法是创建一个aiohttp
web.Application
,并使用register_graphql_handlers
助手将tartiflette和aiohttp
绑定在一起。engine_*
参数将被转发到内置的tartiflette引擎实例。
fromaiohttpimportwebfromtartiflette_aiohttpimportregister_graphql_handlerssdl=""" type Query { hello(name: String): String }"""ctx={'user_service':user_service}web.run_app(register_graphql_handlers(app=web.Application(),engine_sdl=sdl,engine_schema_name="default",executor_context=ctx,executor_http_endpoint='/graphql',executor_http_methods=['POST','GET']))
参数:
- 引擎sdl:包含Schema Definition Language
- 可以是包含sdl的字符串
- 可以是字符串数组,其中包含sdl
- 可以是SDL的路径
- 可以是包含sdl的路径数组
- 引擎架构名称:内置引擎使用的架构的名称。对于高级用例很有用,请参见Schema Registry API。
- executor_context:将传递给每个解析器的上下文(作为dict)。对于将处理程序传递到要在解析器中使用的服务、函数或数据非常有用。每个请求的上下文引用都是unique,将基于传递的上下文创建浅层副本。
- req:来自
aiohttp
的请求对象
- app:来自
aiohttp
的应用程序对象
- req:来自
- executor_http_endpoint:默认情况下,在
/graphql
上连接graphql引擎的端点
- executor\u http方法:默认情况下,在post和get上附加graphql引擎的http方法。
与定制Tartiflette发动机一起使用
如果您已经有一个tartiflette引擎实例,或者您不想使用内置实例。可以将一个现有实例传递给该辅助工具。
# main.pyfromaiohttpimportwebfromtartifletteimportResolver,Enginefromtartiflette_aiohttpimportregister_graphql_handlers@Resolver("Query.hello")asyncdefresolver_hello(parent,args,ctx,info):return"hello "+args["name"]sdl=""" type Query { hello(name: String): String }"""engine=Engine(sdl)ctx={'user_service':user_service}web.run_app(register_graphql_handlers(app=web.Application(),engine=engine,executor_context=ctx,executor_http_endpoint='/graphql',executor_http_methods=['POST','GET']))
参数:
- engine:tartiflette引擎的实例
- executor_context:将传递给每个解析器的上下文(作为dict)。对于将处理程序传递到要在解析器中使用的服务、函数或数据非常有用。
- req:来自
aiohttp
的请求对象
- app:来自
aiohttp
的应用程序对象
- req:来自
- executor_http_endpoint:默认情况下,在
/graphql
上连接graphql引擎的端点
- executor\u http方法:默认情况下,在post和get上附加graphql引擎的http方法
有订阅的Tartiflette
Tartiflette嵌入了一种处理订阅的简单方法。唯一要做的就是
填写subscription_ws_endpoint
参数,一切都会好起来的
有aiohttp
个websockets的盒子。你可以看到一个完整的例子
here。
启用Graphiql处理程序
Tartiflette允许您设置Graphiql实例,以便快速测试
你的问题。最简单的方法是设置graphiql_enabled
参数到True
。然后,您可以通过填充
如下所示的graphiql_options
参数:
fromaiohttpimportwebfromtartiflette_aiohttpimportregister_graphql_handlers_SDL=""" type Query { hello(name: String): String }"""web.run_app(register_graphql_handlers(app=web.Application(),engine_sdl=_SDL,graphiql_enabled=True,graphiql_options={# This is optional"endpoint":"/explorer",# Default: `/graphiql`,"default_query":""" query Hello($name: String) { hello(name: $name) } ""","default_variables":{"name":"Bob",},"default_headers":{"Authorization":"Bearer <default_token>",},},))
参数:
- 引擎sdl:包含Schema Definition Language
- 可以是包含sdl的字符串
- 可以是字符串数组,其中包含sdl
- 可以是SDL的路径
- 可以是包含sdl的路径数组
- graphiql_enabled(可选[bool]=false):确定我们是否应该包括graphiql接口
- graphiql选项(可选[dict]=none):graphiql实例的自定义选项:
- 端点(可选[str]=“/graphiql”):允许自定义graphiql接口端点路径
- 默认查询(可选[str]=none):允许您用默认查询预先填充graphiql接口
- 默认变量(可选[dict]=none):允许您用默认变量预先填充graphiql接口
- default_headers(可选[dict]=none):允许您向通过GraphiQL实例发送的每个请求添加默认头