对tartiflette python graphql引擎的asgi支持

tartiflette-starlette的Python项目详细描述


< div >TartifletetteStarletletette logo

构建状态软件包版本code style

tartiflette starlette是一个包装器,它为tartiflettepython graphql引擎提供asgi支持。

使用tartiflette构建graphql api,然后使用附带的tartifletteapp并获得以下结果:

  • 与任何ASGi服务器和框架的兼容性。
  • 独立和子应用服务。
  • 内置Graphiql客户端。
  • 支持通过websocket的graphql订阅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)

将文件另存为graphql.py并启动auvicorn服务器:

uvicorn graphql:app
< Buff行情>

注意:默认情况下,graphql端点在/上公开。

提出请求:

curl -H "Content-Type: application/graphql"  -d '{ hello(name: "Chuck") }' http://localhost:8000

响应:

{"data":{"hello":"Hello, Chuck!"}}

或者在浏览器中访问http://localhost:8000,使用内置的graphiql进行交互式查询

 src=

安装

  1. 安装tartiflette的外部依赖项,如tartiflette教程中所述。
  2. 从PYPI安装Tartiflette Starlette < > >
    pip install tartiflette-starlette
    

    这也将安装

    注意Tartiflette Starlette需要Python 3.6+。

    用户指南

    类是一个符合asgi3的应用程序。有两种使用方法:

    • 作为一个独立的asgi应用程序使用。
    • 将其作为另一个asgi应用程序(例如starlette应用程序)的端点安装。

    独立服务

    快速启动示例演示如何构建一个独立的asgi应用程序。

    该应用程序使用uvicorn提供服务,但任何其他asgi web服务器都可以,例如:

    ASGI子安装

    大多数asgi web框架都提供了在给定url前缀处挂载另一个asgi应用程序的方法。您可以使用它在端点(如根asgi应用程序上的/graphql)上提供tartifletteapp

    这对于在单个应用程序中有一个graphql端点其他(非graphql)端点非常有用。例如,在/api/users处有一个rest端点,在/graphql处有一个graphql端点。 < Buff行情>

    重要信息:这应该与支持asgi子安装的任何web框架一起工作-它不必是starlette。另请参见:什么是starlette的角色rel="nofollow">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!"}}

    一般方法

    假设您有一个名为graphqltartifletteapp实例,则需要:

    1. graphqlapp添加为子应用程序(也称为"mounting")。父asgi应用程序可以为此公开一个方法,例如.mount()
    2. 添加graphql.startup作为启动事件处理程序,以便在应用程序启动时构建tartiflette引擎。注意:
    3. < > >
      • 不执行此操作将导致在请求GraphQL终结点时出现运行时错误
      • 父asgi应用程序可能会公开一个方法,例如。为此目的,添加事件处理程序()
      • 只有当父asgi应用程序没有调用子应用程序的寿命事件处理程序(starlette就是这样)时,才需要这样做。

      提示:安装模块为各种ASGi框架提供安装帮助。

      提出请求

      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
      • json编码的正文(方法: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

      注意:您的graphql api可能在不同的端点上服务。

      访问请求信息

      您可以访问starlette请求对象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

      另请参见Starlette文档中的请求。

      Graphiql客户端

      默认情况下,当从web浏览器访问graphiql时,由tartifletteapp提供的graphql端点为graphiql客户端提供服务。它可以使用graphiqlhelper自定义。

      下面是一个示例:

      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:

       src=有关可用选项的完整说明,请参见《API参考资料》中的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订阅(高级)

      此软件包支持WebSocket上的graphql订阅graphql订阅。订阅查询可以通过内置的graphiql客户端发出,也可以通过apollo graphql和任何使用订阅传输ws协议。

      示例:

      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客户机,然后单击"播放"!计时器应实时更新。

      src="https://warehouse

      有关可用选项的完整说明,请参见《API参考》中的"订阅" rel="nofollow">订阅

      有关在tartiflette中使用订阅的更多信息,请参阅tartiflette文档

      API参考

      < Buff行情>

      注意:除非另有说明,否则此处记录的组件可以直接从startiflette_starlette导入,例如从startiflette_starlette import tartifletteapp

      tartifletteapp

      参数

      注意:所有参数仅为关键字。

      方法

      • 调用(作用域、接收、发送):ASGI3实现。

      错误响应

      <表><广告>状态代码说明 < /广告><正文>400错误请求在请求数据中找不到GraphQL查询。404未找到请求与graphql或graphql终结点路径不匹配。405不允许使用方法http方法不是getheadpost415不支持的媒体类型向graphql端点发出的post请求使用一种不同于application/jsonapplication/graphql内容类型。

      graphiql

      Graphiql客户端的配置帮助程序。

      参数

      注意:所有参数仅为关键字。

      • 路径str,可选):graphiql端点的路径,相对于根路径,根路径tartifletteapp位于处。如果未指定,则默认为路径指定给tartifletteapp
      • default_headersdict,可选):调用graphql端点时要发送的额外http头。
      • 默认查询str,可选):访问Graphiql界面时显示的默认查询。
      • 默认变量dict,可选):访问Graphiql界面时显示的默认变量。
      • 模板str,可选):要使用的HTML模板,而不是默认模板。在模板中,default_headersdefault_querydefault_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

      订阅

      WebSocket订阅的配置帮助程序。

      参数

      注意:所有参数仅为关键字。

      • 路径str):订阅WebSocket终结点的路径,相对于根路径,根路径tartifletteApp位于处。如果未指定,则默认为/subscriptions

      安装

      此模块包含用于在其他ASGi应用程序上安装tartifletteapp的帮助程序。使用这些帮助程序,确保您遵守常规方法中描述的步骤

      参数

      全挂载ING帮助程序需要相同的参数:

      • 父应用程序(asgi app):必须安装tartifletteapp的父asgi应用程序。
      • 路径str):应该安装tartifletteapp的url路径。
      • apptartifletteapp):要装载的tartifletteapp
      • **kwargs(任意):传递给父应用程序的装入实现的额外关键字参数。

      可用帮助程序

      <表><广告>助手安装实现 启动事件处理程序实现 < /广告><正文>mount.starlette()parent.mount()parent.add_event_handler()< Buff行情>

      缺少您最喜欢的框架的帮助程序?请随意打开拉取请求!

      FAQ

      这个包裹是和塔蒂弗莱特一起装运的吗?

      。所有内容都包括在内,这允许您立即开始构建graphql api。另请参见安装。

      我需要学习graphql/tartiflette才能使用这个软件包吗?

      :一旦您启动并运行了TartifletteAppASGi应用程序,您就进入了Tartiflette领域。

      这里有一些资源可以帮助您开始:

      星宿的作用是什么?

      tartiflette starlette使用starlette作为一个轻量级asgi工具包:在内部,它使用starlette的请求和响应类,以及一些其他组件。

      幸运的是,这根本不需要您的应用程序使用Starlette。

      例如,如果您在使用异步web框架构建的应用程序上安装graphql应用程序,则不需要使用starlette,只需要使用asgi即可。

      什么是asgi?

      asgi在支持异步的python web服务器、框架和应用程序之间提供了一个标准接口。

      另请参见asgi文档。

      贡献

      想做贡献吗?令人惊叹的!请务必阅读我们的贡献指南。

      更改日志

      此项目的更改记录在更改日志中。

      许可证

      麻省理工学院< /P>

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

      推荐PyPI第三方库


热门话题
ElasticSearchJava客户端:Java。lang.OutOfMemoryError:无法创建新的本机线程   java仅选择一次jComboBox项,以便将行添加到jTable   数据结构在java中实现矩阵   java Jsoup从隐藏代码的html url读取   java从文件读取unicode行转换UTF8   java什么更便宜:减法还是更高的指数?   导出的GUI项目无法打开/运行,使用eclipse oxygen Java导出   在运行时验证Java错误   java如何处理“构建WebSocket失败:URL无效”的JavaScript异常?   java指定单向@OneToOne JPA映射的所有者   java如何查找训练错误或错误(D)和测试错误或错误(s)   现有工作簿中存在错误的单元格中的java Apache Poi值不会重新计算   java Android Studio Gradle CreateProcess错误=2   urlencode Java库,用于URL编码(如浏览器)   java如何跳过访问(重复)值的索引?   JScrollPane中的java图像原点位于JScrollPane原点之上   java joda时间消耗太多内存   java无法在Eclipse4.3.1开普勒中将double转换为double   java Hystrix CircuitBreakerSleepIndowWinMillicles无法按预期工作   java如果比较的两个对象都为null,equals方法应该返回什么?