你能解释一下 GraphQL POST 请求中的术语吗

Can you explain the terminology in a GraphQL POST request

在 Apollo Developers 文档中有一个 GraphQL

中 post 请求的有效主体的示例
{
    "query": "query aTest($arg1: String!) { test(who: $arg1) }"
}

根据我在 Apollo Server 中看到的情况,此查询也适用于:

{
    "query": "aTest($arg1: String!) { test(who: $arg1) }"
}

谁能解释一下为什么 "query" 在第一个例子中出现两次? GraphQL 服务器从中解释了什么?

第二个例子是标准化格式吗?

参考:http://dev.apollodata.com/tools/graphql-server/requests.html

查询在 GraphQL 中有两种含义——它可以指代向服务器发出的请求,或者指代该请求中使用的操作类型。 GraphQL 中使用了三种类型的操作——查询、变异和订阅。

在您的第一个示例中,第一个 query 标识随您的请求一起发送的 查询文档 。第二个 query 标识操作类型。

换句话说,您可以查询一个服务器,但是您的查询可能包含也可能不包含查询(例如,它可能是一个 Mutation)。

在编写查询时,如果您省略了操作类型,GraphQL 会简单地假设您需要一个查询,而不是其他操作,并顺其自然。以类似的方式,也可以省略 操作名称 (aTest)。

据我所知,省略操作名称没有任何好处 - 您应该始终包含它以防止出现任何歧义和潜在问题。