Pourquoi utiliser JAX-RS / Jersey?

Désolé, ces questions semblent stupides, mais après avoir développé certains de mes services RESTful en utilisant Jersey, je me suis posé la question -- si REST est juste une architecture, et pas un protocole comme SOAP, pourquoi avons-nous besoin d'une spécification comme JAX-RS?

j'ai en fait googlé pour des questions comme "Quelle est la différence entre les servlets et les services RESTful sur HTTP" et pour résumer les réponses de la communauté, j'ai obtenu:

  1. service de repos le développement (sur Jersey) est une architecture, qui utilise essentiellement des servlets.
  2. les outils conformes JAX-RS comme Jersey offrent un marshalling facile-démarshalling des données XML/JSON, aidant les développeurs.
  3. REST nous aide à utiliser GET/POST/PUT / DELETE d'une manière très efficace que les servlets normaux.

selon ces réponses, je suppose que si j'écris un servlet qui utilise JAXB (pour traiter la sérialisation automatique), et j'utilise efficacement GET/POST/PUT / DELETE dans mon servlet code, je n'utilise pas un outil comme Jersey, et donc JAX-RS.

je sais que j'ai terriblement tort de passer cette déclaration, s'il vous plaît corrigez-moi.

PS: ce doute est en fait venu quand j'ai dû développer quelques services RESTful en PHP. Après avoir passé en revue quelques-uns des codes PHP RESTful, j'ai réalisé qu'ils étaient exactement les mêmes vieux scripts PHP, avec quelques méthodes d'aide pour gérer XML/JSON.

74
demandé sur Jens Piegsa 2011-08-13 21:34:00

2 réponses

Pourquoi utiliser JAX-RS / Jersey?

Réponse Courte

parce que l'in facilite le développement des services de repos.

Longue Réponse

JAX-RS est un standard qui permet de créer facilement un service RESTful pouvant être déployé sur n'importe quel serveur D'application Java: GlassFish, WebLogic, WebSphere, JBoss, etc.

JAX-RS fait partie de Java EE, et lorsque JAX-RS est utilisé avec D'autres technologies Java EE, il devient encore plus facile de créer votre service reposant:

  • EJB - une fève de session est utilisée comme implémentation du service et traite également la sémantique de transaction.
  • JAX-RS - utilisé pour exposer la fève de la session comme un service reposant
  • JPA - Utilisé pour persister les POJOs à la base de données. Notez comment L'EntityManager est injecté sur le haricot de session.
  • JAXB - utilisé pour convertir le POJO en/de XML (dans GlassFish, il peut également être utilisé pour convertir le POJO en/de JSON). JAX-RS gère par défaut l'interaction avec L'implémentation JAXB.

Sample JAX-RS Service

package org.example;

import java.util.List;

import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {

    @PersistenceContext(unitName="CustomerService",
                        type=PersistenceContextType.TRANSACTION)
    EntityManager entityManager;

    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public void create(Customer customer) {
        entityManager.persist(customer);
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public Customer read(@PathParam("id") long id) {
        return entityManager.find(Customer.class, id);
    }

    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void update(Customer customer) {
        entityManager.merge(customer);
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") long id) {
        Customer customer = read(id);
        if(null != customer) {
            entityManager.remove(customer);
        }
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("findCustomersByCity/{city}")
    public List<Customer> findCustomersByCity(@PathParam("city") String city) {
        Query query = entityManager.createNamedQuery("findCustomersByCity");
        query.setParameter("city", city);
        return query.getResultList();
    }

}

Pour Plus Information:

65
répondu Blaise Doughan 2012-10-29 11:26:58

REST est une architecture, qui utilise essentiellement des servlets.

Non, ça ne l'est pas. REST est un style d'architecture qui peut être implémenté en utilisant des servlets, mais qui ne les utilise pas de manière inhérente, et qui n'a rien à voir avec Java.

JAX-RS est une spécification JSR définissant une API Java pour les services web RESTful.

Jersey est une implémentation spécifique de JAX-RS.

Quant à savoir si vous devez utiliser Jersey ou essayer d'être conforme à la spécification JAX-RS, c'est en quelque sorte à vous. Si cela rend votre travail plus facile, génial! Si non personne ne vous oblige.

52
répondu Don Roby 2017-09-22 14:26:32