这是一种RESTful方式来处理资源的多个动词吗?

时间:2015-03-23 18:26:22

标签: web-services rest http-post

我正在尝试编写Restful API来控制CMS。有Objects(例如,Article的实例),每个对象都有多个Draft。为了处理对象的Draft,我构建了一个这样的URL:

/cms/objects/{objectId}/drafts/{draftId}
除非您提供draftId,否则

objectId不是唯一的。

希望我还没有弄清楚这一点。但是现在我想在每个Draft上执行多个动词。这是一个动词列表:

CLONE, UNPUBLISH, PUBLISH, UNLOCK, LOCK

我接近这个的方法是创建一个具有operation查询参数的端点。以下是您如何使用它的示例:

POST /cms/objects/3232/drafts/1?operation=CLONE
POST /cms/objects/3232/drafts/1?operation=LOCK

有更好的方法吗?我实际上正在升级已经存在的API,而你以前做这样的事情的方式是这样的:

POST cms/objects/3232/duplicate-draft?source-draft-id=1
POST cms/objects/3232/lock?draft-id=1

我更喜欢自己的方式,因为在我看来它更加一致(尽管我有偏见)。有更好的方法吗?


顺便说一句,我知道this question that is very similar。我正在创造这个新的原因是我的激光专注于“多动词”方面而他的不是。他更像是,“我怎么做多个动词,你能教我很多关于Restful API的东西吗?”

另外,我觉得这个问题的accepted answer没有充分解决这个问题(见第2点)。例如,我的Draft s,其身体中没有lock=true,因此我无法轻松映射其更改密码部分中的建议。我的Draft有两个字段来表示Draft是否被锁定:锁柜的用户名和储物柜的用户ID。让客户端传递这两者是不方便的,所以我上面的意图是将这项工作从客户端抽象出来。

0 个答案:

没有答案