Servlet vs RESTful
今天,我读到了Restful服务。 基本上,我了解的是Restful Web服务将对HTTP请求方法起作用,而不是普通Web服务将对SOAP请求起作用。
Restful服务有什么需求,因为普通的servlet也可以在HTTP方法上工作?
RESTful更是一种体系结构风格,而不是另一种技术。从服务器角度来看,它被设计为完全无状态,并且在每个请求的基础上都是独立的(即没有会话)。从客户端的角度来看,它是一种通过具有(自记录)路径参数而不是请求参数的URL通过不同格式获取信息的方法。
当然,您可以使用普通的香草servlet来执行此操作,但是它将引入一些样板代码来收集路径参数并生成所需的响应。 JAX-RS只是一个方便且自包含的API,无需您自己编写所有样板代码,从而使代码最少且具有更多自记录性。
假设您具有一个JAXB实体作为模型,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @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资源,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | @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上的额外XML层,而不是其他网络协议。
也可以看看:
- REST教程
- JAXB教程
- 球衣教程
我认为,为了更好地理解,我们需要剖析混淆我们的组件,这些组件是,
Fielding used REST to design HTTP 1.1 and Uniform Resource Identifiers
(URI)
超文本传输??协议
JAX-RS和Spring Rest之间的区别
然后,如果您引用此答案来理解这些实现如何使用Servlet(具体的
These REST service classes are simple POJOs annotated to tell the
jersey framework about different properties such as path, consumes,
produces etc.
然后,您可以进一步了解-REST和HTTP协议有什么区别? &HTTP和REST有什么区别?并得出一个结论,即如果您使Web服务RESTFul(即(从一个答案复制而来)),会带来什么好处,
REST不必绑定到HTTP。 RESTful Web服务只是遵循RESTful体系结构的Web服务。
1 2 3 4 5 6 7 | What is Rest - 1- Client-server 2- Stateless 3- Cacheable 4- Layered system 5- Code on demand 6- Uniform interface |
使用REST而不是非REST HTTP有什么优势?
但是,我不想讨论优点-缺点(优点和缺点)辩论,因为那是非常主观的。
通过以上阅读,现在您的问题,
What is the need for Restful services as normal servlet can also work
on the HTTP methods?
您会了解到,REST框架只是简化了企业级REST服务的实现,但是它们确实使用HTTP Servlet来拦截传入的请求。您始终可以使用普通的servlet来实现自己的REST服务,但这会因为大量样板代码而更加耗时。