处理这些 RESTful 处理状态调用的正确方法

proper way to handle these RESTful calls for handling state

所以,我已经完成了几个项目,其中出现了切换项目状态的调用。通常就像一个项目是否被启用或喜欢或类似的东西。不过它必须是二进制元素。

我通常说正确的方法是发布/删除,但更快的方法是做类似

的事情
/api/toggle_enabled/23/item

/api/toggle_liked/28/item

并在服务器上协调状态,并在响应中 return 生成如下状态:

{
 id:23,
 is_enabled: true / false
}

{
 id:28,
 is_liked: true / false
}

当我看到这个时,通常其他开发人员会抱怨(我也是),但通过处理用户多次快速按下按钮的状态等事情,它一直运行良好并简化了客户端代码。其他开发人员如何处理这种情况,还有其他好的处理方法吗?我知道这违反了 RESTful 原则,但简单似乎是值得的。

这一切都取决于。因为 REST 是无状态的,所以出现了这样的问题,并且在 API 的世界中非常普遍。

你处理这个场景的方式很普遍,但是我个人不喜欢,我容忍它,因为它简单易行。您可以在下面找到处理此类情况的替代方案。

  1. 如果您想遵守 REST 规则,您应该每次 PUT 所有实体到 /api/item/28 并适当设置 liked。此请求应该 return 整个修改后的实体。
  2. 如果您不想每次都发送整个实体,PATCH 是可行的方法。使用 PATCH 只有修改的字段会与请求一起发送到同一端点。请注意,与 PUT 相比,PATCH 不是幂等的。此请求应 return 完整实体或无内容。
  3. 当更高级的场景发挥作用时(例如可能有多个点赞)POST 绝对应该用于例如增加点赞数或 like/dislike。请求应发送至 /api/items/28/like|dislike。为什么是POST?由于这是对资源的 操作 - 使用动词而不是名词。此类请求应 return 修改实体以跟踪状态。
  4. 这是 3 的扩展 - 您不仅可以跟踪所有点赞,还可以删除点赞、评论等。在这种情况下,您引入了一个新资源:/likesPOST 对此端点的新点赞 - 作为响应,新点赞是 returned。使用 GET/likes 集合进行简单过滤,如果需要高级过滤,则使用 POST /likes/filter