My research results:
-
Single request (data included)
The request contains metadata. The data is a property of metadata and encoded (for example: Base64).
Pros:
- transactional
- everytime valid (no missing metadata or data)
Cons:
- encoding makes the request very large
Examples:
- GitHub
- Imgur
-
Single request (multipart)
The request contains one or more parts with metadata and data.
Content types:
- multipart/form-data
- multipart/mixed
- multipart/related
Pros:
- transactional
- everytime valid (no missing metadata or data)
Cons:
- content type negotiation is complex
- content type for data is not visible in WADL
Examples:
- Confluence (with parts for data and for metadata)
- Jira (with one part for data, metadata only part headers for file name and mime type)
- Bitbucket (with one part for data, no metadata)
- Google Drive (with one part for metadata and one for part data)
-
Single request (metadata in HTTP header and URL)
The request body contains the data and the HTTP header and the URL contains the metadata.
Pros:
- transactional
- everytime valid (no missing metadata or data)
Cons:
- no nested metadata possible
Examples:
- S3 GetObject and PutObject
-
Two request
One request for metadata and one or more requests for data.
Pros:
- scalability (for example: data request could go to repository server)
- resumable (see for example Google Drive)
Cons:
- not transactional
- not everytime valid (before second request, one part is missing)
Examples:
- Google Drive
- YouTube