【问题标题】:REST - how to format the links in contentREST - 如何格式化内容中的链接
【发布时间】:2011-10-07 03:10:42
【问题描述】:

在 REST 中,一切都与链接有关。基本上,API 用户只需要一个链接,即顶级链接。这通常是http://server/api/ 或类似的东西。在浏览层次结构时会发现所有其他链接。例如,GET /api/ 可能会给你一个到 /api/users//api/images// 的链接api/users/ 可能会给你一个到 /api/users/john/ 的链接,等等。

也就是说,我想知道是否有某种标准如何格式化这些链接。毕竟,如果都是关于链接的,爬虫应该能够从顶部开始发现系统中的所有资源?

我做了一些研究。 XML 媒体类型,找不到任何注明的标准。让我们选择 /users/ 资源。有的写

<users>
    <user name='john' uri='/users/john'/>
    <user name='steve' uri='/users/steve'/>
</users>

别人写

<users>
    <user name='john' link='/users/john'/>
    <user name='steve' link='/users/steve'/>
</users>

其他人使用xlink,例如:

<users>
    <user name='john' xlink:href='/users/john'/>
    <user name='steve' xlink:href='/users/steve'/>
</users>

等等。

我在这里可能一无所知,但是不应该有某种标准来具体说明如何格式化指向其他资源的链接,因此没有任何关于如何格式化数据的知识吗?换句话说,应用程序 A1 的 API 的爬虫 X 可能不适用于应用程序 A2 的 API,因为 A1 对其资源的链接的格式不同于 A2。

在上面,我只讨论了 XML 媒体类型。当您采用 JSON 时,该领域的传播版本甚至更多。

为什么 REST 没有指定资源的相关资源的链接应该如何格式化?

【问题讨论】:

  • 对不起,我没有答案(我一直在使用 Atom 链接),但无论格式如何,您都需要包含有关链接所代表的关系类型的信息:。在不知道链接的用途的情况下,您的客户将很难弄清楚如何处理它。
  • 你是对的。为简单起见,我将其省略了。但即便如此,我相信同样的问题也适用:rel="/rels/new" 对非人类意味着什么?
  • 我认为这是您的客户端开发人员计划反对的。在整个应用程序中使用一致的 rel 类型,记录这些 rel 的含义,您的客户只需要查找 rel 并点击链接。这需要更长的对话(以及其他人的输入)。你想提出一个新问题吗?
  • 好主意。完成更多研究后,我将创建一个新问题。 Darrel Miller 提供的参考资料是我的第一步。

标签: api rest uri hyperlink


【解决方案1】:

返回 application/xml 的问题是没有为指定链接定义标准语义。这就是为什么它不是一个很好的超媒体媒体类型。 Xhtml 是一个更好的,它确实为链接指定了一些规则。 HAL 是另一个更简单的好方法。

在文档中指定链接时需要考虑很多事情,而不仅仅是 href。 Mike Amundsen 与 hfactor 讨论了将链接嵌入文档的各个方面,他做了一些出色的工作。

链接中最重要的部分是 John Howes 提到的 rel。 rel 可以是全局定义的,就像定义为 IANA 的 here 一样。或者,只要您遵循RFC 5988 中定义的扩展链接关系规则,它们也可以是您自己的自定义。 rel 文档告诉客户开发人员他或她需要知道的关于激活该链接的所有信息。

【讨论】:

  • 感谢您的澄清,现在更有意义了。我会检查你的参考资料。
【解决方案2】:

为什么 REST 没有指定如何链接到相关资源 资源应该被格式化吗?

Darrel 在上面有一个很好的看法,但要直接回答您的问题:REST 是一种风格,它在架构中实现,利用协议,利用媒体类型。它应该是指定链接应该如何格式化的媒体类型。所以 REST 本身并没有指定格式。它指定如何约束其标准类型指定链接格式的数据元素的交互排列。

【讨论】:

  • 谢谢。尽管您或多或少地回答了“REST 规范”的问题。包括链接格式”而不是“为什么不使用 REST 规范。包括链接格式?',这让我了解了 REST 的范围和全局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多