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

Posted

技术标签:

【中文标题】Asp.Net MVC4 Web API - 我们是不是需要 OData 来构建快速查询服务【英文标题】:Asp.Net MVC4 Web API - Do we need OData for building a fast query serviceAsp.Net MVC4 Web API - 我们是否需要 OData 来构建快速查询服务 【发布时间】:2013-10-11 05:30:44 【问题描述】:

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

支持 Where、Begin、Contains、And、Or、Paging、Select。 (1-主) 从一个值查找/映射多个值到另一个值。客户端将传递数百个值,并将返回相同数量的值。 (2) 为无效请求返回一些明确的错误代码(缺少参数、指定的未知字段、指定的未知条件等)(3)

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

客户端希望通过 POST 而不是 GET 传递查询,因为来自 (2) 的过滤器大小很大。我们看到了一些options,因此我们考虑了以下两种 OData 解决方案:($batch-supported OData endpointPOST OData URI 和手动解析成ODataQueryOption) OData 端点 查询性能存在一些问题。它足够好还是我们可以只使用 POST OData URI 并使用自定义存储过程以获得最佳性能? 对于 (3),我们似乎还没有找到调用 OData 端点返回正确错误代码的方法。

我们还考虑构建一个自定义 JSON 对象,与 ODataQueryOption 几乎相同,并针对每个要求使用 Web.API 操作,以防 OData 无法以良好的性能完全处理这些要求。但这将是我们最后的选择。 那么您选择实现上述 3 项的选择是什么?谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

我认为您的第一个要求已完全满足。

最终,您将不得不凭直觉行事,或者,如果您有足够的时间进行技术评估,请尝试一些原型并运行一些实际数字。

【讨论】:

谢谢。我们将查看来自 OData + Web API 的错误。关于性能,我想我们会尝试一些基于纯 Linq SP 的自定义 SP 并将其放在 EntitySetController/Get 端点中。顺便说一句,我们确实成功实现了WebAPI-supported OData batch,它可以很好地处理很长的查询。

以上是关于Asp.Net MVC4 Web API - 我们是不是需要 OData 来构建快速查询服务的主要内容,如果未能解决你的问题,请参考以下文章

前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?

如何在 ASP.Net MVC4 Web API 项目中使用 Microsoft OCR 库 ( Microsoft.Windows.Ocr )?

ASP.NET Web API 从 MVC 4 控制器失败

ASP.Net MVC4排序检索分页的实现

无法使用 ASP.NET (MVC 4) Web API OData Prerelease 加载文件或程序集 System.Net.Http,版本 = 4.0.0.0

ASP.NET MVC4 部分视图