gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:54:30 24 4
gpt4 key购买 nike

目前我正在开发一个 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 中实现类似/不同的结构:

案例 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

在这两种情况下,我已经有一个用户 session ,所以我在删除/“不喜欢”时不必提及相应“喜欢”记录的 id。

我想知道你们是如何实现这些案例的!

2011 年 4 月 15 日更新:对于“ session ”,我的意思是 HTTP 基本身份验证 header 随每个请求一起发送并提供加密的用户名:密码组合。

最佳答案

我认为您在服务器上维护应用程序状态(包含用户 ID 的用户 session )是这里的问题之一。它使这变得比它需要的要困难得多,并且它打破了 REST 的无状态约束。

案例 A ,您已经为操作提供了 URI,这又不是 RESTful。 URI 标识资源和状态转换应该使用所有资源通用的统一接口(interface)来执行。我认为 案例B 在这方面要好很多。

因此,考虑到这两件事,我会提出类似的建议:

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

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

我还可以想象另一个有用的请求:
GET /api/v1/resource/:id/likes/:userid

这将返回“赞”的详细信息,例如它的制作日期或序数(即“这是第 50 个赞!”)。

关于ruby-on-rails-3 - 检查/取消选中喜欢/不喜欢喜欢/不喜欢资源的 REST 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5665893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com