如何解决当实体是另一实体的本地服务时,为什么在某项服务中看到_entities请求?
我正在努力实现与Apollo GraphQL联合身份验证兼容的服务;我提供的服务是用Lacinia(Clojure的GraphQL库)编写的。
type User @key(fields: "id") {
id: String!
name: String!
}
type Query {
user_by_id(id:String!) : User
}
schema { query: Query }
以及定义产品和扩展用户的第二个:
type User @extends @key(fields: "id") {
id: String! @external
favorite_products: [Product]
}
type Product @key(fields: "upc") {
upc: String!
name: String!
price: Int!
}
type Query {
product_by_upc(upc: String!) : Product
}
schema { query: Query }
当我执行跨服务的查询时:
{
user_by_id(id: "me") {
id
name
favorite_products {
upc
name
price
}
}
}
我失败了;以下请求被发送到products
服务:
INFO products.server - {:query "query($representations:[_Any!]!){_entities(representations:$representations){...on User{favorite_products{upc name price}}}}",:vars {:representations [{:__typename "User",:id "me"}]},:line 52}
并失败了,因为据我所知,产品服务不必为类型__resolveReference
(扩展了它)提供等效的User
;只需键入Product
。
在文档中这还不清楚,我将尝试在Product中为User存根提供一种存根引用解析器。
解决方法
是的,实际上,您必须为服务模式扩展的每种类型提供__resolveReference
(或等效名称)。回想起来,这很有意义,因为它提供了要传递到解析器树的原始值的“内核”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。