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); } }
那么你已经通过以下方式获得了所需的内容:
- http://example.com/rest/data/text/123
- http://example.com/rest/data/xml/123
- http://example.com/rest/data/json/123
而已。 尝试做一个简单的香草Servlet :)请注意,SOAP本质上也通过HTTP。 它基本上是一个额外的HTTP层,而不是一个不同的networking协议。
也可以看看:
- REST教程
- JAXB教程
- 泽西岛教程
在我看来,为了更好的理解,我们需要剖析一些令我们困惑的组件,
- REST的概念
使用RESTdeviseHTTP 1.1和统一资源标识符(URI)
- HTTP协议 – 超文本传输协议
-
javax.servlet.http.HttpServlet
类 - REST与Java – JAX-RS及其实现(如Jersey等)
- 其他不符合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服务,但是这会花费大量的锅炉代码。