我有两个微服务ms 1和ms 2,每次使用Apollo GraphQL构建的API网关通过解析器发送请求时,它们都会输出不同类型的数据。
具体来说,第一个解析器getCart(userId: ID!): Cart!
调用ms 1,并使用以下响应体进行响应:
{
"items": [
{
"itemId": "8a016af8-5336-4799-b806-73976996aa6f",
"quantity": 1
},
{
"itemId": "9a016af8-5336-4799-b806-73976996aa6f",
"quantity": 2
}
]
}
也就是说,Cart
类型,只是一个包含一个具有id和数量的项目数组的对象。
第二个解析器getItem(itemId: ID!): Item!
调用ms 2,并使用以下响应体进行响应:
{
"itemId": "7a016af8-5336-4b99-b806-73976996aadf",
"name": "Jack Daniel's Blue Label",
"price": 29.99
}
是否有任何方法可以直接从前端“合并”或排序这两个查询(例如Apollo Sandbox或GraphiQL),这样我会得到以下响应?
{
"items": [
{
"itemId": "8a016af8-5336-4799-b806-73976996aa6f",
"name": "Jack Daniel's - Honey",
"price": 19.99,
"quantity": 1
},
{
"itemId": "7a016af8-5336-4799-b806-73976996aa6f",
"name": "Jack Daniel's - Red Label",
"price": 29.99,
"quantity": 2
}
]
}
在pseudo-graphql中,我想到了这样的东西:
query GetCartInfo($userId: ID!) {
getCart(userId: $userId) {
items {
itemId => getItem(itemId: $itemId) {
name
price
}
quantity
}
}
}
如果这是不可能的,那么实现这一目标的最佳方法是什么?是否在API网关中创建新的解析程序?在前端从另一个服务修改阵列?
谢谢你的帮助和关于这个主题的信息,我真的很感激:D
祝你今天愉快!
1条答案
按热度按时间cwxwcias1#
您可以使用GraphQL的字段解析器,它允许定义自定义逻辑来解析GraphQL查询中的字段。
在API网关中,您可以创建一个新的解析器来解析getCart查询中的items字段。下面是一个粗略的例子:
我希望这会有所帮助。