亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

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

关注

评论

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

从静态、动态到全站,看阿里云“全站加速”的技术演进

阿里云视频云

CDN 边缘计算 加速

web技术分享| 虚拟列表实现

anyRTC开发者

Vue 前端 Web 音视频 虚拟列表

开源是什么意思?开源软件优缺点有哪些?

行云管家

开源 软件 开源软件 开源协议

2022年云堡垒机采购就选行云管家五大理由

行云管家

云计算 网络安全 数据安全 云堡垒机

供应链金融能否成为汽车行业发展的驱动力?

旺链科技

区块链 产业区块链 汽车 供应链金融 企业号九月金秋榜

Kubernetes 集群中日志采集的几种玩法

观测云

MobPush iOS推送功能最佳实现推荐

MobTech袤博科技

ios 消息推送

三个Spring的问题把我问懵逼了

知识浅谈

spring 9月月更

计算机网络——数据通信基础知识

StackOverflow

编程 计算机网络 9月月更

阿里双十一是怎么做全链路压测的?

程序员小毕

数据库 程序员 架构 面试 系统设计

Flink 侧流输出源码解析

JasonLee实时计算

flink 源码

如何设计一个面向未来的云原生数据库?

Zilliz

深度学习 数据库 云原生 信息检索 向量数据库

用typescript类型来实现快排

Java-fenn

Java

FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

矜辰所致

FreeRTOS 9月月更 任务通知 事件标志组 邮箱和消息队列

两个优秀的分布式消息流平台:Kafka与Pulsar

博文视点Broadview

java基础——运算符

守夜人st

9月月更

一文了解 Java 中的构造器

华为云开发者联盟

Java 开发 企业号九月金秋榜

组装式App小程序化,加速企业效率式研发

Speedoooo

小程序 APP开发 组装式应用

Intel全新加速指令AMX技术介绍&eBPF在低版本内核如何跑起来?今天3点见 | 第45-46期

OpenAnolis小助手

芯片 ebpf intel 龙蜥大讲堂 amx

【开发者说】XstoryMaker快速书写剧本场景动画

HarmonyOS开发者

HarmonyOS

组装式应用小程序化,小程序容器技术必不可少

Speedoooo

小程序 小程序容器 组装式应用 组装式创新

敏捷发版:让灰度发布像commit一样简单

Speedoooo

小程序 灰度发布 小程序容器 A/B 测试

小程序生态能否助力国产系统

Geek_99967b

小程序 小程序容器

华为云为网站安全搭建一道智能高效屏障

科技怪咖

Java基础之Java枚举

自然

9月日更 Java core

一个不用写代码的案例,来看看Flowable到底给我们提供了哪些功能?

江南一点雨

Java springboot flowable

不是吧,还有人不知道三目运算符的BUG

自然

Java core 9月月更

给分库分表的 ShardingSphere 提了个PR,这Bug居然改了

Java全栈架构师

MySQL 数据库 程序员 面试 分布分表

TDengine 3.0 的 Update 有何区别?

TDengine

tdengine 时序数据库 企业号九月金秋榜

Java基础知识(一些需要注意的点)

自然

9月日更 Java core 9月月更

前端食堂技术周刊第 52 期:Babel 7.19.0、Fresh 1.1、React Native 0.70、新的 Web 性能指标 INP

童欧巴

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