views:

959

answers:

7

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.

+6  A: 

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)
Stephen
+1 I've had excellent results with Restlet in a large production application.
Jim Ferrans
+5  A: 

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
Droo
+1 for Jersey, the JAX-RS (JSR 311) Reference Implementation. Also have a look at http://java.sun.com/javaone/2009/articles/gen_restful.jsp
Pascal Thivent
+3  A: 

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.

Jerome Louvel
Restlet looks promising, but the documentation is disappointing.
deamon
+1  A: 

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.

hbunny
A: 

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 ?

Kevin Hakanson
A: 

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.

LiorH
A: 

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.

xamde