我们正在尝试为外部端点提供干净的URI结构,以从CQ5中提取json信息.
例如,如果要获取有关特定用户历史记录的信息(假设您具有权限等),理想情况下我们希望端点能够执行以下操作:
/bin/api/user/abc123/phone/555-klondike-5/history.json
在URI中,我们将指定/bin/api/user/{username}/phone/{phoneNumber}/history.json,以便利用调度程序使缓存更改无效,而不会使大量缓存信息无效.
我们想使用sling servlet来处理请求,但是,我不知道如何将变量放入路径中.
如果有来自JaxRS的@PathParam之类的东西添加到sling路径变量会很棒,但我怀疑它不可用.
我们想到的另一种方法是使用选择器来识别我们何时访问api,从而可以从路径返回我们想要的任何内容,但是需要一个单一的sling servlet来处理所有请求,所以我对这种方法并不满意,因为它将许多不相关的代码粘合在一起.
任何帮助都将不胜感激.
更新:
如果我们要使用OptingServlet,然后在接受函数中放入一些逻辑,我们可以堆叠一系列吊索servlet并使用正则表达式从路径做出接受决策.
然后在执行期间,可以为变量解析路径本身.
如果您提供的数据来自JCR存储库,那么最好是根据您希望的URL完全构建它,这是使用Sling执行操作的推荐方法.
如果数据是外部数据,您可以创建一个自定义Sling ResourceProvider,它安装在/ bin/api/user路径上,并根据路径的其余部分获取或生成相应的数据.
Sling测试套件的PlanetsResourceProvider就是一个简单的例子,请参阅http://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider /
https://sling.apache.org/documentation/the-sling-engine/resources.html上的Sling资源文档记录了一般资源解析机制.