Зачем использовать JAX-RS / Джерси? - PullRequest
76 голосов
/ 13 августа 2011

Извините, этот вопрос звучит глупо, но после разработки некоторых моих RESTful-сервисов с использованием Jersey я задал себе вопрос: если REST - это просто архитектура, а не протокол, такой как SOAP, зачем нам такая спецификация, как JAX?-RS?

Я на самом деле погуглил вопросы типа «В чем разница между сервлетами и сервисами RESTful через HTTP» и, чтобы подвести итоги ответов сообщества, я получил:

  1. Сервис RESTfulРазработка (на Джерси) - это архитектура, которая по своей природе использует сервлеты.
  2. JAX-RS-совместимые инструменты, такие как Джерси, обеспечивают простое объединение и сортировку данных XML / JSON, помогая разработчикам.
  3. REST помогаетмы используем GET / POST / PUT / DELETE способом, который намного эффективнее обычных сервлетов.

В соответствии с этими ответами, я думаю, что если я напишу сервлет, который использует JAXB (для работы с автоматической сериализацией), и я эффективно использую GET / POST / PUT / DELETE в своем коде сервлета, я не использую такой инструмент, как Джерси, и, следовательно, JAX-RS.

Я знаю, что я ужасно неправ, передавая это утверждение, пожалуйста, поправьте меня.

PS: На самом деле это сомнение возникло, когда мне пришлось разрабатывать некоторые RESTful-сервисы на PHP.Пройдя некоторые из PHP-кодов RESTful, я понял, что это те же самые старые PHP-скрипты с некоторыми вспомогательными методами для обработки XML / JSON.

Ответы [ 2 ]

67 голосов
/ 14 августа 2011

Зачем использовать JAX-RS / Джерси?

Краткий ответ

Потому что это облегчает разработку служб RESTful.

Длинный ответ

JAX-RS - это стандарт, упрощающий создание службы RESTful, которую можно развернуть на любом сервере приложений Java: GlassFish, WebLogic, WebSphere, JBoss,и т. д.

JAX-RS является частью Java EE, и когда JAX-RS используется с другими технологиями Java EE, создание службы RESTful становится еще проще:

  • EJB - Сессионный компонент используется как реализация службы, а также обрабатывает семантику транзакции.
  • JAX-RS - Используется для представления сессионного компонента в качестве службы RESTful
  • JPA - Используется для сохранения POJO в базе данных.Обратите внимание, как EntityManager внедряется в сессионный компонент.
  • JAXB - используется для преобразования POJO в / из XML (в GlassFish его также можно использовать для преобразования POJO в / из JSON).JAX-RS по умолчанию обрабатывает взаимодействие с реализацией JAXB.

Пример службы JAX-RS

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

}

Для получения дополнительной информации:

53 голосов
/ 13 августа 2011

REST - это архитектура, которая по своей природе использует сервлеты.

Нет, это не так.REST - это стиль архитектуры, который может быть реализован с использованием сервлетов, но не использует их по своей природе и не имеет никакого отношения к Java.

JAX-RS - это спецификация JSR, определяющая API Java для веб-служб RESTful.

Джерси - это конкретная реализация JAX-RS.

Относительно того, использовать ли Джерси или пытаться соответствовать спецификации JAX-RS, это ваше дело.Если это облегчает вашу работу, отлично!Если нет, никто не заставляет вас.

...