RESTful参考表示-语义链接与URI


9

我们正在设计一个RESTful API,以打开客户的帐户信息。我们的表示形式包含对与当前资源相关的其他资源的引用。这来自我们在公共API和已发布的资料中可以找到的许多最佳实践。表示形式可以是XML或JSON。

例如,对于帐户资源,我们将引用该帐户的地址,对于分页列表资源,我们将引用第一,下一页和上一页。

该API首先使用<link title="" rel="" href="" />O'Reilly书中所述的语义链接进行设计,并由Netflix和Google在API中使用。当我们的质量检查工程师编写自动化套件时,他们在反序列化链接时遇到了问题。现在,我们建议使用更简单的uri字符串元素,这些元素已在Facebook和Twitter中用于API。

此后,我们的质量检查工程师已经解决了其反序列化问题,但是我仍然担心当前API规范与语义链接的易用性。我们的API主要将由我们的客户和一些第三方合作伙伴使用,而我们之所以选择REST,是因为以前的XML-RPC API对我们的消费者来说太难了。

tl; dr;

题:

实施了语义链接表示的任何人都遇到过困难的消费者问题吗?


更新(6/21):我已经决定保留语义链接,并希望混淆是一个边缘案例。一旦一些消费者使用了该API,我将尽量记住用我们的经验来回答这个问题。


编辑:添加示例

语义帐户JSON:

{
    "username": "paul",
    "links": [
        {
            "title": "addresses",
            "rel": "related",
            "href": "http://example.com/account/paul/addresses"
        },
        {
            "title": "history",
            "rel": "related",
            "href": "http://example.com/account/paul/history"
        }
    ]
}

语义帐户XML:

<account>
    <username>paul</username>
    <link title="addresses" rel="related" href="http://example.com/account/paul/addresses" />
    <link title="history" rel="related" href="http://example.com/account/paul/history" />
</account>

简单帐户JSON:

{
    "username": "paul",
    "addresses": "http://example.com/account/paul/addresses"
    "history": "http://example.com/account/paul/history"
}

简单帐户XML:

<account>
    <username>paul</username>
    <addresses>http://example.com/account/paul/addresses</addresses>
    <history>http://example.com/account/paul/history</history>
</account>

您能否为我们提供原始语义链接和“简单的uri字符串元素”的具体示例?您不清楚这些术语的含义,尤其是后者。
汤姆·安德森

更新了具体示例。如果有帮助,我也可以为分页列表/集合添加示例。
保罗

Answers:


3

我宁愿拥有:

{
  "username": "paul",
  "address": {
      "rel": "related",
      "href": "http://example.com/account/paul/addresses"
  },
  "history" {
      "rel": "related",
      "href": "http://example.com/account/paul/history"
  }
}

这消除了数组,并使对象可遍历(例如,在JavaScript中获取帐户的地址,可以说account.address.href而不是遍历所有链接并查找看起来像地址的链接)。对应的XML:

<account>
    <username>paul</username>
    <addresses>
        <link rel="related" href="http://example.com/account/paul/addresses" />
    </addresses>
    <history>
        <link rel="related" href="http://example.com/account/paul/history" />
    </history>
</account>

你怎么看?


1

语义网的梦想是可以自动发现链接。由于最困难的部分是理解链接以及如何使用它们,所以我认为语义信息没有那么有用。

我稍微偏爱语义XML格式,因为“ rel”属性具有定义的以空格分隔的字段的扩展机制,而“ link”则易于理解。

作为此类API的使用者,我看不出其他任何区别。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.