设计API并寻找一些建议。REST风格的设计:区分取消发布和删除
这里的行动:
publish
:发布文档(POST)update
:更新文档(PUT或PATCH)unpublish
:有把它的意图采取把文件(?)delete
:完全删除文档(DELETE)
有什么想法?
谢谢! 马特
设计API并寻找一些建议。REST风格的设计:区分取消发布和删除
这里的行动:
publish
:发布文档(POST)update
:更新文档(PUT或PATCH)unpublish
:有把它的意图采取把文件(?)delete
:完全删除文档(DELETE)有什么想法?
谢谢! 马特
更新和删除是非常明显的,因为你有他们。
您认为“发布”与“创建”相同吗? “发布”可能意味着将您创建的文档公开并可见。一种想法是,你只能创建一次文档,但是你可以多次发布和取消发布。
您可能会考虑文档的生命周期以及在“取消发布”后可以使用它做什么。它的类型取决于你想要的序列:“创建(发布?)...取消发布...发布...取消发布...删除”来做。如果发布/取消发布不做任何与创建/删除不同的内容,那么您可以放弃它们并避免复杂性。
的纯粹的REST的答案是提供在表示一个属性:{...“发表”:真...},让客户端PUT的更新改变这种状态。如果该状态发生变化,则会触发发布或取消发布文档所需的任何处理。
但是,我在一个团队中感到不舒服,因为在公开和技术上可能对发布文档有很大的影响。因此,他们选择将操作视为POST“数据处理”请求(如HTTP规范所提供的)并提供POST URL以“发布”和“取消发布”文档。
还有其他一些选择。就像使用POST作为附加动词一样,并提供一个“发布列表”URI,允许您将文档添加到发布列表中,执行任何所需的处理:
POST ht_p://.../documents {文档}
POST ht_p://.../published-documents {ID =}
DELETE ht_p://.../published-documents/ {ID}
DELETE ht_p ://.../documents/ {id}
编辑:打破了prentend URIs,因为stackoverflow抱怨。;)
谢谢你的想法!我想避免区分已发布和未发布的文档。你有什么想法使用查询字符串来区分?像'DELETE /?action = unpublish'。取消发布可能不是一种常见模式。 – Matt
哦,'create = publish'在这种情况下。 – Matt
我可能不会称之为“动作”,只是因为你不应该在REST中这样做(HTTP动词应该表示你的动作)。但是您可以将它视为请求的修饰符,并将其称为“unpublish_only = true”或“permanent = false”或“erase = true”或其他。雅我知道那种听起来像是文字游戏......但是...... – Rob