8.5. オブジェクトの更新

PUT /1/(tenantId)/objects/(bucketName)/(objectId)

オブジェクトを更新する。

Request Headers:
 
  • X-Application-Id -- アプリケーションID(必須)
  • X-Application-Key -- アプリケーションキー(必須)
  • X-Session-Token -- セッショントークン(オプション)
  • Content-Type -- "application/json"
Parameters:
  • bucketName (string) -- バケット名
  • objectId (string) -- オブジェクトID
Query Parameters:
 
  • requestToken (string) -- リクエストトークン
Status Codes:

リクエストボディ

リクエストボディに JSON 形式の更新データを格納する。

リクエストボディの指定方法によって、部分更新 または 完全上書き が可能。

ETag 値を指定した場合、サーバ側データとの ETag 値が照合される。 一致していなかった場合、409 Conflict エラーが返却される。 レスポンスには、サーバ側のオブジェクト情報を含む JSON データが返却される。 またサーバ側データが削除済みマークされていた場合でも更新することはできる。

サーバ負荷への影響が大きいため、update処理では再送処理対応(requestToken)をサポートしない。 (サーバ側で処理済みのオブジェクトに対して再送があった場合、Conflictとして処理される)

レスポンスボディ

更新したオブジェクト情報を含むJSON データがレスポンスボディで返却される。

更新が成功した場合、etag フィールドに更新された ETag 値が格納される(データの内容に変更がない場合であっても、常に updatedAt とetag 値は更新される)。 409 Conflictの場合はその原因をJSON形式で返す。

注意事項

  • バケットcontentACLと対象オブジェクトの update 権限が必要
  • 対象オブジェクトの ACL の変更を伴う場合、admin 権限も必要。
  • バケットcontentACL、および対象オブジェクトのread権限が無くても、上記のレスポンスが返却される。
  • "_protected" フィールドは部分更新できない。

8.5.1. 部分更新

オブジェクトの一部のみを更新する方法。

以下は、score を 80 に変更する例。 指定していないフィールドは変更されない。

{"score": 80}

MongoDB の $set 演算子を使用することも可能。

{"$set": {"score": 80}}

$inc 演算子を使用すると、インクリメントを行うことができる。

{"$inc": {"score": 10}}

他に、 MongoDB の更新演算子 がすべて使用できる。

なお部分更新した場合、"updatedAt" は現在時刻で自動更新される。 "createdAt" は指定しない場合は元の値が保持される。明示的に指定する場合は変更可能だが、正しい日付形式を指定しなければならない。 "_id" は更新できない。

更新データに "_protected"(暗号フィールド)を含む場合は部分更新できない。 暗号フィールドを更新する場合は完全上書きで更新すること。 なお、更新対象のオブジェクトに "_protected" が含まれている場合でも、"_protected" フィールドを更新しない場合は部分更新可能である。

8.5.2. 完全上書き

オブジェクトを完全に上書きする場合は $full_update 演算子を指定する。 ACL は省略不可。

{
    "$full_update": {
        "name":"Bar",
        "score":90,
        "ACL": {"owner": "xxxxx", "r":["authenticated"], "w":["authenticated"]}
    }
}

"updatedAt" は現在時刻に自動更新される。

"createdAt" を指定しなかった場合は、変更前の値が維持される。