1

我目前有一个非常标准的 REST API 服务:

show: GET /users/1
update: PUT /users/1

...以及一些遵循相同约定的 has_many 关系:

show: GET /users/1/friends/1
update: PUT /users/1/friends/1

但是,还有一个 EAV 表来处理设置(抱歉,这部分不会更改),设置为充当 has_one 关系。内部:

user.settings # returns {:sound => true, :tutorials => true}
user.update_settings # expects {:sound => false}

它在本地运行良好,但没有 ID 可以像其他路由一样工作。相反,可以像这样设置路线:

show: GET /users/1/settings
update: PUT /users/1/settings

这是处理此问题的正常方法,还是有其他一些我不知道的约定?

4

1 回答 1

1

好吧,如果您不需要 Id 来访问设置,为什么不将其视为集合的属性呢?在内部它对你来说是一样的,只是关闭/users/:id/settings端点。并GETUPDATE用户资源更改设置。用户看起来像这样:

{ "id" : 12,
 "settings": {
...
 }
}

如果您考虑设置一个属性,则 enpoint 在语法上似乎不正确。想象一下,您就用户的年龄提出了同样的问题。你会打开一个 /user/:id/age 端点吗?仅仅是设置有更多的属性吗?那么在哪里停下来呢?再次是概念问题,尤其是一致性问题。

但不要成为 RESTafarian。你的方法也不错。对我来说,更多的是一致性问题,这样您就不必为开发人员编写大量文档来解释异常。因此,请考虑最适合其余部分的选择(我会接受我的建议)。

务实!

于 2013-05-23T22:57:05.717 回答