Web服务是否应该允许用户创建和更新,或者仅保存?

时间:2010-04-15 15:59:10

标签: architecture web-services soa

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

假设我们想要一个简单的界面,并且不希望将消费者与多种方式混淆,但我们也希望确保不会出现意外结果。

我可以看到每个人的利弊,但在我偏向你的答案之前,你怎么看?

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

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

1 个答案:

答案 0 :(得分:2)

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

  1. create() - 始终创建新对象
  2. update() - 始终更新现有对象。必须存在用于匹配的ID字段。如果未找到ID,则更新失败。
  3. upsert() - 创建或更新记录。此服务调用需要与之匹配的“ExternalId”字段。例如,如果您对电子邮件等于“joe@blow.com”的“电子邮件”字段运行upsert()调用,Salesforce将尝试找到相应的记录。如果找到,它将更新记录,否则将创建新记录。
  4. 允许他们这样做的一件事是每个对象都有一个Salesforce生成的ID字段。

    如果您有兴趣,这里列出了所有核心网络服务电话:

    http://www.salesforce.com/us/developer/docs/api/index_Left.htm#StartTopic=Content/sforce_api_calls_list.htm

    没有太多,但在大多数情况下,这不仅仅是完成工作。