フルアップデート(更新チェックあり)

クライアントから送信されたキーと値のペアで、サーバー上のデータを完全に上書きする方法です。サーバーにあった値は、上書きによって失われます。

更新の際、「楽観的ロック(Optimistic lock)」の機能によるチェックを行います。クライアントへの KiiObject の取得以降に、サーバー上で他のクライアントからの更新があった場合は、更新処理がエラー応答します。

更新のコード例を以下に挙げます。

curl -v -X PUT \
  -H "Authorization: Bearer {ACCESS_TOKEN}" \
  -H "Content-Type: application/vnd.{APP_ID}.mydata+json" \
  -H "If-Match: {OBJECT_VERSION}" \
  "https://api-jp.kii.com/api/apps/{APP_ID}/users/me/buckets/{BUCKET_ID}/objects/{OBJECT_ID}" \
  -d '{"score": 2300, "name": "game1"}'

送信の際に "IF-Match" ヘッダを送信すると、サーバー上で他のクライアントからの更新があったかどうかのチェックが行われます。更新チェックを行わず、常に上書きを行う場合は "IF-Match" ヘッダそのものを送信しないようにします。

更新チェックを行う際、"IF-Match" ヘッダで送信する値 {OBJECT_VERSION} は、直前に取得した _version の値です。KiiObject の取得 に示す方法で KiiObject を取得すると、以下のような JSON データを取得できます。このデータの _version 部分を次回の更新処理で送信します(この例では "IF-Match: 3"を送信)。

{"score":5000,"name":"game1","_created":1337039114613,"_id":"d8dc9f29-0fb9-48be-a80c-ec60fddedb54","_modified":1337040183711,"_owner":"ff43674e-b62c-4933-86cc-fd47bb89b398","_dataType":"mydata","_version":"3"}

Kii Cloud では、サーバー側での _version と、送信された "IF-Match" ヘッダの値を比較します。値が異なる場合は他のクライアントからの書き換えを検出したことになるため、HTTP ステータス 409 で応答します。

KiiObject のフルアップデートに成功すると、Kii Cloud は以下の様に更新時間(UNIX 時間、ミリ秒、UTC)をレスポンスとして返します。

< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< ETag: "2"
< Content-Type: application/vnd.kii.ObjectUpdateResponse+json
< Transfer-Encoding: chunked
< Date: Mon, 14 May 2012 23:50:48 GMT
<
{
  "modifiedAt" : 1337039448517
}