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

Web services 这是一种RESTful方式来处理资源的多个动词吗?,web-services,rest,http-post,Web Services,Rest,Http Post,我正试图编写一个Restful API来控制CMS。有对象(例如,文章的一个实例),每个对象都有多个草稿。为了处理对象的草稿s,我构建了如下URL: /cms/objects/{objectId}/drafts/{draftId} draftIds不是唯一的,除非提供objectId 希望我没有把这件事搞砸。但现在我有多个动词要在每个草稿上执行。以下是动词列表: CLONE, UNPUBLISH, PUBLISH, UNLOCK, LOCK 我实现这一点的方法是创建一个端点,该端点具有操作查

我正试图编写一个Restful API来控制CMS。有
对象
(例如,
文章的一个实例
),每个对象都有多个
草稿
。为了处理对象的
草稿
s,我构建了如下URL:

/cms/objects/{objectId}/drafts/{draftId}
draftId
s不是唯一的,除非提供
objectId

希望我没有把这件事搞砸。但现在我有多个动词要在每个
草稿上执行。以下是动词列表:

CLONE, UNPUBLISH, PUBLISH, UNLOCK, LOCK
我实现这一点的方法是创建一个端点,该端点具有
操作
查询参数。下面是一个如何使用它的示例:

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
我更喜欢我的方式,因为在我看来它更一致(尽管我有偏见)。有更好的方法吗


顺便说一下,我知道。我之所以创建这个新的,是因为我的重点是“多动词”方面,而他的不是。他更像是“我如何做多动词,你能教我很多关于RESTfulAPI的其他东西吗?”


此外,我认为关于这个问题的报告没有充分解决这一问题(见他的第2点)。例如,我的
Draft
s的主体中没有
lock=true
,因此我无法轻松地从他的更改密码部分映射建议。我的
Draft
s有两个字段来表示
Draft
是否已锁定:储物柜的用户名和储物柜的用户id。让客户端同时传递这两项内容会很不方便,因此我的目的是将这些工作从客户端抽象出来。

如果是我,我会探索将锁和克隆移动到它自己的服务中。通过锁定和克隆服务,您可以将该功能与对象分离,并保持url语法更清晰。您可以发布到/clone/object\u id,或者删除/lock/object\u id。@dudeman好的,我该如何处理草稿id?你克隆/锁定了一个
草稿
,而不是一个
对象
。我想我混淆了你的比喻。在我的脑海中,我想到的是那些服务将接受为通用的论点。因此,我的语法/lock/object也可能意味着:be/lock/draft、/lock/comment、/lock/object。我不确定这是否需要向用户提供类型参数/log/object?type=draft。我不喜欢那样。但是,我想这个想法值得探索。