1

我一直想知道 REST 中的链接能走多远。考虑有作者的书籍,但书籍和作者之间显然存在多对多的关系(一本书可以由多个作者写,作者可以写多本书)。

因此,假设我们有一个 rest 调用http://server/book/21,它将返回一本书 XML,其中包含有关作者的信息。现在,既然书是一种资源,而作者是一种资源,那么 XML 不应该直接包含所有作者信息。它应该包含指向作者信息的链接。但是下面两个例子中哪一个更被广泛接受?

(请原谅我糟糕的格式化 XML,我对手写 XML 的经验并不丰富)

<book>
  <title>Some Book</title>
  <authors>
    <author link="http://server/author/82">Some Guy</author>
    <author link="http://server/author/51">Some Other Guy</author>
  </authors>
</book>

然后,作者链接将返回更多信息:

<author>
  <name>Some Guy</name>
  <dateOfBirth>some time</dateOfBirth>
</author>

或者:

<book>
  <title>Some Book</title>
  <authors>http://server/book/21/authors</authors>
</book>

哪里http://server/book/21/authors返回:

<authors>
  <author link="http://server/author/82">Some Guy</author>
  <author link="http://server/author/51">Some Other Guy</author>
</authors>

然后每个都再次返回前一个<author>示例。

我问的原因基本上是因为在我的工作中他们采用了第二种方法,在我看来,客户必须采取更多步骤才能到达他们想去的地方。此外,对于“您总是需要”(作者姓名)的基本信息,您必须采取额外的步骤。另一方面,这种方式book资源只返回关于这本书的信息(没有其他信息),而要获取其他信息,您必须访问其他资源。

4

2 回答 2

1

这个问题听起来更像是“你的偏好是什么”类型的问题。所以这是我的 2 美分:

在我看来,在原始 xml 中包含作者姓名将是最好的主意。这将允许客户端应用程序显示可热链接的作者姓名列表,而无需第二次休息请求。当图书资源出现时,作者姓名很可能总是显示。如果我是你,我会更关注实用性,而不是担心其余资源的“理论”正确性。如果那有意义的话。

您不必在原始 xml 资源中包含所有作者的信息。而是显示图书资源以及在需要时/如果需要时查找有关作者的更多信息的实用方法。

于 2012-09-17T21:26:00.697 回答
0

只要一直做下去......

两者都可能看起来不错,但我实际上把钱放在了第二种方法上,这种方法更灵活,可以以一致的方式支持未来的 API 增长。这是因为您可能拥有多个不同对象与主对象的关系。用大量指向不同对象的链接来获取单个对象可能会很痛苦。此外,它将返回的对象的大小限制为仅返回核心“书籍”信息,而不是与其相关的其他各种对象,即使它们看起来不可分割。为每个资源选择最小的有用组件,至少减少后端不必要的负载以及未真正使用的关系。

当然,在这个例子中,很难看出限制对象中的关系信息的重要性,因为大多数书籍最多只有几个作者,但对于您通过 REST 公开的所有对象,情况是否如此?想象一下,如果这是一家“书店”,而关系是“客户”。如果您只想要商店地址和电话号码,您还需要拉回完整的客户列表并使其成为对象的一部分,这对各方来说不是很浪费吗?因此,您为这个新案例破例,不将客户作为链接返回,但对于商店部门之类的另一件事,您决定将它们作为链接包含在内?现在你有一个不一致的,你的客户需要了解每个对象的返回方式,因为它们都不符合相同的模式。

如果在整个 API 中普遍采用相同的方法,那么第二个方法也可以保持关系模型的整洁。任何对象的关系都可以通过以下方式访问:

 http://server/object/<object_id>/<relationshipName>
于 2012-09-17T21:26:47.930 回答