Differenza tra JAX-RS e Spring Rest


138

Ho confuso con la differenza tra JAX-RS (beh, forse dovrei usare Jersey per fare un confronto poiché JAX-RS è solo una specifica) e servizi Spring for Restful . Ho provato a cercare ulteriori informazioni online e diventa più confuso. La mia azienda sta usando Spring MVC per sviluppare API Restful

La parte confusa è che JAX-RS sta per API Java per RESTful Web Services , in primavera sto anche usando Java per sviluppare RESTful Web Services, quindi in realtà non capisco le differenze. Spring segue le specifiche JAX-RS?

Da quello che so fino ad ora:

  1. JAX-RS è un progetto / specifiche, ha Jersey, RESTeasy, ecc. Come implementazioni.

@ CássioMazzochiMolin grazie per la tua risposta, lo accetterò tra un po 'di più, un'altra domanda, hai detto che lo Spring Framework non è un'implementazione JAX-RS, quale specifica segue Spring? Grazie
hades

3
Non implementa alcuna specifica specifica. È solo il modo primaverile di fare le cose. Le funzionalità REST sono fornite dal spring-webmvcmodulo che fornisce anche il controller di visualizzazione del modello Spring.
cassiomolina il

Risposte:


150

JAX-RS

JAX-RS è una specifica per l'implementazione dei servizi Web REST in Java, attualmente definita da JSR-370 . Fa parte delle tecnologie Java EE , attualmente definite da JSR 366 .

Jersey (fornito con GlassFish e Payara) è l'implementazione di riferimento JAX-RS, tuttavia esistono altre implementazioni come RESTEasy (fornita con JBoss EAP e WildFly) e Apache CXF (fornita con TomEE e WebSphere).

Quadro di primavera

La Spring Framework è un framework completo che permette di creare applicazioni aziendali Java. Le funzionalità REST sono fornite dal modulo Spring MVC (stesso modulo che fornisce funzionalità di controller della vista modello ). Non è un'implementazione JAX-RS e può essere vista come un'alternativa di primavera allo standard JAX-RS.

L'ecosistema Spring offre anche una vasta gamma di progetti per la creazione di applicazioni aziendali, che includono persistenza, sicurezza, integrazione con i social network, elaborazione batch, ecc.

Esempi

Considerare il seguente controller di risorse utilizzando l'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();
    }
}

L'implementazione equivalente utilizzando l'API Spring MVC sarebbe:

@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);
    }
}

Utilizzando Spring Boot e Jersey

Spring Boot fornisce il spring-boot-starter-jerseymodulo che consente di utilizzare il modello di programmazione JAX-RS per gli endpoint REST anziché Spring MVC. Funziona abbastanza bene con Jersey 2.x.

Per un esempio completo di creazione di un'applicazione Web con Jersey 2.xe Spring Boot 1.4.x, fare riferimento a questa risposta .


Quindi, se utilizziamo Spring MVC e lo deponiamo in GlassFish / Payara, dobbiamo disabilitare le implementazioni jax-rs nel server?
Pradeep_Evol

questo articolo è vero con la primavera 4 dzone.com/articles/… ? che web primaverile è meglio rendere servizi web resT che solo primavera + Jersey (JAX-RS)?
tgkprog,

58

Differenze di annotazione

(A partire dal 2018) Spring MVC non ha standardizzato le annotazioni JAX-RS, poiché la sua soluzione è precedente a JAX-RS. Ecco gli equivalenti:

inserisci qui la descrizione dell'immagine

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

Se stai utilizzando API non standardizzate, dovresti aspettarti che vengano deprecate e probabilmente sostituite da una nuova API sperimentale tra qualche anno. La compatibilità con le versioni precedenti è molto meno responsabile (ad es. Quando viene rilasciata una nuova versione di JDK).


Grazie mille, è fantastico
Bejond,

26

Ho lavorato sia con il resto della maglia, il resto della primavera e il resto della maglia con la primavera. Entrambi sono framework molto ricchi con belle implementazioni. Vorrei suggerire che è meglio andare con Spring rest se si utilizzano altri servizi Spring come ORM, Spring security e DI ecc. Entrambe sono librerie di primavera, quindi mi sento un po 'facile per la gestione di codice e dipendenze

Pro JAX-RS:

  • Lo standard JSR può essere eseguito senza contenitore servlet (grizzly, semplice, ...)
  • Implementazioni pronte per la produzione (jersey, cxf, resteasy, restlet, ...) progettate solo per applicazioni REST

Pro di Spring MVC:

  • Fornire uno stack "completo", non solo strutture REST

  • Iniezione delle dipendenze / AOP / Transazioni

  • Modelli di vista collegabili (JSP, freemarker, velocità, ...)

Puoi controllare di più sui seguenti link

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. Perché usare JAX-RS / Jersey?

4
Tuttavia, JAX-RS può essere utilizzato anche con Spring (per DI, AOP, ...).
Deamon,

5

JAX-RS è la specifica e la maglia ecc. Sono la sua implementazione. Le persone usano Spring per rendere i servizi web RestFul come perché la primavera insieme all'implementazione riposante fornisce elementi come l'integrazione ibernata e anche elementi come IOC e programmazione orientata all'Aspetto.

Laddove, come se utilizzassimo jersey per la nostra implementazione, il problema sarà che i dati devono essere recuperati dal back-end utilizzando alcune tecnologie ORM e dovremo scrivere il codice del boilerplate per lo stesso.

Questo è il motivo per cui le persone e persino le aziende usano la primavera, così come l'implementazione di Rest fornisce anche strutture per la primavera. E ora utilizzando l'ultima implementazione di Spring boot possiamo iniziare lo sviluppo molto velocemente senza molte configurazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.