ruby-on-rails - 您如何通过 ID 以外的方式获取 RESTful 资源?

标签 ruby-on-rails rest

在某些情况下,我需要通过 ID 以外的参数查找对象。什么是正确的 RESTful 方式来做到这一点?

例如,我可能想找到 User通过 usernamepassword ,所以严格的 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/

相关文章:

ruby-on-rails - Elasticsearch 的多方面过滤器

ruby-on-rails - 如何在 Rails 控制台中获取模型的所有记录数

mysql - Rails 与 MySQL v.4.1

java - 如何在 JAXRS 上建立父子关系

java - 在 Spring 支撑 Controller 中实例化模型

java - 微服务中的 session 替代方案

jquery - 如何使用 CoffeeScript 隐藏和显示 div - Rails 3.1

javascript - 将使用 D3js 创建的 SVG 转换为 PNG

json - Acumatica - 通过 Rest API 将必需的属性添加到新案例

rest - 如何使用 powershell 脚本使用 SNOW OAuth REST API 对用户进行身份验证?