写点什么

OData 4.0 的新特性

  • 2013-06-04
  • 本文字数:2107 字

    阅读完需:约 7 分钟

OData 是微软支持的一种查询标准,它的第四版使用了 REST 规范,最近已经被 OASIS 委员会接受。公开审查期会截至六月二日,微软期望 OASIS 在今年晚些时候采纳该标准。

这个标准的其他赞助商包括 SAP、IBM、Progress Software、美国东北大学和 Citrix。SAP 当前提供了针对Java 的开源OData 库。对于JavaScript, JayData 提供了开源和商业支持的版本。

1) 数据模型变更 对于在 CSDL 中如何表达数据模型有一些改变,特别是:

a) 对如何表达关系做出了显著的变更和简化。关系定义现在作为导航属性(navigation property)的一部分来表达,而不是指定单独的连接和连接集。另外,这可以支持单向关系和真正的包含。

b) 顶级“已命名实体(Named Entities)”让你可以在实体容器上暴露出一个单例实体。

c) 函数(function)和动作(action)现在都定义在 schema 中(像实体和复杂类型),并且可能会从你的实体容器通过导入函数和动作来暴露。

d) 服务文档现在除了包含没有参数的函数导入之外,还可以包含顶级的“已命名实体”。

e) 我们通过实体标签(etag)向元数据增加了版本控制。

f) 我们改善了对元素的定义,从而更新了分布式数据模型,让 schema 可以引用其他 schema,并确保那个实例可以总是指回到 JSON 和 ATOM 中的元数据。

g) 我们开始定义服务如何可以把元数据暴露为服务。这是最近增加的,我们希望可以获得关于那个数据模型的反馈。

h) 我们放松了复杂类型属性上的一些约束;实体的关键属性现在可以在包含的复杂类型上,就像导航属性和引用约束一样。我们还为复杂类型定义了继承的语义。

i) 我们允许在没有键值的情况下定义抽象实体类型;如果没有指定的话,那么第一个非抽象的继承类就必须指定一个键值。

j) 我们围绕注解做出了一些修改。特别是,我们合并了 TypeAnnotations 和 ValueAnnotations,增加了默认值,并应用其上,另外还开始定义核心词汇表,以获取模型在行为上的一些方面(像针对 identity 的 server-generated 属性、计算字段等等。)

2) 数据类型变更 我们优化了一系列基本类型(特别是日期和时间的系列数据类型)。特别是:

a) 我们删除了 Edm.Float(Edm.Single 的同义词)和 Edm.DateTime(使用 Edm.DateTimeOffset),不赞成使用 Edm.Time,推荐使用 Edm.Duration 和 Edm.TimeOfDay。

b) 我们为新数据类型增加了相关的标准函数,还增加了 now()、mindatetime() 和 maxdatetime() 函数。

c) 我们为枚举定义了文字型语法以及序列化格式。

d) 我们定义了抽象的“Edm.EntityType”、“Edm.ComplexType”、“Edm.PrimitiveType”,以及每种类型的集合,这可以用于数据模型中,其中实体或复杂或基本的类型是未知的。真正的类型会在实际运行时指定。

e) 我们增加了实体引用(entity reference)的概念,那可以在很多地方替代实体来使用和返回。

f) 我们为命名基本类型和固定的系列内容增加了“TypeDefinition”的概念。

3) URL 变更

a) 我们修改了如何表达扩展(expand)的方式。$expand 现在采用了扩展选项,包括 $filter(用于过滤扩展)、$orderby 等等,还可以使用 $expand 和 $select 作为扩展选项,用于内嵌的扩展和投影,而不在顶级 $expand 和 $select 通过导航属性来表示路径。我们还为递归扩展增加了 $levels。

b) 我们为在资源上做全文搜索增加了 $search 的系统查询选项。

c) 我们用 $count 替换了 $inlinecount,它可以应用给集合或者多个导航属性,从而进行过滤,并且可以用于返回相关实体的数量,而不是实体本身的数量。

4) 语义 我们围绕如何处理请求改善了一些语义。特别是:

a) 我们增加了一致性小节来定义一致性的不同级别。这是我们期待获得反馈的另一个方面。正如你所说,说明书很庞大,我们想要确保实现人员知道,为了达到一致性,并不需要实现实体的规格说明。

