为现有的基于MVC的网站创建REST API

时间:2011-09-28 13:28:04

标签: asp.net-mvc asp.net-mvc-3 rest asp.net-web-api

我有一个使用ASP.NET MVC3开发的网站 我现在想要公开一个REST API供其他人使用,它将公开与网站相同的功能。

在网站中,一旦用户登录并根据数据库验证了凭据,该会话将管理用户的登录状态。
我如何使用REST API执行等效操作,其中暴露的许多方法要求用户登录(或至少具有有效的用户名和密码)?

除此之外,网站的最佳方法是使用REST API(假设API涵盖了网站所需的所有功能)吗?

ASP.NET MVC3的适用性如何 - 当然考虑到该网站已经存在使用此框架?

5 个答案:

答案 0 :(得分:9)

我在几年前写了一篇关于如何[在ASP.NET MVC 3应用程序中构建RESTful API架构] 的博客文章,最终不得不放弃该网站。 :( 如果你想在你的MVC应用程序中构建REST API,这可能是一个好的开始。

@tugberk使用WebAPI查看answer以获得一个好的解决方案。

答案 1 :(得分:6)

ASP.NET MVC非常适合这种情况。虽然您可以使用其他方法(如WCF),但我会坚持使用MVC,因为您已经有一个需要为其他消费者公开的工作站点。

另见我的另一个答案:

Which is better for building an API for my website: MVC or Ado.net data services?

答案 2 :(得分:4)

  

注意:

     

WCF Web API现在是ASP.NET Web API,并且已经发生了很大变化。测试版   版本现已推出。有关详细信息:Getting Started With ASP.NET Web API - Tutorials, Videos, Samples

我会选择WCF Web Api来做到这一点。 ASP.NET MVC也很好,能够公开您的数据,但如果您考虑向用户公开数据,WCF Web Api更有能力。它易于使用并将REST Web API集成到您的系统中。

对于身份验证,API Key始终是此类方案的最佳方式。以下是如何使用WCF Web API实现API Auth的一个很好的示例:

http://weblogs.asp.net/cibrax/archive/2011/04/15/http-message-channels-in-wcf-web-apis-preview-4.aspx

  

注意:

     

他们刚刚发布了几周前的预览版本   消息通道已更改为消息处理程序,直到我   知道。但上面的文章应该给你一个想法。

对于安全性实现,以下内容也可能有所帮助:

wcf Authentication Token Implementation - How to do

答案 3 :(得分:1)

ASP .NET MVC是一个很好的选择。我创建了几个ASP MVC,它们充当RESTful服务以及网站。

总结我使用的设计范例,每个控制器都有一个动作,它发出所请求数据的JSON表示。所述数据被加载到服务器上的视图模型中,并且内置的JSON序列化器负责服务器端,而jQuery视图很好地加载数据以供我的实际网页使用。

站点本身在每个控制器上都有索引操作,这些操作会发出必要的标记,但不会释放数据。页面上的jQuery document.ready方法从基本上我的rest api加载数据,但是直接构建到站点中。

结帐书呆子晚餐,获取精彩示例代码。 http://nerddinner.com/

关于安全问题,我认为我的经历会与您的不同。如果您的用户都在同一个域中并具有AD凭据,则ASP MVC可以非常好地与活动目录集成。这是我使用的唯一方法,轻松,成功和满意。

我让同事与其他API交互,这些API在调用授权方法时分发令牌。收到的令牌将是客户负责存储和交回每个请求的责任,但我无法通过实施细节与您交谈,因为我没有相关人员的经验。

答案 4 :(得分:1)

我将使用基于WCF Web服务的实现,如下所示。

  • 将您的所有业务逻辑包装到一个名为yourproject.businessservices的单独dll项目中,例如
  • 创建一个身份验证Web服务,该服务将为每个用户登录生成一个不可重复的令牌
  • 此登录将用户的基本详细信息与令牌一起存储在缓存中,如MemCache,应该有一个滑动到期
  • 如果用户没有访问缓存让我们说一个小时,则缓存过期并且用户已注销
  • 如果用户正在使用它,则缓存会不断扩展。

    在wcf服务方面,

  • 创建API以在身份验证上返回令牌

  • 所有wcf方法都有此会话ID,需要进行验证

    优点是wcf方法可以暴露为返回xml或json格式,也可以用作普通的Web服务。

    [WebInvoke(Method =“GET”,ResponseFormat = WebMessageFormat.Xml,BodyStyle = WebMessageBodyStyle.Bare,UriTemplate =“/ MyModule / XML / GetData / {customerSessionId}”)]      [WebInvoke(Method =“GET”,ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Wrapped,UriTemplate =“/ MyModule / JSON / GetData / {customerSessionId}”)]