[#473] Add PATCH to extensions doc #473
1 changed files with 169 additions and 0 deletions
|
@ -50,3 +50,172 @@ HTTP/1.1 204 No Content
|
||||||
Connection: close
|
Connection: close
|
||||||
Server: AmazonS3
|
Server: AmazonS3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Object operations management
|
||||||
|
|
||||||
|
### Action to patch object (PatchObject)
|
||||||
|
|
||||||
|
Allows to partially change and add data to an existing object.
|
||||||
|
|
||||||
|
> **Note**: patch is not supported for objects that were uploaded using SSE.
|
||||||
|
|
||||||
|
#### Path parameters
|
||||||
|
|
||||||
|
- **Bucket**
|
||||||
|
|
||||||
|
Bucket name.
|
||||||
|
|
||||||
|
_Required: Yes_
|
||||||
|
|
||||||
|
- **Key**
|
||||||
|
|
||||||
|
Object name.
|
||||||
|
|
||||||
|
_Required: Yes_
|
||||||
|
|
||||||
|
#### Query parameters
|
||||||
|
|
||||||
|
- **versionId**
|
||||||
|
|
||||||
|
Version of the original object to patch.
|
||||||
|
|
||||||
|
_Required: No_
|
||||||
|
|
||||||
|
#### Request headers
|
||||||
|
|
||||||
|
- **Content-Range**
|
||||||
|
|
||||||
|
The byte range of the object (or its version) to patch.
|
||||||
|
|
||||||
|
The value is formed as follows: `bytes {start byte}-{end byte}/*`.
|
||||||
|
|
||||||
|
Range boundaries are included.
|
||||||
|
|
||||||
|
The maximum range length is 5GB.
|
||||||
|
|
||||||
|
To write additional data to the object, the end byte must be greater than the object size.
|
||||||
|
|
||||||
|
The start byte cannot be greater than the object size.
|
||||||
|
|
||||||
|
The range length must be equal to the value of the **_Content-Length_** header.
|
||||||
|
|
||||||
|
The format corresponds to the [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110#name-content-range) specification with the following
|
||||||
|
exceptions:
|
||||||
|
|
||||||
|
- **_complete-length_** parameter is ignored.
|
||||||
|
- **_last-pos_** parameter is optional (if not specified, the value is assumed to be equal to the end byte of the object).
|
||||||
|
|
||||||
|
_Required: Yes_
|
||||||
|
|
||||||
|
- **Content-Length**
|
||||||
|
|
||||||
|
Number of bytes sent in the request body.
|
||||||
|
|
||||||
|
_Required: Yes_
|
||||||
|
|
||||||
|
- **If-Match**
|
||||||
|
|
||||||
|
Patch is performed if ETag of the object (or its version) is equal to specified in the header.
|
||||||
|
|
||||||
|
_Required: No_
|
||||||
|
|
||||||
|
- **If-Unmodified-Since**
|
||||||
|
|
||||||
|
Patch is performed if the object (or its version) has not changed since the time specified in the header.
|
||||||
|
|
||||||
|
_Required: No_
|
||||||
|
|
||||||
|
- **x-amz-expected-bucket-owner**
|
||||||
|
|
||||||
|
ID of the intended owner of the bucket.
|
||||||
|
|
||||||
|
_Required: No_
|
||||||
|
|
||||||
|
#### Request body
|
||||||
|
|
||||||
|
Contains new data for the passed byte range of the object.
|
||||||
|
|
||||||
|
#### Response
|
||||||
|
|
||||||
|
The request returns the following data in XML format.
|
||||||
|
|
||||||
|
- **PatchObjectResult**
|
||||||
|
|
||||||
|
Root level tag for parameters.
|
||||||
|
|
||||||
|
- **Object**
|
||||||
|
|
||||||
|
Parent tag for patch results.
|
||||||
|
|
||||||
|
- **LastModified**
|
||||||
|
|
||||||
|
Time when the object was last modified. Applying patch does not change this value.
|
||||||
|
|
||||||
|
- **ETag**
|
||||||
|
|
||||||
|
Patched object tag. Always in SHA-256 format.
|
||||||
|
|
||||||
|
If the bucket is versioned, the **_x-amz-version-id_** header is returned with the version of the created object.
|
||||||
|
|
||||||
|
#### Errors
|
||||||
|
|
||||||
|
- **MissingContentRange**
|
||||||
|
|
||||||
|
The required **_Content-Range_** header was not sent.
|
||||||
|
|
||||||
|
HTTP Status Code: 400
|
||||||
|
|
||||||
|
- **NoSuchBucket**
|
||||||
|
|
||||||
|
The specified bucket does not exist.
|
||||||
|
|
||||||
|
HTTP Status Code: 404
|
||||||
|
|
||||||
|
- **NoSuchKey**
|
||||||
|
|
||||||
|
The specified object does not exist.
|
||||||
|
|
||||||
|
HTTP Status Code: 404
|
||||||
|
|
||||||
|
- **MissingContentLength**
|
||||||
|
|
||||||
|
The required **_Content-Length_** header was not sent.
|
||||||
|
|
||||||
|
HTTP Status Code: 411
|
||||||
|
|
||||||
|
- **PreconditionFailed**
|
||||||
|
|
||||||
|
At least one of the preconditions is not satisfied.
|
||||||
|
|
||||||
|
HTTP Status Code: 412
|
||||||
|
|
||||||
|
- **InvalidRange**
|
||||||
|
|
||||||
|
Incorrect value in **_Content-Range_** header.
|
||||||
|
|
||||||
|
HTTP Status Code: 416
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
Sample Request
|
||||||
|
|
||||||
|
```text
|
||||||
|
PATCH /example-bucket/example-key HTTP/1.1
|
||||||
|
Host: data.s3.<Region>.frostfs-s3-gw.com
|
||||||
|
Content-Range: bytes 0-3/*
|
||||||
|
Content-Length: 4
|
||||||
|
&AUTHPARAMS
|
||||||
|
|
||||||
|
Body
|
||||||
|
```
|
||||||
|
|
||||||
|
Sample Response
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<PatchObjectResult>
|
||||||
|
<Object>
|
||||||
|
<LastModified>2024-07-24T14:54:54Z</LastModified>
|
||||||
|
<ETag>"e8b53b75afaf3ce898f048c663b11cf4c71f5f13456673dd5b422a247c9e627f"</ETag>
|
||||||
|
</Object>
|
||||||
|
</PatchObjectResult>
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in a new issue