2

以下是 RESTful API 的几个标准 URL。

第一个检索单个用户,第二个检索用户集合(比如说 20 个)。

指代这些 URL的“ REST ”术语是什么?将它们称为资源是否正确?如果第一个是资源,那么第二个应该是资源集合还是应该只是类型集合的资源?

4

1 回答 1

7

RESTful 应用程序上的每个 URI 都是一个资源,这个描述就足够了。

链接到相同类型的多个资源的资源可以称为集合,但没有正式名称。每个资源,无论是否是集合,都可以有链接。

资源之间的链接是 RESTful 系统的超媒体部分。最近,为此出现了一个新术语:HATEOAS,超媒体作为应用程序状态的引擎。

以复数形式命名集合是一种常见的良好做法,因此您的/users/示例似乎是正确的。用户 123 是users集合的子集合,因此最好也将其放在/users/123复数形式下。

一个 RESTful、HATEOAS 应用程序将响应/users/指向单个资源的链接列表。就像是:

{
    "links": [
        {
            "href" : "/users/123/"
            "title" : "Alexandre Gaigalas"
        },
        {
            "href" : "/users/125/"
            "title" : "John Doe"
        },
    ]
}

或者在 XML 中:

<link href="/users/123" title="Alexandre Gaigalas">
...

除了linksJSON 中的对象或 XML 中的标签之外,还可以提供其他信息。

这些链接稳定了资源之间的 RESTful 超媒体关系。我给出的示例大多是集合和个体之间的分层,但可以声明其他类型的链接:

<link href="/users/123/picture.jpg" title="Alexandre Gaigalas avatar" rel="picture">

集合术语主要是为抽象编程语言中的 RESTful 实现而创建的,因此开发人员可以更轻松地分组和操作类似资源的组。

当存在时,查询字符串参数也标识不同的资源,因此/users/?since=2009不同于/users/. 它们都是不同的资源,尽管非常相似。

片段标识符,即使没有发送到服务器,也被认为是不同的资源,因此/users/123#bio不同于/users/123.

如果可能,更有意义的分页会更好。页码很难以 REST 方式处理,因为它们变化很大。如果有一个经常更新的集合(例如 StackOverflow 问题的列表),则第一页经常更改,用户可能会丢失从第 1 页更改为第 2 页的项目。大多数集合可以按日期或字母顺序分页。增量页码并没有错,但有更好的机制。

于 2012-05-28T16:50:26.217 回答