Извините, этот вопрос звучит глупо, но после разработки некоторых из моих служб RESTful с использованием Джерси я задал себе вопрос: если REST - это просто архитектура, а не протокол типа SOAP, зачем нам нужна спецификация, такая как JAX-RS?
На самом деле я искал в Google такие вопросы, как «В чем разница между сервлетами и службами RESTful через HTTP», и, подытоживая ответы сообщества, я получил:
- Разработка сервисов RESTful (на Джерси) - это архитектура, которая по своей сути использует сервлеты.
- Совместимые с JAX-RS инструменты, такие как Jersey, обеспечивают простой маршаллинг-демаршалинг данных XML / JSON, помогая разработчикам.
- REST помогает нам использовать GET / POST / PUT / DELETE намного эффективнее, чем обычные сервлеты.
Согласно этим ответам, я предполагаю, что если я напишу сервлет, который использует JAXB (для работы с автоматической сериализацией), и я эффективно использую GET / POST / PUT / DELETE в своем коде сервлета, я не использую такой инструмент, как Jersey, и отсюда JAX-RS.
Я знаю, что я ужасно ошибаюсь, передавая это утверждение, пожалуйста, поправьте меня.
PS: Это сомнение на самом деле возникло, когда мне пришлось разрабатывать некоторые RESTful-сервисы на PHP. Пройдя через некоторые PHP-коды RESTful, я понял, что это те же самые старые PHP-скрипты с некоторыми вспомогательными методами для обработки XML / JSON.
Ответы:
Краткий ответ
Потому что это упрощает разработку сервисов RESTful.
Длинный ответ
JAX-RS - это стандарт, упрощающий создание службы RESTful, которую можно развернуть на любом сервере приложений Java: GlassFish, WebLogic, WebSphere, JBoss и т. Д.
JAX-RS является частью Java EE, и когда JAX-RS используется с другими технологиями Java EE, становится еще проще создать службу RESTful:
Пример службы 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(); } }
Для дополнительной информации:
источник
Нет. REST - это архитектурный стиль, который может быть реализован с использованием сервлетов, но не использует их по своей сути и не имеет ничего общего с Java.
JAX-RS - это спецификация JSR, определяющая API Java для веб-служб RESTful.
Джерси - это конкретная реализация JAX-RS.
Что касается того, использовать ли Джерси или пытаться соответствовать спецификации JAX-RS, это как бы вам решать. Если это облегчит вашу работу - отлично! Если не тебя никто не заставляет.
источник