也许我的术语不准确。我正在使用AWS AppSync。我的架构:
type Book {
title: String
author: Author
}
type Author {
name: String
}
type Query {
getBook(title:String!): Book
}
getBook
的解析器返回一个形状为
{
title: <string>
authorId: <number>
}
总是返回authorId
的地方。
我想为字段Book.author
指定一个解析器,该解析器将接收authorId
并从其自己的数据存储中获取该对象。这可能吗?
如果我要尝试执行的操作不可行,那么正确的处理方法是什么,其中一个数据存储区是一个包含两列的表-{ title, authorId }
,而另一个存储区中的表则包含一个作者列表,其中主键是列authorId
。由于这是两种不同的服务,因此我不能像SQL查询一样将它们加入。
答案 0 :(得分:1)
您可能需要在bookID
中使用Author
作为父母的ID:
type Author {
# parent's id
bookID: ID!
# author id
id: ID!
name: String!
}
type Book {
id: ID!
title: String!
author: Author!
}
当Create Resource
时,只需进行以下操作:
-Book.id
中primary key
的{{1}}
-BookTable
为Author.bookID
,而primary key
为Author.id
sort key
您还需要使用AuthorTable
为Book.author
附加解析器
在安装$ctx.source.id
解析器之后,您就可以使用了。您可以获得类似以下内容的结果:
Book.author
答案 1 :(得分:1)
只要从SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
解析器返回了authorId
,在解析getBook
时就可以通过$ctx.source.authorId
对其进行访问。
我使用您的模式与本地解析器一起复制了您的API:
Book.author
请求映射模板:
Query.getBook
{
"version": "2018-05-29",
"payload": {
"title": "$context.arguments.title",
"authorId": "2" ## returned in addition to other fields. It will be used by Book.author resolver.
}
}
响应映射模板:
Query.getBook
$util.toJson($context.result)
请求映射模板:
Book.author
{
"version": "2018-05-29",
"payload": {
"name": "author name with authorId: $context.source.authorId"
}
}
响应映射模板:
Book.author
以下查询:
$util.toJson($context.result)
将产生结果:
query {
getBook(title:"AWS AppSync") {
title
author {
name
}
}
}