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

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

Я на самом деле googled для таких вопросов, как "В чем разница между сервлетами и службами RESTful через HTTP", и подытожить ответы сообщества, я получил:

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

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

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

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

Ответ 1

Зачем использовать 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();
    }

}

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

Ответ 2

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

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

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

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

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