Сервлет против RESTful

Сегодня я читал о Restful services. В основном, я понимаю, что Restful webservices будут работать с методами HTTP-запроса, а не обычным web-сервисом будет работать на запрос SOAP.

Какая потребность в услугах Restful, поскольку обычный сервлет также может работать на HTTP-методах?

Ответ 1

RESTful - это скорее стиль архитектуры, чем другая технология. С точки зрения сервера, он предназначен для того, чтобы быть полностью безстоящим и автономным по принципу запроса (т.е. Есть сеансы нет). С точки зрения клиента, это больше способ получения информации в разных форматах через URL-адреса с параметрами пути (самодокументирующими), а не с параметрами запроса.

Конечно, вы можете сделать это с помощью простого серфинга ванили, но он будет вводить некоторый код шаблона для сбора параметров пути и для получения желаемого ответа. JAX-RS - это просто удобный и самодостаточный API, который устраняет необходимость написания всего кода шаблона самостоятельно, что приводит к минимальному и более самодокументируемому коду.

Предполагая, что у вас есть объект JAXB, как показано ниже:

@XmlRootElement
public class Data {

    @XmlElement
    private Long id;

    @XmlElement
    private String value;

    // ...

    @Override
    public String toString() {
        return String.format("Data[id=%d,value=%s]", id, value);
    }

}

И ресурс JAX-RS, как показано ниже:

@Path("data")
public class DataResource {

    @EJB
    private DataService service;

    @GET 
    @Path("text/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getAsText(@PathParam("id") Long id) {
        return String.valueOf(service.find(id));
    }

    @GET 
    @Path("xml/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Data getAsXml(@PathParam("id") Long id) {
        return service.find(id);
    }

    @GET 
    @Path("json/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Data getAsJson(@PathParam("id") Long id) {
        return service.find(id);
    }

}

Тогда вы уже получите желаемый контент в соответствующем формате:

Что это. Попробуйте сделать то же самое с одним простым ванильным сервлетом:) Обратите внимание, что SOAP по существу также проходит через HTTP. Это в основном дополнительный XML-уровень через HTTP, а не другой сетевой протокол.

См. также:

Ответ 2

На мой взгляд, для лучшего понимания нам нужно проанализировать компоненты, которые нас путают, и эти компоненты,

В полевых условиях используется REST для разработки HTTP 1.1 и унифицированных идентификаторов ресурсов (URI),

  1. Протокол HTTP Протокол передачи гипертекста
  2. javax.servlet.http.HttpServlet класс
  3. REST с Java - JAX-RS и его реализация (например, Джерси и т.д.)
  4. Другие REST Реализации, не соответствующие JAX-RS (например, Spring REST) Разница между JAX-RS и Spring Rest

Затем, если вы отсылаете этот ответ, чтобы понять, как эта реализация использует Servlet (конкретный javax.servlet.http.HttpServlet), чтобы перехватить все входящие Запросы. Важная цитата есть,

Эти классы обслуживания REST - это простые POJO, аннотированные, чтобы сообщить каркас джерси о различных свойствах, таких как путь, потребление, производит и т.д.

Затем вы можете прочитать о - В чем разница между протоколами REST и HTTP? и В чем разница между HTTP и REST? и сделайте вывод, какие преимущества вы получите, если вы сделаете свой веб-сервис RESTFul, а именно (скопированный из одного ответа),

REST не обязательно привязан к HTTP. Веб-службы RESTful - это просто веб-службы, которые следуют за архитектурой RESTful.

What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface

В чем преимущество использования REST вместо не-REST HTTP?

Хотя, я бы не хотел вступать в плюсы - минусы (плюсы и минусы), потому что это очень субъективно.

С приведенными выше показаниями, теперь для вашего вопроса,

Какая потребность в услугах Restful, поскольку нормальный сервлет также может работать по методам HTTP?

Вы поймете, что REST Framework просто упрощают реализацию REST Services на уровне предприятия, но они используют HTTP Servlet для перехвата входящих запросов. Вы всегда можете использовать простые сервлеты для реализации своих собственных служб REST, но это просто потребует много времени с большим количеством кодовых табличек.