【问题标题】: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 项的选择是什么?谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢。我们将查看来自 OData + Web API 的错误。关于性能,我想我们会尝试一些基于纯 Linq SP 的自定义 SP 并将其放在 EntitySetController/Get 端点中。顺便说一句,我们确实成功实现了WebAPI-supported OData batch,它可以很好地处理很长的查询。
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2015-03-06
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多