当一个人一次只能运行时,为什么要在graphql查询文档中发送多个操作?

时间:2018-04-08 04:41:45

标签: graphql

graphql规范提到只要选择要运行的操作,就可以在请求文档中发送多个操作:

http://facebook.github.io/graphql/October2016/#ExecuteRequest()

  

要执行请求,执行程序必须具有已解析的文档(如本规范的“查询语言”部分中所定义)和选定的操作名称,以便在文档定义多个操作时运行,否则文档只能用于包含一个操作。

在什么情况下,您会发送包含多个操作的文档吗?我只能假设这是为了允许在操作之间切换而不必为每个操作创建单独的文档?

1 个答案:

答案 0 :(得分:1)

我从graphql团队找到了这个答案:

  

用途是三重的:

     
      
  1. 将GraphQL文档存储在客户端文件中通常很有用;我们为此在iOS和Android上使用.graphql文件。我们也希望解析器也可以处理这些文件(因此解析器是通用的),但是您可以(而且我们经常这样做)在单个文档中包含多个查询。
  2.   
  3. 可以进行的一项优化(我相信我们将来会更详细地讨论)是“持久化”文档。您可以将文档发送到为您存储文档的服务器,并为其指定一个标识符,这样就不必每次都发送整个文档字符串。如果这样做,您可以发送包含所有查询的文档,然后通过网络传递文档ID +操作名称。这样可以优化从客户端发送到服务器的字节。
  4.   
  5. 可以为GraphQL编写一个“批处理” API,您可以在其中使用一个查询的结果作为另一个查询的参数。我们仍在那里确定确切的细节,但是如果您这样做,在一个文档中指定多个查询将很有用。您将指定一开始要运行的对象以及它们之间的关系。
  6.   

参考:https://github.com/facebook/graphql/issues/29#issuecomment-118994619