0

考虑以下 URI,其中服务器返回对应于第 n 个斐波那契数的表示。

GET /fib/0 ==> { value: 0, _links: { next: { href: '/fib/1' } } }
GET /fib/1 ==> { value: 1, _links: { next: { href: '/fib/2' } } }
GET /fib/2 ==> { value: 1, _links: { next: { href: '/fib/3' } } }

...

GET /fib/73 ==> { value: 806515533049393, _links: { next: { href: '/fib/74' } } }

... etc ...

给定对 REST 的严格解释的约束,服务器在收到以下请求时应该返回什么?

GET /fib 
4

3 回答 3

2

维基百科说将集合成员作为链接返回,可选地包含每个成员的详细信息。显然,在这种情况下您不能返回整个集合,因为它是无界的。我们使用大型集合构建的 RESTful API 将返回分页的集合。我不知道在您的用例中返回这是否有用,但我看到您正在使用 HAL,所以如果您要使用,链接数据可能看起来像这样:

{
   "_links": {
     "self": { "href": "/fib?page=2" },
     "next": { "href": "/fib?page=3" },
     "prev": { "href": "/fib?page=1" },
     "fibs": [ 
        {"href": "/fib/4" },
        {"href": "/fib/5" },
        {"href": "/fib/6" }
   },
}

或者这个用于嵌入式:

{
   "_links": {
     "self": { "href": "/fib?page=2" },
     "next": { "href": "/fib?page=3" },
     "prev": { "href": "/fib?page=1" },
   },
   _embedded: {
     "fibs": [
        {
          "_links": {"self": "/fib/4" },
          "value": 2 
        },
        {
          "_links": {"self": "/fib/5" },
          "value": 3 
        },
        {
          "_links": {"self": "/fib/6" },
          "value": 5 
        }
   }
}

您可以在 HAL 规范中看到与此类似的示例:https ://datatracker.ietf.org/doc/html/draft-kelly-json-hal-00#section-6

如果用户没有指定page查询字符串参数,我们返回第一页。

如果返回集合(分页或全部)没有意义,那么我建议返回 405 Method Not Allowed HTTP 响应代码。如果您也无法将项目(POST)插入到集合中,那么也可能为此返回相同的 405 响应。

于 2012-07-28T00:36:22.523 回答
0

如果没有定义/不存在此类资源,则服务器应返回由 /fib 或 404 表示的资源。资源实际上是什么取决于您的应用程序的域和要求。

于 2012-07-27T23:29:01.713 回答
0

根据 W3 的Dereferencing HTTP URIs,因为我不能返回无限序列,看起来我应该返回一个HTTP 303 - See Other重定向到另一个 URI(例如/fib/Information),其中包含有关斐波那契序列的其他相关信息,例如人类可读的描述、计算算法它或聚合的 RDF 描述。我应该支持内容协商以允许消费者选择合适的表示。

于 2012-07-28T16:20:07.407 回答