InfoQ

新闻

MindTouch Dream:一个REST SDK和轻量单机服务器

作者 Hartmut Wilms译者 朱永光 发布于 2007年10月16日 下午8时37分

社区
.NET
主题
Web服务,
REST
标签
开源项目发布

MindTouch提供了一个编程库和单机运行的服务器,用于开发和发布RESTful Web Service。Dream "Denim" 1.4.1也在上个星期已经发布。

MindTouch Dream是一个基于LGPL的开源项目。完全用C#编写,运行于Microsoft .NET 2.0以及Novell Mono 1.2.5之下。根据Steve Bjorg——MindTouch的共同创立者的说法,“描述它的最好方法是提这样一个问题:随着面向服务世界的不断增长而建立起来的以Web为中心的编程环境会是什么样子?”

Dream区别于.NET的其他框架(如Windows Communication Foundation)的几个重要特性是:
  • 它是轻量级的
  • 它是跨平台的
  • 它是遵从业界标准的
  • 它是开源的
  • 且它没有使用SOAP

Dream的核心概念是Web Serivce。一个Web Service被运行时实例化,并提供一些为名“features”的入口点。Features是藉由HTTP请求来调用,由服务名称和一个URI模式(类似GET,PUT,POST,DELETE这样的HTTP动词)扩展得到的 Dream Host 基本地址构成。一个Feature通过Dream Attribute映射到一个CLR方法上,其定义了动词和URI模式。

[DreamFeature("GET:addresses", "Get all addresses")]
public Yield GetAddresses(DreamContext context, DreamMessage request, TaskYield response) {
}

DreamFeature属性的第一个参数通过冒号分隔定义了动词和模式。Dream服务和消费端以XML或二进制数据流的格式来交换数据。通常Dream服务使用XML文档方式。这些文档被DreamMesseage实例包装着。

Dream SDK通过XDoc类(包装了.NET XML类的功能)提供了一种简易的方式来生成XML文档,这样减轻了XML文档的创建和使用程度:

XDoc是一个处理XML的所有事情的瑞士军刀。它是对XmlDocument、XmlElement、XmlText和XmlNodeList类轻量级的封装,以让它们更容易地被创建、查询和编辑XML文档。有了XDoc,你不需要知道任何.NET XML类,因为XDoc把所有操作都包含其中了,它真的让所有事情变得简单!

Dream提供了一系列通用的Features ,可用于所有的服务和一个核心服务库 “在编写任何有意思的Web service和Web应用程序的时候来处理常规问题”。

Dream服务能被托管于一个控制台宿主应用程序中或一个自定义环境里,比如NT服务。控制台宿主应用程序提供了一个命令行接口来创建新的Dream托管环境。Dream托管环境则通过Dream Host来实现。运行时也能被托管在IIS6中 。HTTP请求则被包含其中的Dream HTTPHandler说处理。Dream运行时:

负责着所有交互的协调。它利用HttpListener 类来构建,因此在目标设备上无需预先安装web-server。它也负责着服务的实例化、消息的路由和缩短服务到服务(service-to-service)的通讯(当两者都一起被定位的时候,意思就是说它们被加载到同一个AppDomain中)。

Plugs是一个很方便的功能,当服务被一起加载到同一个AppDomain的时候,它能够把HTTP通讯转换到内存中的通讯。

Plugs能非常简单地和Web资源进行交互。而且,当服务需要通过定位(例如托管于同一个AppDomian中)的时候,Plugs还能检测并替换WebRequest。在这种情况下,Plugs使用直接的内存通讯,而不是使用昂贵的序列化/反序列化操作。Plugs也能轻易地通过调整目标服务的URI,指向特定的想用的Feature或可选的处理过程上。

MindTouch Wiki提供了一个Dream概念的报告幻灯片,介绍了面向服务分布式构架(Service-Oriented Distributed Architecture,SODA ),描述了由MindTouch Dream推广的一种应用程序编程模型,以及REST web services的总体介绍。

查看英文原文:MindTouch Dream: REST SDK & Lightweight Standalone Server

没有回复

回复

独家内容

专访开源项目Amoeba架构师陈思儒

DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。

使用JSF、Ajax和Seam开发Portlets(2/3)

作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。

Jeff Barr谈论Amazon Web服务

Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。

用Erlang实现领域特定语言

Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。

基于Rails的企业级应用剖析

本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。

JavaFX技术预览

JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。