ASP.NET Web API已支持OData v4.0,WCF不会
ASP.NET Web API 2.2 for OData v4.0 每日构建版现已发布。团队还在 nuget 上发布了 OData 核心库 6.1 版,其中包含数项 Bug 修复和新功能,尤其是增加了对 OData v4 规范的支持。不过,微软的团队表示,WCF 将不会获得 OData v4 的特有功能。
最近,OData v4.0 和 OData JSON Format v4.0被采纳为一项 OASIS 标准。读者可以查看OData v4.0 有哪些新功能。
以下是 ASP.NET Web API 2.2 和 OData 核心库的改进:
* 协议和格式从 V3 变到 V4
* OData 属性路由
* 支持在 OData 模型中定义函数并绑定到控制器动作
* 模型别名——允许 OData 模型和 CLR Types 的类型或属性有不同的名称
* 可以定义模型的哪些属性能够过滤、排序、扩展或导航
* 支持 ETags
* 支持枚举
* 支持$format 查询字符串选项,因此客户端可以指定格式
* 支持单例
* 支持包含
已知的局限性:
还有许多 OData v4 功能不支持——此次发布的重点是与早期版本同等的功能以及少数几项新功能
OData 核心库能够序列化 OData v4 Atom 格式,但由于 Atom 规范还没有进入 CS2 阶段,所以这不是官方支持。
在客户端方面,有一个新程序包,但只支持 OData v4.0——如果客户端需要使用 V1-3 以及 V4 的服务,那么开发人员不得不在应用程序中同时使用新旧程序包。
一个有些争议的决定是,在使 WCF 成为一个构建 OData 服务的技术栈方面减少投资。OData Services 团队是这样说的“……对于作为创建 OData 服务技术栈的 WCF Data Services,我们确实计划减少对它的投资。为了减轻由此造成的不便,我们正努力清理代码,以便使它与 OData v4 兼容,而之后,我们会将该技术栈开源。我们不计划在将 V4 的特有功能添加到 WCF DS 技术栈方面进行任何重大的投资。”
不过,社区仍然希望 WCF 能支持 OData 4.0。Adam 说:“由于我们的业务层是用 WCF DS 编写的,所以对于这个决定,我觉得我们被扔在了车轮下。我们已经花费了这么多精力来克服 WCF DS 的弱点(变更跟踪支持、性能、包含、客户端代理的可怜的 T4 支持、糟糕的 EF6 alpha 质量提供程序等),愉快地等待新的 v4 版本的发布,想不到事到如今你们竟然放弃了它。这时候切换到 Web API,看来是我们为你们的每个决定买单。我们可是微软的黄金合作伙伴。”
还有其他人要求在 WCF 中支持 OData v4.0。我们只能等等看,微软是否会改变这项决定。
读者可以从编写一个 OData v4.0 服务入手,并使用 OData 客户端代码生成器来生成客户端代理类。