在.net中用于RESTful服务的框架

我知道有类似的问题已被提出,但大多数已经过时了。 所以我们再去:) 我需要为我们的应用程序实现一个完整的REST服务层。 我遇到的问题是哪个框架最能解决这个问题。 我只需要一个很好的框架,让我专注于问题而不是REST或任何需要的东西。 身份validation是必需的function。 以下是我的一些想法; 你怎么看?

  • WCF:在我看来,这是一个重载的框架,使事情变得复杂。
  • ServiceStack:似乎是一个不错的,轻量级的开源替代品。 但如果他们决定停止开发呢?
  • 使用像这样的 asp.net mvc自定义实现,但为什么要重新发明轮子呢?

最近我和Nancy一起玩,我也在考虑Manos de Mono 。 这是Nancy主页上的一个例子。

public class HelloModule : NancyModule { public HelloModule() { Get["/"] = parameters => "Hello World"; } } 

我最初启动ServiceStack是因为效率低下(开发和运行时)以及使用备用.NET框架创建Web服务时所施加的摩擦。

比MVC快3-4倍的Json序列化

ServiceStack具有强大的焦点性能,因为我们相信它提供了最佳的最终用户UX ,这就是为什么它内置了一系列强大的缓存提供程序,包括最快的JSON Serializer for .NET–比发布的序列化程序快3-4倍使用.NET和MVC(其默认的JavaScriptSerializer是.NET中最慢的)。 为了获得最佳性能,不使用运行时reflection或正则表达式。 它采用智能非线性路由匹配,建议您使用速度更快的内置缓存提供程序来解决ASP.NET会话的糟糕性能 。

专注于类型化,迭代式,代码优先开发

ServiceStack允许您开发强类型的Web服务,使用最少的代码自动推广开箱即用的最佳实践,并且无需任何代码生成,配置,前/后构建步骤等。

简单的Hello World服务示例:

 public class Hello { public string Name { get; set; } } public class HelloResponse { public string Result { get; set; } } public class HelloService : IService { public object Get(Hello request) { return new HelloResponse { Result = "Hello, " + request.Name }; } } 

只需这些类,您所有的Web服务都可以自动提供各种不同的格式(JSON,XML,JSV,CSV,SOAP),所有这些都是开箱即用的

使用C#的强类型客户端API示例:

 var client = new JsonServiceClient("http://localhost/Service"); var response = client.Send(new Hello { Name = "World!" }); 

使用jQuery的JavaScript示例:

 $.getJSON("http://localhost/Service/hello/World!", function(r) { console.log(r.Result); }); 

发展友好

因为在迭代开发Web服务时可视化Web服务很重要,所以在浏览器中查看Web服务时的默认Content-Type是一种人性化的JSON HTML5报告格式(也可以在http://ajaxstack.com/jsonreport/上单独使用)这使您可以一目了然地可视化Web服务的响应。

您还可以获得自动生成的元数据页面 (可以使用自己的自定义描述进行注释),这是记录Web服务API的好方法。

但如果他们决定停止发展呢?

作为ServiceStack的创建者,我认为在可预见的未来我不会放弃开发。 我每天用它构建系统只是因为我发现它是一个更清洁,更快,更高效的框架来开发。

促进最佳实践

很少有.NET Web服务框架可以促进基于DTO的基于消息的体系结构,从而实现服务接口模式 – 在Java生态系统中常见的Web服务最佳实践,可以轻松开发基于批处理的粗粒度SOA网页服务。

将有0个风险放弃以支持另一个.NET Web服务框架。 仅仅因为我们不相信任何其他.NET框架积极推动Web服务最佳实践(即DTO /远程外观和服务接口模式)以及主要关注性能。

但即便如此,作为一个拥有近20名贡献者的开源项目,这种担忧也会得到缓解。 有多少专有的封闭源框架让MS被抛弃并迫使每个人都转向继任者? 开源软件不断发展,不会被遗弃和重写。

ServiceStack的完整源代码位于http://github.com/ServiceStack下,没有锁定,GitHub使任何人都可以轻松地分叉并继续开发许多已经完成的开发。

无处不在

最后,ServiceStack可以使用Mono在Windows或Linux / OSX上的IIS 6/7中的任何ASP.NET主机上运行。 它还支持独立的HttpListener主机,允许您在没有Web服务器的情况下运行它,即嵌入在Windows服务中的任何控制台或Windows应用程序中,甚至托管在MonoTouch iPhone应用程序中 。

对我来说,最简单,最干净的解决方案是使用返回JsonResult的方法将服务实现为ASP.NET MVC3中的控制器。

好处:

  • MVC框架为您提供了繁重的工作

  • 您可以使用属性而不是代码来实现模型validation

  • XCopy部署到任何版本的IIS

如果我今天开始这个,我会从你在ASP.NET MVC3中做一些自定义选项或使用下面的一个框架中选择你的第三个选项。

  • WCF预览4
    • 它由Glenn Block重写
    • 这是REST项目RestBucks的示例
  • OpenRasta
    • 在这里演示应用程序

Thje Shoulders Of Giants解决方案现在可以通过CodePlex和NuGet …重命名为Resources Over MVC。