通过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第三方库


热门话题
java搜索文本中的字符串模式   SecurityManager引发异常的java Mockito模拟   java(仅限Netbeans)未找到适合jdbc的驱动程序:mysql://localhost   java计算给定字符串所有前缀的哈希值的子字符串的哈希值   java如何避免每次访问REST认证API以使用实际服务   用于HTML的java Jsoup选择器组合   可以复制或引用的java构造函数   Java中的HashMap。搞砸containsKey返回意外值   java数组平均值计算   java是检查字符串是否包含特定字符的最有效方法   java反序列化对象类已更改   java典型的EJB3/JPA/JSF中的事务范围是什么?   Install4j的java错误代码20   java:compileJava在本地项目()依赖项上的多模块项目上持续失败“错误:包x.y.z不存在”   java有一种生成Suppression的方法。现有代码库中checkstyle的xml文件?