首页 > 解决方案 > OData 请求/响应的 _metadata 节点中的属性 id 和 uri 之间的区别?

问题描述

OData 请求/响应的 _metadata 节点中的属性iduri什么区别?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"
    }
};

标签: requestodatasapui5response

解决方案


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。


推荐阅读