OData

在 PDC09 期间,Microsoft WCF 数据服务团队(以前称为 ADO.NET 数据服务团队)首次推出 OData,即开放数据协议。这一消息是在会议第二天的主题演讲中宣布的,但实际上 OData 早就开始了。自从 Microsoft .NET Framework 3.5 SP1 中提供 ADO.NET 数据服务以来,熟悉 ADO.NET 数据服务的用户已经使用 OData 作为数据传输协议开发基于资源的应用程序。本文将介绍富 Internet 应用程序 (RIA) 的开发人员如何使用 OData 以及使用 OData 的优势。

开放数据协议(Open Data Protocol,简称OData),是一种描述怎么创建和访问Restful服务的oasis标准。

1、协议的组成部分?

答:① 核心协议:主要定义了开放数据协议的核心语义和行为; ② URL规范:URL规范主要定义了一系列推荐(非强制)采用的构建用于访问OData服务中的数据和模型的URL的规则; ③ 通用格式定义语言(CSDL):OData服务的数据模型是通过EDM(实体数据模型)来定义的。通用格式定义语言(Common Schema Definition Language (CSDL))定义了OData服务的EDM模型的一种XML格式的表现形式; ④ 扩展的巴科斯范式(ABNF):ABNF定义了构建OData请求和响应URL的巴科斯范式。 oData是一个协议标准,我们只需要按照这个协议或者标准生产组件,那么这个组件就可以方便的和其他组件集成协作。

2、什么是restful?

答:【restful】是一种网络应用程序的设计风格和开发方式,基于http,可以使用xml格式定义或者Json格式定义。 【restful】适用于移动互联网厂商作为业务使用接口的场景。实现第三方ott调用移动互联网资源的功能,动作类型为增删改所调用的资源。

OData 生态系统

该协议定义了可以操作的资源和方法,以及可以对这些资源执行的操作(GET、PUT、POST、MERGE 和 DELETE,分别对应着读取、创建、替换、合并和删除)。

OData 的长期目标是为每种主流技术、编程语言和平台都打造一个 OData 客户端库,以便每个客户端应用程序都可以使用丰富的 OData 源。OData 的生产者和使用者共同构成了 OData“生态系统”。

3、oData与restful是什么关系?

答:现在我们了解到了,restful是一个前端与后端交互的应用协议,而oData是restful实现的一种方式。

SharePoint 站点的服务文档

OData URI 约定

服务文档列出了服务提供的实体集。请记住,您可以使用强大的 URI 语法(是 OData 协议的可选部分)来访问此服务中的资源。让我们快速了解一下此服务的 URI 语法。若要访问每个实体集的源,您需要将实体集的名称附加到服务的基本 URI 中,例如 http://myhost/Listings.svc/Properties 将指向 Properties 实体集中的一组实体。

还可以使用单个实体的键值来指向该实体,例如 URI http://myhost/ Listings.svc/Properties(0) 将指向 ID = 0 的房产。您可以将关系名称附加到 URI 末尾,以指向此实体与其他实体或实体集的关系,因此 http://myhost/ Listings.svc/Properties(0)/Listings 将指向与 ID = 0 的房产实体相关的一组销售清单。使用此语法,可以浏览关系的很多层级。

URI 还定义了很多可以附加到 URI 的查询选项,以便在一定程度上修改基本查询,其中每个查询选项都定义为名称/值对。例如,附加查询选项 $top=10 后,就将查询限制为仅包含结果中的前 10 个实体。图 4 列出了 URI 语法中所有可用的查询选项。

$top=n 将查询限制为前 n 个实体。
$skip=n 跳过集中的前 n 个实体。
$inlinecount=allpages 在结果中包含集中所有实体的计数。
$filter=<表达式> 可以用表达式限制查询返回的结果(例如:$filter=Status eq 'Available' 将结果限制为具有 Status 属性且此属性值为 Available 的实体)。
$orderby=<表达式> 按照实体的一组属性对结果进行排序
$select=<表达式> 指定要返回的实体的属性子集。
$format 指定要返回的源的格式(ATOM 或 JSON)。此选项在 WCF 数据服务中不受支持。

从 SharePoint 提供数据

