Asp.net 将OData与Web API结合使用的优点是什么?

Asp.net 将OData与Web API结合使用的优点是什么?,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我已经在使用标准WebAPI并将JSON对象返回到我的客户端。现在我看到一个返回OData的应用程序 如果我不想从浏览器中运行的我自己的客户端以外的任何地方查询我的数据,有人能解释一下我是否有理由使用OData吗。使用OData有哪些优点?以下是OData的一些优点 OData是由Microsoft启动的开放协议,它基于Rest服务,因此我们可以根据URL获取数据库 它支持http、atom、pub等多种协议,还支持JSON格式 不需要创建我们在web服务中使用的代理类 您将能够编写自己的自定义

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


如果我不想从浏览器中运行的我自己的客户端以外的任何地方查询我的数据,有人能解释一下我是否有理由使用OData吗。使用OData有哪些优点?

以下是OData的一些优点

  • OData是由Microsoft启动的开放协议,它基于Rest服务,因此我们可以根据URL获取数据库
  • 它支持http、atom、pub等多种协议,还支持JSON格式
  • 不需要创建我们在web服务中使用的代理类
  • 您将能够编写自己的自定义方法
  • 它的重量非常轻,因此与web服务和其他技术相比,客户端和服务器之间的交互速度更快
  • 使用非常简单
  • 这里有一些参考链接


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

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

  • 有关OData和Web API的完整概述,请参见此。

    我同意已经发布的答案,但作为额外的见解

    你提到:

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

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


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

    您能否解释一下“oData能够提供有关您的服务接口的元数据,这些元数据可用于生成访问服务的客户端代码”是什么意思@Melina:元数据描述您的服务提供的数据结构。如果不在客户机中重用与服务相同的类,并且不想在客户机上手动创建类,则可以使用这些元数据生成与服务类结构匹配的类。这大大简化了对服务的访问,特别是对于其他开发人员。但这可能与您无关,因为您是该服务的唯一用户。@Melina:如果您想查看OData和Web API,我已经用另一个优点更新了我的答案,并提供了一些好教程的链接。那么非开放数据呢,即按用户权限限制数据?似乎在使用OData时,服务器编码工作是相反的——一切都可以查询,我们必须努力关闭某些用户不能访问/修改/删除的内容。对或者?@mylord:OData在这个意义上与标准web api没有太大区别。在标准web api中,还必须使用“Authorize”属性限制对控制器或操作的访问。如果您想拥有细粒度的控制并按用户权限过滤数据,那么无论如何都必须在控制器操作中应用此过滤器。您能解释一下“不需要创建代理类(我们过去在web服务中这样做)”以及“它重量非常轻,因此与web服务和其他技术相比,客户端和服务器之间的交互速度更快“。你是说它比我使用ASP.Net Web API快吗?当你使用wcf服务的Web服务时,你需要为Web服务添加Web引用或为wcf服务添加服务引用。这将创建一个代理类来调用该web服务。使用odata时,您不必从URL添加任何引用,就可以执行一些操作。