👻
Amplify CLI API(GraphQL)/Data modeling
使い方
amplify add api
amplify push
yarn install aws-amplify
- アプリのエントリポイントに以下を貼り付ける
import { Amplify, API, graphqlOperation } from 'aws-amplify';
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);
- schemaを更新したい場合は、amplify/backend/api/<api-name>/schema.graphqlファイルで以下を実行
amplify api gql-compile
amplify push
- モデルの削除、名前の変更、モデルのpkの変更、モデルのローカルセカンダリインデックスの変更などがある場合はDynamoDBテーブルの置き換えが必須になる。pushするとエラーメッセージが出るので、続行するには以下を実行(開発環境でのみ推奨)
amplify push --allow-destructive-graphql-schema-updates
- Rebuild
amplify rebuild api
Data modeling
- @modelでは自動的にidがpkとしてデータベースに保存される。主キーをカスタマイズするには@primaryKeyをpkにしたいフィールドに追加する。(一度設定するとDBを再生成しないといけなくなる)
- 異なるフィールドの組み合わせをpkとするsortkeyがある。指定したsortkeyにより高度なソートやフィルタリングが可能となる。以下例
type Inventory @model {
productID: ID! @primaryKey(sortKeyFields: ["warehouseID"])
warehouseID: ID!
InventoryAmount: Int!
}
-
amplify pushの際にschemaに基づいてcrudなどのgraphql apiが自動生成される。@modelではcreateAtとupdateAtが自動追加される。
-
セカンダリインデックスの設定
- そもそもDynamoDBについて少しおさらい
- keyとvalueの組み合わせで情報を管理するキーバリュー型のデータベース
- プライマリキーはパーティションキー、パーティションキーとソートキーの組み合わせ。
- セカンダリインデックスはプライマリキー以外の属性でデータを抽出できるようにする仕組み。もう一つpk,sk設定するイメージ。
リレーション
relation | description |
---|---|
@hasOne | 1vs1 |
@hasMany | 1vsN |
@belongsTo | 1vs1, 1vsNを双方向に設定できる |
@manyToMany | NvsN |
- hasOne
type Project @model {
id: ID!
name: String
team: Team @hasOne
}
type Team @model {
id: ID!
name: String!
}
- hasMany
type Post @model {
id: ID!
title: String!
comments: [Comment] @hasMany
}
type Comment @model {
id: ID!
content: String!
}
- belongsTo
type Project @model {
id: ID!
name: String
team: Team @hasOne
}
type Team @model {
id: ID!
name: String!
project: Project @belongsTo
}
- manayToMany
type Post @model {
id: ID!
title: String!
content: String
tags: [Tag] @manyToMany(relationName: "PostTags")
}
type Tag @model {
id: ID!
label: String!
posts: [Post] @manyToMany(relationName: "PostTags")
}
Discussion