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

本文关键字:OData 构建 查询服务 是否 MVC4 Net Web API 我们 Asp | 更新日期: 2023-09-27 18:34:04

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

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

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

  • 客户端希望通过 POST 而不是 GET 传递查询,因为 (2( 的筛选器大小很大。我们看到了一些选项,因此我们考虑了 OData 的以下 2 个解决方案:($batch支持的 OData 终结点,POST OData URI 并将其手动解析为 ODataQueryOption(
  • OData 终结点查询性能存在一些问题。它是否足够好,或者我们可以只使用 POST OData URI 并使用自定义存储过程以获得最佳性能?
  • 对于 (3(,我们似乎还没有找到调用 OData 枚举点以返回正确错误代码的方法。

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

那么,您选择什么来实现上述 3 个?谢谢。

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

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

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

此处指定了错误报告。请注意,您将能够在 OData 4.0 中的同一响应中返回多个错误。有多种方法可以使用 ASP.NET Web API + OData 扩展创建此类响应。查看 ODataErrors 和 CreateODataErrorResponse。

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

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