1

我目前正在使用 Restlet 提供一个 REST API 来访问具有许多相关表的数据库,使用 JPA + Hibernate 作为我的持久层。举一个具体的例子,假设我的 JPA 实体中有以下对象层次结构:

@Entity
class Foo {
    Long id; // primary key
    List<Bar> bars;
    // Other Foo data
}

@Entity
class Bar {
   public Long id;
   // Bar data
}

除了被Foos 引用之外,Bars 还可以被其他对象类型引用,所以我想在它们自己的 URL 层次结构中公开它们的表示,而不是作为子资源放置在单个Foo的层次结构中。因此,就我而言,我希望 a 的 XML 表示形式Foo类似于:

<Foo>
    <bars>
        <Bar>http://example.com/bars/42</Bar>
        <Bar>http://example.com/bars/127</Bar>
    </bars>
    <!-- Other foo data representation -->
</Foo>

在 Restlet 中,Router为我的应用程序配置时,我有以下配置:

router.attach("/foo", ListAllFooResource.class);
router.attach("/foo/{id}", SingleFooResource.class);
router.attach("/bar", ListAllBarResource.class);
router.attach("/bar/{id}", SingleBarResource.class);

这就是我的困境所在。从资源级别来看,我似乎无法找到一种方法来确定SingleBarResource放置的位置。当从我的 JPA 实体构造 Foo 的表示时,我想获取每个Bar引用的 idFoo并构造一个 URL 以放置在 XML(或 JSON)表示中。

我的问题是:在一个ServerResource子类中,有没有办法询问另一个子类映射到Application什么 URL ?ServerResource如果可能,那么我可以使用该getRootRef()方法构建所需资源的完整路径。

我发现这个线程从 2007 年开始提出几乎完全相同的问题,其中的共识是:

  1. 查询一些外部对象管理服务器资源的 URL 配置(使用 Spring 或类似的东西来提供配置和实例化)
  2. 一位 Restlet 开发人员建议在资源本身上放置一个静态或实例方法。

(1) 看起来有点笨拙,并且 (2) 似乎也有同样的问题,我们不知道应用程序在资源级别放置它的位置。此外,由于这个问题是 6 年前提出的,现在可能有更好的解决方案。

一般来说,我对 Restlet 和 REST 架构还是很陌生,所以我对我完全错误地处理这个问题的可能性持开放态度,所以请随时告诉我。

4

0 回答 0