10.3. クライアントでの競合の解決


競合を解決するための一般的なフローには、次の手順が含まれます。

  1. ミューテーションが発生する - クライアントは、GraphQL ミューテーションを使用してサーバー上のオブジェクトを変更または削除しようとします。
  2. オブジェクトの読み取り - サーバーは、クライアントが変更しようとしている現在のオブジェクトをデータソース (通常はデータベース) から読み取ります。
  3. 競合の検出 - サーバーは、現在のオブジェクトをクライアントから送信されたデータと比較して、競合があったかどうかを確認します。競合がある場合、サーバーは Structure of the Conflict Error で概説されている情報を含む応答をクライアントに返します。
  4. 競合の解決 - クライアントはこの競合を解決しようとし、このデータが競合しなくなることを期待してサーバーに新しいリクエストを行います。

競合解決の実装には、アプリケーションに次の追加が必要です。

開発者は、デフォルトの競合解決の実装を使用するか、競合解決のメカニズムを使用して独自の競合解決を実装できます。

デフォルトでは、同じフィールドに変更が加えられていない場合、実装は変更されたペイロードをサーバーに再送信しようとします。サーバーとクライアントでの変更が同じフィールドに影響を与える場合、指定された競合解決のストラテジーの 1 つを使用できます。デフォルトのストラテジーでは、サーバー上のデータに加えてクライアントの変更が適用されます。開発者は、ニーズに合わせて戦略を変更できます。

10.3.1. クライアントでの競合解決の実装

競合解決を有効にするには、競合検出を実行するようにサーバー側リゾルバーを設定する必要があります。検出はさまざまな実装に依存し、競合エラーをクライアントに返すことができます。詳細は、Server Side Conflict Detection を参照してください。

手順

競合を解決するには、ミューテーションコンテキストに returnType パラメーターを指定します。このパラメーターは、操作対象のオブジェクトタイプを定義します。これは、次の 2 つの方法で実装できます。

  • Data Sync の offlineMutate を使用している場合は、次のように returnType パラメーターを直接指定できます。

    client.offlineMutate({
      ...
      returnType: 'Task'
      ...
    })
    Copy to Clipboard Toggle word wrap
  • Apollo の mutate 関数を使用する場合は、次のように returnType パラメーターを指定します。

    client.mutate({
      ...
      context: {
        returnType: 'Task'
      }
      ...
    })
    Copy to Clipboard Toggle word wrap

クライアントは、現在のストラテジーに基づいて競合を自動的に解決し、必要に応じてリスナーに通知します。

競合の解決は推奨されるデフォルトで機能し、クライアントで特定の処理を行う必要はありません。

注記

高度なユースケースの場合、アプリケーション設定でカスタム conflictProvider を指定することにより、競合の実装をカスタマイズできます。以下の Conflict Resolution Strategies を参照してください。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る