次のgraphqlスキーマで定義されているネストされた型を含めようとしています。
type User {
id: String!
posts: [Post]
}
type Post {
id: String!
}
type Query {
getUser(id: String!): User
getPost(id: String!): Post
}
ご覧のとおり、ユーザーには複数の投稿があります。 AppSyncをデータソースとして 隣接リストDynamodbテーブル (ユーザーと投稿の両方の関連行を含む)と共に使用しています。 AppSync内でリクエストマッピングテンプレートを使用する必要がありますが、ドキュメントを読んだ後、ネストされた型がどのように解決されるのか理解できません。
getUser
をクエリするときに、PostリゾルバーをUser_idで呼び出す必要があると思います。もしそうなら、私はポストリゾルバ内の親IDにどのようにアクセスしますか?これは${context.source}
が設置されましたか?
getPost
クエリリゾルバーは、getUser Post子によって呼び出されるPostリゾルバーと同じであるため、両方のケースを処理するために、いくつかのロジックをリゾルバーのリクエストテンプレートと統合する必要がありますか?
例は本当に役に立ちます!
また、User.postsのリゾルバーを作成する必要があります。 Query.getUser
を呼び出すと、そのリゾルバーが呼び出され、User.postsのリゾルバーがある場合は、${context.source}
に設定された最初のリゾルバーからのコンテキストで呼び出されます。
残念ながら、わかりやすい例はありませんが、CloudFormationを使用している場合は、次のような2つのリゾルバーができます。
UserResolver:
Type: "AWS::AppSync::Resolver"
DependsOn: Schema
Properties:
ApiId: !Ref YourApiId
TypeName: Query
FieldName: getUser
DataSourceName: !Ref YourDataSource
RequestMappingTemplate: # you already have this
ResponseMappingTemplate: ...
UserPostsResolver:
Type: "AWS::AppSync::Resolver"
DependsOn: Schema
Properties:
ApiId: !Ref YourApiId
TypeName: User
FieldName: posts
DataSourceName: !Ref YourDataSource
RequestMappingTemplate: |
# use context.source.id here to reference the user id
ResponseMappingTemplate: "$util.toJson($ctx.result.items)"
それはほとんどそれです。あなたは正しい軌道に乗っていましたが、フィールドからリゾルバーへのマッピングは、あなたが考えていたよりも明確にする必要があります。
これは別のスタックオーバーフローの投稿です。これを行う方法を詳しく説明します。タイトルには突然変異と書かれていますが、突然変異とクエリの両方を網羅しています。 AWS AppSyncで関係を作成するミューテーション