我正在尝试编写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。让客户端传递这两者是不方便的,所以我上面的意图是将这项工作从客户端抽象出来。