Question

What are the best frameworks for implementing both client and server REST frameworks in Java? I've been struggling a little to find an easy to use solution.

Update: Both Jersey and Restlet seem like good options. We'll probably use Restlet but we'll experiment with both.

Was it helpful?

Solution

Restlet sounds like it should provide what you're looking for:

  • Support for client and server (in a relatively symmetric api)
  • Smart url binding
  • mime type understanding (given accepted mime types, it will ask your resources for their representation in that type)
  • Supports JAX-RS annotations (just like Jersey)

OTHER TIPS

Jersey is really easy for both. To write web services, you use annotations:

@Path("/helloworld")
public class HelloWorldResource {

    // The Java method will process HTTP GET requests
    @GET
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String helloWorld() {
        // Return some cliched textual content
        return "Hello World";
    }
}

For a client:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/helloworld");
String s = webResource.get(String.class);
System.out.println(s); // prints Hello World

Take a look at dropwizard too.

Restlet also support annotations in its 2.0 version, both on the client and server-side. The JAX-RS API is also supported as an extension.

Here is a simple example for server-side:

public class HelloWorldResource extends ServerResource {

    @Get
    public String represent() {
        return "hello, world";
    }

}

On the client-side:

// Outputting the content of a Web page  
new ClientResource("http://www.restlet.org").get().write(System.out);

For further documentation, check this page.

There's JBoss' new RESTEasy library. It appears to be under rapid development since its initial launch. I've no idea if it's any good; it's on my 'check it out' list.

You could take a look at the CXF JAX-RS implementation. For complete list of its features check the CXF web site for JAX-RS. The community behind the project seems to be very active (July 2013). An indication of that is the number of messages per day in the CXF mailing lists.

I haven't used it personally but some teams that I work with are using Spring 3 MVC. REST in Spring 3: @MVC looks like a good blog post overview. The RESTful features include "URI Templates", "Content Negotiation", "HTTP Method Conversion", "ETag support" and more.

Edit: Also, see this question: Can anyone recommend a Java web framework that is based on MVC and supports REST ?

I can recommend Apache wink, a new framework still in incubation mode, but very mature and high quality.

http://incubator.apache.org/wink/

It implements the JAX-RS specification, it has both client & server framework for REST development. Apache is standing behind this project - that's always a good sign (and a good license :-) )

What I love most about this framework is the intuitive integration with Spring, it's very useful if you want your framework to be easily configured and extended.

UPDATE: Xydra Restless is not longer maintained +++ If your are using Goolge AppEngine before they release a "reserve instance" feature, you might consider Xydra Restless which has few features but loads fast.

My favourite is Spring MVC, you have support for both, client and server side... And you have Android support too =)

For example, you can see a example of Spring Android here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top