zoukankan      html  css  js  c++  java
  • 了解OData(一)

    了解OData(一)

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的。关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的框架。可以很方便地通HTTP来访问数据库,如果你是做富客户端开发的,用它绝对能大大减少你的工作量。出于对这个框架的喜爱,于是把自己的一些使用经验写下来,并且希望有更多的人能够用上。

    OData简介

    说起 WCF Data Service ,不得不说的是 OData。对于一个标准的 Web 服务,它往往会提供了一些功能,比如说:订货、退货这些,然后使用者通过HTTP协议来使用这些功能。这是面向服务的基本思想,然而面前服务有一些缺点,很多时候,没法准确预测到用户需要什么。因此总是要不断地增加新的接口,不断地修改返回的对象。

    另一种方法是所谓的资源为导向的架构(ROA),暴露Web服务的资源,并且用户能够对各种对资源进行实时的查询,具有表现数据和整合数据的能力。类似于使用 SQL 在数据库中查询数据。唯一的区别是,ROA你通过URL创建查询。

    OData是一个协议,规定公开数据的Web服务的特点。下面这段话是OData的定义

    Open Data Protocol (开放数据协议,OData)是用来查询和更新数据的一种Web协议,其提供了把存在于应用程序中的数据暴露出来的方式。OData运用且构建于很多 Web技术之上,比如HTTP、Atom Publishing Protocol(AtomPub)和JSON,提供了从各种应用程序、服务和存储库中访问信息的能力。OData被用来从各种数据源中暴露和访问信息, 这些数据源包括但不限于:关系数据库、文件系统、内容管理系统和传统Web站点。

    OData协议概述

    正如上面所提到的,OData服务通过Web服务来透露所提供的资源。然后您可以通过URL访问这些资源。 OData 协议指明了如何通过HTTP来查询数据。基本原则是,你可以输入某些带参数的 URL 来对资源进行查询。

    下面是一些你可以使用的 OData 公共服务,更多可以使用的 OData 服务,你可以通过访问 OData 的官网来获得。

    • http://services.odata.org/WebSite/OData.svc/
    • http://services.odata.org/OData/OData.svc/
    • http://services.odata.org/Northwind/Northwind.svc/

    在介绍使用 OData 协议进行查询时,将会使用这些公开的 OData 服务。下面以 http://services.odata.org/Northwind/Northwind.svc/

      为例,在浏览器中输入刚网址,你将会看到

    从上图中你可以看到该服务提供了 Products、Advertisements、Categories、Suppliers 这些资源。通过输入下面这些 URL 即可对这些资源进行访问。例如:

    • http://services.odata.org/Northwind/Northwind.svc/Products
    • http://services.odata.org/Northwind/Northwind.svc/Categories
    • http://services.odata.org/Northwind/Northwind.svc/Suppliers

    这些查询,将会返回该资源的所有基于 XML-Atom 格式的数据。例如下图是 Products 的数据。

    格式输出的数据

    默认的格式是 XML-Atom,当然,你也可以其它格式,当前还支持 JSON 格式。只要在URL上添加 $format=json 参数,即可获得 json 格式的数据。

    • http://services.odata.org/Northwind/Northwind.svc/Products?$format=json
    • http://services.odata.org/Northwind/Northwind.svc/Categories?$format=json
    • http://services.odata.org/Northwind/Northwind.svc/Suppliers?$format=json

    选取字段  

    默认情况下,是会返回所有字段的,但很多时候,你可能只是需要获取其它的某些字段。例如下面的查询中只返回 ID 和 Name 字段。

    • http://services.odata.org/Northwind/Northwind.svc/Products?$select=ProductID,ProductName&$format=json

    展开

    很多时候,我们还需要将关联的导航属性取出来。打开下面的 URL:http://services.odata.org/Northwind/Northwind.svc/$metadata

    从下面这个图可以看到,Product 还有 Category、Order_Details、Supplier 三个导航属性。

    通过 expand 参数,可以把相关的导航属性的数据一并取出。输入 http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier

    当然,你也可以一次展开多个导航属性,多个导航属性之间使用“,”分隔,例如:

    ttp://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$expand=Supplier,Category

    分页

    通过 $top 和 $skip 参数,可以进行分页显示,例如:

    http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$skip=10&$take=10

    过滤

    使用 $filter参数,可以对数据进行过滤,例如:

    http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&ProductId gt 4

    排序

    使用 $orderby 参数,可以对数据进行排序,例如:

    http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product 

    升序

    http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product asc

    降序

    http://services.odata.org/Northwind/Northwind.svc/Products?$format=json&$orderby=Product desc

    关于关键字的详细使用,可以参考 OData 官网的文档。

    http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/

  • 相关阅读:
    如何在iTerm2中配置oh my zsh?
    sublime中格式化jsx文件
    ES6 new syntax of Literal
    ES6 new syntax of Rest and Spread Operators
    How to preview html file in our browser at sublime text?
    ES6 new syntax of Default Function Parameters
    ES6 new syntax of Arrow Function
    七牛云2018春招笔试题
    Spring-使用注解开发(十二)
    Spring-声明式事物(十一)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3169771.html
Copyright © 2011-2022 走看看