我正在从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。
但他有一些好处,为什么我们要区分创建和更新,但不能将其合并到一种方法中,在该方法中,检查记录是否已经存在可以确定它是创建还是更新?
谢谢!
答案 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意味着他需要
两种选择都很糟糕。
要添加的另一件事。这并不意味着您的服务必须始终首先检查记录是否已存在。如果期望您的使用量在一次操作中严重偏差(即经常更新但插入很少),那么“假设记录存在并执行更新,如果失败则b / c记录不是在那里,然后做一个插入“。
答案 2 :(得分:0)
虽然在许多情况下您可能不需要关心差异,但创建和更新是根本不同的概念。
在很多情况下,当创建因为找到重复的ID而失败时,盲目更新(并因此覆盖)记录将是致命的。
如果您的应用不是这种情况,将来也不会发生,我会说合并创建和更新可能实际上很好 - 或者可能保留创建和更新方法但提供3. api这两者都做到了。