为什么宁静的设计意味着区分创建和更新?

时间:2010-01-28 23:26:57

标签: rest

我正在从MS Access到Rails应用程序执行单向数据传输应用程序。我保持Rails应用程序的安静,所以我告诉我的同事Access应用程序需要跟踪记录是否已经发送到Rails应用程序,因为Access应用程序将需要Rails应用程序中该记录的ID做“更新”。他怀疑这是必要的,因为,例如,如果Access使用Access应用程序的人员模型ID向Rails Person模型发送记录,我们称之为AID,因此如果Rails应用程序“看到”传入“:name =>” John Doe',:aid => 123“,并且找不到'AID'等于123的Person模型,然后Rails应该只创建它,当它找到'AID'等于123的Person模型时,那么更新它。

我告诉他设计很安静,保持两个不同的电话是一件“好事”(一个有帖子,另一个有电话);带有'put'的那个需要呼叫即将更新的记录的ID。

但他有一些好处,为什么我们要区分创建和更新,但不能将其合并到一种方法中,在该方法中,检查记录是否已经存在可以确定它是创建还是更新?

谢谢!

3 个答案:

答案 0 :(得分:3)

关于POST与PUT的以下链接给出了更全面的描述:

http://www.elharo.com/blog/software-development/web-development/2005/12/08/post-vs-put/

  

在SQL类比中,POST是一个自动生成的INSERT   主键,PUT是一个INSERT,用于指定主键   INSERT语句。

如果所有主键都是自动生成的,则差异可能无关紧要。对于那些希望客户端能够选择主键的人来说,区别在于,例如,如果它不是简单的整数(可能是GUID或文本标识符)。

答案 1 :(得分:2)

我同意你的同事。最终,服务应该易于使用,并为呼叫者进行艰苦的工作。强制调用者记住是否需要创建或更新是令人讨厌的。

正如我所看到的,为了让他知道是否要调用Create或Update意味着他需要

  1. 跟踪他是否打电话 已经创建(这意味着你 无法删除Rails中的记录 应用程序没有告诉他)
  2. 他需要 问Ra​​ils应用程序是否是 数据已经在系统中,并且 然后调用正确的API。
  3. 两种选择都很糟糕。

    要添加的另一件事。这并不意味着您的服务必须始终首先检查记录是否已存在。如果期望您的使用量在一次操作中严重偏差(即经常更新但插入很少),那么“假设记录存在并执行更新,如果失败则b / c记录不是在那里,然后做一个插入“。

答案 2 :(得分:0)

虽然在许多情况下您可能不需要关心差异,但创建和更新是根本不同的概念。

在很多情况下,当创建因为找到重复的ID而失败时,盲目更新(并因此覆盖)记录将是致命的。

如果您的应用不是这种情况,将来也不会发生,我会说合并创建和更新可能实际上很好 - 或者可能保留创建和更新方法但提供3. api这两者都做到了。