我是OSB的新手,并尝试创建一个代理服务,它接受通配符作为它的请求 endpoints URI,并且使用动态路由调用业务服务 .
例如,代理服务应该接受 - /someservice/wildcard1/service 以及 /someservice/wildcard2/service ,并且应该能够分别使用动态路由调用一个业务服务http://businessip:port/someservice/wildcard1/service和http://businessip:port/someservice/wildcard2/service .
2 回答
没有OSB OOTB功能可以在两个不同的 endpoints URI下公开一个代理服务工件 . 您尝试实现的最接近的解决方法是使用URI的查询部分 . 更详细地说,您需要在URI的查询部分调用您的服务提供通配符:
然后在请求管道中,您将从上下文变量$ inbound / ctx:transport / ctx:request / http:query-parameters / http:parameter [@ name =“wildcard”] / @ value中提取外卡值,并将其用于:
覆盖负责出站的上下文变量
URI($ outbound / ctx:transport / ctx:uri)和到BusinessService的路由
在动态路由中构建服务路径
这不是完美的答案,但我读了一篇关于使用OSB创建RESTful接口的非常有趣的文章:http://www.oracle.com/technetwork/articles/soa/architecting-restful-services-083025.html
这可能在某种程度上适用于您遇到的问题,因为该文章有一种方法来分离部分URI路径,然后将其用作另一个代理服务的路由层 .
也就是说,随着这个问题变得越来越大,您可能会遇到一些问题,因为每次需要根据此架构更改,添加或删除新 endpoints 时,您都必须更新此代理,因此您可能需要重新审视我正在使用这项服务,或者至少确保你所投入的工作是一件又一件事,以免你的代理服务上出现20或50个单独的分支 .