我有'键盘'以下的休息结构?对象:
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
这似乎是一个更加费力,两步的过程。第一个选项是合理的选择,还是我错过了更优雅的实现?
答案 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
标识符并没有错,只要正确定义其可缓存性,在这种情况下可能会告诉客户端根本不缓存它。