你如何通过ID以外的东西获取RESTful资源?

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

例如,我可能想要通过usernamepassword找到User ,因此严格的RESTful“ GET /users/1 ”将无效。

根据Rails文档,这是获取资源的所有实例的URL模式:“ GET /users ”。 我可以添加参数:“ GET /users?username=joe&password=topsecret ”,但这会违反GET请求的官方目的。

“GET / users?username = joe&password = topsecret”,但这会违反GET请求的官方目的。“

不,它不会变态。 这绝对是正确且RESTful的方式,并且是在http规范中检索动态结果的推荐方式。 REST不关心URL中的内容,只关注它是唯一的。 对于所有REST架构关心,该页面的URL可以是http:// 3f778a9b8a7c778696e ,只要这是实现目标的唯一方法,并且它不会在其他任何地方引领。

http定义用于返回动态结果的查询字符串协议。 给定数据库的当前状态,您为应用程序提供的查询字符串应始终返回相同的结果。 然后它将是RESTFUL。 URL美学与REST完全不同。

根据REST架构,GET请求的规则是它总是返回相同的结果(或者在相当长的时间内保持相同的结果,以便缓存起作用),并且GET没有副作用。 GET需要是​​幂等的(总是返回相同的结果,无论你调用多少次)并且不会导致系统改变状态。 就是这样

当然,您不必使用查询协议。 您可以将参数放在正斜杠中,在分号之间,或者它可以是base64编码的GUID。 这完全取决于你,只要遵循这些简单的规则。

多把钥匙不安宁,不是吗? 也许/users/[username]?password=secret 。 此外,您不希望在那里使用密码,而是使用某种API密钥,以便url如下所示:

/users/leethal?secret=da01930adfe82810092

要使用用户名而不是id,请执行以下操作:

 # controller @user = User.find_by_username!(params[:id]) # model def to_param username end