我实际上已经实施或正在使用所有3个发布的选项,所以我会给我的。现在你已经澄清了你寻找的一点它更容易回答。
- 您是在服务器和客户端:当
的OData
的OData是伟大的内部应用程序。
- 您正在使用实体框架。
- 您不在模型中使用继承,也不期望查询子集合。
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看起来非常有前途,现在我正在使用它,我只是不太了解它的建议。
要点
如果你不知道你的消费者,那么我认为你不知道你的API。在有用例并且可以对其进行编码之前,不要构建服务。
MVC是最具可扩展性的,如果您熟悉如何在覆盖范围内工作,您可能会比实现像OData和WCF这样的难以扩展MS的东西更好。
所有像Facebook,Amazon,PayPal,Ebay等“大男孩”的API都不符合OData等任何已知模式或模式。您的REST服务实际上就是您所做的。这涉及到#1。专注于让消费者首先能够轻松地工作。
没有足够的信息来回答这个问题。看看答案已经。他们没有内容,只是“因为我有这个而使用这个”。回答这些问题的唯一方法是将功能与您的具体要求进行比较。由于您除了“低带宽”之外没有提供任何其他与底层框架无关的内容,而“许多客户端”这些是REST的定义,因此几乎不可能给您任何可靠的建议。 – jfar 2010-11-30 20:39:49
@Alex:/考虑到他要求提供“最好的”并引用“WCF 4,ASP.NET MVC 2和WCF REST” – jfar 2010-11-30 20:56:48
@Alex谢谢,这个问题的奇怪解释。 @jfar我试图让它对你更具体。我只是想让别人知道他们是否已经在两条路线上进行了很长时间的对抗,并发现它是完美的或有缺陷的 – BritishDeveloper 2010-11-30 20:58:00