给定已知的OData端点,确定OData服务版本的最佳方法是什么?此方案中的客户端可以支持任何版本(1-4),但我需要知道如何格式化请求.
例如,OData-VersionV4服务返回"4.0",但V3服务甚至没有该标头.
此外,对于具有大量实体的服务,查询服务根URL可能非常昂贵.对于例如,没有自定义一个基本动力2016在线服务对象数据的回报2.7KB,当我真正想要的是版本头.
那么获得可靠版本号的最轻量级解决方案是什么?如果解决方案是"检查这个,或者如果丢失,那么检查"是没关系的.什么是"这个"和"那个"?
我发现了一个问题(如何从元数据中找到OData版本),这似乎让我部分地在那里,但答案中存在一些问题.
首先,它专注于查找最小/最大版本号,我真的更喜欢最大值.
其次,它需要查询元数据,但这可能是一个巨大的负载./$metadata在Dynamics CRM 2016 Online上产生3.7MB响应(在我当前的连接上下载需要30秒).我想要请求一个虚拟实体,/dummy__entity然后检查标题,但这对我来说似乎有点不对,因为它会不必要地触发服务器上的错误记录,我不确定错误响应总是可能有标题我在找.
本文档中定义的 OData 协议使用 DataServiceVersion(第 2.2.5.3 节)和 MaxDataServiceVersion(第 2.2.5.7 节)版本请求标头以及 DataServiceVersion(第 2.2.5.3 节)响应标头启用有限功能协商。
当它说“ limited ”时,它的意思是有限的:
在从服务器到客户端的响应中,指定了 DataServiceVersion(第 2.2.5.3 节)标头。该值指明服务器在请求中用于生成响应的协议版本,客户端使用该版本来确定是否可以正确解释响应(即,该值不大于 MaxDataServiceVersion 的值) (第 2.2.5.7 节)在关联请求中发送的标头)。标头的值是服务器可以用来完成请求的协议的最低版本。
因此,基本上,能够处理 OData 版本 1.0 到 3.0 的一致服务将为 OData 1.0 定义的功能返回“1.0”,为 OData 2.0 定义且 OData 1.0 中不存在的功能返回“2.0”,等等。
根据OData 版本 4.0 第 1 部分:协议,第 8.1.5 节标头 OData-Version
OData 服务必须在响应中包含 OData-Version 标头,以指定用于生成响应的协议版本。客户端必须根据协议指定版本中定义的规则解释响应。
根据OData 版本 4.0 中的新增功能,第 2.1.1 节改进:协议版本控制
服务现在以服务器支持的最高协议版本进行响应,并表明客户端可接受。
此外,“降级”到 4.0 之前的版本也不包括在内,建议服务发布者对 4.0 服务使用新的服务根 URL。
因此,对于 OData 的未来版本,从 4.0 开始,我似乎可以可靠地获得我正在寻找的最大版本。
没有明显的方法来获取 4.0 之前的服务支持的 OData 最高版本。响应DataServiceVersion标头将包含基于当前 URL 功能、服务支持的 OData 版本和客户端请求的版本的尽可能低的版本号。
但是,从 OData 4.0 开始,OData-Version响应标头将始终包含基于服务支持的内容和客户端请求的最高版本。
不幸的是,在迄今为止我尝试过的每个实例中,将“DataServiceVersion”标头传递给 OData 4.0 服务都会导致 500 内部服务器错误响应(没有OData-Version标头)。OData-Version因此,发送和标头似乎并DataServiceVersion不能保证有效。
最好的选择似乎是发送OData-Version然后寻找DataServiceVersion响应标头(即使对于支持 3.0 的服务,也可能是“1.0”)。如果响应中存在该标头,则发送标DataServiceVersion头为“3.0”的第二个请求。如果您收到 4xx 响应,请尝试“2.0”等。
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |