Selección de una implementación JAX-RS para un nuevo proyecto

35

Estoy comenzando un nuevo proyecto Java que requerirá una API RESTful. Será una aplicación empresarial SaaS que servirá a clientes móviles.

He desarrollado un proyecto con Java EE 6, pero no estoy muy familiarizado con el ecosistema, ya que la mayor parte de mi experiencia está en la plataforma de Microsoft.

¿Cuál sería una opción sensata para una implementación JAX-RS para un nuevo proyecto como el descrito?

A juzgar por la lista de Wikipedia , los principales contendientes parecen ser Jersey, Apache CXF, RESTeasy y Restlet. Pero la comparación de las implementaciones JAX-RS citadas en Wikipedia es de 2008.

Mi primera impresión de sus respectivas páginas de inicio es que:

  • CXF pretende ser una solución muy completa (me recuerda a WCF en el espacio de Microsoft), lo que me hace pensar que puede ser más complejo de entender, configurar y depurar que lo que necesito;
  • Jersey es la implementación de referencia y podría ser una buena opción, pero es un legado de Sun y no estoy seguro de cómo Oracle la está tratando (la página de anuncios no funciona y el último aviso de confirmación es de hace 4 meses);
  • RESTeasy es de JBoss y probablemente sea una opción sólida, aunque no estoy seguro acerca de la curva de aprendizaje;
  • Restlet parece ser popular pero tiene mucha historia, no estoy seguro de cuán actualizado está en el mundo Java EE 6 o si tiene una mentalidad J2EE pesada (como mucha configuración XML).

¿Cuáles serían los méritos de cada una de estas alternativas? ¿Qué pasa con la curva de aprendizaje? ¿Soporte de funciones? ¿Herramientas (por ejemplo, NetBeans o asistentes de Eclipse)? ¿Qué pasa con la facilidad de depuración y también la implementación? ¿Alguno de estos proyectos está más actualizado que los otros? ¿Qué tan estables son?

Fernando Correia
fuente
1
Aprecio la edición del título, pero no estoy realmente preguntando si JAX-RS es una buena opción para un proyecto móvil; Esa sería otra pregunta. Estoy tratando de averiguar qué implementación JAX-RS se recomendaría.
Fernando Correia

Respuestas:

22

He llegado a amar Dropwizard para una solución general

En lugar de optar por un enfoque de contenedor de aplicaciones enorme, Dropwizard aboga por una solución ligera que ofrezca ciclos de desarrollo mucho más rápidos. Básicamente, proporciona el pegamento para los siguientes marcos conocidos:

  • Embarcadero (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON o XML)
  • Guayaba (excelentes adiciones a las bibliotecas JDK)
  • Métricas (monitoreo de aplicaciones en tiempo real)
  • Validador de Hibernación (verificación de entrada)
  • OAuth (autenticación RESTful)

La combinación de lo anterior, junto con un enfoque sólido para las pruebas funcionales, brinda una solución completa para que su servicio funcione rápidamente.

¿Sí? Y la pregunta JAX-RS que hice ...

Notarás que su elección fue Jersey, la implementación de referencia JAX-RS. Siendo un tipo RESTEasy, pensé que esto sería un problema, pero había cero curva de aprendizaje. Los dos son en gran parte intercambiables. Sin embargo, diría que el cliente de Jersey ofreció una interfaz fluida para construir pruebas. Un ejemplo sería ...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}
Gary Rowe
fuente
2
Muchas gracias por llamar mi atención a Dropwizard. No lo sabía y parece satisfacer mis necesidades muy bien. Se ve bien pensado, práctico y práctico y probablemente podría ahorrarme muchos problemas y ayudarme a construir una solución mucho mejor de la que podría haber dado mi conocimiento superficial de la plataforma Java EE. Y venir de una compañía exitosa como Yammer que sirve al mercado corporativo es definitivamente una ventaja. De nuevo, muchas gracias.
Fernando Correia
1
No hay problema. He blogueado sobre un proyecto mío que muestra muchas de las características de Dropwizard. Está bajo licencia MIT, así que siéntase libre de usar lo que necesite: gary-rowe.com/agilestack/2012/06/06/…
Gary Rowe
Eso te ayudará. Muy apreciado.
Fernando Correia
1
Ya me estaba inclinando hacia el uso de Jackson, Guava, Validator y OAuth, así que esto parece una obviedad ... Gracias.
PhiLho
Advertencia: Jersey 2.0 es sustancialmente peor que 1.0. Le falta la funcionalidad que solía existir en 1.0, le impone un marco DI específico y el soporte de la comunidad es mucho peor de lo que solía ser.
Gili
6

Puede echar un vistazo a esta pregunta , que analiza algunas experiencias de otros desarrolladores.

Puedo recomendar personalmente Jersey. Es muy fácil de usar y tiene un buen seguimiento porque es la implementación de referencia. Esto también significa que se mantendrá y admitirá durante el próximo tiempo.

Oleksi
fuente
1
Gracias por su útil respuesta y por vincular a esa pregunta relacionada, curiosamente, no apareció en la búsqueda . Sin embargo, esa respuesta es de hace 4 años, así que agradezco su recomendación actualizada.
Fernando Correia