2010-11-30 84 views
16

在你提到它之前,我知道这个问题以前已经问过,但是从WCF4发布以来就没有问过了!今天在.NET中实现RESTful体系结构的最佳方式是什么?

因此,经过大量的阅读后,我决定采用RESTful体系结构是开始提供数据提供API的方式。考虑到WCF 4,ASP.NET MVC 2和WCF REST入门套件的发布,现在开始实施RESTful架构的最佳方式是什么?

我: 我对ASP.NET MVC非常熟悉,所以我在那里感觉很舒服。然而,我对WCF的了解却很少。

那么WCF4还是ASP.NET MVC?(或其他类似wcf rest starter kit)?具体来说,我正在寻找:

  • 便于实施
  • 我知道ASP.NET MVC,不WCF。 WCF是否值得学习曲线?
  • 对于REST,WCF4是否过度使用,或者ASP.NET MVC在某些时候会不足?
+1

没有足够的信息来回答这个问题。看看答案已经。他们没有内容,只是“因为我有这个而使用这个”。回答这些问题的唯一方法是将功能与您的具体要求进行比较。由于您除了“低带宽”之外没有提供任何其他与底层框架无关的内容,而“许多客户端”这些是REST的定义,因此几乎不可能给您任何可靠的建议。 – jfar 2010-11-30 20:39:49

+0

@Alex:/考虑到他要求提供“最好的”并引用“WCF 4,ASP.NET MVC 2和WCF REST” – jfar 2010-11-30 20:56:48

+0

@Alex谢谢,这个问题的奇怪解释。 @jfar我试图让它对你更具体。我只是想让别人知道他们是否已经在两条路线上进行了很长时间的对抗,并发现它是完美的或有缺陷的 – BritishDeveloper 2010-11-30 20:58:00

回答

20

我实际上已经实施或正在使用所有3个发布的选项,所以我会给我的。现在你已经澄清了你寻找的一点它更容易回答。

  1. 您是在服务器和客户端:当

    的OData

    的OData是伟大的内部应用程序。

  2. 您正在使用实体框架。
  3. 您不在模型中使用继承,也不期望查询子集合。

Odata非常棒,因为您可以在客户端使用IQueryable。这虽然有一些限制。我的头顶上的两个包括你与继承模型工作是有点尴尬,你can't do nested collections

还有一个问题,不知道是什么supported LINQ capabilities are

我推荐OData你绝对需要一个服务层,并且只希望对他们做简单的CRUD操作。每个OData问题的主要问题都会导致一个难以置信的困难,有时你无法绕过。客户端消费者代码真的是最好的部分,如果你不使用C#来消费它可能不值得。

此外,如果不使用EFs自动元数据支持,您将只需编写相同数量的代码以符合消费者可能喜欢或不喜欢的模式。虽然OData有一个Rails包装器,但所有这些都是比较新的。除了真正的大型MS合作伙伴之外,我还没有看到OData在狂热。

OData身份验证和过滤也是很简单的骨干ATM。如果您需要限制数据,您将自己编写许多与权限相关的代码。如果你想让SELECT * FROM TABLE受限于权限准备写一些尴尬的代码。

MVC 2

MVC是制作一个RESTful服务还不错。你有动词支持,return JSONResult就可以。唯一的潜在缺点是你的代码很多错误处理自己,你所有的视图模型都应该从显示状态码和错误信息的基类继承。

您也可能需要调整视图引擎的一点点,这取决于您希望您的消息应答的花哨或惯例如何驱动。 MVC的巨大优势在于它的可扩展性,你几乎可以做任何你想做的事情。我很重视将表单/ ajax调用/和其他服务组合到同一个控制器动作中。实施一次,获得相同操作的三种口味。 MVC很难做到这一点,因为它可以扭曲几乎任何你需要的东西。

MVC服务的一大好处是您可以在与服务一起部署的应用程序中潜入一点管理用户界面。非常方便,不需要部署两个站点。

WCF REST

所以我只使用在非常有限的能力WCF休息,似乎...确定...我使用WCF为3年,我总是不满意它是多么令人沮丧地复杂它是扩展它。就像ODATA一样,如果你走出挨打的道路,你会遇到密封的课程和功能非常强大的洞穴。这与MVC的可扩展性形成鲜明对比。

另一个问题是您在WCF之上建设,以及随之而来的所有疯狂。我一直说它需要博士才能有效地使用WCF。里克斯特拉尔有一篇关于pain points of WCF REST的好文章。不知道事情是否改变,但值得一读。

WCF REST看起来非常有前途,现在我正在使用它,我只是不太了解它的建议。

要点

  1. 如果你不知道你的消费者,那么我认为你不知道你的API。在有用例并且可以对其进行编码之前,不要构建服务。

  2. MVC是最具可扩展性的,如果您熟悉如何在覆盖范围内工作,您可能会比实现像OData和WCF这样的难以扩展MS的东西更好。

  3. 所有像Facebook,Amazon,PayPal,Ebay等“大男孩”的API都不符合OData等任何已知模式或模式。您的REST服务实际上就是您所做的。这涉及到#1。专注于让消费者首先能够轻松地工作。

1

我已经在Visual Studio扩展管理器中使用了WCF Rest服务应用程序模板,并取得了很大的成功。如果你想快速入门,那就是我想去的地方。

1

如果您的项目建立在ORM框架之上,或者您可以将所有数据保存在内存集合中,OData就是要走的路。如果没有(即通过存储过程或类似的方式获取数据),请转到WCF HTTP服务(也称为WCF REST)。

OData非常有前景,并且在IQueryable接口上构建了很大的灵活性。其实它就像RESTful LINQ。然而,除非你有一些ORM,否则你必须自己实现IQueryable的东西,这几乎就像实现一个ORM。此时,您最好使用较低级别的WCF HTTP服务,这些服务可以提供更多的控制权限,并且可以按自己的方式调整资源。客户端库不会如此强大,但不会期望该服务实现所有查询运算符。

7

在做出任何决定之前,请注意WCF中的HTTP/REST支持正在发生显着变化。见http://wcf.codeplex.com/。将会有大量的向后兼容性,但是从HTTP和WCF的角度来看,新库是一个完整的重写。

另请注意,OData虽然对特定应用子集有用,但不是通用REST框架。

如果您现在需要某些.net,并且您确实想要正确执行REST,请查看OpenRasta。如果你只想做REST,因为它具有良好的营销嗡嗡声,那么ASP.NET MVC对你来说可能会足够好。如果你只是处于实验阶段,那么我会继续观看新的WCF库。

12

您应该检查出OpenRasta。这是一个以.NET为基础实现RESTful体系结构而明确设计的以资源为中心的框架,并且强大支持诸如HTTP内容协商和摘要式认证等。

OpenRasta的方法是,不是根据动词(动作)来实现您的API,您的API应该根据资源(通常会紧密映射到您的API实体模型)和编解码器来定义,这些编解码器提供解耦序列化/将这些资源表示为XML,JSON,HTML或您的API需要支持的任何其他内容格式。

它是开源的,完全以.NET编写的,包括内置的IoC和依赖注入的支持(这是很多它是如何连接在一起的内部),并且在MIT许可下发布。

版本2.0已经稳定了一段时间,并正在几个地方的生产中使用 - 最明显的是Huddle

在我看来,OpenRasta对资源的强烈关注意味着它比许多“多用途”web/HTTP框架(包括WCF和ASP.NET MVC)更接近Roy Fielding对RESTful架构的最初设想。

相关问题