我很困惑。我了解这两者之间的实际区别,但我在这里看不到实际实现的任何区别。
这是文档的摘录
基本更新
更新操作使用 HTTP
PATCH
动词。将包含要更新的属性的 JSON 对象传递给表示实体的 URI。如果更新成功,将返回状态为 204 的响应。此示例使用 accountid 值 00000000-0000-0000-0000-000000000001 更新现有帐户记录。
PATCH [Organization URI]/api/data/v9.0/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1 Content-Type: application/json OData-MaxVersion: 4.0 OData-Version: 4.0 { "name": "Updated Sample Account ", "creditonhold": true, "address1_latitude": 47.639583, "description": "This is the updated description of the sample account", "revenue": 6000000, "accountcategorycode": 2 }
上插
upsert 操作与更新完全一样。它使用
PATCH
请求并使用 URI 来引用特定实体。不同之处在于,如果实体不存在,它将被创建。如果它已经存在,它将被更新。通常在创建新实体时,您会让系统分配一个唯一标识符。这是一个最佳实践。但是,如果您需要创建具有特定 id 值的记录,则 upsert 操作提供了一种方法来执行此操作。这在您在不同系统中同步数据的情况下可能很有价值。有时在某些情况下您想要执行 upsert,但您想要阻止潜在的默认操作之一:创建或更新。您可以通过添加
If-Match
或If-None-Match
标题来完成此操作。有关详细信息,请参阅限制 upsert 操作。
所以实际上Basic update
如上所述upsert
,为了实现真正的基本更新(如果给定帐户存在则更新,否则为 404)我需要将If-Match: *
标头添加到PATCH
请求中。
我理解正确吗?