通过aiohttp运行tartiflette graphql引擎

tartiflette-aiohttp的Python项目详细描述


Tartiflette aiohttp

tartiflette aiohttpaiohttp的包装,其中包括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-aiohttppypi.org上可用。

警告:不要忘记安装tartiflette dependencies beforehand as explained in the tutorial

pip install tartiflette-aiohttp

如何使用

与内置Tartiflette发动机一起使用

aiohttp一起使用tartiflette的基本和常见方法是创建一个aiohttpweb.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
    • 的应用程序对象
  • executor_http_endpoint:默认情况下,在/graphql
  • 上连接graphql引擎的端点
  • executor\u http方法:默认情况下,在postget上附加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
    • 的应用程序对象
  • executor_http_endpoint:默认情况下,在/graphql
  • 上连接graphql引擎的端点
  • executor\u http方法:默认情况下,在postget上附加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实例发送的每个请求添加默认头

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用jaxrpc的Java eclipse WebService客户端   java编程方式在对象上写入名称   java Spring批处理:重试后跳过   java Android错误:错误:任务执行失败:应用程序:transformClassesWithDexForDebug'   带有清单文件nullPointerException的java Android元数据   spring Java Quartz调度作业停止运行   JavaMockito:如何在不调用实际方法的情况下,模拟带有参数和无效返回类型的静态方法?   java Tomcat连接池问题无法在关闭的连接上调用方法   java如何交换列表中的项目?   java如何停止线程并通过Toast在线程中正确显示文本?   java为什么连续写入OutputStream时偏移量0不会导致重复字节?   java我无法生成头文件   不兼容的返回类型错误java   修改值后键值对的java Jolt转换规范   java有自动更新Javadoc的工具吗?   java线程如何在ints自身实例类中共享变量   java继承一个非gwt模块   java Hibernate xml配置   使用netty4异步调用的java链接HTTP请求响应