有条件地更新/删除后端的文档。我是否该?我是否分配了 PUT、POST 或 DELETE http 方法?

Posted

技术标签:

【中文标题】有条件地更新/删除后端的文档。我是否该?我是否分配了 PUT、POST 或 DELETE http 方法?【英文标题】:Conditionally updating / deleting a document in backend. Should I? Do I assign a PUT, POST, or DELETE http method?有条件地更新/删除后端的文档。我是不是该?我是否分配了 PUT、POST 或 DELETE http 方法? 【发布时间】:2016-11-29 05:02:10 【问题描述】:

以下函数用于“集合模型”。

在某些情况下,我想删除或更新文档。

我应该使用 PUT 还是 DELETE?

我可以将它们分开并检查客户端上的验证/条件,但这似乎不那么干燥。

我必须向客户端和服务器添加额外的代码行来实现相同的目的。

CollectionSchema.statics.kill = function(o, cb) 
      return Collection
        .findAsync(o)
        .then(function(existing) 
          if (existing.length && (existing[0].vote !== 0 || existing[0].favorite == true)) 
            return Collection
              .findByIdAndUpdate(o, 
                collected: !existing[0].collected
              , 
                new: true
              )
              .then(function(updated) 
                console.log('updated ', updated)
                return updated;
              ).catch(function(err) 
                return err;
              )
           else if (existing.length && existing[0].vote == 0 && existing[0].favorite == false) 
            return Collection
              .removeAsync(
                _id: existing[0]._id
              )
              .then(function(deleted) 
                return 
                  message: 'deleted collection'
                
              ).catch(function(err) 
                return err;
              )
          
        ).catch(function(err) 
          return err;
        )
    ;

【问题讨论】:

【参考方案1】:

我认为最好的选择是使用简单的 REST 模型(PUT 更新文档,DELETE 删除文档)。

然后,如您所说,根据您的条件,从您的客户端调用更新或删除方法。为了改进这个概念,如果无法删除文档,您可以向客户端发送关于 DELETE 事件的否定响应。

【讨论】:

可能是这样,只是看起来不太干。 在某些情况下你必须在 DRY 和 KISS 之间做出选择,我主要是更喜欢 KISS,但这是一个观点。

以上是关于有条件地更新/删除后端的文档。我是否该?我是否分配了 PUT、POST 或 DELETE http 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何验证两个检查点之间是否已释放所有内存分配?

我应该使用木偶操作作为后端的一部分吗?

获取查询后有条件地执行 graphql 突变

根据表数据有条件地执行 SQL 查询/语句

如何检查用户是否属于服务器端的某些用户标准?

MongoDB - 创建后 30 分钟更新文档