gpt4 book ai didi

graphql - GraphQLScalarType 中的 parseValue 和 parseLiteral 有什么区别

转载 作者:行者123 更新时间:2023-12-04 04:41:02 26 4
gpt4 key购买 nike

查看自定义标量类型的 GraphQL 文档(我正在尝试创建自己的日期类型)我不确定 parseValue 之间有什么区别和 parseLiteral是。

http://graphql.org/graphql-js/type/#graphqlscalartype

该文档似乎没有包含对函数应该做什么的任何描述。

有人可以告诉我有什么要求吗?我假设 serialize必须将标量序列化为字符串。那是正确的吗?我假设 parseLiteral 是将该字符串反序列化为类型?在我的情况下是 Date 类型。但是,在示例中 - serialize 和 parseValue 是同一个函数 - 这表明它不是一个简单的反序列化方法。

最佳答案

serialize当类型的值将作为响应发送到客户端时,将调用方法。由于输出上的值是JSON形式,返回值serialize可以是任何东西。可以是字符串、数字、数组、对象...

另外两种方法( parseValueparseLiteral )是读取输入。

在 GraphQL 中有两种从客户端读取输入的方式,一种是在查询中内联,例如:

query {
allUsers(first:10) {
id
}
}

哪里 10first 的内联值争论。由于 GraphQL 的输入语言不完全是 JSON,因此值(此处为 10)正在被解析并转换为 AST(抽象语法树)。在这种情况下, parseLiteral来玩。它输入 AST 并返回类型的解析值。类型可能像 JSON 和 parseLiteral 一样复杂可以遍历 AST 并返回 JSON。

从客户端读取输入的另一种方式是通过变量:
query ($howMany: YourCustomType) {
users(first: $howMany) {
id
}
}

变量:
{
"howMany": {
"thisMany": 10
}
}

由于变量是纯 JSON,因此这里不需要 AST,您已经有了 JSON。那就是 parseValue来玩。它以 JSON 形式获取输入并返回查询解析器应使用的任何内容。
function parseValue(value) {
let first = value.thisMany;
return first;
}

因此,从变量中读取与读取内联值时可能有不同的表示,但从概念上讲,它们在表示方面应该相同。然而,由于输入的“类型”不同(内联是 GraphQL,变量是 JSON),解析算法可能不同。这就是为什么如果将其定义为输入类型,则需要提供两种单独的方法来读取它们。

关于graphql - GraphQLScalarType 中的 parseValue 和 parseLiteral 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com