RESTful建议:给定资源的默认值

时间:2014-03-21 12:02:00

标签: http rest url

我有'键盘'以下的休息结构?对象:

GET /keyboards/           -> Lists user keyboards
POST /keyboards/          -> Creates new keyboard
GET /keyboards/{id}       -> Get specific keyboard by id
PUT /keyboards/{id}       -> Update specific keyboard by id
DELETE /keyboards/{id}    -> Delete specific keyboard by id

前端使用设置为用户默认键盘的任何键盘,或者,如果用户没有自定义键盘设置,则只返回通用默认值。

目前,这是通过请求其他网址来完成的:

GET /keyboards/default

然而,这似乎有点误导我,因为资源默认'可以在用户更改其默认值时更改,实际上是指向不同特定资源的指针。

我不确定更优雅的解决方案,因为前端似乎需要提出两个请求:

GET /keyboards/         -> Revealing the default
GET /keyboards/{id}     -> To get the mappings associated with the keyboard

这似乎是一个更加费力,两步的过程。第一个选项是合理的选择,还是我错过了更优雅的实现?

4 个答案:

答案 0 :(得分:3)

可以使用“默认”,“最新”等便利标识符......

GET /keyboards/default
-> {
       id: 3,

另一种选择是将默认键盘挂起包含/引用资源(如果有)。例如

GET /computer
-> {
      name: foo,
      defaultKeyboard: 3,
      ...

如果你想避免两个请求,你可以在键盘对象上使用isDefault。

GET /keyboards

[
  { id: 1, isDefault: false, ... }
  { id: 3, isDefault: true, ... }

这允许你通过querystring params进行过滤。

最后,这不一定是一个OR - 你可以拥有所有这些用于不同访问模式的方便API。

答案 1 :(得分:2)

与其他架构样式相比,必须执行更多数量的请求是RESTful API的一个众所周知的假设缺点。 由于每个资源都有唯一的URL,因此可以更轻松地缓存响应这一事实,从而抵消这种情况。

答案 2 :(得分:0)

键盘资源是否公开了“IsDefault”属性?这应该。所以:

GET /keyboards/

会返回键盘列表。您可以检查列表中的键盘资源,然后选择默认值。

你也可以通过将其作为查询参数来解决这个问题:

GET /keyboards?IsDefault=true

答案 3 :(得分:0)

拥有便捷/keyboards/default标识符并没有错,只要正确定义其可缓存性,在这种情况下可能会告诉客户端根本不缓存它。