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

  • Hartmut Wilms
  • 朱永光

2007 年 10 月 16 日

话题:.NETREST语言 & 开发架构

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

.NETREST语言 & 开发架构