使用REST协议来实现SOA服务
REST是Representation State Transfer(表示层有状态的传输协议)的简称,它是一种Web架构类型,由Roy Fielding于2000年在他的博士论文中提出来的。REST的基本思想是如何充分利用HTTP协议的功能,它特别关注以下内容:
(1) REST关注资源,即,每种服务都应该设计成对资源进行某种操作;
(2) REST充分利用了HTTP协议中的谓词的功能,它不仅使用我们常用的GET和POST谓词,而且还使用PUT和DELETE谓词
在我们前面使用POX-over-HTTP方法完成的的SOA服务中,我们就使用了POST这个HTTP谓词。虽然前面我们仅仅列出了几个服务的源代码,它们都可以使用POST谓词来实现,当然,您也可以使用其它谓词实现这些服务。REST的思想就是,我们为什么不充分利用HTTP协议谓词的功能,把常见的CRUD操作映射到HTTP协议的谓词上,这样,消息交换协议就显得更加清晰。因此,我们可以把CRUD操作和相应的HTTP谓词进行关联,具体关系如下表所示:
HTTP谓词
|
CRUD操作
|
操作表述
|
POST
|
CREATE
|
Save new resources
|
GET
|
READ
|
Read resources
|
PUT
|
UPDATE
|
Modify existing resources
|
DELETE
|
DELETE
|
Delete resources
|
请您记住,资源及其对应的值代表了系统的状态,系统状态的转换将遵行以下几个规则:
(1) POST、PUT和DELETE谓词可以改变资源的状态
(2) GET谓词不能修改资源的状态
(3) 往系统增加新资源时应该使用POST谓词
(4) 修改系统中的资源应使用PUT谓词
(5) 从系统中删除资源应调用DELETE谓词
(6) 系统交换协议应该是无状态的,即本次方法的调用不应依赖于上次的方法调用
这些听起来很有趣,但资源究竟是什么?资源其实就是HTTP四个谓词能覆盖的请求操作的范围。拿我们前面的讨论过的商品对象来说,它就是一个典型的资源实例。您可以看到,在我们的实现代码中(见代码清单5),有一个IF-THEN的判断语句块,这个语句块根据请求中的含有的方法名来执行不同的操作,实际上,我们可以通过使用HTTP谓词,避免这些条件判断。那么,这是如何实现的呢?
如果客户端想新添一个商品,它需要调用insertItem服务,先要为这个新商品创建一个XML文档,然后通过POST方法把这个XML文档发送到服务器端,服务器的应答可以是一个比较通用的一个结果对象。
代码清单9— 通用结果对象Outcome的源代码
@XmlRootElement(name="Outcome")
public class Outcome {
private String retCode;
private String retMessaget;
...
}
服务器端的实现代码也会因此而减少,因为现在我们不需要考虑条件判断语句(请把下面的代码和代码清单5相比较):
代码清单10— REST风格的新建服务的服务器端实现代码
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
try{
JAXBContext jaxbContext = JAXBContext.newInstance(Item.class, Outcome.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
//Receiving the XML request and transform it into a Java object
Item item = (Item) unmarshaller.unmarshal(request.getInputStream());
System.out.println("Inserting item# "+item.getId());
// ... insert item
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
Outcome outcome = new Outcome();
outcome.setRetCode("OK");
outcome.setRetMessaget("Item was inserted successfully");
marshaller.marshal(outcome, response.getOutputStream());
}catch (Exception e) {
throw new ServletException(e);
}}
请注意,上面的代码只是REST协议的一个非常简单的手工实现,我们是使用一个简单的Servlet实现的,因为我们想把注意力集中在消息交换协议的一些重要概念上。虽然REST可由多种方法实现,比如JAX-WS(我们在讨论SOAP时会讲到)或Axis2都可实现REST。
好,现在回到我们的例子,updateItem服务可由与上面类似的代码实现,唯一的区别就是把update服务的实现代码放在Servlet的doPut方法中,而不是放在doPost方法中。其实,REST方法还有一点与众不同,我们这里提前说一下。
代码清单11— REST风格的新建服务的客户器端实现代码
Item item = new Item();
item.set...
//Prepare and establish the connection with the service
URL url = new URL("http://localhost/SoaBookREST/itemService");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
//Set the HTTP request method
con.setRequestMethod("POST");
con.connect();
JAXBContext jaxbContext = JAXBContext.newInstance(Item.class, Outcome.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
//Send the XML request to the service
marshaller.marshal(item, con.getOutputStream());
//Get the XML response from the service and deserialize it
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Outcome outcome = (Outcome)
unmarshaller.unmarshal(con.getInputStream());
分享到:
相关推荐
在Java Web服务和SOA环境中,持续集成和部署工具如Maven、Gradle和Jenkins可以帮助自动化构建、测试和部署过程,确保服务的稳定性和质量。 ### 7. 监控与管理 使用工具如JMX(Java Management Extensions)和管理...
SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务
使用Java Web服务构建SOA 中文版 part3
通过标准化的通信协议和服务接口,开发者可以构建出灵活、可扩展的系统,满足日益复杂和多样的业务需求。同时,服务的松散耦合确保了系统的稳定性,使得服务的升级和维护不影响消费者的使用体验。随着技术的不断发展...
web服务与SOA架构的一些简单的关系和一些联系!
在SOA中,SOAP消息用于在服务提供者和服务消费者之间传递请求和响应。Java中,可以使用JAX-WS(Java API for XML Web Services)来创建和消费SOAP Web服务。 **3. WSDL(Web Service Description Language)** WSDL...
( 用于实现Web服务的SOA编程模型.pdf )
JAX-WS提供了一套工具和API,使得开发人员能够轻松地实现服务端点和服务客户端。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是一个用于在Java对象和XML之间进行映射的标准API。它可以自动将Java对象...
使用Java Web服务构建SOA 中文版 part1
Web 服务则是实现 SOA 的一种重要技术手段,主要通过 XML 和 SOAP 协议来提供、定位和调用网络上的服务。 #### 服务导向企业 (SOE) 在 Alec Palmer 于 2000 年的演讲《SOA, Web 服务与全球交付模式》中,他提出了...
SOA是一种软件设计方法,它将应用程序的不同功能单元通过定义良好的接口和服务边界进行分离,以促进重用和互操作性。Java Web服务在SOA中扮演着关键角色,因为它们提供了标准的、平台无关的方式来暴露和消费这些服务...
综上所述,XML是连接Web服务和SOA的桥梁,它为构建松散耦合、可复用的服务提供了基础,促进了跨平台、跨系统的集成和协作。在现代企业架构中,XML的重要性不容忽视,它是实现业务流程自动化、提高IT效率的关键技术之...
Java Enterprise Edition(Java EE)提供了一系列API和服务,如JAX-WS(Java API for XML Web Services),用于创建和部署Web服务。Java的EJB(Enterprise JavaBeans)和JSF(JavaServer Faces)等技术则支持企业级...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...
【语义网Web服务SOA】是信息技术领域中...综上所述,语义网Web服务SOA是互联网技术发展的重要方向,它将推动信息处理和自动化服务的革命,使互联网从一个信息展示平台转变为一个能够理解、处理和执行任务的智能网络。
- **快速应用集成**:SOA 的一个显著优点是能够快速集成现有的应用程序和服务,从而加速新应用的开发过程。 - **自动化业务流程**:通过SOA,可以将多个服务组合起来形成自动化的业务流程,减少人为干预,提高效率。...
5. 服务总线(Service Bus):作为服务之间的通信基础设施,它处理消息路由、事务管理、安全性和服务质量控制等问题。 Web服务是SOA的一种实现形式,使用HTTP协议来交换数据,这使得Web服务能够跨越防火墙,广泛...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...