使用XML实现REST式的SOA
面向服务体系结构常常意味着大型企业所用的重型技术。SOA体系结构模式的优点也适用于比较小的环境。
2 为每个 URL 上的通信选择一种数据格式。
3 指定每个资源上的方法。
4 指定返回的数据和状态码。
以下是具体的设计过程。假设您是一家航空公司的开发人员。公司有用于预订航班的软件,还有处理付款(现金和信用卡)的组件。它使用软件跟踪包裹、执行内部资源规划和执行许多其他任务。
假设机场登记处的职员使用一个客户机应用程序,这个程序访问包裹跟踪服务,还使用一个服务为乘客分配座位。处理包裹的地勤人员只需要包裹跟踪服务,不需要其他服务。他们的客户机只允许他们确认已经登记的包裹是否到达了。不允许他们登记新的包裹。
在这个示例中,我们将设计包裹跟踪服务。首先,决定资源:旅行者、航班和包裹(注意,在出现 {id} 的任何地方,都可以填写任意数字):
http://luggagetracking.airlinecompany.com/bags/{id}
http://luggagetracking.airlinecompany.com/flights/{id}
http://luggagetracking.airlinecompany.com/travellers/{id}
为每个资源选择一种数据格式:
显然,这个模型过于简单了。对于当前的示例,只需要支持两个方法,因此这个模型已经足够了。登记处应该能够为乘客登记新包裹。在把包裹装进飞机时,地勤人员应该能够修改包裹的状态:
·对 http://luggagetrackingairlinecompany.com/travellers/{id}/newbag 执行 POST,返回一个 XML 结构。
·对 http://luggagetracking.airlinecompany.com/bags/{id}/status/{newstatus} 执行 POST,返回修改后的 XML 结构。
使用标准的 HTTP 状态作为状态码。成功的操作都会返回 200。如果系统无法根据资源的 ID 找到它,就会返回 404。系统故障导致的任何错误都会返回 500。
代码示例:URL 映射
可以使用多种方式把 URL 映射到实现方法。比较先进的方法可能更灵活,应该用在比较大的应用程序中。这个小示例使用最简单的方法:正则表达式。下面是 BagServlet 上的 post 方法示例,它把 URL 参数传递给底层 servlet。可以在本文的下载文件中找到完整的 servlet 代码。注意,这里没有实现实际的底层服务。 以下是该示例:
| protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { Pattern pattern = Pattern.compile("^/?.*?/bags/(.*)/status/(.*)$"); Matcher matcher = pattern.matcher(request.getRequestURI()); if(matcher.matches()) { String bagId = matcher.group(1); String newStatus = matcher.group(2); bagService.changeBagStatus(bagId, newStatus); } } |
- 本文关键词:

