如果<订阅>资源上有更新请求来修改eventNotificationCriteria属性(enc(的某些条件(如createdBefore,createdAfter等(,那么事件通知条件属性的所有现有条件都被替换了,还是只是修改了请求中存在的条件?订阅>
例如
-
<订阅>资源是使用enc属性创建的,如下所示:订阅>
"enc": { "crb": "20191130T142810", "cra": "20191129T140000", "net": [ 1, 2, 3, 4, 5 ] }
-
更新<订阅>的enc属性:订阅>
"enc": { "ms": "20191129T140000", "us": "20191130T142810", "net": [ 1, 2, 3, 4, 5 ] }
对<订阅>资源中的enc更新的可能响应订阅>:
响应 1:
"enc": {
"crb": "20191130T142810",
"cra": "20191129T140000",
"ms": "20191129T140000",
"us": "20191130T142810"
"net": [
1,
2,
3,
4,
5
]
}
回应 2:
"enc": {
"ms": "20191129T140000",
"us": "20191130T142810",
"net": [
1,
2,
3,
4,
5
]
}
哪个是正确的,响应 1 还是响应 2?
TL;DR
将下面提到的规范应用于您的示例,响应 2是正确的。对<订阅>资源的eventNotificationCriteria属性的更新会将现有值替换为更新的值。订阅>
TS;WM
有时,确定更新期间会发生什么并不容易。如果没有另外说明,TS-0001 - 功能架构中指定的一般程序,第 8.1.2 节:请求适用:
更新 (U(:现有"收件人"可寻址资源的内容将替换为内容参数中的新内容。如果目标资源中不存在 Content 参数中的某些属性,则会使用分配的值创建此类属性。如果 Content 参数中的某些属性设置为 NULL,则会从寻址资源中删除此类属性。
对于操作相关的参数:
更新 (U(:内容是要在现有资源中替换的内容。对于要在资源上更新的属性,Content 将包含此类属性的名称及其新值。对于要在资源中创建的属性,Content 包括此类属性的名称及其关联值。对于要在资源中删除的属性,内容包括此类属性的名称,其值设置为 NULL。
但是,您还应该始终查看TS-0004 - 服务层核心协议。例如,在第7.4.8.2 节:<订阅>特定于资源的 CRUD 操作的非常详细的过程中订阅>,您将找到对<订阅>资源的 CRUD 操作的详细信息。订阅>
更新
我认为有必要进行一些进一步的讨论,以强调#1不正确的原因是因为enc是一个复杂的属性。 由于所有这些值都是单个属性的一部分,因此上述规则适用。 如果使用简单属性执行类似的更新操作,则属性的"合并"是正确的,类似于响应 #1。