Diferença entre JAX-RS e Spring Rest

138

Eu confundi com a diferença entre o JAX-RS (bem, talvez deva usar Jersey para fazer comparação, pois o JAX-RS é apenas especificação) e os serviços Spring for Restful . Tentei procurar mais informações on-line e isso se tornou mais confuso. Minha empresa está usando o Spring MVC para desenvolver APIs Restful

A parte confusa é que JAX-RS significa API Java para RESTful Web Services , na primavera também estou usando java para desenvolver RESTful Web Services, para que eu não entenda as diferenças. O Spring segue as especificações do JAX-RS?

Pelo que sei até agora:

  1. O JAX-RS é um modelo / especificação, possui Jersey, RESTeasy, etc. como implementações.
hades
fonte
@ CássioMazzochiMolin obrigado pela sua resposta, vou aceitá-lo daqui a pouco mais uma pergunta, você mencionou que o Spring Framework não é uma implementação do JAX-RS, qual é a especificação que o Spring está seguindo? Obrigado
hades 23/03
3
Ele não implementa nenhuma especificação específica. É apenas o jeito da primavera de fazer as coisas. Os recursos REST são fornecidos pelo spring-webmvcmódulo que também fornece o controlador de visualização de modelo do Spring.
cassiomolin

Respostas:

150

JAX-RS

JAX-RS é uma especificação para implementar serviços da web REST em Java, atualmente definidos pelo JSR-370 . Faz parte das tecnologias Java EE , atualmente definidas pelo JSR 366 .

Jersey (enviada com GlassFish e Payara) é a implementação de referência JAX-RS, no entanto, existem outras implementações, como RESTEasy (fornecido com JBoss EAP e WildFly) e Apache CXF (enviado com TomEE e WebSphere).

Spring Framework

O Spring Framework é um framework completo que permite criar aplicativos corporativos Java. Os recursos REST são fornecidos pelo módulo Spring MVC (mesmo módulo que fornece recursos de modelo-visualização-controlador ). Não é uma implementação do JAX-RS e pode ser vista como uma alternativa do Spring ao padrão JAX-RS.

O ecossistema Spring também oferece uma ampla gama de projetos para a criação de aplicativos corporativos, abrangendo persistência, segurança, integração com redes sociais, processamento em lote, etc.

Exemplos

Considere o seguinte controlador de recursos usando a API JAX-RS:

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

A implementação equivalente usando a API Spring MVC seria:

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

Usando Spring Boot e Jersey

O Spring Boot fornece o spring-boot-starter-jerseymódulo que permite usar o modelo de programação JAX-RS para os terminais REST em vez do Spring MVC. Funciona muito bem com o Jersey 2.x.

Para um exemplo completo de criação de um aplicativo Web com Jersey 2.xe Spring Boot 1.4.x, consulte esta resposta .

cassiomolin
fonte
Portanto, se usarmos o Spring MVC e o depositar no GlassFish / Payara, será necessário desativar as implementações do jax-rs no servidor?
Pradeep_Evol 17/01/19
este artigo é válido para a primavera 4 dzone.com/articles/… ? que web da primavera é melhor fazer serviços de web resT do que apenas spring + jersey (JAX-RS)?
tgkprog 13/02/19
58

Diferenças de anotação

(A partir de 2018) O Spring MVC não padronizou as anotações do JAX-RS, pois sua solução é anterior ao JAX-RS. Aqui estão os equivalentes:

insira a descrição da imagem aqui

https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints

Se você estiver usando APIs não padronizadas, espere que elas sejam descontinuadas e possivelmente substituídas por uma API experimental mais recente em alguns anos. Há muito menos responsabilidade quanto à compatibilidade com versões anteriores (por exemplo, quando uma nova versão do JDK é lançada).

Sridhar Sarnobat
fonte
Muito obrigado, isso é incrível
Bejond
26

Trabalhei com Jersey Rest, Spring Rest e Jersey Rest com Spring. Ambos são estruturas muito ricas, com boas implementações. Eu sugiro que seja melhor usar o resto da primavera se você estiver usando outros serviços da primavera, como ORM, Spring security e DI etc.

Profissionais do JAX-RS:

  • O padrão JSR pode ser executado sem contêiner de servlet (grizzly, simple, ...)
  • Implementações prontas para produção (jersey, cxf, resteasy, restlet, ...) projetadas apenas para aplicativos REST

Profissionais do Spring MVC:

  • Forneça pilha "cheia", não apenas instalações REST

  • Injeção de dependência / AOP / Transações

  • Modelos de visualização conectáveis ​​(JSP, marcador livre, velocidade, ...)

Você pode conferir mais nos seguintes links

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Por que usar o JAX-RS / Jersey?
Midhun Pottammal
fonte
4
No entanto, o JAX-RS também pode ser usado com o Spring (para DI, AOP, ...).
deamon
5

JAX-RS é a especificação e etc jersey são sua implementação. As pessoas usam o Spring para criar os serviços da web RestFul, porque o spring, juntamente com a implementação repousante, fornece coisas como integração de hibernação e também coisas como programação orientada a IOC e Aspect.

Onde, como se usássemos jersey para nossa implementação, o problema seria que os dados foram buscados no back-end usando algumas tecnologias ORM e teremos que escrever o código padrão para o mesmo.

Essa é a razão pela qual as pessoas e até as empresas usam a primavera, pois, juntamente com a implementação do Rest, também fornece instalações para a primavera. E agora, usando a mais recente implementação de inicialização do Spring, podemos iniciar o desenvolvimento muito rapidamente, sem muitas configurações.

Rahul Singh
fonte