今天我读到了Restful服务。基本上我所理解的是Restful webservices将在HTTP请求方法上工作,而不是普通的webservice将在SOAP请求上工作。
对Restful服务有什么需要,因为普通的servlet也可以处理HTTP方法?
答案 0 :(得分:64)
RESTful更像是一种架构风格,而不是一种不同的技术。从服务器的角度来看,它被设计为完全无状态且基于每个请求自包含(即,没有会话)。从客户的角度来看,它更像是一种通过具有(自我记录)路径参数而不是请求参数的URL获取不同格式信息的方式。
当然,您可以使用普通的vanilla servlet执行此操作,但它会引入一些样板代码来收集路径参数并生成所需的响应。 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);
}
}
然后,您已经通过以下方式获得了所需内容:
就是这样。尝试使用单个普通的Servilla来做同样的事情:)请注意,SOAP本质上也通过HTTP。它基本上是HTTP上的额外XML层,而不是不同的网络协议。
答案 1 :(得分:0)
在我看来,为了更好地理解,我们需要剖析让我们和这些组件混淆的组件,
Fielding使用REST来设计HTTP 1.1和统一资源标识符 (URI)
javax.servlet.http.HttpServlet
class 然后,如果您引用this answer来理解这些实现如何使用 Servlet (具体javax.servlet.http.HttpServlet
)来拦截所有传入的请求。重要的是,
这些REST服务类是注释的简单POJO 关于不同属性的泽西框架,如路径,消耗, 生产等。
然后你可以进一步阅读 - What is the difference between REST and HTTP protocols?& What is the difference between HTTP and REST?并得出结论,如果您使用Web服务RESTFul会获得哪些优势,即(从一个答案中复制),
REST 不一定与 HTTP 相关联。 RESTful Web服务只是遵循RESTful架构的Web服务。
What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface
What is the advantage of using REST instead of non-REST HTTP?
虽然,我不想进入优势 - 缺点(利弊)辩论,因为这是非常主观的。
以上读数,现在是您的问题,
对Restful服务的需求是什么,因为普通的servlet也可以工作 关于HTTP方法?
您会理解REST框架只是简化企业级REST服务的实现,但它们确实使用HTTP Servlet来拦截传入的请求。您始终可以使用普通的servlet来实现自己的REST服务,但是使用大量的样板代码会花费更多的时间。
答案 2 :(得分:-2)
RESTeasy易于进行EJB 3.0和SEAM集成,而Jersey易于进行Spring和JSON集成。