[infinispan-issues] [JBoss JIRA] (ISPN-11969) Find a replacement for the Key-Content-Type REST request header

Dan Berindei (Jira) issues at jboss.org
Thu Jun 4 10:23:04 EDT 2020


Dan Berindei created ISPN-11969:
-----------------------------------

             Summary: Find a replacement for the Key-Content-Type REST request header
                 Key: ISPN-11969
                 URL: https://issues.redhat.com/browse/ISPN-11969
             Project: Infinispan
          Issue Type: Task
            Reporter: Dan Berindei


A REST URI should uniquely identify a resource.
But in our server, the {{Key-Content-Type}} request header changes the way the URI is mapped to a cache key,
so a single URI could be seen by the server as multiple different cache entries.

The simplest solution would be to extend the URI of cache entries with a query parameter, e.g. {{/rest/v2/caches/<cache>/<key>?key-content-type=<media-type>}}.

I have 2 small concerns with this solution:
1. When doing a POST request, browsers will put all the parameters in the request body instead of the location.
   I don't expect us to have browsers acting as clients, and the search request already does this, but something to keep in mind.
2. Although resource URIs can be anything, they are usually thought to include only the path part of the URL.
   Everybody knows query parameters affect `GET` requests, but the difference between
   `DELETE /rest/v2/caches/<cache>/<key>` and
   `DELETE /rest/v2/caches/<cache>/<key>?key-content-type=application/octet-stream`
   might be surprising to some.

I would prefer to put the key media type in the path of the URI,
e.g. {{/rest/v2/caches/<cache>/<key-content-type>/<key>}}.

It also has a problem: it makes it look like encodings create separate namespaces,
but they actually overlap, and the same logical "cache entry resource" can be accessed
with multiple key content types.

So perhaps we should instead say the {{/rest/v2/caches/<cache>/<key>}} resources are always {{text/plain;charset=UTF-8}} keys,
and for any other content type the client should use a different resource, {{/rest/v2/caches/<cache>/entry/}}
(the extra {{/}} may or may not be required to avoid clashing with regular keys).
The {{/rest/v2/caches/<cache>/entry/}} resource would have {{key}} and {{key-content-type}} parameters
that could be sent either in a `GET` query string or in a `POST` body.

Note: Some key content types will have additional parameters to tell the server how to decode them, e.g. {{application/x-java-object;type=java.long.Double}}, or {{application/octet-stream;encoding=hex}}.
I have created ISPN-11966 to deprecate the {{application/x-java-object}} handling, and ISPN-11968 to deprecate the {{encoding}} parameter in {{application/octet-stream}}.




--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the infinispan-issues mailing list