インベントリ ETag

Important

エコノミー v2 が一般提供になりました。 サポートとフィードバックについては、PlayFab フォーラム をご利用ください。

ETag は、PlayFab インベントリ API のオプティミスティック同時実行制御を提供します。 これにより、複数のソースがプレイヤーのインベントリを同時に変更しているときに、競合する書き込みを検出して防止できます。

インベントリ ETag のしくみ

GetInventoryItems などのインベントリ読み取り API は、応答本文で ETag を返します。 この値は、プレイヤーのインベントリ コレクションの現在のバージョンを表します。 この値を後続の書き込み要求に渡すことで、インベントリを最後に読み取ってから発生した可能性のある他の更新と変更が競合しないようにできます。

ETag を使用した GetInventoryItems 応答の例

{
  "code": 200,
  "status": "OK",
  "data": {
    "Items": [
      {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "default",
        "Amount": 10,
        "Type": "catalogItem"
      }
    ],
    "ETag": "1/MQ=="
  }
}

サポートされている HTTP ヘッダー

インベントリ書き込み API は、次の HTTP ヘッダーを通じて ETag をサポートします:

  • X-PlayFab-Economy-If-Match—以前に受信した ETag 値を渡します。 要求は、インベントリの現在の ETag が一致する場合にのみ成功します。 インベントリを最後に読み取ってから他の書き込みが行われていないことを保証する必要がある場合に、このチェックを使用します。
  • X-PlayFab-Economy-If-None-Match* を値として渡します。 要求は、アイテムがインベントリにまだ存在しない場合にのみ成功します。 "作成のみ" のシナリオに役立ちます。

サポート対象 API

次のインベントリ書き込み API は、ETag をサポートします:

使用例

インベントリ ETag を使用する一般的なワークフロー:

  1. GetInventoryItems を呼び出し、応答から ETag を格納します。
  2. インベントリ書き込み (たとえば、AddInventoryItems) を実行し、格納されている ETagX-PlayFab-Economy-If-Match ヘッダーを含めます。
  3. 読み取り後にインベントリが別の要求によって変更されている場合、API は「412 前提条件が失敗しました」というエラーを返します。 その場合はインベントリを再読み取りし、最新の ETag を取得して再試行してください。
POST /Inventory/AddInventoryItems
Content-Type: application/json
X-EntityToken: <entity-token>
X-PlayFab-Economy-If-Match: 1/MQ==

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b"
    },
    "Amount": 5
}

関連項目