Amplifyのschemaの書き方についてまとめました。
amplify では、schemaを3つのテンプレートから選ばせてくれます。
その中から、以下のテンプレートを選択した場合
? Choose a schema template: One-to-many relationship (e.g., “Blogs” with “Posts” and “Comments”)
以下のschema が生成されるます。
type Blog @model {
id: ID!
name: String!
posts: [Post] @connection(keyName: "byBlog", fields: ["id"])
}
type Post @model @key(name: "byBlog", fields: ["blogID"]) {
id: ID!
title: String!
blogID: ID!
blog: Blog @connection(fields: ["blogID"])
comments: [Comment] @connection(keyName: "byPost", fields: ["id"])
}
type Comment @model @key(name: "byPost", fields: ["postID", "content"]) {
id: ID!
postID: ID!
post: Post @connection(fields: ["postID"])
content: String!
}
ではこのGraphql、、どう書き換えたらよいのか。
@modelの働き
Post型の定義に沿ったAmazon DynamoDB Tableや、CRUDのためのQuery/Mutation/Subscriptionを自動作成する。
そもそもの意味
model directiveと呼ばれる。
ディレクティブとは何か?
直訳すると「指令」という意味
役割
- データソース(DynamoDB) を生成し、 AppSync と連携してくれる。
- Create/Read/Update/Delete/List オペレーションを動作させるための Query や Mutation と、それぞれが必要とする input 等のタイプを自動で生成してくれる。
- 生成された Query や Mutation、タイプフィールドresolver等のための Request/Response Mapping Templatesを自動で生成してくれる。
- CRUD(L) API を、クライアントソースコード側でもアクセスできる API ライブラリを自動で生成してくれる。 (
amplify codegen
)
DynamoDBとは
NoSQL データベースサービス。
管理作業を任せることができるため、ハードウェアのプロビジョニング、設定と構成、レプリケーション、ソフトウェアパッチ適用、クラスタースケーリングなどを自分で行う必要はがなくなる。
NoSQL とは
RDBでないもの
NoSQLは「SQLを使わない(No)」という意味ではなく、「SQLだけでない(Not Only)」を意味している。
NoSQL の特徴
RDBがデータを表形式で管理するDBであるのに対し、NoSQLは様々な形式のデータをそのまま格納できる。
そのため、schemaレスな性質である。
シンプルな作りにすることによって、高速な処理を実現できる。
つまり、データが大量、システムの柔軟性を実現したい場合に向いている。
AppSyncとは
GraphQL API の開発を容易にする、完全マネージド型サービス。
DynamoDBなどのデータソースとの安全な接続に必要な、面倒な作業を自動的に処理する。
デプロイが完了すると、API リクエストのボリュームに合わせた GraphQL API 実行エンジンの自動的なスケールアップとダウンが、AWS AppSync により行われる。
GraphQL API とは
GraphQLでは、単一のエンドポイントへ、欲しいリソースをHTTP POSTのbodyに明示的に記載してリクエストすることで、必要なリソースを1回のリクエストで取得する。
これに対しRestful APIは、複数リソースが必要な複雑な画面を構成する際に、複数のAPIリクエストが必要になる。
書き方
schemaの書き方の事例集がまとまられているこちらはかなり参考になりました。
Not null制約の書き方
データ型の最後に!マークを付けるだけ
データ型(フィールド)の種類は?
こちらにまとめられています。
他にもEnumの書き方などは以下に詳しく書かれていました。
一般的なGraphQLの書き方に倣えばいい。
フィールドには、スカラータイプとオブジェクトタイプがある。
フィールドの種類は以下に記載されている。
AWS AppSyncで定義されるスカラーも存在する。
コメント