写点什么

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:398898
用户头像

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

关注

评论

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

资源成本降低80%!Serverless云函数的弹性架构实践

极客天地

单刷 3 届 Hackathon,朝着理想中的数据库出发丨TiDB Hackathon 选手访谈

PingCAP

TiDB

自制操作系统系列(三):加载其他文件执行

操作系统

React组件之间的通信方式总结(下)

beifeng1996

React

数据中台选型前必读:数据中台与大数据平台有什么区别

雨果

数据中台 大数据平台

带你认识JDK8中超nice的Native Memory Tracking

华为云开发者联盟

开发 华为云

web前端开发培训学习后的就业方向

小谷哥

前端技术培训后的职业规划

小谷哥

web丨nft元宇宙链游项目系统开发模式逻辑详细(成熟源码)

I8O28578624

react高频面试题自测

beifeng1996

React

开源无国界,从openEuler Maintainer到Spark Committer的贡献开源之路

openEuler

spark 开源 openEuler

给 SAP BTP 创建的 Java 应用添加 Custom Event Handler 支持创建功能

汪子熙

spring 云原生 Cloud SAP 10月月更

阿里内部最新发布的并发图册+JDK源码速成笔记,终于解脱束缚了

Geek_0c76c3

Java 源码 程序员 JVM 开发

分享一个好问题:企业为什么要区分数据中台和数据平台?

雨果

数据中台 大数据平台

全网首发“Java面试考点大全”,25+专题梳理:JVM+多线程+Spring全家桶+MySQL+Redis等

Geek_0c76c3

Java 数据库 开源 程序员 开发

32天高效突击:狂刷《Java权威面试指南(阿里版)》,offer拿到手软

Geek_0c76c3

Java 数据库 开源 程序员 架构

React循环DOM时为什么需要添加key

beifeng1996

React

腾讯云继续加码布局云原生,将披露全新产品战略

科技热闻

【LeetCode】合并两个有序链表Java题解

Albert

算法 LeetCode 10月月更

PriorityQueue源码-成员变量解析

知识浅谈

Priority Queue 10月月更

国产分布式数据库发展趋势与难点

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库 企业号十月PK榜 企业号十月 PK 榜

java培训机构口碑排名哪家比较好?

小谷哥

量化与科技的相遇!亚马逊云科技揭开神秘的量化私募

Lily

数字化背景下,低代码发展的动力和阻力

飞算JavaAI开发助手

华为云确定性运维,为政务云平台稳定可靠运行保驾护航

华为云开发者联盟

云计算 华为云 政务云 企业号十月PK榜

SAST + SCA: 结合使用安全升级

SEAL安全

SCA 安全测试 攻击 SAST 应用安全测试

深度解析:智能合约DAPP(bsc)币安链系统项目开发解决方案

I8O28578624

流程引擎的架构设计

京东科技开发者

架构设计 报表 workflow BPM 流程引擎

聚焦六大典型应用场景,博云金融行业容器解决方案更新发布!

BoCloud博云

云计算 云原生 容器云

使用Mask R-CNN模型实现人体关键节点标注

华为云开发者联盟

人工智能 华为云 mask 企业号十月 PK 榜

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