AWS AppSync DynamoDBバックエンドでハイフンを使う
ども、ゲストブロガーの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を利用いただくのが賢明ですね。