REST端点,可使用Apache Camel进行集成

REST是一种用于组织资源的体系结构样式,当应用于基于HTTP的服务时,REST可以构建无状态的,解耦的,可伸缩的服务。 HTTP方法,HTTP标头和mime类型都允许开发人员实现REST样式。 诸如JerseyFuse Services Framework(Apache CXF)之类的框架可用于加快服务的开发和部署,以尝试实现RESTful风格,在本博文中,我想讨论如何构建资源的后端,依赖于Fuse中介路由器(也称为Apache Camel)提供的集成。

顺便说一句,对于那些想知道您的体系结构确实是RESTful还是REST试图缓解的高度耦合的RPC风格的人,也许我很感兴趣。 关于REST撰写论文的Roy Fielding积极主张资源表示中的超链接对于REST风格必不可少的观点,甚至进一步阐明了实现REST的不确定性。

该示例的源代码可以在我的github存储库中找到

Fuse中介路由器FuseSource的企业级硬化版Apache Camel,提供了舒适的DSL,用于描述集成,中介和路由。 它是免费的开放源代码,并具有Apache许可证。 对于那些不熟悉Mediation Router / Camel的人,请看DZone企业集成区Apache Camel:Integration Nirvana的 Jon Anstey( Camel in Action的合著者)的介绍。

我们将使用中介路由器来帮助在REST端点和文件系统上的资源文件之间编写简单的集成。 我将使用camel-cxfrs组件公开REST端点,并将使用camel-file组件读取文件系统上的目录。 该样本的目的是描述必要的配置,以通过中介路由器公开REST接口,以某种方式与后端集成,将数据转换为适当的REST响应并发送回该响应。

首先,让我们专注于如何设置REST端点。 为此,您将创建一个JAX-RS资源,该资源描述将用作REST端点的java方法。 此样本代码要求熟悉RESTful Web服务 (又称JAX-RS)的Java API 。 对于那些不熟悉的人,这里有一些不错的教程,可以帮助您理解JAX-RS。

@Path("/customerservice/")
public class CustomerServiceResource {

// NOTE: The instance member variables will not be available to the
// Camel Exchange. They must be used as method parameters for them to
// be made available
@Context
private UriInfo uriInfo;

public CustomerServiceResource() {
}

@GET
@Path("/customers/{id}/")
@Produces("text/xml")
public Customer getCustomer(@PathParam("id") String id) {
    return null;
}

@PUT
@Path("/customers/")
public Response updateCustomer(Customer customer) {
    return null;
}

}

如您所见,注释是JAX-RS注释,用于描述REST端点所涉及的操作,HTTP方法和mime类型。 注意,返回值全为空,因为此类实际上将不会用于处理进入端点的请求。 中介路由器路由将负责处理和响应。 但是请注意,实例成员不可用于中介路由器交换,即,通过JAX-RS @Context注释注入的任何实例成员将不可用。 要使它们可用,请将它们作为参数添加到您的方法中。

可以使用以下两种方法之一来声明使用中介路由器的CXF-RS端点:直接在端点配置中,如下所示:

from("cxfrs://http://localhost:9090/route?resourceClasses=com.fusesource.samples.CustomerServiceResource")

直接在配置中创建它需要较少的xml配置,但灵活性有限。 另一个选择是创建一个负责端点的单独的bean,然后在端点配置中引用它:

from("cxfrs:bean:rsServer")

Bean rsServer应该在骆驼上下文中定义。 例如:

<cxf:rsServer id="rsServer" address="http://localhost:9090/route"
              serviceClass="com.fusesource.samples.CustomerServiceResource"/>

这种方法允许您解耦端点配置,并允许端点配置更快,更省力。 尽管使用了第一个选项,但两个选项都显示在示例代码中。

这就是使用中介路由器公开REST端点所需的全部配置。 很简单。 下一步是根据来自REST端点的内容来使用文件系统中的文件。 该文件的内容将返回给REST调用的客户端。 为此,我们使用骆驼文件组件,并通过DSL中的pollEnrich调用丰富Exchange:

.setHeader(Exchange.FILE_NAME, simple("test-${body}.xml"))
.pollEnrich("file:src/data?noop=true", 1000, new CustomerEnricher())

我们不能在pollEnrich调用中使用任何动态表达式,因此我们在设置扩展之前设置文件组件可以理解的标头。 在这种情况下,REST消息的主体是可用于对文件系统资源进行模板化的标识符。

最后,我们可以对路线进行一些附加处理:

.process(new CustomerServiceProcessor())

如上所述,该示例的目的是显示如何配置终结点并将其附加到进一步的中介路由器处理中。 请注意,REST端点的消息交换模式(MEP)为InOut并期望响应。 该示例并不意味着是完整的端到端解决方案,因为该解决方案将根据预期的功能而有所不同。 请注意上面有关Roy关于什么是REST和不是REST 的讨论的链接。

如果我遗漏了一些内容,或者您​​需要对示例进行更多说明,请给我评论,我们可以进行讨论。

参考:来自Christian Posta Software博客的JCG合作伙伴 Christian Posta 使用Apache Camel进行集成的REST端点


翻译自: https://www.javacodegeeks.com/2012/05/rest-endpoint-for-integration-using.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值