jsr339-experts@jax-rs-spec.java.net

[jsr339-experts] Re: Hypermedia - Take 2

From: Sergey Beryozkin <sberyozkin_at_talend.com>
Date: Wed, 3 Aug 2011 09:50:33 +0200

Jan, you are just missing the point - or am I missing it ?
We are not deciding here about the best practices, i.e, whether it's a good idea to put absolute links in HTML instance or not.
JAX-RS 2.0 already does provide a feature, or should I say, it will most likely will. It's called declarative hyperlinking with the help of
@Ref or similar. Thus all the arguments about having absolute links being 'villains' of the web are just wrong IMHO

Sergey
________________________________________
From: Jan Algermissen [algermissen1971_at_me.com]
Sent: 02 August 2011 22:26
To: jsr339-experts_at_jax-rs-spec.java.net
Cc: Sergey Beryozkin
Subject: Re: [jsr339-experts] Re: Hypermedia - Take 2

On Aug 2, 2011, at 2:37 PM, Marek Potociar wrote:

>
>
> On 07/30/2011 08:09 PM, Sergey Beryozkin wrote:
>> Hi Marek
>>
>> My point is that the resolution of relative links is not entirely portable.
>> I'm not saying relative links can not be used effectively - what I'm saying in the end of the
>> day is that having ABSOLUTE being a default value of @Ref seems OK for me,
>
> +1. Absolute as a default is obviously more interoperable

So then - where is that mysterious HTTP client that is not capable of turning a relative URI reference in an HTTP response message body into the proper absolute URI reference?

I just don't see what problem you are trying to address with using absolute URI references in links.


Besides that, suppose you meet an HTML developer who puts absolute URI refs in all the <a>s and <img>s and <script>s contained in the HTML the server returns ... and then tells you: "There might be a client that cannot handle relative URI refs" .... wouldn't you think that poor fella went a little funny in the head?

Jan


> (or portable, to use your terminology).
>
>>
>> and back to your question,
>> we don't know at the client side whether the relative links have been created from the original base URI the client used or
>> from the current URI, and 'should' is not a strong enough guarantee. Saving payloads and restoring them afterwards may present
>> another issue as far as the resolution is concerned.
>
> Can you provide an example. Seems I got lost again. Sorry :)
>
> Marek
>
>> Both ABSOLUTE and RELATIVE links can work OK, the question as far as I understand what the default value is.
>>
>> Cheers, Sergey
>> ________________________________________
>> From: Marek Potociar [marek.potociar_at_oracle.com]
>> Sent: 27 July 2011 19:41
>> To: jsr339-experts_at_jax-rs-spec.java.net
>> Cc: Sergey Beryozkin
>> Subject: Re: [jsr339-experts] Re: Hypermedia - Take 2
>>
>> Sergey,
>>
>> On 07/26/2011 10:55 PM, Sergey Beryozkin wrote:
>>> Sorry, replying at the start of the message as we have an internal email migration and the web-based client does not append '>' properly...
>>> The problem is that we can not guarantee the server will build relative links relative to the current request URI unless we always assume JAX-RS 2.0 declarative hyperlinking feature is always
>>> used there at the other end which can not be guaranteed.
>>
>> Not sure I understand your point correctly, but resolving relative URIs is a well defined process:
>> http://tools.ietf.org/html/rfc3986#section-5
>>
>> I believe that when sending/receiving relative links, both, client and server, should conform to the process above when
>> producing/consuming relative links. Nothing JAX-RS specific needs to be involved or assumed.
>>
>> Marek
>>>
>>> thanks, Sergey
>>>> Anyway, you did not comment on what I said about the ambiguity to do
>>>> with getting a payload with relative links after
>>>>
>>>> link.request().get()
>>>> and
>>>> link.path("bar").request().get()
>>>>
>>>> should the client resolve the rel links against
>>>>
>>>> basePath or basePath + "bar" ?
>>>>
>>>> I'm not saying we should not support relative links, I just feel
>>>> absolute URIs are more interoperable which is important
>>>
>>> There is no single base URI for the client but only a base URI for the
>>> request and all the subsequent requests *internally* executed to build the
>>> complete document tree of *that* request (it is a difference whether the
>>> application executes two requests against the same base URI, or whether the
>>> JAX-RS runtime has to run several GETs to resolve a document tree spanned
>>> from relative hypermedia resolution).
>>>
>>> So in the first case link.request().get() it resolves against basePath, and
>>> in the second link.path("bar").request().get() it resolves against
>>> basePath\bar.
>>>
>>> I do not see any ambiguity here, as the resolution is done within the
>>> "get()" execution, not any later. As soon as get() returns, the document is
>>> already built (it does not contain any URIs anymore -- remember, my proposal
>>> was to load them on the fly and replace them by their original data type!).
>>>
>>> Regards
>>> Markus
>>>