.net 中用于 RESTful 服务的框架

Posted

技术标签:

【中文标题】.net 中用于 RESTful 服务的框架【英文标题】:What framework to use for RESTful Services in .net 【发布时间】:2011-10-01 00:55:13 【问题描述】:

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

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

【问题讨论】:

+1 表示不喝 WCF Kool-aid!真是一团糟。 我不记得 WCF 休息有那么难,除了我不得不在太多地方手动转换字符串。我只实现了几个 rest 方法,只对 JSON 感兴趣,并将其作为一个独立的服务层来实现。 【参考方案1】:

我最初开始 ServiceStack 是因为使用替代 .NET 框架创建 Web 服务时效率低下(开发和运行时)和摩擦。

Json 序列化比 MVC 快 3-4 倍

ServiceStack 具有强大的焦点性能,因为我们相信 it provides the best end-user UX 这就是为什么它内置了 strong set of Caching providers,包括 fastest JSON Serializer for .NET - 3-4x times faster,而不是 .NET 和 MVC 附带的序列化程序(它的默认 javascriptSerializer是 .NET 中最慢的)。为了获得最佳性能,没有使用运行时反射或正则表达式。它采用智能非线性路由匹配,建议您使用更快的内置缓存提供程序来解决poor performance of ASP.NET's Session。

专注于类型化、迭代、代码优先的开发

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<HelloResponse>(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 Report 格式(也可在 http://ajaxstack.com/jsonreport/ 单独使用),它使您能够一目了然地可视化您的 Web 服务的响应。

您还可以获得automatically generated metadata page(您可以使用自己的自定义描述进行注释),这是记录您的网络服务 API 的好方法。

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

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

推广最佳实践

很少有 .NET Web 服务框架可以推广 DTO-first message-based 架构以支持 Service Interface pattern - Java 生态系统中常见的一种 Web 服务最佳实践,可以轻松开发基于 SOA 的批量全粗粒度 SOA网络服务。

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

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

ServiceStack 的整个源代码位于 http://github.com/ServiceStack 下,没有锁定,GitHub 让任何人都可以轻松地进行分叉并继续开发,就像许多人已经做过的那样。

无处不在

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

【讨论】:

我现在只有两个选择。 ServiceStack 和 WCF Web API。今天我将通过尝试解决我们公司的实际需求来测试两者。希望在那之后我有一条清晰的道路:) +1;看起来很有希望。我喜欢你展示了如何解决等式的客户端和服务端。你能说你是帖子顶部的贡献者吗?它有点被掩埋了...... ServiceStack 是否提供任何帮助解决 HATEOAS 的问题? @mjwills 虽然您可以轻松创建自己的自定义媒体类型 (servicestack.net/ServiceStack.Northwind/vcard-format.htm),但我希望它可以阻止 HATEOS 限制,请参阅:servicestack.net/mythz_blog/?p=665 @mythz 哪个是你 2014 年的选择? ServiceStack 还是其他框架?【参考方案2】:

我自己最近一直在玩Nancy,我也在考虑Manos de Mono。这是 Nancy 主页上的示例。

public class HelloModule : NancyModule

    public HelloModule()
    
        Get["/"] = parameters => "Hello World";
    

【讨论】:

我同意肯尼的观点。 Nancy 很简单,让您专注于创建服务。我实际上是用它来创建一个 RESTful ws。 从最近的经验来看,南希很棒,而且非常灵活 您可以使用 Nancy 极快地推出 REST 服务,并且它的另一个令人敬畏的好处是它具有极少的依赖关系。您只需使用核心 Nancy 依赖项即可摆脱困境,这非常适合模块化和重用。 Manos Web 应用程序框架不再处于积极开发中。该框架的作者不鼓励在生产中使用它。【参考方案3】:

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

优点:

MVC 框架为您完成繁重的工作

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

XCopy 部署到任何版本的 IIS

【讨论】:

但是在这里我必须做很多工作才能实现一个干净的真正宁静的api。 (处理各种接受头等) 不,你没有。您只需创建一个带有动作的控制器,剩下的工作由 MVC 框架完成。 XCopy 部署从什么时候开始成为一项功能?这应该是常态。 它是否支持 HTTP 流式传输?这对于大而缓慢的结果至关重要。【参考方案4】:

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

WCF Preview 4 Glenn Block 重写了它 这是一个示例 REST 项目 RestBucks OpenRasta 演示应用here

【讨论】:

刚刚深入了解了 wcf web api 的当前预览版。这似乎是一个快速入门的好选择。特别是我喜欢为各种媒体类型提供不同的格式化程序是多么容易。 是的,比 WCF REST 工具包好得多。【参考方案5】:

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

【讨论】:

我不再使用它了,因为 Web API 几乎涵盖了所有相同的功能。但是,我仍然在一些实时项目中使用它,其中一个我刚刚迁移到 VS2013 和 .Net 4.5.1 ......它都可以编译并且工作得很好。 任何具有关于 WebAPI 的完整源代码、良好模式和实践的真实应用程序?

以上是关于.net 中用于 RESTful 服务的框架的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo:RESTful服务发现

SSM框架中RESTful风格的实现

用于 RESTful API 的带有社交网络的 Python OAuth2 服务器

用于 RESTful API 的带有社交网络的 Python OAuth2 服务器

python RESTful API框架:Eve 高速入门

PhalApi开源接口框架有多好用?最全后端PHP开发攻略整理