【问题标题】:What is the advantage of using OData with Web API?将 OData 与 Web API 结合使用有什么优势?
【发布时间】:2014-04-03 15:15:59
【问题描述】:

我已经在使用标准的 WebAPI 并将 JSON 对象返回给我的客户端。现在我看到了一个返回 OData 的应用程序。

如果我不想从浏览器中运行的我自己的客户端以外的任何东西查询我的数据,是否有任何理由让我使用 OData。使用 OData 可以获得哪些优势?

【问题讨论】:

    标签: asp.net asp.net-web-api


    【解决方案1】:

    如果您只在自己的浏览器应用程序中使用您的数据,那么在您的情况下使用 OData 的优势很少:

    1. OData 能够提供有关服务接口的元数据,可用于生成客户端代码以访问服务。因此,如果您需要创建大量客户端类,这可以加快您的流程。另一方面,如果您可以在服务器和基于 ASP.NET 的客户端之间共享您的类,或者如果您只有几个类,那么这可能与您的情况无关。
    2. 在您的情况下,另一个更大的优势是支持针对服务数据的通用查询。 OData 支持IQueryable,因此您可以在客户端决定如何过滤服务提供的数据。因此,您不必实施各种操作或使用查询参数来提供过滤数据。这也意味着,如果您的客户端需要一个新的过滤器,您很可能不必更改服务器,只需在客户端提出查询即可。可能的过滤器包括用于过滤数据的 $filter 表达式,以及在分页数据时有用的操作,如 $skip 和 $top。有关 OData 和查询的详细信息,请参阅link

    有关 OData 和 Web API 的完整概述,请参阅link

    【讨论】:

    • 您能否解释一下您所说的“OData 能够提供有关您的服务接口的元数据,可用于生成客户端代码以访问该服务。”
    • @Melina:元数据描述了您的服务提供的数据结构。如果您不重用与客户端中的服务相同的类,并且不想在客户端上手动创建类,则可以使用这些元数据生成与服务类的结构相匹配的类。这大大简化了对服务的访问——尤其是对于其他开发人员。但这可能与您无关,因为您是该服务的唯一用户。
    • @Melina:如果您想查看 OData 和 Web API,我已经更新了我的答案,并提供了另一个优势和一些优秀教程的链接。
    • 非公开数据,即通过用户权限限制数据呢?似乎在使用 OData 时,服务器编码工作是相反的——一切都可以查询,我们必须努力关闭某些用户不应该能够访问/修改/删除的内容。是的?还是?
    • @mylord:从这个意义上说,OData 与标准 Web api 并没有太大区别。在标准 Web api 中,您还必须使用“授权”属性来限制对控制器或操作的访问。如果您想进行细粒度控制并按用户权限过滤数据,则无论如何都必须在控制器操作中应用此过滤器。
    【解决方案2】:

    以下是 OData 的一些优点。

    1. OData 是微软发起的一个开放协议,它基于 Rest Services,所以我们可以通过 URL 获取数据。
    2. 支持http、atom、pub等多种协议,也支持JSON格式。
    3. 无需像我们在 Web 服务中那样创建代理类。
    4. 您将能够编写自己的自定义方法。
    5. 它的重量非常轻,因此与 Web 服务和其他技术相比,客户端和服务器之间的交互会更快。
    6. 使用非常简单。

    这里有几个参考链接。

    http://sandippatilprogrammer.wordpress.com/2013/12/03/what-is-odata-advantages-and-disadvantages/

    http://geekswithblogs.net/venknar/archive/2010/07/08/introduction-odata.aspx

    http://www.zdnet.com/blog/microsoft/why-microsofts-open-data-protocol-matters/12700

    【讨论】:

    • 你能解释一下“不需要创建我们过去在 Web 服务中做的代理类”和“它的重量很轻,因此客户端和服务器之间的交互会很快”是什么意思吗?与网络服务和其他技术相比”。你是说它比我使用 ASP.Net Web API 更快吗?
    • 当您使用 wcf 服务的 Web 服务时,您需要为 Web 服务添加 Web 引用或为 WCF 服务添加服务引用。这将创建一个代理类来调用该 Web 服务。使用 odata 时,您无需从 URL 添加任何引用即可执行操作。
    【解决方案3】:

    我同意已经发布的答案,但作为补充见解......

    你提到过:

    ...如果我不想从我自己以外的任何地方查询我的数据 客户端在浏览器中运行...

    您可能不希望正常通过您自己的 cilent 之外的任何方式运行它,但使用 oData 您可以使用其他查询工具进行调试。例如,LinqPad 允许您使用 oData 端点(例如 stackoverflow 提供的端点)。

    如果您没有其他理由来实施 oData,这可能不是一个足够好的理由,但这是一个额外的好处。

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 2023-03-12
      • 1970-01-01
      • 2012-10-18
      • 2013-05-31
      • 2017-12-31
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多