Markus,
I think this notion of using HTTP is going off a tangent. There is no such thing as protocol-independent framework (like Jersey). Frameworks can only implement a finite set of protocols. Architectures like REST can be protocol independent, but frameworks need to provide a binding from architectural concepts to real protocols, such as HTTP.
JAX-RS defines such a binding and makes use of HTTP headers like Accept, Content-Type, etc. Does that mean it's not REST?
I understand your point about hyperlinks in documents, it's an interesting point IMO. Rather than focusing on the binding, I think it's more interesting to discuss if frameworks can help with HATEOAS. What is your take on that? Do you think there's any need for it?
-- Santiago
On Feb 15, 2010, at 1:41 PM, Markus Karg wrote:
> Paul,
>
> sorry but I have to insist on what I wrote on my blog:
>
> "There is only and exactly one valid implementation of HATEOAS: Having links inside of the document."
>
> Why? First of all, because it is exactly written in both, Fielding's dissertation Chapter 5.2, and nine years later in that http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven blog entry he wrote. If you don't believe me, just ask him (nothing else I want to reach: stop guessing and discussing, just ask the RESTmaster himself!). Second, because REST is an abstract pattern, just as HATEOAS is. It is unrelated to http. According to Fielding, it must be possible to use do the same RESTful application on different protocols without modifying the document. If you send state information outside of the document, e. g. in the headers, then this will not work when using a protocol that has no such thing like headers.
>
> HATEOAS is not about sending state information anywhere, it is about sending stahte information in the MEDIA. But headers are not media, only the document is. It is true that http allows to send information in headers (never said something against that), but that is not part of the MEDIA. And after all, the H in HATEOAS is from "HyperMEDIA" not from "Protocolinformation".
>
> Also I never said that http forbids to send links in headers. This is valid http. But it is neither HATEOAS nor REST.
>
> Regards
> Markus
>
>
> From: Paul.Sandoz_at_Sun.COM [mailto:Paul.Sandoz_at_Sun.COM]
> Sent: Montag, 15. Februar 2010 11:46
> To: users_at_jersey.dev.java.net
> Subject: Re: [Jersey] What HATEOAS actually means
>
> Hi Markus,
>
> Thanks for getting involved in the discussion.
>
> The following statement is in your blog wrong:
>
> There is only and exactly one valid implementation of HATEOAS: Having links inside of the document.
>
> The definition of an HTTP entity is as follows:
>
> http://greenbytes.de/tech/webdav/rfc2616.html#entity
>
> Request and Response messages MAY transfer an entity if not otherwise restricted by the request method or
> response status code. An entity consists of entity-header fields and an entity-body, although some responses
> will only include the entity-headers.
>
> Entity-header fields can consist link headers:
>
> http://tools.ietf.org/html/draft-nottingham-http-link-header-07#section-1
>
> A means of indicating the relationships between resources on the Web,
> as well as indicating the type of those relationships, has been
> available for some time in HTML [W3C.REC-html401-19991224], and more
> recently in Atom [RFC4287]. These mechanisms, although conceptually
> similar, are separately specified. However, links between resources
> need not be format-specific; it can be useful to have typed links
> that are independent of their serialisation, especially when a
> resource has representations in multiple formats.
> To this end, this document defines a framework for typed links that
> isn't specific to a particular serialisation or application. It does
> so by re-defining the link relation registry established by Atom to
> have a broader domain, and adding to it the relations that are
> defined by HTML.
>
> The following are also pertinent to the general discussion:
>
> http://www.tbray.org/ongoing/When/200x/2009/03/20/Rest-Casuistry
> http://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
> http://www.dehora.net/journal/2009/02/03/just-use-post/
>
> Roy states at the end of his blog in the link above:
>
> The API can compensate for the use of POST by responding with the statement that the client should refresh
> its representation of the larger resource state. In other words, I would return a 303 response that redirected back
> to the VM status, so that the client would know that the state has changed.
>
> In the experimental prototype the client compensates by processing a Link header of a link relation "refresh".
>
> What we have been currently experimenting with is one particular *pattern* of hypermedia [*], one that has also been investigated with the API for the Sun Cloud (alas which IIRC may be no more).
>
> We need to come with a number of patterns that can be applied to use-cases and have corresponding prototype implementations and from all that we will be able to hopefully define really good client and server hypermedia API support!
>
> Paul.
>
> [*] What ever you might think of it one thing it is not is RPC.
>
>
> On Feb 14, 2010, at 4:32 PM, Markus Karg wrote:
>
>
> For those interested in the current hypermedia discussion, I'd like to point you to my latest blog entry about "What HATEOAS actually means". It might be interesting to follow its links into Fielding's dissertation so everybody understands what the recent discussion was / is about. It also explains why I think that the current Jersey proposal is invalid, since it is not implementing HATEOAS from the view of the dissertation but more from a pragmatic aspect of doing RPC via http.
>
> http://weblogs.java.net/blog/mkarg/archive/2010/02/14/what-hateoas-actually-means
>
> Regards
> Markus
>