dev@glassfish.java.net

Re: REST API and slashes in resource names

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Tue, 01 Jun 2010 18:23:10 +0200

On Jun 1, 2010, at 4:49 PM, Bruno Harbulot wrote:

> Hi,
>
> On 01/06/10 11:47, Andreas Loew wrote:
>> Hi Paul,
>>
>> Paul Sandoz schrieb:
>>
>>>> Not quite: '{' and '}' are just "unsafe" characters,
>>>
>>> They are disallowed in the URI syntax:
>>>
>>> http://greenbytes.de/tech/webdav/rfc2396.html#rfc.section.2.4.3
>>
>> while I don't want to argue with you about the subtleties of the fact
>> that curly brackets are *not* part of *neither* "reserved" *nor*
>> "unreserved" characters, it seems to me that the following would be
>> fully sanctioned by the spec:
>>
>> .../management/domain/resources/admin-object-resource/(jndi/foo)
>>
>> because "normal" brackets are "unreserved" characters: "Data
>> characters
>> that are allowed in a URI but do not have a reserved purpose are
>> called
>> unreserved."
>>
>> So how about wrapping resource values that contain "reserved"
>> characters
>> by a pair of (unreserved) "normal" brackets '(' and ')'?
>
> I'm not sure whether you want to take more recent RFCs into
> consideration, but in RFC 3986, which obsoletes RFC 2389,

Good point. I was using the URI spec that is referenced by HTTP 1.1
(maybe the work on tidying up the HTTP spec will update the reference?)


> parentheses are reserved characters:
>
> http://tools.ietf.org/html/rfc3986#section-2.2
>
> Section 2.4 is probably relevant to this discussion too (especially
> its last sentence).
>

I am not sure what the last sentence actually means in terms of
parsing a URI :-) but i strongly suspect for HTTP schemes and the path
component that '(' and ')' are OK. Jersey does not encode such
characters when URI building path components e.g.:

         URI u = UriBuilder.fromPath("/(xxx/yyy)/zzz").build();

BTW IIRC Microsoft's Astoria uses '[' and ']' for delimitation and
those are percent encoded.

It would be so much easier if we could use %2F !


> As a side note, just in case you're using them, java.net.URLEncoder/
> Decoder "[contain] static methods for converting a String to the
> application/x-www-form-urlencoded MIME format" (see Javadoc), which
> may not be intuitive w.r.t. the class name: it's more relevant to
> the query part, but is likely not to produce the expected result if
> the full URI is passed (space is encoded as '+' as far as I remember).
>

I recommend not using URLEncoder/Decoder unless you want to encode/
decode query and form parameter names and values.

Paul.