LoginSignup
1
0

More than 1 year has passed since last update.

AppSync×DynamoDB(READ(List)編)

Last updated at Posted at 2022-12-02

概要

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)

実行

  • クエリを実行する
    • お気に入り登録している番組を取得する場合

    • 画面左が実行クエリ、画面右が実行結果
      クエリ

    • DBに登録されているデータからお気に入り登録しているもののみ取得できたことがわかります
      DynamoDB

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0