Handling Blobs in the REST Interface
Runtime 2021.6 Builder 7.15.0 The xUML Runtime can handle blob parameters in the body of a REST interface. This can be configured by four tags on REST operations for REST service and REST adapter.
Find below an overview on these tags and what combinations make sense.
| Location | Direction | Attribute | Description |
|---|---|---|---|
| Service | Request | Accepted Request Content Type | Define which content types the endpoint accepts. |
Reject Other Request Content Types | Define if other content types should be rejected with HTTP 406 (Not Acceptable). | ||
| Response | Blob Body Content Type | Define which content types the endpoint can return to the client. | |
Reject Other Response Content Type | Define if the service should reject the request with HTTP 415 (Unsupported Media Type) if the client request has divergent accept headers. | ||
| Adapter | Request | Accepted Request Content Type | Specify a list of content types you accept as a response. The Runtime generates a matching "Accept" header to your request. |
Reject Other Request Content Types | Specifies if the REST adapter should reject calls to this endpoint if a request uses a custom content type that does not match the content types listed in Accepted Request Content Type . | ||
| Response | Blob Body Content Type | Specify which content type you are sending with your request. The Runtime generates a matching "Content-Type" header to your request. | |
Reject Other Response Content Type | Specifies if the REST adapter should reject calls to this endpoint if a request uses a custom content type that does not match the content types listed in Blob Body Content Type. |
Examples
The example service provides a REST interface to store a blob to memory and retrieve stored blobs. The service accepts content type application/msexcel .
| Server (restBlobContent.xml) | Content Type Settings | Description | ||
|---|---|---|---|---|
| Store a blob | POST /blob | Accepted Request Content Type | application/msexcel | The server can store Excel files. |
| Return a blob by id | GET /blob/<an id> | Blob Body Content Type | application/msexcel | The server returns Excel files upon request. |
| Client (accessRestBlobContent.xml) | Content Type Settings | |||
| Send a blob | POST /blob | Blob Body Content Type | application/msexcel | The client sends Excel files. |
| Retrieve a blob | GET /blob/<an id> | Accepted Request Content Type | application/msexcel | The client accepts Excel files as a response. |
Good Cases
The following table shows some example calls and how they would be executed.
| Client | Generated Header | Server | |||
|---|---|---|---|---|---|
| 1 | Store a blob | POST /blob | Content-Type: application/msexcel | → | accepts request |
| ← | returns id HTTP 201 | ||||
| 2 | Retrieve a blob | GET /blob/123456 | Accept: application/msexcel | → | accepts request |
| Content-Type: application/msexcel | ← | returns Excel file | |||
Error Cases
The following table shows some error cases and their consequences if you do not rely on the automatically generated headers but set your own headers instead.
| Client | Custom Header | Server | |||
|---|---|---|---|---|---|
| 1 | Store a blob, wrong content type | POST /blob | Content-Type: application/msword | → | accepts request |
| handles wrong content type internally | |||||
| 2 | Store a blob, wrong content type, server rejects other content types | POST /blob | Content-Type: application/msword | → | Reject Other Request Content Types = true |
| ← | HTTP 406 (not acceptable) | ||||
| 3 | Retrieve a blob, wrong content type | GET /blob/123456 | Accept: application/msword | → | accepts request |
| handles wrong content type internally | |||||
| 4 | Retrieve a blob, wrong content type, server rejects other content types | GET /blob/123456 | Accept: application/msword | → | Reject Other Response Content Type = true |
| ← | HTTP 415 (Unsupported Media Type) | ||||
