DynamoDB, AppSync,GraphQLについて学んでみた

DynamoDB, AppSync,GraphQLについて学んでみた

DynamoDB = MySQL = データストア
AppSync = APIサーバ = エンドポイント
GraphQL = SQL = 問い合わせ言語

って感じ?

DynamoDBは、スキーマレス(テーブル定義なし)ってのが違和感ある。
idなど、Partition Key(Primary Key)だけ決めて、あとはjsonでデータを入れる感じ?

AWSを使わなくても、dockerでローカルでも試せる。

phpMyAdminみたいなwindowsアプリ、NoSQL Workbench(無料、AWS公式GUIツール)もある
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/workbench.settingup.html

テーブル作成

データ追加

データ取得

id(partition key)でしか検索できないので、nameでも検索できるようにする。

これらはAWS CLI(直接DynamoDBを叩く)コマンドなので、あんまり実務では使われない。
AppSync経由でGraphQLを使う方が基本。

AppSyncもローカルで試せる。Amplifyプロジェクトが必要。
CloudFormationも必要なので、AWSアカウントも必要だし、使い終わったらamplify deleteでスタック削除しないと、ずっと残ったまま!

http://localhost:20002 でブラウザから操作できる!

GraphQL操作は、3種類だけ!
query = select
mutation = insert,update, delete
subscription = データのリアルタイム通知(TRIGGER, LISTEN)

graphQL操作は、たった8種類だけなんだ。sqlに比べるとだいぶシンプルだな

query getテーブル名 1件だけ取得、partition(sort) keyで絞る
query getテーブル名s 全件取得、filterでwhere条件で絞る
mutation createテーブル名 新規作成
mutation Updateテーブル名 更新
mutation deleteテーブル名 削除
subscription onCreateテーブル名 新規作成のリアルタイム通知
subscription onUpdateテーブル名 更新のリアルタイム通知
subscription onDeleteテーブル名 削除のリアルタイム通知

group by, order byは出来ないので、フロント側で処理する。
joinも出来ない。
スキーマ定義の段階で、リレーションを親子ともに定義する必要があるのね
これって、あとからリレーションしたくなったら出来ない?

SQLのcreate tableみたいに、graphQLからテーブル定義は出来ない!
厳密には、APIのリクエストとレスポンスの構造を定義する

以下に定義ファイル(schema.graphql)がある
amplify\backend\api\amplifyappsyncmock\schema.graphql

@modelで、CRUD APIが以下のファイルに定義される。
amplify\backend\api\amplifyappsyncmock\build\schema.graphql

type 先頭に記述して、型の定義
フィールド名: 型!←エクスクラメーションマークは必須の意味

// 標準型
ID, String, Int, Float, Boolean

// AWS独自型
AWSDate, AWSDateTime, AWSTime, AWSTimestamp
AWSEmail, AWSURL, AWSPhone, AWSJSON, AWSIPAddress

// リスト(配列)
[String], [Float!]!(リスト自体のnull許可/不許可)

// オブジェクト型
type Address などを定義してネスト可能

// 関連(リレーション)
@hasOne, @hasMany, @belongsTo でモデル同士を関連付け

// カスタム型
type Coordinates などを定義し、特定のモデルの一部として利用可能

Amplify GraphiQL Explorer(phpMyAdminみたいなやつ)
http://localhost:20002/

基本のCRUD操作