gpt4 book ai didi

web-services - REST API 设计 : linking resources

转载 作者:行者123 更新时间:2023-12-04 12:12:05 25 4
gpt4 key购买 nike

假设我有两个顶级资源 FooBar .现在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>

所以我几乎暴露了所有 Bar 已分配 Foo作为嵌套资源。这意味着 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> 中内联集合元素前期。但是我仍然有一些问题:虽然这让我可以很好地删除 Bar来自 Foo通过触发 DELETE请求例如 /foos/1/bars/1但是如何分配 BarFoo然后?假设客户端将访问 /bars得到:
GET /bars

<bars>
<bar>

<atom:link rel="self" href="/bars/4711" />
</bar>
</bars>

并决定要分配 /bars/1/foo/1/bars .我在想一个 POST请求到 /foo/1/bars但不确定实际提交什么。一个 link元素指向 Bar资源如下?
POST /foos/1/bars

<atom:link href="/bars/4711" />

这看起来很正常,因为客户端仍然不需要创建 URL,我们仍然满足 REST 约束。不过对 POST感觉有点奇怪链接到服务器。这种情况有更好的解决方案吗?

最佳答案

我根据服务器理解的资源而不是响应(例如)GET 请求而流动的 XML 表示来考虑这一点。我有 RESTful 服务,可以返回 JSON 或 XML,或者可能返回其他表示。

所以我同意你的 POSTing 或 PUTing

 /foos/{fooId}/bars

指定完整的柱线列表或添加一些柱线。

发布的有效负载的格式可以是您正在使用的媒体类型的自然序列化形式。在我的情况下,它通常是一个 JSON 字符串,因此在我的服务实现中会反序列化并查看一组资源引用 URL 字符串。

如果你的
<atom:link href="/bars/4711" /> 

也可以很好地反序列化,如果序列化形式有点,嗯,装饰性,我看不出问题。

总结:为你的(反)序列化器做一些自然的事情。

关于web-services - REST API 设计 : linking resources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com