从一个查询/突变中获取结果并管道到另一个

Posted

技术标签:

【中文标题】从一个查询/突变中获取结果并管道到另一个【英文标题】:Take result from one query / mutation and pipe to another 【发布时间】:2016-12-18 16:09:13 【问题描述】:

我想知道 GraphiQL 中是否有一种方法可以让我将一个查询/突变的结果通过管道传输到另一个查询/突变。这是一个示例,其中login 突变用于获取viewerviewer 将用于查询该用户的addresses。 GraphQL / GraphiQL 有可能吗?

mutation 
  login(credentials: 
    email: "me@me.com",
    password: "password123",
    passwordConfirmation: "password123"
  ) 
    viewer
  


query 
  addresses(viewer:viewer) 
    city
  

【问题讨论】:

有一个实验性的 batchOperations 功能,但我认为它还没有登陆 graphql-js。我在这里打开了一个问题。 github.com/graphql/graphql-js/issues/462 【参考方案1】:

突变中选择集的目的是能够获取由于突变而发生变化的数据。但它也使得获取相关数据成为可能,只要可以通过变异结果类型访问即可。

假设我们有以下类型:

type Address 
  city: String

type User 
  addresses: [Address]

如果login突变的结果(payload)类型包含User类型的字段viewer,该字段指向成功登录的用户,则可以查询User结果中的任意字段突变:

mutation 
  login(credentials: 
    email: "me@me.com",
    password: "password123",
    passwordConfirmation: "password123"
  ) 
    viewer 
      addresses 
        city
      
    
  

【讨论】:

在上面的例子中,查看器是一个 ID 或令牌,允许您访问 API 的其他部分。你说的有道理,但对我没有帮助。我仍然需要提出一个请求来获取查看器(令牌),然后将其复制并粘贴为其他突变的参数,这真是太糟糕了。 我认为对于查询,您需要一个代表登录用户的“用户”类型,并在该类型中添加与用户相关的字段。然后可以在变异结果类型中添加对User的引用,这样就可以查询了。正如您所说,对于突变,您确实不能批处理依赖于 GraphQL 中先前突变的结果的突变,但是应该可以在您的 HTTP 中构建一个在查询语言之外执行此操作的批处理端点服务器。 我想它来了,只是还没准备好。 github.com/graphql/graphql-js/issues/462

以上是关于从一个查询/突变中获取结果并管道到另一个的主要内容,如果未能解决你的问题,请参考以下文章

获取选择值列表作为隐藏字段中分隔的管道并提交

graphql 查询或突变能否返回标量值

在 perl 中打开一个管道进程(sqlplus)并从查询中获取信息?

如何从另一个组件重新获取 graphql 查询?

如何将字符串从根视图控制器传递到另一个视图?

从数据工厂管道中的 ML Studio 管道中获取结果