在前述部分中,我为您展示了如何提供关系数据库中存储的数据,以及房地产网站的房产和销售清单信息。让我们假设我还有负责出售房产的代理人信息,但这些数据存储在 SharePoint 站点中。Microsoft SharePoint 2010 提供了相应功能,可以将所有列表和列表中的文档作为 OData 源提供。这非常适合该房地产网站,因为这意味着该公司员工输入的代理人信息可作为 OData 源使用,可以包含在我构建的销售清单应用程序中。使用 SharePoint 接口负责输入和更新此数据的用户不必更改其工作流程来适应我的应用程序。输入到公司 SharePoint 站点的数据在即将创建的 Listings 应用程序中实时可用。

在 SharePoint 系统中安装适用于 .NET Framework 3.5 SP1 的 ADO.NET 数据服务更新后,对于每个将清单数据作为 OData 源提供的站点来说,将有一个新的 HTTP 端点可以使用。由于 OData 源要使用 HTTP 进行访问,因此使用 Internet Explorer 即可查看。图 6 显示了 SharePoint 中代理人清单的源。

https://www.odata.org/getting-started/basic-tutorial/#filter

OData常用操作:

操作 URL 说明
****$filter**** http://localhost:8090/api/Meetings?$filter=ProductName eq 'Tofu' 根据表达式的状态返回结果(返回ProductName 等于Tofu的Products)
****$orderby**** http://localhost:8090/api/Meetings?$orderby=ProductName 根据结果排序(根据ProductName列排序)
****$skip**** http://localhost:8090/api/Meetings?$skip=10 越过结果中的n条数据,常用于分页
****$top**** http://localhost:8090/api/Meetings?$top=10 返回结果中的前n条记录,常用于分页
****$select**** http://localhost:8090/api/Meetings?filter=ProductName eq 'Tofu'&select=ProductName,UnitPrice 选择需要返回的属性
****$expand**** http://localhost:8090/api/Meetings?$expand=Supplier 返回Products中包含的导航属性(关联属性)Supplier
****$inlinecount**** http://localhost:8090/api/Meetings?$inlinecount=allpages 向服务器获取符合条件的资源总数(分页的total值)

函数操作:

contains(包含)

$filter=contains(Name,'sap') Name中包含”sap”的所有信息,这样就达到了模糊查询的效果,只输入其中的几个字符便可查到所有包含这几个字符的信息;

not contains(不包含)

$filter=not contains(Name,'sap') Name中不包含”sap”的所有信息,与contains效果相反;

startswith(以xx****开头)

$filter=startswith(Name, 'sap') Name以”sap”开头的所有信息;

endswith(以xx****结尾)

$filter=endswith(Name, 'sap') Name以”sap”结尾的所有信息;

length(字符长度)

$filter=length(Name) eq 10 Name中字符长度等于10的所有信息;

indexof(字符长度等于x****索引为n开始包含xx字符)

$filter=indexof(Name, 'sap') eq 10 Name从第11个字母开始包含”sap”的所有信息;

replace(替换)

$filter=replace(Name, 'a', 'p') eq 'sap' Name等于”sap”的信息中”a”被”p”替换;

substring(从第n个字符开始)

filter=substring(Name, 1) eq 'sap' Name从第2个字符开始是”sap”的所有信息filter=substring(Name, 1, 2) eq 'sa' Name的第2个和第3个字符是”sa”的所有信息;

tolower(转换为小写)

$filter=tolower(Name) eq 'SAP' Name等于”SAP”的字符都转换为小写;

toupper(转换为大写)

$filter=toupper(Name) eq 'sap' Name等于”sap”的字符都转换为大写;

trim(去空格后)

$filter=length(trim(Name)) eq length(‘sap’) Name去掉空格后依旧等于”sap”的所有信息;

我们在学习SAPUI5的时候可以使用免费的OData:

https://services.odata.org/V2/Northwind/Northwind.svc/

https://services.odata.org/V3/OData/OData.svc/

OData 比较运算符 - eqnegtltgele

相等性运算符:

  • eq:测试某个字段是否等于某个常量值

  • ne:测试某个字段是否不等于某个常量值

范围运算符:

  • gt:测试某个字段是否大于某个常量值

  • lt:测试某个字段是否小于某个常量值

  • ge:测试某个字段是否大于或等于某个常量值

  • le:测试某个字段是否小于或等于某个常量值

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容