InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

剖析微软的REST框架:Astoria

作者 Dflying Chen 译者 陈黎夫 发布于 2007年9月30日

领域
企业架构,
运维 & 基础架构,
架构 & 设计,
语言 & 开发
主题
Web服务 ,
企业架构 ,
SOA ,
.NET ,
数据访问 ,
REST ,
编程 ,
数据库 ,
架构 ,
Astoria
在最新的第十三期微软Architecture Journal杂志中,微软公司SQL Server团队的技术主管Pablo Castro详细地介绍了微软公司REST框架——Astoria的几个重要的特性。

首先,Pablo介绍说:
我认为Astoria是一个非常不错的REST框架。Astoria将实体/记录的概念统一用资源来描述,且这些资源可以通过URI的结构来体现出层次。 所有的资源都可以通过统一的HTTP接口获取并进行维护,且框架也允许我们沿用传统的Web开发方法对程序进行分层或缓存。
随后,Pablo解释了微软公司发起Astoria项目的原因,以及Astoria在当下流行的Web 2.0概念中的重要地位。
从服务器的角度来看,提供用于界面相关的资源显得较为易于理解,例如HTML、CSS以及图像文件等。不过提供数据却是另外一回事。至今为止,一般来讲与 数据打交道的交互过程应该发生于Web服务器和数据库服务器之间——似乎没有什么必要将数据直接暴露给运行于浏览器中的Web页面或是其他什么客户端软 件。但这个需求也恰好是Astoria框架的切入点。
与其他REST框架类似的是,Astoria也允许开发者使用更加富有“语意”的URL来访问以及维护互联网上的资源。为了给出直观的案例,Astoria开发团队还特意建立了一个演示服务器,将大家熟知的Northwind数据库的访问点通过HTTP协议直接暴露了出来。例如:
http://astoria.sandbox.live.com/northwind/northwind.rse/Customers
http://astoria.sandbox.live.com/northwind/northwind.rse/Customers[ALFKI]/Orders
Astoria还与微软公司的.NET框架完美地结合了起来,能够充分利用框架现有的各种强大的基础设施,Pablo说到。
对于.NET应用程序来说,Astoria框架提供了一个运行于.NET环境下的客户端类库,该类库能够自动将从Astoria服务中取得的数据封装为.NET 中的对象。这不但大大地简化了客户端应用程序开发者的工作,也能够很方便地与现有的使用.NET对象的组件结合起来使用。

Astoria用来定义数据架构的语法为实体数据模型(Entity Data Model,EDM),而EDM则已经得到了ADO.NET实体框架的内建支持。ADO.NET实体框架还提供了一个强大的映射机制,让开发者能够很容易 地将EDM架构和实际的关系型数据库映射起来。
不但如此,Astoria还可以支持其他非数据库类型(例如由LINQ查询语句得到)的数据源,并将其通过HTTP接口暴露出来。

Astoria的设计架构非常灵活且易于扩展,允许开发者在其内建的资源层次上根据实际需要创建额外的自定义业务逻辑。例如/Customers或/Products等:
[WebGet]
public static IQueryable CustomersByCity(NorthwindEntities db, string city)
{
    if (city == null || city.Length < 3)
        throw new Exception(“bad city”);
    var q = db.Customers.Where(“it.City = @city”, new ObjectParameter(“city”, city));
    // add user-based filter condition to q
    return q;
}
随后即可使用如下的URL访问上述自定义的业务逻辑,并传递相应的参数。
/MyCustomersByCity?city=Seattle
在安全性方面,Pablo及其团队成员把Astoria与ASP.NET内建的认证模型集成了起来,这也让我们能够很容易地在现有项目中引入该框架。
Astoria将通过调用ASP.NET的相关API来获取用户的认证信息,因此对于那些使用ASP.NET认证机制的应用程序来说,无须任何修改即可直接应用Astoria框架。
若想了解更多有关Astoria框架的信息,请参考Astoria团队的Blog 以及Pablo的Blog

查看英文原文:Behind Microsoft's Astoria REST Framework