Servlet vs RESTful

今天我读了关于Restful服务。 基本上我所知道的是Restful webservices将在HTTP请求方法上工作,而不是普通的webservice将在SOAP请求上工作。

Restful服务需要什么样的正常的servlet也可以在HTTP方法上工作?

RESTful比其他技术更像一种架构风格。 在服务器的angular度来看,它被devise成完全无状态和自包含在每个请求的基础上(即没有会话)。 从客户angular度来看,它更多的是通过URL(自我logging)path参数而不是请求参数来获取不同格式的信息。

当然,你可以用一个普通的香草servlet做到这一点,但它会引入一些样板代码来收集path参数并产生所需的响应。 JAX-RS只是一个方便且自包含的API,它不需要自己编写所有的样板代码,从而得到最less的,更自我logging的代码。

假设你有一个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); } } 

那么你已经通过以下方式获得了所需的内容:

而已。 尝试做一个简单的香草Servlet :)请注意,SOAP本质上通过HTTP。 它基本上是一个额外的HTTP层,而不是一个不同的networking协议。

也可以看看:

  • REST教程
  • JAXB教程
  • 泽西岛教程

在我看来,为了更好的理解,我们需要剖析一些令我们困惑的组件,

  1. REST的概念

使用RESTdeviseHTTP 1.1和统一资源标识符(URI)

  1. HTTP协议 – 超文本传输​​协议
  2. javax.servlet.http.HttpServlet
  3. REST与Java – JAX-RS及其实现(如Jersey等)
  4. 其他不符合JAX-RS的REST实现(如Spring REST) JAX-RS和Spring Rest之间的区别

那么如果你引用这个答案来理解这些实现如何使用一个Servlet (一个具体的javax.servlet.http.HttpServlet )来拦截所有的传入请求。 有重要的报价,

这些REST服务类是简单的POJO注释,用于告知jersey框架关于不同的属性,如path,消耗,产生等。

那么你可以进一步阅读有关 – REST和HTTP协议有什么区别? HTTP和REST有什么区别? 并作出结论,你得到什么好处,如果你让你的Web服务RESTFul,即(从一个答案复制),

REST不一定绑定到HTTP 。 REST风格的Web服务只是遵循RESTful架构的Web服务。

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

使用REST而不是非REST HTTP的优点是什么?

尽pipe如此,我不想进入优势 – 劣势(利弊),因为这是非常主观的。

随着以上的阅读,现在对于你的问题,

Restful服务需要什么样的正常的servlet也可以在HTTP方法上工作?

您将会理解,REST框架只是在企业级简化了REST服务的实现,但它们确实使用HTTP Servlet来拦截传入的请求。 你总是可以使用普通的servlet来实现你自己的REST服务,但是这会花费大量的锅炉代码。