+1
Thanks
-Vincent
On Feb 12, 2009, at 11:18 PM, Fabio Mancinelli wrote:
Dear all,
this is more a RFC than a vote...
Currently the REST subsystem is written using Restlet and its API and
there is a layer based on the XWiki Component manager written by me
that is used to declare and configure resources and components for
providing representations in a more dynamic way.
During the last weekend I spent some time experimenting with the JAX-
RS API and as a test I tried to port the current implementation to
this API.
I was able to do so without too much effort and the result was also a
drastic reduction in code complexity.
In fact all the plumbing I wrote is already handled by the JAX-RS API
implementation. Actually the JAX-RS API provides also more powerful
mechanisms wrt the ones I wrote because it takes into account
representations in responses (GET), representations in requests (PUT
and POST) and exception mappings (i.e., the possibility of capturing
and representing all kind of exceptions, checked or unchecked).
One consequence of these features is that I was able to write methods
to handle requests that use our data model without having to deal with
complicated try/catch blocks for adjusting the response wrt to
exception thrown. Conversions from objects of our data model to
representations and viceversa (text/plain, text/xml, etc.) are handled
by the framework, and exceptions as well.
The problem was the implementation to use. I tried both Jersey and
Restlet and both of them were fine.
Jersey misses some features such as authentication handling (I had to
wrote a basic authentication handler by hand) and is not flexible as
Restlet. Restlet, on the contrary, is very powerful and has a very
good support for JAX-RS but it lacks automatic generation of the WADL
description of the application.
Coming to a conclusion, I would like to switch to JAX-RS + Restlet
because we can have the best of the two worlds. If we need, in fact,
we can still leverage the Restlet API if the JAX-RS is not suitable
for implementing a resource. We will have to give up the WADL support
for the moment, but I don't think this is a big deal with respect to
the gain we have in code maintainability (no more plumbing and easier
resource declaration) and reduced code complexity overall. And WADL
for JAX-RS will be eventually implemented so it's just a question of
time.
Here it is my +1
WDYT?
Regards,