概要
AppSyncとDynamoDBを使用した簡易的なAPIの作成方法を紹介します。
この記事では、条件を満たすデータをDBから複数取得する処理を紹介します。
前提条件
- DynamoDBが用意されていること
AppSync
スキーマ
input CreateRadioInput {
id: ID!
program_name: String
cast: [String!]
weekday: Int
time: String
favorite: Boolean
}
type Mutation {
createRadio(input: CreateRadioInput!): Radio
}
type Query {
getRadio(id: ID!): Radio
listRadio(filter: TableRadioFilterInput, limit: Int, nextToken: String): RadioConnection # 今回追加する箇所
}
type Radio {
id: ID!
program_name: String
cast: [String!]
weekday: Int
time: String
favorite: Boolean
}
# 今回追加する箇所
type RadioConnection {
items: [Radio]
nextToken: String
}
# 今回追加する箇所
input TableBooleanFilterInput {
ne: Boolean
eq: Boolean
}
# 今回追加する箇所
input TableIntFilterInput {
ne: Int
eq: Int
le: Int
lt: Int
ge: Int
gt: Int
contains: Int
notContains: Int
between: [Int]
}
# 今回追加する箇所
input TableRadioFilterInput {
day: TableIntFilterInput
time: TableStringFilterInput
favorite: TableBooleanFilterInput
}
# 今回追加する箇所
input TableStringFilterInput {
ne: String
eq: String
le: String
lt: String
ge: String
gt: String
contains: String
notContains: String
between: [String]
beginsWith: String
}
リゾルバー
- リゾルバーのQueryから
listRadio(...): RadioConnection
のアタッチ
を選択
リクエストマッピングテンプレート
{
"version": "2017-02-28",
"operation": "Scan",
"filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
"limit": $util.defaultIfNull($ctx.args.limit, 200),
"nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}
レスポンスマッピングテンプレート
$util.toJson($ctx.result)