この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、ゲストブロガーのNTT東日本 大瀧です。
AWS AppSyncは様々なAWSサービスにGraphQL APIを提供するサービスで、例えばNoSQLデータベースのAmazon DynamoDBをバックエンドに設定できます。 DynamoDBではテーブルのアトリビュート名にハイフンが使える一方で、AppSyncで扱うGraphQLのフィールド名はハイフンが許容されていません。そこをなんとかしようというのが本記事の内容です。
マッピングテンプレートで吸収する
DynamoDB連携で設定するリゾルバーにGraphQLとDynamoDBを紐づけるマッピングテンプレートで差異を吸収する方法があります。例えばDynamoDBからデータを取得する場合は、レスポンスマッピングテンプレートで以下のように記述します。
#set($result = {})
#foreach($item in $context.result.entrySet())
#if($item.key == "hyphen-key")
$util.qr($result.put("hyphenKey", $item.value))
#else
$util.qr($result.put($item.key, $item.value))
#end
#end
$util.toJson($result)
hyphen-key
がDynamoDBのアトリビュート名、hyphenKey
がGraphQLスキーマに記述するフィールド名です。当該フィールドをクエリのキーやミューテーションなどのリクエストに含める場合は、リクエストマッピングテンプレートに記載することになるでしょう。
あとがき
マッピングテンプレートでの対応は面倒なので、AppSyncと組み合わせて利用するDynamoDBテーブルのアトリビュート名ではハイフンを避け、アンダーバーやCamelCaseを利用いただくのが賢明ですね。