在某些情况下,我需要通过 ID 以外的参数查找对象。什么是正确的 RESTful 方式来做到这一点?
例如,我可能想找到 User
通过 username
和 password
,所以严格的 RESTful “GET /users/1
” 不起作用。
根据the Rails docs这是获取资源所有实例的 URL 模式:“GET /users
”。我可以向其中添加参数:“GET /users?username=joe&password=topsecret
”,但这会破坏 GET 请求的官方目的。
最佳答案
“GET/users?username=joe&password=topsecret”,但这会歪曲 GET 请求的官方目的。”
不,它不会扭曲任何东西。这绝对是正确的 RESTful 方式,并且是在 http 规范中检索动态结果的推荐方式。 REST 不关心 URL 中的内容,只关心它是唯一的。该页面的 url 可以是 http://3f778a9b8a7c778696e对于所有 REST 架构的关心,只要这是到达那里的唯一途径,并且它永远不会引领其他任何地方。
http 定义了用于返回动态结果的查询字符串协议(protocol)。鉴于数据库的当前状态,您为应用程序提供的查询字符串应该始终返回相同的结果。然后它将是RESTFUL。 URL 美学与 REST 完全不同。
根据 REST 架构,GET 请求的规则是它总是返回相同的结果(或在相当长的时间内保持相同的结果,以便缓存起作用),并且 GET 没有副作用。 GET 需要是幂等的(总是返回相同的结果,不管你调用了多少次)并且不会导致系统改变状态。这就对了。
当然,您不必使用查询协议(protocol)。您可以将参数放入正斜杠、分号之间,也可以是 base64 编码的 GUID。这完全取决于你,只要它遵循这些简单的规则。
关于ruby-on-rails - 您如何通过 ID 以外的方式获取 RESTful 资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/494096/