对tartiflette python graphql引擎的asgi支持
tartiflette-starlette的Python项目详细描述
tartiflette starlette
是一个包装器,它为tartiflettepython graphql引擎提供asgi支持。
使用tartiflette构建graphql api,然后使用附带的tartifletteapp
并获得以下结果:
目录
将文件另存为 注意:默认情况下,graphql端点在 提出请求: 响应: 或者在浏览器中访问http://localhost:8000,使用内置的graphiql进行交互式查询
(*)这是一个缩写: 将文件另存为 提出请求: 响应: 假设您有一个名为 提示:安装模块为各种ASGi框架提供安装帮助。 注意:您的graphql api可能在不同的端点上服务。 您可以访问starlette 另请参见Starlette文档中的请求。 默认情况下,当从web浏览器访问graphiql时,由 下面是一个示例: 将其保存为 有关可用选项的完整说明,请参见《API参考资料》中的 您可以使用 例如,假设您使用名为 此软件包支持WebSocket上的graphql订阅graphql订阅。订阅查询可以通过内置的graphiql客户端发出,也可以通过apollo graphql和任何使用订阅传输ws协议。 示例: 注意:默认情况下,订阅终结点在 将此文件另存为 有关可用选项的完整说明,请参见《API参考》中的"订阅" rel="nofollow"> 有关在tartiflette中使用订阅的更多信息,请参阅tartiflette文档 注意:除非另有说明,否则此处记录的组件可以直接从 注意:所有参数仅为关键字。 Graphiql客户端的配置帮助程序。 注意:所有参数仅为关键字。 WebSocket订阅的配置帮助程序。 注意:所有参数仅为关键字。 此模块包含用于在其他ASGi应用程序上安装 全挂载ING帮助程序需要相同的参数: 缺少您最喜欢的框架的帮助程序?请随意打开拉取请求! 是。所有内容都包括在内,这允许您立即开始构建graphql api。另请参见安装。
是:一旦您启动并运行了 这里有一些资源可以帮助您开始: 幸运的是,这根本不需要您的应用程序使用Starlette。 例如,如果您在使用异步web框架构建的应用程序上安装graphql应用程序,则不需要使用starlette,只需要使用asgi即可。 asgi在支持异步的python web服务器、框架和应用程序之间提供了一个标准接口。 另请参见asgi文档。
想做贡献吗?令人惊叹的!请务必阅读我们的贡献指南。
此项目的更改记录在更改日志中。
麻省理工学院< /P>快速启动
fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
graphql.py
并启动auvicorn服务器:uvicorn graphql:app
< Buff行情>/
上公开。curl -H "Content-Type: application/graphql" -d '{ hello(name: "Chuck") }' http://localhost:8000
{"data":{"hello":"Hello, Chuck!"}}
安装
pip install tartiflette-starlette
星形图示例
fromstarlette.applicationsimportStarlettefromstarlette.responsesimportPlainTextResponsefromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp,mountapp=Starlette()@app.route("/")asyncdefhome(request):returnPlainTextResponse("Hello, world!")@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""graphql=TartifletteApp(sdl=sdl)mount.starlette(app,"/graphql",graphql)# (*)
< Buff行情>app.mount("/graphql",graphql)app.add_event_handler("startup",graphql.startup)
a p p.py
,并与uvicorn一起提供:uvicorn app:app
curl -H "Content-Type: application/graphql" -d '{ hello(name: "Chuck") }' http://localhost:8000
{"data":{"hello":"Hello, Chuck!"}}
一般方法
graphql
的tartifletteapp
实例,则需要:graphql
app添加为子应用程序(也称为"mounting")。父asgi应用程序可以为此公开一个方法,例如.mount()
。运行时错误
。。为此目的,添加事件处理程序()
。提出请求
tartiflette starlette
符合graphql规范,该规范允许您以多种方式传递查询:获取
,发布
):fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
1
post
):fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
2
应用程序/graphql
内容类型(方法:post
):fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
3
访问请求信息
请求
对象fr使用context["req"]
的OM解析器:fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
4
Graphiql客户端
tartifletteapp
提供的graphql端点为graphiql客户端提供服务。它可以使用graphiql
helper自定义。fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
5
graphql.py
并运行uvicorn graphql:app
。当您访问http://127.0.0.1/graphiql" rel="nofollow">http://127.0.0.1/graphiql:graphiql
。为解析器提供附加上下文
context
选项将自己的服务、函数或数据注入graphqlcontext
中。pubsub
的发布/订阅库,则可以编写:fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
6
WebSocket订阅(高级)
fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
7
< Buff行情>/subscriptions
上公开。graphql.py
,然后运行$uvicorn graphql:app
。打开位于http://localhost:8000的graphiql客户机,然后单击"播放"!计时器应实时更新。订阅
。API参考
< Buff行情>startiflette_starlette
导入,例如从startiflette_starlette import tartifletteapp
tartifletteapp
参数
引擎
(引擎
):一个tartiflette引擎。如果未提供SDL,则需要此选项。sdl
(str
):使用graphql模式定义语言定义的graphql模式。如果未给出发动机
,则需要此选项。路径
(str
,可选):客户端应生成GraphQL的路径查询到。默认为"/"
graphiql
(graphiql
或bool
,可选):Graphiql客户端的配置。默认为true
,相当于graphiql()
。使用false
不注册Graphiql客户端。订阅
(订阅
或bool
,可选):订阅配置。默认为true
,相当于订阅(路径="/subscriptions")
。保留为空或通过none
不注册订阅WebSocket终结点。context
(dict
,可选):执行查询时,此字典的副本将传递给解析器。默认为{}
。注意:starlette请求
对象始终显示为req
模式名
(str
,可选):模式注册表中的GraphQL模式名应该使用,主要用于高级用途。默认为"默认"方法
调用(作用域、接收、发送)
:ASGI3实现。错误响应
<表><广告> < /广告><正文>状态代码 说明
400错误请求 在请求数据中找不到GraphQL查询。 404未找到 请求与graphql或graphql终结点路径不匹配。 405不允许使用方法 http方法不是 get
、head
或post
415不支持的媒体类型 向graphql端点发出的post请求使用一种不同于 application/json
和application/graphql
的内容类型。
graphiql
参数
路径
(str
,可选):graphiql端点的路径,相对于根路径,根路径tartifletteapp
位于处。如果未指定,则默认为路径
指定给
tartifletteapp
default_headers
(dict
,可选):调用graphql端点时要发送的额外http头。默认查询
(str
,可选):访问Graphiql界面时显示的默认查询。默认变量
(dict
,可选):访问Graphiql界面时显示的默认变量。模板
(str
,可选):要使用的HTML模板,而不是默认模板。在模板中,default_headers
、default_query
和default_variables
以及graphqlendpoint
都可以使用模板字符串替换作为字符串(如果需要,使用json编码),例如:fromtartifletteimportResolverfromtartiflette_starletteimportTartifletteApp@Resolver("Query.hello")asyncdefhello(parent,args,context,info):name=args["name"]returnf"Hello, {name}!"sdl=""" type Query { hello(name: String): String }"""app=TartifletteApp(sdl=sdl)
8
订阅
参数
路径
(str
):订阅WebSocket终结点的路径,相对于根路径,根路径tartifletteApp
位于处。如果未指定,则默认为/subscriptions
安装
tartifletteapp
的帮助程序。使用这些帮助程序,确保您遵守常规方法中描述的步骤参数
父应用程序
(asgi app):必须安装tartifletteapp
的父asgi应用程序。路径
(str
):应该安装tartifletteapp
的url路径。app
(tartifletteapp
):要装载的tartifletteapp
。**kwargs
(任意):传递给父应用程序的装入实现的额外关键字参数。
可用帮助程序
<表><广告> < /广告><正文>助手 安装实现
启动事件处理程序实现
< Buff行情>mount.starlette()
parent.mount()
parent.add_event_handler()
FAQ
这个包裹是和塔蒂弗莱特一起装运的吗?
我需要学习graphql/tartiflette才能使用这个软件包吗?
TartifletteApp
ASGi应用程序,您就进入了Tartiflette领域。星宿的作用是什么?
tartiflette starlette
使用starlette作为一个轻量级asgi工具包:在内部,它使用starlette的请求和响应类,以及一些其他组件。什么是asgi?
贡献
更改日志
许可证
推荐PyPI第三方库