Architecture web服务应该允许用户创建和更新,还是只保存?

Architecture web服务应该允许用户创建和更新,还是只保存?,architecture,web-services,soa,Architecture,Web Services,Soa,当设计一个允许服务使用者保存和获取复杂数据类型(比如Foo)的web服务时,服务应该公开Create(Foo)和Update(Foo)服务调用,还是只公开save(Foo)服务调用?如果Save(Foo)更好,那么用户是否能够预测系统是否将创建或更新(基于Foo的内容),或者系统是否应该仅仅根据Foo是否存在来创建或更新 假设我们想要一个简单的界面,不想让消费者对多种方法感到困惑,但我们也希望确保不会出现意外的结果 我可以看到每一个的优点和缺点,但在我偏袒你的答案之前,你认为呢 最后,有关于这个

当设计一个允许服务使用者保存和获取复杂数据类型(比如Foo)的web服务时,服务应该公开Create(Foo)和Update(Foo)服务调用,还是只公开save(Foo)服务调用?如果Save(Foo)更好,那么用户是否能够预测系统是否将创建或更新(基于Foo的内容),或者系统是否应该仅仅根据Foo是否存在来创建或更新

假设我们想要一个简单的界面,不想让消费者对多种方法感到困惑,但我们也希望确保不会出现意外的结果

我可以看到每一个的优点和缺点,但在我偏袒你的答案之前,你认为呢

最后,有关于这个主题的文章吗


(搜索引擎帮助:创建vs.保存,更新vs.保存,创建/更新vs.保存)

这完全取决于您想要如何设计它。我使用过的最好/最成功的web服务API之一是Salesforce.com发布的API。他们有3个服务电话:

  • 创建()-始终创建新对象
  • 更新()-始终更新现有对象。必须存在用于匹配的ID字段。如果找不到ID,则更新失败
  • upsert()-创建或更新记录。此服务调用需要匹配的“ExternalId”字段。例如,如果对“Email”字段运行upsert()调用,且Email等于joe@blow.com“,Salesforce将尝试查找适当的记录。如果找到,它将更新记录,否则将创建新记录
  • 允许他们这样做的一件事是,每个对象都有一个Salesforce生成的ID字段

    如果您感兴趣,以下是他们所有核心web服务调用的列表:


    虽然数量不多,但在大多数情况下,它不仅仅是完成工作。

    >“这完全取决于您想要如何设计它。”我正在寻求关于如何设计它的建议。那么,您的答案是提供两种方法?我想说您需要两个不同的调用-create()和update(),其中update()需要设置一个ID字段。我之所以提出upsert(),是因为我发现它在从外部系统进行同步时很有用。但是,web服务必须支持外部id字段,这样调用才有意义。无论如何都不是必要的。