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: - 200 OK -- 正常終了
- 400 Bad Request -- パラメータ・リクエストボディ不正
- 401 Unauthorized -- 認証エラー
- 403 Forbidden -- 権限エラー
- 404 Not Found -- 該当バケットまたはデータが存在しない
- 409 Conflict -- 更新が衝突した(request_conflicted)、データ重複(duplicate_key)、ETag 不一致(etag_mismatch)
- 413 Request Entity Too Large -- オブジェクトサイズ制限超過
- 415 Unsupported Media Type -- Content-Type 不正
- 500 Internal Server Error -- シャードキーの制約によるエラー。その他。
リクエストボディ
リクエストボディに 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" を指定しなかった場合は、変更前の値が維持される。