【问题标题】:Difference between attributes id and uri within _metadata node of a OData request/response?OData 请求/响应的 _metadata 节点中的属性 id 和 uri 之间的区别?
【发布时间】:2020-01-21 08:48:09
【问题描述】:

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"
    }
};

【问题讨论】:

  • 显然在 OData V2 中,__metadata 中的 id 并不是从一开始就指定的东西,因为它仅用于根据 commit:36bf9af 进行的内部测试

标签: request odata sapui5 response


【解决方案1】:

ID 可以是相对 url,如果是临时请求,则可以为 null。此外,在其他几种情况下,它可能与 url 不同,请参阅odata documentation

id控制信息包含entity-id,见 [OData 协议]。按照惯例,entity-id 与 实体的规范 URL,在 [OData-URL] 中定义。

如果 metadata=full,id 控制信息必须出现在响应中 被请求,或者如果 metadata=minimal 被请求并且任何一个 响应中省略了非瞬态实体的关键字段或 entity-id 与之后的实体的规范 URL 不同

· [RFC3987] 中定义的 IRI 到 URI 的转换,

· [RFC3986] 5.2 节中定义的相对分辨率, 和

· 第 6 节中定义的百分比编码归一化 [RFC3986]。

请注意,entity-id 必须跨语言保持不变,因此如果 key 值取决于语言,如果包含,则必须包含 id 与本地化键值的约定不匹配。如果 id 是 表示,它可能是一个相对 URL。

如果实体是瞬态的(即无法读取或更新),则 id 控制信息必须出现在 OData 4.0 有效载荷中并具有 空值。在 4.01 有效载荷中,瞬态实体不需要有 id 控制信息,并且 4.01 客户端必须对待实体 id 控制信息也不是一整套关键属性作为瞬态 实体。

id 控制信息不得出现在集合中。它的 在此上下文中的含义保留用于此的未来版本 规范。

id 等于 null 的实体不能与其他实体进行比较, 重读或更新。如果指定了 metadata=minimal 并且没有指定 id 存在于实体中,则规范 URL 必须用作 实体 ID。

【讨论】:

  • 这是否也适用于 V2?询问,因为 SAP 产品中的 OData 服务在很大程度上仍然是 V2..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2013-09-01
  • 1970-01-01
  • 2018-04-04
  • 2015-05-19
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多