b) 我们更新了 $batch 相关的很多行为,包括它如何表现为同步结果,以及对错误的继续执行还是失败的引用。

c) 我们强烈推荐使用 PATCH 而不是 PUT 来更新实体和复杂类型,并澄清了 PATCH 对复杂类型的行为(应该只更新指定的属性)。

d) 我们在最新的 IETF 草案中增加了 Prefer 头,并为客户端增加了大量引用,可以提示服务所需的行为。

e) 我们对不存在资源的 URL 做 PUT 或 PATCH,从而支持 UPSERT。

5) 新服务方面 我们增加了对服务新的(可选的)支持:

a) 异步执行通过 return-async 请求头来定义,这遵循了 IETF 中最新的想法。

b) 变更跟踪(Delta)支持现在定义为说明书的一部分,从而对之前取得的结果值返回差别。语义是围绕对相关实体的变更跟踪来定义的,并为了表现已删除的实体和增加或删除的链接来细化,并针对每种格式来记录。

6) 格式

a) 我们不推荐使用旧的“JSON Verbose”格式,而推荐使用新的、更整洁的 JSON 格式。

b) 我们不需要服务来支持 ATOM;一个服务必须实现 ATOM 或者 JSON;我们推荐 JSON,并在最高的一致性级别上需要它。

c) ATOM 现在包含了响应的元数据 URL,如果类型信息无法从响应的元数据 URL 中继承到,那么就可能会包含导航属性的元数据 URL。

2013-06-04 01:398515
用户头像

发布了 340 篇内容, 共 128.8 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

创建线程池学习笔记

风翱

线程池 10月月更

微博评论高性能高可用计算架构

毛先生

架构实战训练营模块 5 作业

Sonichen

”微博评论“的高性能高可用计算架构

Sky

「架构实战营」

看动画学算法之:平衡二叉搜索树AVL Tree

程序那些事

数据结构 算法 二叉树 程序那些事

微博评论高性能高可用架构设计

Geek_db27b5

Prometheus 基础查询(三)范围向量和 PromQL 的缺陷

耳东@Erdong

Prometheus 10月月更

为什么常用二倍图,流式布局中一倍图是否靠得住

你好bk

css3 大前端 html/css 页面布局

微博系统中的微博评论架构分析

眼镜盒子

「架构实战营」

声网教育aPaaS 产品灵动课堂:「低代码」开发,15分钟极速上线

声网

人工智能 大数据 云服务

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

看山

Java EasyExcel 10月月更

技术人在职场如何摆正心态

baiyutang

职场 10月月更

微博评论背后的高性能高可用计算架构

Nico

【Promise 源码学习】目录 - Promise 知识点梳理

Brave

源码 Promise 10月月更

【LeetCode】外观数列Java题解

Albert

算法 LeetCode 10月月更

架构设计系列五 如何设计业务高性能高可用计算架构

nydia

架构训练营 模块五

Leach Sun

架构:微内核架构(Microkernel Architecture)

程序员架构进阶

架构 微内核 插件化 10月月更

学习心得 - 架构训练营 - 第五课

Fm

作业五:微博评论高性能高可用架构设计

紫云

架构实战营

阿里开源的这个库,让 Excel 导出不再复杂(填充模板的使用指南)

看山

Java EasyExcel 10月月更

模块五-微博评论的高性能高可用计算架构

娜酱

「架构实战营」

在线EXCEL文件数据转换解析工具

入门小站

工具

这几种Java异常处理方法,你会吗?

华为云开发者联盟

Java 数组 异常 程序

构建全屏 Web 应用程序

devpoint

JavaScript html5 大前端 10月月更

架构实战营第五次作业

Geek_d18264

架构实战营

微博评论架构设计

Yina🌝很浪🌊

linux之grep使用技巧

入门小站

Linux

(model5)微博评论高性能高可用计算架构

消失的子弹

架构 微服务

模块5作业

4anonymous

架构实战营模块五作业 - 设计微博系统中”微博评论“的高性能高可用计算架构

李焕之

OData 4.0的新特性_SOA_Jonathan Allen_InfoQ精选文章