![](/img/trans.png)
[英]REST API design: different granularity for receiving and updating resources
[英]REST API design: linking resources
假设我有两个顶级资源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
。 我在考虑对/foo/1/bars
的POST
请求,但不确定实际提交的内容。 指向Bar
资源的link
元素,例如以下?
POST /foos/1/bars
<atom:link href="/bars/4711" />
这似乎还可以,因为客户端仍然不需要创建URL,并且我们仍然满足REST约束。 但是, POST
链接到服务器有点奇怪。 对于这种情况有更好的解决方案吗?
我考虑服务器理解的资源,而不是响应(例如)GET请求而流动的XML表示形式来考虑。 我有RESTful服务,可以返回JSON或XML,或可能返回其他表示形式。
因此,我同意您的POST或PUT
/foos/{fooId}/bars
指定条的完整列表或添加一些条。
发布的有效负载的格式可以是您所使用的媒体类型的自然序列化格式。 就我而言,它通常是一个JSON字符串,因此在我的服务实现中会反序列化并看到一组重新排列的参考URL字符串。
如果你的
<atom:link href="/bars/4711" />
还很好地反序列化,那么如果序列化的格式有点装饰性,我看不出任何问题。
简介:对您的(反)序列化器来说很自然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.