0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CDKでGraphQLに挑戦する(Resolver編)

Last updated at Posted at 2020-04-30

はじめに

本日はGWアドベントカレンダーの2日目ですね。昨日はスキーマだけ実装してデプロイしただけなので、今日はデータの操作、つまりResolverを実装していきます。

スキーマを少し変更

ItemInputの内容を少し変更しました。

input ItemInput {
  data: String!
}

inputの情報にidを消しました。調べてみるとidの生成を簡単に自動化できるみたいなので、dataのみを入力させるようにしました。

Resolverを追加

ResolverはGraphQLの処理を実装する箇所ですね。AppSyncに直接DynamoDBを連携させると、なんか実装してみると拍子抜けするほど簡単でした。前回のコードを以下のように書き加えます。

import * as cdk from '@aws-cdk/core'
import { GraphQLApi, CfnApiKey, MappingTemplate, PrimaryKey, Values } from '@aws-cdk/aws-appsync'
import { Table, AttributeType } from '@aws-cdk/aws-dynamodb'

export class CdkAppsyncTestStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props)

    const api = new GraphQLApi(this, 'graphQlApi', {
      name: 'test-api',
      schemaDefinitionFile: './schema.graphql',
    })

    new CfnApiKey(this, 'apiKey', {
      apiId: api.apiId,
    })

    const itemTable = new Table(this, 'itemTable', {
      partitionKey: {
        name: 'id',
        type: AttributeType.STRING,
      }
    })

    const itemDS = api.addDynamoDbDataSource('Item', 'Item data source', itemTable)
    itemDS.createResolver({
      typeName: 'Query',
      fieldName: 'allItem',
      requestMappingTemplate: MappingTemplate.dynamoDbScanTable(),
      responseMappingTemplate: MappingTemplate.dynamoDbResultList(),
    })
    itemDS.createResolver({
      typeName: 'Mutation',
      fieldName: 'addItem',
      requestMappingTemplate: MappingTemplate.dynamoDbPutItem(
          PrimaryKey.partition('id').auto(),
          Values.projecting('item')),
      responseMappingTemplate: MappingTemplate.dynamoDbResultItem(),
    })
  }
}

これだけです。単純なDynamoDBの操作だけならLambdaの実装はいらないみたいです。

実行する

早速デプロイして前回と同じクエリを実行してみましょう。ちなみにクエリ変数だけは以下のように変更しているのでそこだけ注意です。

{
  "input": {
    "data": "test"
  }
}

Mutationの実行

idに自動的に値が割り振られた状態でちゃんと値が返ってきました。
mutation.jpg

Queryの実行

さきほど追加した値がちゃんと返ってきましたね。
query.jpg

さいごに

AppSyncでめちゃ簡単にGraphQLサーバーの実装ができてしまいました。明日は認証の実装をしてみたいと思います。ではまた!

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?