以“正确”的方式将域对象映射到Restlet中的URL

时间:2013-04-16 15:13:05

标签: rest restlet

我目前正在使用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
}

除了被Foo引用之外,Bar也可以被其他对象类型引用,所以我想在自己的URL层次结构中公开它们的表示,而不是将子资源放在单个Foo的层次结构中。所以在我的例子中,我希望Foo的XML表示看起来像:

<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引用的每个Foo的id,并构造一个放置在XML(或JSON)表示中的URL。 / p>

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

我发现This thread from 2007几乎都在询问达成共识的完全相同的问题:

  1. 查询一些外部对象管理服务器资源的URL配置(使用Spring或类似的东西来提供配置和实例化)
  2. 其中一位Restlet开发人员建议在资源本身上放置一个静态或实例方法。
  3. (1)似乎有点笨重,(2)似乎它有同样的问题,我们在资源级别不知道应用程序放置它的位置。此外,自6年前提出问题以来,现在可能有更好的解决方案。

    我对Restlet和REST架构一般都很陌生,所以我很开放我可能会完全错误地解决这个问题,所以请随时告诉我。

0 个答案:

没有答案