Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Apr 30, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

アプリケーションデータの作成、更新、削除

このガイドでは、Amplifyライブラリの GraphQL クライアントを使用してデータを作成、更新、削除する方法について説明します。

開始する前に、以下が必要です:

ミューテーションを実行してアプリケーションデータを作成、更新、削除する

GraphQL では、ミューテーション (mutations) はデータを作成、更新、削除するために使用される API です。これはデータを読み取るが変更しないクエリとは異なります。以下の例は、Amplify GraphQL クライアントを使用してアイテムを作成、更新、削除する方法を示しています。

アイテムを作成する

API とミューテーションをインポートしてから、アイテムを追加することで、アイテムを作成できます:

import { generateClient } from 'aws-amplify/api';
import * as mutations from './graphql/mutations';
const client = generateClient();
const todoDetails = {
name: 'Todo 1',
description: 'Learn AWS AppSync'
};
const newTodo = await client.graphql({
query: mutations.createTodo,
variables: { input: todoDetails }
});

作成されたアイテム Learn AWS AppSync が表示されるはずです。

注: createdAt フィールドを指定する必要はありません。Amplify がこのフィールドを自動的に入力します。

アイテムを更新する

アイテムを更新するには、GraphQL の更新ミューテーションを使用します:

import { generateClient } from 'aws-amplify/api';
import * as mutations from './graphql/mutations';
const client = generateClient();
const todoDetails = {
id: 'some_id',
// _version: 'current_version', // add the "_version" field if your AppSync API has conflict detection (required for DataStore) enabled
description: 'Updated description'
};
const updatedTodo = await client.graphql({
query: mutations.updateTodo,
variables: { input: todoDetails }
});

注:

  • updatedAt フィールドを指定する必要はありません。Amplify がこのフィールドを自動的に入力します。
  • API で想定されていない余分な入力フィールドを指定した場合、このクエリは失敗します。これはクエリから返される error フィールドで確認できます。GraphQL では、エラーは他の言語のように例外としてスローされません。代わりに、すべてのエラーはクエリ結果の error フィールドの一部として取得および返されます。

アイテムを削除する

削除ミューテーションを使用して Todo を削除できます。削除するアイテムを指定するには、そのアイテムの id だけを提供する必要があります:

import { generateClient } from 'aws-amplify/api';
import * as mutations from './graphql/mutations';
const client = generateClient();
const todoDetails = {
id: 'some_id'
};
const deletedTodo = await client.graphql({
query: mutations.deleteTodo,
variables: { input: todoDetails }
});

注: 関連するレコードを削除する前に、結合テーブルレコードを削除する必要があります。たとえば、Posts と Tags 間の多対多リレーションシップの場合、Post または Tag を削除する前に PostTags 結合レコードを削除します。

詳細はこちら
データをミューテーションするためのカスタム認可モード

各 AWS AppSync API は、アプリを設定する際のデフォルト認可モードを使用します。権限のないエラーが表示される場合、認可モードを更新する必要があります。このデフォルトをオーバーライドするには、authMode プロパティを渡します。次の例は、カスタム認可モードを使用してデータをミューテーションする方法を示しています:

import { generateClient } from 'aws-amplify/api';
import * as mutations from './graphql/mutations';
const client = generateClient();
const todo = await client.graphql({
query: mutations.createTodo,
variables: {
input: {
id: 'some_id',
name: 'My todo!',
description: 'Hello world!'
}
},
authMode: 'iam'
});

ミューテーションリクエストをキャンセルする

client.graphql(...) から返される GraphQL リクエストプロミスで .cancel を呼び出すことで、任意の GraphQL API リクエストをキャンセルできます。

const promise = client.graphql({ query: "..." });
try {
await promise;
} catch (error) {
console.log(error);
// If the error is because the request was cancelled you can confirm here.
if (client.isCancelError(error)) {
console.log(error.message); // "my message for cancellation"
// handle user cancellation logic
}
}
...
// To cancel the above request
client.cancel(promise, "my message for cancellation");

client.graphql() から返されたプロミスが変更されていないことを確認する必要があります。通常、非同期関数は返されるプロミスを別のプロミスにラップします。たとえば、以下は 機能しません:

async function makeAPICall() {
return client.graphql({ query: '...' });
}
const promise = makeAPICall();
// The following will NOT cancel the request.
client.cancel(promise, 'my error message');

まとめ

おめでとうございます! アプリケーションデータの作成、更新、削除ガイドを完了しました。このガイドでは、GraphQL API を通じてアプリデータを作成、更新、削除しました。

次のステップ

推奨される次のステップには、API を使用してデータをクエリし、データの変更を確認するために実時間イベントにサブスクライブすることが含まれます。この作業に役立つリソースには以下が含まれます: