如何从元数据中找到OData版本

12

我可以访问一个OData服务,现在需要找到服务的OData版本。$metadata中有版本属性,但是我不知道应该选择哪个。

我需要从<edmx:Edmx Version="1.0">DataServiceVersion还是HTTP头中取得?

例如:

  1. http://services.odata.org/v4/%28S%28cy2mvwlr34teasunjfqlhlyg%29%29/TripPinServiceRW/$metadata返回版本为4.0,但响应中不包含DataServiceVersion。但是它有OData版本的HTTP头

  2. http://services.odata.org/OData/OData.svc/$metadata返回版本为1.0,DataServiceVersion为3.0。它不包含OData版本的HTTP头。但是它有DataServiceVersion的HTTP头

  3. http://services.odata.org/V3/Northwind/Northwind.svc/$metadata返回版本为1.0,DataServiceVersion为1.0。它不包含OData版本的HTTP头。但是它有DataServiceVersion的HTTP头

请告诉我如何使用服务元数据找到OData版本?或者是否有其他方法可以找到它?

1个回答

15
根据OASIS标准,对于每个示例: 对于示例2和3,您需要阅读关于版本控制的此注释,其中说明:

为了使服务能够公开新功能和格式版本而不破坏与旧客户端的兼容性,OData协议支持一种版本控制方案。

OData请求和响应可以根据DataServiceVersion头进行版本控制。

为了指定可接受的响应DataServiceVersions范围,OData客户端应使用MinDataServiceVersion和MaxDataServiceVersion头。

服务应该用小于或等于指定的MaxDataServiceVersion的服务支持的最大版本进行响应。

您会注意到,在OData实现方面存在很多“MAY”和“SHOULD”的情况(有点像“野生西部”)。就上述示例如何符合此规范而言:
  • v2指定Version必须为1.0,但是DataServiceVersion必须是所需的OData协议版本以便使用服务,并且必须为['1.0','2.0','3.0']之一,根据规范
  • 该服务声称支持OData客户端v1-v3,因此客户端可以提交带有自己的DataServiceVersion的请求,版本可以是1.02.03.0,仍然能够接收符合给定版本标准的响应。
  • 因此,根据您连接的服务不同,您需要进行不同的检查。可能的流程如下:

    1. 检查<edmx:Edmx />版本是否为4.0(您知道这是OData v4)
    2. 否则,检查<edmx:DataServices />是否有MaxDataServiceVersion属性(现在您拥有最高可用的OData版本)
    3. 否则,检查<edmx:DataServices />是否有MinDataServiceVersion属性(现在您拥有最低支持的OData版本)
    4. 否则,检查<edmx:DataServices />是否有DataServiceVersion属性(现在您拥有最低支持的OData版本)

    很难找到那个 :( - sag

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接