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 をサポートします:
- AddInventoryItems
- SubtractInventoryItems
- UpdateInventoryItems
- PurchaseInventoryItems
- DeleteInventoryItems
- TransferInventoryItems
- ExecuteInventoryOperations
使用例
インベントリ ETag を使用する一般的なワークフロー:
-
GetInventoryItemsを呼び出し、応答からETagを格納します。 - インベントリ書き込み (たとえば、
AddInventoryItems) を実行し、格納されているETagにX-PlayFab-Economy-If-Matchヘッダーを含めます。 - 読み取り後にインベントリが別の要求によって変更されている場合、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
}