使用AppSync和GraphQL操作DynamoDB
首先
有一天,当我谈到将我们公司的IoT.kyoto VIS应用在Serverless上进行替换时,有个人看了看架构后给出了建议:“API的部分为什么不用AppSync来实现呢?”因此,我就开始使用AppSync来学习GraphQL。
在这篇文章中,我们的目标是使用简单的GraphQL操作DynamoDB的数据,并将步骤一一记录下来。
GraphQL 是一种查询语言,可以用来描述和请求数据。
GraphQLはAPI用のクエリ言語であり、データ用に定義した型システムを使用してクエリを実行するためのサーバー側のランタイムです。
GraphQLは、特定のデータベースまたはストレージエンジンに結びついておらず、代わりに既存のコードとデータに基づいています。
引用:https://graphql.org/learn/
引文来源:https://graphql.org/learn/
嗯,感觉它可能会代替RESTAPI!
AppSync是什么
AWS AppSync では、ウェブアプリケーションやモバイルアプリケーション内のデータがリアルタイムで自動的に更新されます。
また、オフラインユーザーが再接続するとすぐにデータが更新されます。AWS AppSync により、応答性に優れた協働的なユーザーエクスペリエンスを実現できる、
共同のモバイルアプリケーションやウェブアプリケーションを簡単に構築できます。
AWS AppSync を使用すると、iOS、Android、JavaScript、React Native を使ってネイティブなモバイルアプリケーションやウェブアプリケーションを
構築できます。
AWS AppSync コンソールにアクセスし、シンプルなコードステートメントでアプリケーションのデータを指定して、使用を開始してください。
アプリケーションのデータの保存、処理、取得に必要なものすべては、AWS AppSync で管理されます。
请参考以下引用: https://aws.amazon.com/cn/appsync/
如果你在AWS上使用GraphQL,那么请将AppSync视为必备的工具。
角色入场
在AWSAppSync中,主要有这么多的角色出现。

应用程序编程接口
发出对已定义的GraphQL API的调用。
会生成一个用于调用的设置文件。

方案
GraphQL的定义是设置API和使用元素的类型定义等。

解决者
API的作用是定义操作。

这次的目标
我們會按照畫像的方式在DynamoDB進行PutItem。

开始工作!
创建API



创建Schema

我们将先创建一个DynamoDB表。只需要更改表名,其他设置将按默认配置创建表。




通过这个操作,DynamoDB会创建一个表。
同时,会自动生成这样的Schema。

执行实际查询

打开这个控制台界面后,您将看到左侧是用于输入GraphQL的区域,右侧则展示执行结果的区域。

让我们尝试创建一个项目。
要进行创建,需要调用名为createMyCustomType的API。
为了调用上述API,需要什么呢?
如果查看模式,可以确认一下。
createMyCustomType(input: CreateMyCustomTypeInput!): MyCustomType
有这样的描述。由于写有「CreateMyCustomTypeInput!」,那么我们需要什么样的输入呢?让我们来确认一下「CreateMyCustomTypeInput」。
input CreateMyCustomTypeInput {
title: String!
content: String!
price: Int
rating: Float
}
因为写着这样,所以标题(title)和内容(content)是必需的。类型应为字符串(String),所以将以下文本粘贴到控制台屏幕的左侧。
mutation create {
createMyCustomType(input: {
title: "テストタイトル"
content: "テストですよよよ。"
}) {
id
title
content
}
}
点击左上角的执行按钮,
{
"data": {
"createMyCustomType": {
"id": "2033baef-fb4e-4bf6-a155-f08775103994",
"title": "テストタイトル",
"content": "テストですよよよ。"
}
}
}
返回了这样的执行结果,并且将项目放置在了DynamoDB中。

让我们尝试获取创建的项目。将以下文本粘贴到控制台屏幕的左侧。
query list {
listMyCustomTypes {
items {
id
title
content
}
}
}
当您点击左上角的执行按钮时,效果是相同的。
{
"data": {
"listMyCustomTypes": {
"items": [
{
"id": "2033baef-fb4e-4bf6-a155-f08775103994",
"title": "テストタイトル",
"content": "テストですよよよ。"
}
]
}
}
}
可以获取到类似上述的结果,并可以获取到创建的项目的信息。还有其他提供的API,可以尝试一下。使用方法与createMyCustomType相同。
type Mutation {
createMyCustomType(input: CreateMyCustomTypeInput!): MyCustomType
updateMyCustomType(input: UpdateMyCustomTypeInput!): MyCustomType
deleteMyCustomType(input: DeleteMyCustomTypeInput!): MyCustomType
}
type Query {
getMyCustomType(id: ID!): MyCustomType
listMyCustomTypes(filter: TableMyCustomTypeFilterInput, limit: Int, nextToken: String): MyCustomTypeConnection
}
最后一点
这次介绍的只是一小部分。还可以自己制作API,设置多个数据源(如DynamoDB表),可以做许多不同的事情。
我自己还有很多事情没有尝试过,所以以后还要更深入地探索。
再见!