request - OData 请求/响应的 _metadata 节点中的属性 id 和 uri 之间的区别?
问题描述
OData 请求/响应的 _metadata 节点中的属性id和uri有什么区别?UI5 应用程序发送的所有请求/响应都包含那些每次都相等的属性。这不是不需要的冗余吗?网关服务器中是否有与这些属性相对应的配置?我希望这里只有一个包含与服务部分相关的键的属性,即SERVICE_ID/Entity_Name/keys
我目前正在使用1.71版
let oDataResponse = {
"d": {
"__metadata": {
"id": "https://domain:port/sap/opu/odata/sap/SERVICE_ID/HeaderSet('000001234567890')",
"uri": "https://domain:port/sap/opu/odata/sap/SERVICE_ID/HeaderSet('000001234567890')",
"type": "SERVICE_ID.Header"
},
"FIELD_1": "abc",
"FIELD_2": "abc",
"FIELD_N": "abc"
}
};
解决方案
ID 可以是相对 url,并且在临时请求的情况下可以为 null。此外,在其他几种情况下,它可能与 url 不同,请参阅odata 文档:
id控制信息包含entity-id,见[OData-Protocol]。按照惯例,实体 ID 与 [OData-URL] 中定义的实体的规范 URL 相同。
id 控制信息必须出现在响应中,如果 metadata=full 被请求,或者 metadata=minimal 被请求并且响应中省略了任何非瞬态实体的关键字段,或者 entity-id 与规范 URL 不同之后的实体
· [RFC3987] 中定义的 IRI 到 URI 转换,
· [RFC3986] 5.2 节中定义的相对分辨率,以及
· [RFC3986] 第 6 节中定义的百分比编码规范化。
请注意,entity-id 必须跨语言保持不变,因此如果键值与语言相关,那么如果它与本地化键值的约定不匹配,则必须包含 id。如果表示 id,它可能是一个相对 URL。
如果实体是瞬态的(即无法读取或更新),则 id 控制信息必须出现在 OData 4.0 有效负载中并具有空值。在 4.01 有效载荷中,瞬态实体不需要具有 id 控制信息,并且 4.01 客户端必须将既没有 id 控制信息也没有完整的关键属性集的实体视为瞬态实体。
id 控制信息不能出现在集合中。它在此上下文中的含义为本规范的未来版本保留。
id 等于 null 的实体不能与其他实体进行比较、重读或更新。如果指定了 metadata=minimal 并且 id 不存在于实体中,那么规范 URL 必须用作 entity-id。
推荐阅读
- c# - 实例化的预制比例在客户端上未正确显示
- linux - 如何修复它**root 没有 crontab - 使用一个空的 888 **?
- swift - Swift 在使用 firebase 时显示预期的声明错误
- javascript - 如何存储来自 localStorage 的客户端数据
- java - Spring WebFlux,单元测试 Mono 和 Flux
- sed - 用 sed 替换或追加配置文件
- sql - SQL 查询返回根据 Where 语句过滤的不需要的数据
- postgresql - 有没有一种简单的方法可以用默认值替换 null ?
- angular - 如何创建依赖于另一个服务中的 HttpService 的类的实例?
- python - 使用 openpyxl (Python) 格式化列的最快方法