开放数据协议(Open Data Protocol,简称OData)是一种描述如何创建和访问
Restful服务的
OASIS标准。该标准由
微软发起,前三个版本1.0、2.0、3.0都是微软开放标准,遵循微软开放规范承诺书(Microsoft Open Specification Promise)。第四个版本4.0于2014年3月17日在
OASIS投票通过成为开放工业标准。
发展简史
开放数据协议(Open Data Protocol,简称OData)是由
微软于2007年发起的开放协议。当时的开发代号叫“Project Astoria”。于2009年更名为Open Data Protocol。
开放数据协议在微软内部演进了三个主要的版本,分别是1.0(2007年),2.0(2009年)和3.0(2009年以后)。
2014年3月17日,开放数据协议经由
OASIS批准,正式成为开放工业标准。
协议组成
开放数据协议主要由以下几个部分组成:
核心协议主要定义了开放数据协议的核心语义和行为。它们包括:
URL规范主要定义了一系列推荐(非强制)采用的构建用于访问OData服务中的数据和模型的URL的规则。它们包括:
OData服务的数据模型是通过
EDM(实体数据模型)来定义的。通用格式定义语言(Common Schema Definition Language (CSDL))定义了OData服务的
EDM模型的一种XML格式的表现形式。它的内容包括:
ABNF定义了构建OData请求和响应URL的
巴科斯范式。它的包括对以下组成部分的描述:
协议拓展
JSON格式主要定义了OData的请求和响应的
JSON表现形式。
Atom格式主要定义了OData的请求和响应的Atom表现形式。
OData协议中的词汇表主要用来用户为OData服务添加注解 (annotations)。例如,某个属性是否可读等。
数据聚合拓展主要为OData增加了聚合的
概念。它定义了数据聚合的语义和表现形式,尤其是:
协议请求示例
1. 请求一个实体集合(an entity set)
GET ~/Customers
2. 请求一个单独的实体(a single entity)
GET ~/Customers(1)
OData采用圆括号作为表示单独实体的键值的字段(key segment)
3. 请求一个属性(a property)
GET ~/Customers(1)/Name
在OData服务的模型中,实体类型(entity type)具有属性。属性可以理解为该实体类型的数据成员。
3.1 请求一个属性的原始值(raw value of a property)
GET ~/Customers(1)/Name/
相比于#3中的请求,对于属性原始值的请求的响应将不再是一个JSON或者Atom的对象,而是该属性的原始数据。比如纯文本,或者二进制流(对于类型为Edm.Stream的属性)。
4. 查询语句
4.1 选择查询()
GET ~/Customers?=Name,Age
用于选择实体的哪些属性被包含在返回的数据中。
4.2 展开查询()
GET ~/Customers?=Orders
OData中的实体类型之间有关系(relationship)。比如顾客(Customer)类型可以有一系列的订单(Orders)。这样一来,顾客类型与订单类型相关。顾客类型上可以定义导航属性(navigation property)用于描述这种关系(如上例中Customer类型的Orders属性)。的查询帮助将实体类型的导航属性的值加入请求的返回数据中。
4.3 过滤查询()
GET ~/Customer?=Age gt 35
4.3.1 内置过滤操作符
4.3.1.1 比较操作符
4.3.1.2 逻辑操作符
4.3.1.3 算数操作符
4.3.1.4 分组操作符
4.3.2 内置查询函数
4.3.2.1 字符串函数
4.3.2.2 字符串函数
4.3.2.3 数学函数
4.3.2.4 类型函数
4.3.2.5 Geo函数(用于地理、测绘等)
待编辑