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

rai*_*isr 22 c# asp.net rest service web-services

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

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

myt*_*thz 22

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

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

ServiceStack拥有强大的对焦性能,因为我们认为它提供了最佳的最终用户UX这就是为什么它有内置了强大的集缓存供应商,包括最快的JSON序列的.NET - 3-4倍倍的速度比附带的串行使用.NET和MVC(其默认的JavaScriptSerializer是.NET中最慢的).为了获得最佳性能,不使用运行时反射或正则表达式.它采用智能非线性路由匹配,建议您使用速度更快的内置缓存提供程序来解决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 };
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

var client = new JsonServiceClient("http://localhost/Service");
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Run Code Online (Sandbox Code Playgroud)

使用jQuery的JavaScript示例:

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

发展友好

因为在迭代开发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应用程序中.

  • @mythz这是你在2014年的另类选择?ServiceStack还是其他框架? (4认同)

ken*_*nny 22

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

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

  • Manos Web 应用程序框架不再处于积极开发阶段。该框架的作者不鼓励在生产中使用它。 (2认同)

Dav*_*ead 7

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

好处:

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

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

  • XCopy部署到任何版本的IIS

  • 不,你没有.您只需创建一个带有操作的控制器,MVC框架就可以完成剩下的工作. (2认同)

Mar*_*rry 3

如果我今天开始这样做,我会选择第三个选项,即在 ASP.NET MVC3 中进行自定义操作或使用下面的框架之一。