Lighthouse graphql 自定义解析器
Lighthouse graphql custom resolver
对 GraphQL 和 lighthouse 库比较陌生,不要太苛刻。
因为我不能使用任何模型,因为我的数据源是 API。我正在尝试创建一个自定义解析器,它将数据传递给一个服务,该服务将做一切必要的事情来从 API.
检索数据
它不断地 returns 我这个错误:"Field \"address\" of type \"[Address!]\" must have a sub selection.",
我相信这是因为我不使用模型(只是一个疯狂的猜测)
到目前为止,我的架构如下所示:
type Query {
address(address: String!): [Address!] @field(resolver: "Address@resolve")
}
type Address {
fullAddress: String!
lowestId: Int!
}
以及提到的解析器:
public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): array
{
return array_map(
function ($address): array {
return [
'fullAddress' => $address->getFullAddress()
];
},
$this->service->getAddress($args['address'])
);
}
提前致谢!
该错误甚至不是 Lighthouse 特有的,任何 GraphQL 服务器都会针对您尝试执行的操作产生类似的错误。我假设您正在尝试这样的查询:
{
address(address: "foo")
}
考虑 GraphQL 中的 graph:你的服务器描述了可用的数据类型和它们之间的关系,形成了一个图。每种类型都可以有指向另一种类型的字段,然后该类型指向另一种类型,依此类推。这些引用甚至可以形成循环。在某些点,图可能会结束:标量值等类型标记图的叶子。
现在,服务器如何知道您想要查看图形的哪一部分并且应该解析它?通过查询:对该图的一部分进行子选择。这自然会限制服务器必须达到的深度,它可以对 return 您查询的图表部分进行最少的工作。
一条查询规则是您必须始终以叶节点结束。这是错误消息发挥作用的地方:服务器发现 Address
不是叶类型,因此要求您指定要遍历图形的深度。一个有效的查询可以是:
{
address(address: "foo") {
fullAddress
}
}
对 GraphQL 和 lighthouse 库比较陌生,不要太苛刻。
因为我不能使用任何模型,因为我的数据源是 API。我正在尝试创建一个自定义解析器,它将数据传递给一个服务,该服务将做一切必要的事情来从 API.
检索数据它不断地 returns 我这个错误:"Field \"address\" of type \"[Address!]\" must have a sub selection.",
我相信这是因为我不使用模型(只是一个疯狂的猜测)
到目前为止,我的架构如下所示:
type Query {
address(address: String!): [Address!] @field(resolver: "Address@resolve")
}
type Address {
fullAddress: String!
lowestId: Int!
}
以及提到的解析器:
public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): array
{
return array_map(
function ($address): array {
return [
'fullAddress' => $address->getFullAddress()
];
},
$this->service->getAddress($args['address'])
);
}
提前致谢!
该错误甚至不是 Lighthouse 特有的,任何 GraphQL 服务器都会针对您尝试执行的操作产生类似的错误。我假设您正在尝试这样的查询:
{
address(address: "foo")
}
考虑 GraphQL 中的 graph:你的服务器描述了可用的数据类型和它们之间的关系,形成了一个图。每种类型都可以有指向另一种类型的字段,然后该类型指向另一种类型,依此类推。这些引用甚至可以形成循环。在某些点,图可能会结束:标量值等类型标记图的叶子。
现在,服务器如何知道您想要查看图形的哪一部分并且应该解析它?通过查询:对该图的一部分进行子选择。这自然会限制服务器必须达到的深度,它可以对 return 您查询的图表部分进行最少的工作。
一条查询规则是您必须始终以叶节点结束。这是错误消息发挥作用的地方:服务器发现 Address
不是叶类型,因此要求您指定要遍历图形的深度。一个有效的查询可以是:
{
address(address: "foo") {
fullAddress
}
}