Selecionando uma Implementação JAX-RS para um Novo Projeto

35

Estou iniciando um novo projeto Java que exigirá uma API RESTful. Será um aplicativo de negócios SaaS que atende a clientes móveis.

Eu desenvolvi um projeto com o Java EE 6, mas não estou muito familiarizado com o ecossistema, pois a maior parte da minha experiência está na plataforma da Microsoft.

Qual seria uma escolha sensata para uma implementação JAX-RS para um novo projeto como o descrito?

A julgar pela lista da Wikipedia , os principais candidatos parecem ser Jersey, Apache CXF, RESTeasy e Restlet. Mas a comparação das implementações JAX-RS citadas na Wikipedia é de 2008.

Minhas primeiras impressões de suas respectivas páginas iniciais são as seguintes:

  • O CXF pretende ser uma solução muito abrangente (me lembra o WCF no espaço da Microsoft), o que me faz pensar que pode ser mais complexo entender, configurar e depurar do que o que eu preciso;
  • Jersey é a implementação de referência e pode ser uma boa escolha, mas é um legado da Sun e não tenho certeza de como a Oracle está tratando (a página de anúncios não funciona e o último aviso de confirmação é de 4 meses atrás);
  • RESTeasy é do JBoss e provavelmente uma opção sólida, embora não tenha certeza sobre a curva de aprendizado;
  • O Restlet parece ser popular, mas tem muito histórico, não tenho certeza de como está atualizado no mundo Java EE 6 ou se ele carrega uma mentalidade J2EE pesada (como muitas configurações XML).

Quais seriam os méritos de cada uma dessas alternativas? E a curva de aprendizado? Suporte de recursos? Ferramentas (por exemplo, assistentes do NetBeans ou Eclipse)? E quanto à facilidade de depuração e também implantação? Algum desses projetos está mais atualizado que os outros? Quão estáveis ​​são eles?

Fernando Correia
fonte
11
Aprecio a edição do título, mas não estou realmente perguntando se o JAX-RS é adequado para um projeto móvel; isso seria outra pergunta. Estou tentando descobrir qual implementação do JAX-RS seria recomendada.
Fernando Correia

Respostas:

22

Eu aprendi a amar o Dropwizard por uma solução geral

Em vez de seguir uma abordagem enorme de contêiner de aplicativos, o Dropwizard defende uma solução leve que oferece ciclos de desenvolvimento muito mais rápidos. Essencialmente, ele fornece a cola para as seguintes estruturas conhecidas:

  • Pontão (HTTP)
  • Jersey (JAX-RS)
  • Jackson (JSON ou XML)
  • Goiaba (excelentes adições às bibliotecas JDK)
  • Métricas (monitoramento de aplicativos em tempo real)
  • Validador do Hibernate (verificação de entrada)
  • OAuth (autenticação RESTful)

A combinação dos itens acima, juntamente com uma abordagem sólida aos testes funcionais, fornece uma solução completa para colocar seu serviço em funcionamento rapidamente.

Sim? E a pergunta JAX-RS que eu fiz ...

Você notará que a escolha deles foi Jersey, a implementação de JAX-RS de referência. Sendo um cara RESTEasy, pensei que isso seria um problema, mas não havia nenhuma curva de aprendizado. Os dois são amplamente intercambiáveis. No entanto, eu diria que o cliente de Jersey ofereceu uma interface fluente para a construção de testes. Um exemplo seria ...

 @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
fonte
2
Muito obrigado por trazer o Dropwizard à minha atenção. Eu não sabia disso e parece atender muito bem às minhas necessidades. Parece bem pensado, prático e realista e provavelmente poderia me poupar muitos problemas, ajudando-me a criar uma solução muito melhor do que eu poderia, dado o meu conhecimento superficial da plataforma Java EE. E vir de uma empresa de sucesso como o Yammer, que atende ao mercado corporativo, é definitivamente uma vantagem. Mais uma vez, muito obrigado.
Fernando Correia
11
Sem problemas. Eu escrevi sobre um projeto meu que demonstra muitos dos recursos do Dropwizard. É sob a licença MIT então sinta-se livre para usar como você precisa: gary-rowe.com/agilestack/2012/06/06/...
Gary Rowe
Isso vai ajudar. Muito apreciado.
Fernando Correia
11
Eu já estava inclinado a usar Jackson, Guava, Validator e OAuth, então isso parece um acéfalo ... Obrigado.
PhiLho
Aviso: Jersey 2.0 é substancialmente pior que 1.0. Falta a funcionalidade que existia na versão 1.0, força uma estrutura de DI específica para você, e o suporte da comunidade é muito pior do que costumava ser.
Gili
6

Você pode dar uma olhada nesta pergunta , que discute algumas experiências de outros desenvolvedores.

Eu pessoalmente posso recomendar Jersey. É muito fácil de usar e possui bons seguidores, porque é a implementação de referência. Isso também significa que ele será mantido e suportado pelos próximos anos.

Oleksi
fonte
11
Obrigado por sua resposta útil e por criar um link para essa pergunta relacionada. Estranhamente, ela não apareceu na pesquisa . Porém, essa resposta é de quatro anos atrás, por isso agradeço sua recomendação atualizada.
Fernando Correia