Сервлет против RESTful - PullRequest
       33

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

46 голосов
/ 24 октября 2011

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

Зачем нужны службы Restful, поскольку обычный сервлет также может работать с методами HTTP?

Ответы [ 2 ]

64 голосов
/ 24 октября 2011

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, а не другой сетевой протокол.

Смотри также:

0 голосов
/ 26 сентября 2017

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

  1. REST Concept

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

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

Тогда, если вы ссылаетесь на этот ответ , чтобы понять, как в этой реализации используется Сервлет (конкретный 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 Frameworks просто упрощают реализацию REST Services на уровне предприятия, но они используют HTTP-сервлет для перехвата входящих запросов.Вы всегда можете использовать простые сервлеты для реализации своих собственных сервисов REST, но это будет просто более длительным с большим количеством кода котельной пластины.

...