假设我有两个顶级资源Foo
和Bar
。现在Foo
需要链接到一些Bar
。在Java类中,这可能看起来像这样:
public class Foo {
Set<Bar> bars;
}
public class Bar { … }
我希望你能帮我将
Foo
的XML表示形式改成这样:
GET /foos/1
<foo>
…
<atom:link rel="self" href="/foos/1" />
<atom:link rel="bars" href="/foos/1/bars" />
</foo>
因此,我将所有分配给Foo
的Bar
作为嵌套资源公开。这意味着Bar
资源具有独立的生命周期(组合而非聚合)。然后,嵌套的资源可能会公开所有链接的Bar
,如下所示:
GET /foos/1/bars
<bars>
<atom:link rel="bar" href="/foos/1/bars/1" />
<atom:link rel="bar" href="/foos/1/bars/2" />
</bars>
另一种方法是提前将集合内联到<foo>
元素中。但是我仍然有一些问题:虽然这使我可以通过触发对例如/foos/1/bars/1
的DELETE
请求来很好地从Foo
中删除一个Bar
,但如何将一个Bar
分配给一个Foo
呢?假设客户端访问/bars
得到:
GET /bars
<bars>
<bar>
…
<atom:link rel="self" href="/bars/4711" />
</bar>
</bars>
决定将/bars/1
分配到 /foo/1/bars
。 我考虑使用POST
请求 /foo/1/bars
,但不确定实际提交什么内容。例如下面的指向 Bar
资源的link
元素?
POST /foos/1/bars
<atom:link href="/bars/4711" />
这似乎还可以,因为客户端不需要创建URL,同时我们仍然满足REST约束条件。但是,将链接POST
到服务器感觉有点奇怪。是否有更好的解决方案呢?