我实际上已经实现或正在使用这三个发布的选项中的所有选项,所以我会给出我的看法。现在你澄清了你想要什么,回答起来就更容易了。
OData
OData非常适合内部应用程序,当:
- 你既是服务器又是客户端。
- 你正在使用Entity Framework。
- 你不使用继承在你的模型,并且不希望查询子集合。
Odata非常棒,因为你可以在客户端使用IQueryable。然而,这也有一些限制。前两个限制包括使用继承模型有些尴尬,还有你无法查询嵌套集合。
还有一个问题是不知道 支持的LINQ功能 是什么。
如果你绝对需要一个服务层,并且只希望进行简单的CRUD操作,我建议使用OData。所有OData问题的主要问题都导致了一个硬性墙壁,有时你根本无法避免。客户端消费者代码实际上是最好的部分,如果你不使用C#进行消费,可能不值得。此外,如果没有使用EF的自动元数据支持,则将编写与消费者可能或可能不喜欢针对其编写的模式相同数量的代码。虽然有一个OData的Rails包装器,但所有这些都是相对较新的。我还没有看到OData在野外出现,除了一些非常大的MS合作伙伴。
OData身份验证和过滤也非常基础。如果您需要限制数据,则需要自己编写许多权限相关的代码。如果您想要通过权限限制SELECT * FROM TABLE,请准备编写一些尴尬的代码。
MVC 2
MVC对于创建RESTful服务非常好用。它支持HTTP动词,使用return JSONResult
非常方便。唯一的潜在缺点是你需要自己编写大量的错误处理代码,并且所有的视图模型都应该继承一个基类,该基类可以显示状态码和错误信息。
如果您想要定制消息回复的外观或遵循惯例,您可能还需要微调MVC的视图引擎。 MVC的巨大优点是它非常可扩展,几乎可以做任何想做的事情。 我尤其喜欢将表单、ajax调用和rest服务组合到同一个控制器操作中。 只需实现一次,就可以得到三种相同操作的不同版本。 基本上很难使MVC无法胜任,因为它可以扭曲成几乎任何你需要的形式。
使用MVC服务的一个巨大优点是您可以在部署的应用程序中添加一个小型管理界面。 这样非常方便,就不需要再部署两个站点了。
WCF REST
我只是以非常有限的方式使用WCF rest,感觉还可以…… 我已经使用了3年WCF,总是对如何扩展它感到不满。 与ODATA一样,如果你走出通常的路线,你很快就会遇到封闭的类和不可扩展的功能空间。 这与MVC的可扩展性的数量形成了鲜明对比。
另一个问题是您正在构建基于WCF的应用程序,并且所有WCF的疯狂问题都伴随着它。 我总是说使用WCF需要一个博士学位。Rick Strahl有一篇关于WCF REST的痛点的好文章。 不确定事情是否已经改变,但值得一读。
WCF REST看起来非常有前途,我现在正在使用它,但我不了解足够多的内容来推荐。
如果你不了解你的消费者,我会认为你也不了解你的API。在有使用案例且能进行编码之前,请不要构建服务。
MVC是最具可扩展性的,如果你熟悉底层工作原理,那么你可能比实现难以扩展的MS东西(如OData和WCF)更好。
像Facebook、Amazon、PayPal、Ebay这样的“大公司”都有API,它们并不遵循任何已知的模式或架构,如OData。你的REST服务实际上取决于你自己。这涉及到第1点。首先专注于让消费者易于使用。