InfoQ

新闻

剖析微软的REST框架:Astoria

作者 Dflying Chen译者 陈黎夫 发布于 2007年9月30日 下午11时59分

社区
.NET
主题
数据访问,
Web服务,
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

没有回复

回复

独家内容

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

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

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。

揭示常见的重构误区

相对于Java,.NET在持续重构方面所给与的重视仍然少为人知,大多数人对于重构是否真正属于开发过程,以及如何将其应用到开发过程中持观望态度。Danijel Arsenovski试图为你揭示这些谜题。