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,
Fabio







_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to