ruby-on-rails-3 – 用于检查/取消选中喜欢/不喜欢/不喜欢资源的REST方式

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – 用于检查/取消选中喜欢/不喜欢/不喜欢资源的REST方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前我正在开发API并且在该API中我希望已登录用户能够喜欢/不喜欢或喜欢/不喜欢两个资源.

我的“Like”模型(它是Ruby on Rails 3应用程序)是多态的,属于两种不同的资源:

/api/v1/resource-a/:id/likes

/api/v1/resource-a/:resource_a_id/resource-b/:id/likes

问题是:我不知道如何选择尽可能使我的资源成为RESTful.我已经尝试了以下两种方法在我的URL中实现like / different结构:

案例A :(喜欢/不像是“资源”的成员)

PUT /api/v1/resource/:id/like maps to Api::V1::ResourceController#like
PUT /api/v1/resource/:id/unlike maps to Api::V1::ResourceController#unlike

和案例B :(“喜欢”是它自己的资源)

POST /api/v1/resource/:id/likes maps to Api::V1::LikesController#create
DELETE /api/v1/resource/:id/likes maps to Api::V1::LikesController#destroy

在这两种情况下我都有一个用户会话,所以在删除/“unliking”时我不必提及相应的“like”-record的id.

我想知道你们是如何实施这些案件的!

2011年4月15日更新:使用“会话”我的意思是与每个请求一起发送HTTP基本身份验证标头并提供加密的用户名:密码组合.

解决方法

我认为你在服务器上维护应用程序状态(包含用户id的用户会话)的事实是这里的问题之一.这使得它比它需要的更加困难,并且它打破了REST的无状态约束.

在案例A中,您已经为操作提供了URI,这也不是RESTful. URI标识资源,并且应使用所有资源共有的统一接口来执行状态转换.我认为案例B在这方面要好得多.

所以,考虑到这两件事,我建议如下:

PUT /api/v1/resource/:id/likes/:userid
DELETE /api/v1/resource/:id/likes/:userid

我们还有一个额外的好处,即用户只能注册一个’喜欢'(他们可以根据自己的喜好重复’喜欢’,并且由于PUT是幂等的,无论执行多少次都会产生相同的结果) . DELETE也是幂等的,因此如果由于某种原因多次重复“不同”操作,则系统保持一致状态.当然你可以用这种方式实现POST,但是如果我们使用PUT和DELETE,我们可以看到与这些动词相关的规则似乎非常适合我们的用例.

我还可以想象另一个有用的请求:

GET /api/v1/resource/:id/likes/:userid

这将返回“喜欢”的细节,例如它的制作日期或序数(即“这是第50个喜欢!”).

猜你在找的Ruby相关文章