【问题标题】:What web service framework to choose for .NET为 .NET 选择什么 Web 服务框架
【发布时间】:2013-03-23 02:53:01
【问题描述】:

我们有一个使用现有 WCF Ria 服务的 Silverlight 应用程序。现在我们将使用 HTML/JavaScript 编写新的前端应用程序。显然,WCF Ria Services 不是 JavaScript 客户端使用的最佳选择,这就是为什么我们需要决定选择什么。我正在查看ASP.NET Web APIODataServiceStack。就个人而言,我喜欢 ServiceStack 的透明性,但 OData 支持许多开箱即用的有用功能。我梦想的框架执行以下操作:

  • 处理不同的序列化格式。
  • 与他人相处融洽(使用非基于 ms 技术的应用程序的服务应该没有问题)。
  • 允许过滤像OData $filter 这样的数据,但不是特别使用它的语法,任何其他的都是可以接受的。
  • 允许扩展对象导航属性,例如OData $expand
  • 使用干净的 URI 和正确的 HTTP 方法映射实现 RESTful 服务。

我可以使用 ServiceStack 实现这些吗?或者这里没有提到其他一些框架?

更新

  • 对于扩展(或隐藏)导航属性,可以参考this answer
  • 查询序列化参见linq2rest项目

【问题讨论】:

    标签: web-services asp.net-web-api odata servicestack wcf-ria-services


    【解决方案1】:

    ServiceStack vehemently opposes opaque technologies like OData.

    除此之外,once you expose a query language 您已经失去了对客户绑定到的查询空间的控制,并且实际上将失去对重大更改的信心,从而冻结您的底层数据库架构。这个goes against having a well-defined service boundary in the first place

    在需要公开即席查询的情况下,我宁愿使用映射到某些反射的显式字段和可配置/可覆盖的查询构建器,以便我保留完全控制权。

    使用与 DTO 解耦的 ServiceStack 查询示例

    尽管 ServiceStack 使用了基于查询的解决方案,例如 rich Northwind data browser as an example,它附带了 detailed explanation explaining the approach。我认为这是比 OData 更好的方法,因为 LLBGen 数据模型与 ServiceStack DTO 分离且易于管理。

    【讨论】:

    • 您也可以将数据库与 OData 中的服务分离。 OData 中没有任何内容需要您直接公开表。事实上,Web API 以最小的努力支持 DTO。
    • @YoussefMoussaoui(在就存在利益冲突的领域提供建议时,请披露您是 MS 员工)。你可以用任何东西做很多事情,但你会气馁,大多数人只会公开默认的黑盒行为,并将更脆弱和摩擦阻碍的解决方案投入生产。 ServiceStack 始终鼓励最佳实践以及摩擦最小和弹性最大的路径。与之前的许多黑盒替代 fx 一样,OData 提倡远程服务反模式,这可能是未来系统重写的原因。
    • @mythz 是的,在我的情况下,公开临时数据过滤几乎是不可能的——域模型不是静态的(有可能创建新的数据库表并将它们映射到动态生成的类型;然后应该可以从一些用户条件过滤的服务中请求数据,分页等)。 LLBGen 的问题是我们已经有一个 ORM 并且不太可能更改它。那么是否可以通过 SS 插件实现查询/扩展功能?或者除了 LLBGen 之外还有其他的实现吗?
    • 这里有对立的力量在起作用,如果你试图让一些东西如此抽象以至于它可以与所有 ORM 一起工作,它就会变得过于复杂,并且只能支持所有 ORM 的最小功能集。最简单的解决方案是创建一个定制的通用解决方案,将 DTO 属性映射到 ORM 的查询语言。就个人而言,我不喜欢公开“查询语言本身”(出于上述原因),我个人更喜欢使用显式属性,例如:LastModifiedBeforeAgeGreaterThan,它将常见查询压缩在一个易于实现的属性中/替换。
    • @mythz 好的,那么我需要进一步调查查询。顺便说一句,我可以使用动态 DTO(如上述示例)在 SS 之上构建服务(我知道这意味着没有类型化的客户端)?您建议在哪里查看“扩展”实现:1)返回正确的对象图是否应该是 ORM 关注的问题,或者 2)有可能以某种方式挂钩 SS 序列化以仅返回必要的数据?
    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多