简洁轻量的API:.NET中的REST + JSON

简介:我需要知道.NET世界中是否存在REST + JSON的轻量级实现,它不使用WCF。 如果没有,我正在寻找一些有兴趣成立开源项目合资企业的人。

我不了解你,但是当它出现时我是WCF的忠实粉丝,我赞扬它的模块化和可扩展性的设计。 然而,随着我越来越频繁地使用它,基本问题开始暴露到我现在觉得它必须被废弃和重新设计的程度。 这似乎是一个很大的声明,但我相信这些是主要问题:

  1. 首先,WCF在内部使用SOAP作为消息,这意味着如果传输消息不是SOAP,我们就会为每次调用产生转换回SOAP的成本。 这是昂贵且耗时的。
  2. 转换传出消息需要“插入”消息检查器并“窃取”消息。 顾名思义,这是一个检查员(必须用于检查和记录),所以使用它来更改消息坦白说是一个黑客。
  3. 它是根据WSDL设计的,自2001年以来世界发生了很大的变化。实现REST也需要窃取消息。 WCF是根据WSDL设计的,而不是REST。
  4. 通道堆栈不必要地很重。
  5. 主堆栈是协议不可知的。 这不是一个优势,它是一个根本性的缺陷。 如您所知,稍后添加了对大量协议级别信息的访问,因为无法实现某些重要的用户方案。 例如,TCP中的客户端IP地址无法访问并在以后添加(现在可以使用perationContext.Current.IncomingMessageProperties [RemoteEndpointMessageProperty.Name]访问)
  6. 与其他平台的互操作性可能是一个问题。

现在看来很多设计正朝着JSON和REST的简单化方向发展。 我只是喜欢他们的简约,我可以看到我的洗衣机在5到10年内消耗JSON并提供REST服务! 我相信他们在.NET中的实现是一个黑客攻击,我们非常需要一个非常轻量级和简单的框架(因为它们简单且重量轻)来在IIS内部和外部托管REST + JSON服务。 我希望这样的框架存在,但如果没有,我真的很想与一些志同道合的人一起去做些什么。

所以你怎么看? 这样的框架是否存在? 如果没有,有人有兴趣吗?

吐出JSON而不是HTML的MVC似乎是一种可能性。 您可以自由地使用JsonDataContractSerializer或JSON.Net来序列化您的数据交换。

看看OpenRasta 。 看起来它可以解决您的许多问题。

如果您确实不想使用IIS,则可以实现自己的HTTP侦听器进程。 这让你编写自己的独立应用程序来响应HTTP请求(如果你愿意,可以作为服务运行),而不需要任何IIS,WCF或任何其他容器进程框架的开销。 您的进程将存在于Windows公开的HTTP.sysfunction之上,并由.Net框架通过HttpListener类公开。

看看http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx

请注意,您需要编写自己的基础结构来匹配传入的请求并将它们分派给相应的处理程序(相当于ASP.Net MVC的UrlRoutingModule / RouteTable.Routes / MvcRouteHandler),并且您需要在任何地方流动HttpListenerContext以便检查传入的请求并完成它。 但是,这为您提供了最大的灵活性。

它肯定会执行 – 我已经在标准桌面级机器上对基本的HttpListener实现进行了基准测试,超过3000个请求服务/秒,因此框架本身不会阻止您。

MicroRest是我开创了一段时间的开源项目。 这是我写的模糊:

MicroRest是一个很小的REST框架–5个类,大约500行代码。 所有输出都是JSON。 它允许您向ASP.NET应用程序添加RESTfunction,而无需经历WCFrest的巨大丑陋(在3.5中不提供“干净”的URL)。 它还允许您在REST方法中使用POCO(以及某些情况下的复杂对象),其中WCF限制您使用整数和字符串

贡献是非常受欢迎的 – 它现在依赖于System.Web.Routing,所以需要Cassini / IISExpress作为嵌入式Web服务器。 我正在寻找编写自定义路由解析器,以便它可以移动到Kayak作为某些点。