AWS Amplify 框架的使用方法第4部分-实际应用API
首先
本次将重点介绍在完成Amplify的API配置后,如何在Nuxt.js应用程序中使用。
Nuxt.js的配置
基本上,只有在store的action中调用数据库获取的API。将获取的数据库数据通过mutation写入state,并根据需要通过getters进行获取。
准备
请在store/index.js文件的顶部声明以下内容。
import { API, graphqlOperation } from 'aws-amplify'
import * as gqlQueries from '../graphql/queries' // read
import * as gqlMutations from '../graphql/mutations' // create, update, delete
import * as gqlSubscriptions from '../graphql/subscriptions' // 監視
通过使用导入的这些,可以执行CRUD操作并监视数据。
在API设置时,将在自动生成的graphql文件夹中创建三个文件,并使用其中的AppSync查询和变更来执行。
我們將以獲取用戶信息為例進行解釋。
查询
获取用户
使用指定的ID获取用户信息。首先,在queries.js文件中进行了以下定义,然后在index.js中通过以下方式调用,即可获取用户信息。
export const getUser = `query GetUser($id: ID!) {
getUser(id: $id) {
id
name
age
createdAt
updatedAt
}
}
`
const user = await API.graphql(
graphqlOperation(gqlQueries.getUser, {
id: 'tanaka' // userテーブルの取得したいデータのID
})
)
const userData = user.data.getUser // ユーザーのDB情報
返回值
通过GraphQL获取的数据以包含各种信息的对象形式返回。通过使用user.data.getUser,可以实际获取所需的用户信息。
填补
基本上,我們使用了對自動生成的GraphQL進行修改的方式。然而,如果需要單獨獲取特定值,我們也可以自行聲明以下的查詢(query)。
// 例:IDがkatoのニックネームだけの情報が欲しい場合
// クエリを個別に宣言
const _query = `query GetUser($id: ID!) {
getUser(id: $id) {
name
}
}
`
// 実行
const user = await API.graphql(
graphqlOperation(_query, {id : 'tanaka'})
)
const userData = user.data.getUser // name情報のみが入っています。
列出用户
要获取用户的列表信息时,请使用在queris.js中声明的list。
export const listUsers = `query ListUsers(
$filter: ModelUserFilterInput
$limit: Int
$nextToken: String
) {
listUsers(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
name
age
createdAt
updatedAt
}
nextToken
}
}
`
const users = await API.graphql(
graphqlOperation(gqlQueries.listUsers)
)
const usersList = users.data.listUsers.items
返回值
对于一个列表(list)的情况,可以通过将”const usersList = users.data.listUsers.items”作为代码,以列表形式获取用户信息。
过滤
通过声明 filter ,可以过滤返回值。filter 的特点是在获取所有数据的基础上,只对返回值进行过滤,因此数据获取成本没有差异。(与在 SQL 查询中仅获取所需信息不同)
限制 zhì)
这是获取数据的数量。如果没有指定,默认值为10(大概)。如果在模式设计时没有指定排序键,则以ID的字母顺序返回。
下一个令牌
以下是用于获取下面数据的令牌信息。例如,假设有100个数据,您想要获取前10个数据,并获取下一个10个数据,您可以将获取前10个数据时获得的nextToken传递给获取下一个10个数据的查询,以便获取下一个10个数据。
突变
创建用户
使用英语进行翻译,您可以说:“创建的方法如下。” 或者 “创建的步骤如下。”
export const createUser = `mutation CreateUser($input: CreateUserInput!) {
createUser(input: $input) {
id
name
createdAt
updatedAt
}
}
`
const user = await API.graphql(
graphqlOperation(gqlMutations.createUser, {
input: {
name: '田中太郎',
}
})
const userData = user.data.createUser // createしたユーザー情報
返回值 huí zhí)
在mutations.js文件中声明的内容将作为返回值返回。
id- 只需要一个选项的话 , 用中文将下述内容 进行释义 :
身份证
如果在GraphQL模式中设置了ID,它将自动为您生成唯一的ID。如果没有设置ID,则需要传递一个值。
创建时间,更新时间
自动进行输入。很方便吧。尽管在另一篇文章中将详细概括,但是如果要以@key为排序键进行指定的话,就需要注意不能使用自动输入功能(因为需要将其设置为非空值以设定为排序键,而非空值的情况下无法使用自动输入功能)。
更新用户
只需提供要更新的数据的ID和要更新的信息即可实现更新。
export const updateUser = `mutation UpdateUser($input: UpdateUserInput!) {
updateUser(input: $input) {
id
name
createdAt
updatedAt
}
}
`
// 例:
const user = await API.graphql(
graphqlOperation(gqlMutations.updateUser, {
input: {
id: 'tanaka',
name: '田中次郎'
}
})
)
const userData = user.data.updateUser // 更新したユーザー情報
返回值
不仅会返回更新的信息,还会将在mutation.js中声明的所有数据作为返回值返回。
删除用户
只需提供想要删除的数据的ID,即可轻松执行删除操作。无法进行根据列进行指定删除,比如只删除name列的操作。
export const deleteUser = `mutation DeleteUser($input: DeleteUserInput!) {
deleteUser(input: $input) {
id
name
createdAt
updatedAt
}
}
`
const user = await API.graphql(
graphqlOperation(gqlMutations.deleteAnswer, {
input: { id: 'tanaka' }
})
)
const userData = user.data.deleteAnswer // 削除したユーザー情報
返回值
在mutation.js文件中,您将会得到已删除用户信息的所有声明数据作为返回值。
订阅
创建用户,更新用户,删除用户
您可以侦测到用户信息的创建、更新和删除,并获取这些用户信息。
由于我们目前构建的服务不需要实时性,因此这也是一个未经验证的部分。
最后
我认为现在我们已经可以做到最基本的CRUD操作了。Amplify的API的核心并不在这里,而是在模式设置中的@model、@auth、@key、@connection等方面,这些比任何其他东西都更重要。所以,我希望在另一篇文章中详细介绍这些内容。
相关文章
AWS Amplify框架的使用方法第1部分〜Auth设置篇〜
AWS Amplify框架的使用方法第2部分〜Auth实践篇〜
AWS Amplify框架的使用方法第3部分〜API设置篇〜
AWS Amplify框架的使用方法第5部分〜GraphQL转换@model篇〜
AWS Amplify框架的使用方法第6部分〜GraphQL转换@auth篇〜
AWS Amplify框架的使用方法第7部分〜GraphQL转换@key篇〜
AWS Amplify框架的使用方法第8部分〜GraphQL转换@connection篇〜
AWS Amplify框架的使用方法第9部分〜函数基础篇〜
AWS Amplify框架的使用方法第10部分〜存储篇〜
AWS Amplify框架的使用方法第11部分〜函数权限管理篇〜
AWS Amplify框架的使用方法第12部分〜环境设置篇〜
AWS Amplify框架的使用方法第13部分〜Auth设置更新篇〜
AWS Amplify框架的使用方法第14部分〜Lambda层篇〜