剖析微软的REST框架:Astoria

2007 年 9 月 30 日

在最新的第十三期微软 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

2007 年 9 月 30 日 23:59988
用户头像

发布了 37 篇内容, 共 64246 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

面试官:您能说说序列化和反序列化吗?是怎么实现的?什么场景下需要它?

xcbeyond

Java 面试题 序列化

【架构师训练营】第 10 周总结

花生无翼

OAuth 2.0

陈皮

对中台思维的思考

朱月俊

堆栈神奇应用之CXO让我做一个计算器!!

架构师修行之路

数据结构 堆栈

Dubbo微服务调用过程时序图

2流程序员

微服务与DDD

走过路过飞过

Eureka常见问题汇总及注意事项

xcbeyond

Java SpringCloud Eureka 服务注册与发现 常见问题

week 10作业

a晖

架构师训练营Week10学习总结

Frank Zeng

架构师训练营第十周作业

吴吴

架构师训练营Week10作业

Frank Zeng

芯片破壁者(十二.上):“大头儿子”模式下的韩国半导体

脑极体

架构师训练营 Week 10 总结

Wancho

微服务&DDD&中台

dony.zhang

中台 微服务 DDD

架构师课程第十周总结

dongge

架构训练营第十周感悟

张锐

【架构师训练营】第 10 周作业

花生无翼

练习 10-1

闷骚程序员

【架构师训练营 - week10 -1】作业

早睡早起

来自面试官的技术面试题

xcbeyond

Java 数据库 自我介绍 面试经验

架构师训练营 Week 10 作业

Wancho

week10 作业

雪涛公子

hive拉链表优化·百亿量级数据支持准实时更新

誓约·追光者

hive 实时数仓 海量数据库的设计与实践

极客大学架构师训练营 --第10周

李朋

week 10 总结

a晖

week10 总结

雪涛公子

对微服务架构的理解

朱月俊

Dubbo微服务调用时序图及微服务架构个人见解

潜默闻雨

架构师第十周

Tulane

微服务&DDD

极客大学架构师训练营

剖析微软的REST框架:Astoria-InfoQ