Asp.Net MVC4 Web API - 我们是否需要OData来构建快速查询服务

时间:2013-10-04 09:13:12

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api odata

我们正在为客户构建一个具有以下要求的查询服务:

  • 支持位置,开始,包含和,或者,分页,选择。 (1-主)
  • 查找/将多个值从一个值映射到另一个值。客户端将传递数百个值,它将返回相同数量的值。 (2)
  • 为无效请求返回一些明确的错误代码(缺少参数,指定未知字段,未知指定条件等)(3)

对于(1)(2),我们已经看到 OData 具有强大的语法支持它们和(OData + WebAPI)可能是一个很好/灵活的解决方案,但我们有一些顾虑:

  • 由于来自(2)的较大过滤器尺寸,客户希望通过 POST 而不是 GET 传递查询。我们看到了一些options,所以我们考虑OData的这两个解决方案:( $ batch-supported OData端点 POST OData URI 并手动将其解析为ODataQueryOption
  • OData端点查询性能存在一些顾虑。它是否足够好,或者我们只能使用 POST OData URI 并使用自定义存储过程以获得最佳性能?
  • 对于(3),似乎我们还没有找到一种方法来调用OData enpoints来返回正确的错误代码。

我们还考虑构建一个自定义JSON对象,与 ODataQueryOption 非常相似,并在每个要求中使用Web.API操作,以防OData无法完全处理具有良好性能的这些要求。但这将是我们的最后选择。

那么你选择实施上述3个是什么?感谢。

1 个答案:

答案 0 :(得分:0)

我会首先调查OData batch processing以确定它是否足够。这样你就不需要为你的第二个要求重新实现任何低级别(这将是你的第一个解决方案)。

查询性能通常与后端一样好,此时解析URI不应该是一个考虑因素。如果您正在使用实体框架,那么请查看Linq查询的外观,以及它们如何转换为真实的后端。

指定错误报告here。请注意,您将能够return multiple errors in the same response in OData 4.0。您有多种方法可以使用ASP.NET Web API + OData扩展创建此类响应。查看ODataErrorsCreateODataErrorResponse

我认为你的第一个要求是完全涵盖的。

最终,你将不得不放弃你的直觉,或者,如果你有足够的时间分配到技术评估,玩一些原型并运行一些实际的数字。