【发布时间】:2019-12-27 16:36:05
【问题描述】:
我想将 HTTP POST 值直接作为 JSON 发送到我的 GraphQL Mutation 中已声明的 addBook 解析器。
但是,我看到(并证明)的示例使用从 JSON 到 SDL 的参数序列化或在 SDL 中重新声明变量以从查询变量绑定。
这两种方法都没有意义,因为 addBook 突变已经声明了所有参数和验证。使用这些方法会导致必须创建、调试和维护不必要的查询序列化逻辑。
我在浏览器中构建了格式良好的(模式编辑和验证)JSON,它符合声明的 GraphQLObjectType 的数据。
谁能解释在针对突变解析器发布时如何避免这种不必要的重新序列化或重复?
我一直在尝试将 JSON 数据结构映射到 addBook 突变的多种方法,但找不到简单发送 JSON 以便属性名称与 addBook 参数名称绑定的示例,而没有明显毫无意义的重新序列化或样板.
https://github.com/cefn/graphql-gist/tree/master/mutation-map 的源代码是一个可重现的最小示例,它演示了该问题。它有一个 addBook 解析器,它已经定义了参数名称、类型和可空性。我找不到一种方法来使用 JSON 来简单地针对 addBook 发布参数。
我使用 GraphiQL 作为 HTTP POST 值的参考实现。
我可以编写代码将 JSON 序列化为 SDL。它最终会看起来像这样,通过 GraphiQL 工作:
mutation {addBook(id:"4", name:"Education Course Guide", genre: "Education"){
id
}}
或者,我可以编写代码将 addBook 的每个参数显式别名为不同的查询,然后允许我将值作为 JSON 查询变量发布,这也通过 GraphiQL 得到证明:
mutation doAdd($id: String, $name: String!, $genre: String){
addBook(id:$id, name:$name, genre:$genre){
id
}
}
...使用查询变量...
{
name: "Jonathan Livingstone Seagull",
id: "6"
}
但是,我确信有某种方法可以直接针对 addBook 发布此 JSON,告诉它从查询变量中获取参数。我在想像……
mutation {addBook($*){
id
}}
我希望对 addBook 的突变调用成功,从 JSON 查询变量中获取命名值,但不重新序列化或将属性重新声明为参数名称。
【问题讨论】:
标签: json http post graphql mutation