采访 Ross Mason:MuleSoft 的新 API 平台

  • Saul Caganoff
  • 侯伯薇

2013 年 5 月 18 日

话题:REST架构

MuleSoft 最近发布了他们的Anypoint 平台,该平台支持云和 on-premise 服务的开发、部署和集成。InfoQ 有幸在全球Mule Summit tour期间采访了 MuleSoft 的 CTO,Ross Mason,并和他讨论了这个新平台。Ross 曾经创建了开源的 Mule 项目。

InfoQ: MuleSoft 最近发布了很多与服务和 API 管理相关的新产品:服务注册表(Service Registry,GA)、APIKit(当前还是 beta 版本)以及 API 管理器(beta)。可否请您告诉我们关于这些产品更多的信息?

RM:APIKit 是为开发者提供的设计工具集,使用它我们可以遵循 API 最佳实践实现一致的 API。APIKit 是一种开源、声明式的模型,设计它是用来构建遵守良好 API 设计实践的 REST API 和框架——像一致的 URL 模式、版本控制、安全性等——从而帮助你更快地编码、更有效地测试,并为你的 API 编写文档。APIKit 促进了 API 优先(API-first)的开发方法。它把实现和接口定义分离开来,从而让我们更易于快速整合 API 设计,并使用虚拟实现来试验,然后逐渐增加后端代码。这种方法意味着 API 本身可以独立于后端代码进行测试。

有趣的是:我们使用 APIKit 构建了 Anypoint 服务注册表的 API。因为我们先拥有了用来做功能演示的 API,几个月之后才创建好能工作的用户界面。

Anypoint 服务注册表是为新企业创建的第一个 SOA 治理平台。我们从无到有创建了这个产品,使其支持混合的环境,它会治理所有服务和 API,包括 REST、SOAP 和遗留的系统,现在你可以管理所有服务资产,不管它们是内部的还是外部的,在防火墙之后还是在云中,或是在单独的平台上。Anypoint 服务注册表让我们可以轻松地发现服务并对其分类,在整个生命周期中对其进行管理,分析使用数据,并执行策略和契约。

Anypoint API 管理器让我们可以快速、按照具体规模部署企业级的 API。它可以管理你基于云的 API,那可能运行在 CloudHub 上,或者使用 Anypont API Gateway 运行在你本地的私有数据中心上。为了让开发者参与并采用你的 API,你可以使用 APIhub——世界上最大的 API 目录和发布平台——创建自定义的开发者门户。

InfoQ: Anypoint 平台除了包含这些新产品之外,还包括了现存的一些产品和服务,像 Mule ESB、Cloudhub 和 API Connectors。Anypoint 平台表明 on-premise 和云是有清晰界限的,还是一个统一体呢?

RM:Anypoint 平台支持通过 API 与遗留系统、打包的应用、SaaS 应用以及移动设备进行端到端的连接。它是一个连接 on-prem 和云服务的平台,其中集成可以使用 Mule ESB 以 on-prem 的形式运行,或者在 Cloudhub 的云中运行,还可以以混合的方式运行。平台是为了整合新旧形式的统一体而构建的。你可以选择想要使用的部分。我们的客户中有做完整 on-prem 集成的、混合集成的,也有做仅针对云集成的。关键的区别在于 Anypoint 平台让开发者可以选择在哪里集成他们的应用程序,并在单独一个平台上支持混合的集成架构。

InfoQ: 在过去我们看到过基于 UDDI 的服务注册表,它只支持 SOAP web 服务,而新一代的 API 管理器,主要支持基于 REST 和 JSON 的服务。服务注册表位于两种极端情况的哪个位置呢?

RM:UDDI 完全以 SOAP 为中心,但它最大的问题就是,很多人都无法使用它。我们通过 Anypoint 服务注册表(ASR)采用了和其他注册表产品非常不同的方法。ASR 是从头进行设计的,专注于可用性和对用户的零摩擦。ASR 专注于运行时,并具有向活动的端点附加元数据以及产品的能力。对活动端点的管理意味着我们可以在运行时向端点增加行为。这些行为叫做策略,可以控制与端点请求相关的一切内容,像限流、安全性(认证和授权)、SLA、转换和虚拟化等。ASR 另一个独特的方面是,它是基于云的治理平台,让企业可以管理任何类型的服务(不仅仅是 web 服务),不管是 on-premise 的还是在云中的。所有企业使用的系统都有新有旧,还有各种奇怪的系统,我们尊重这一点,构建出一种能够在多样化环境中工作的解决方案。

InfoQ: 服务注册表只作为 SaaS 产品提供。这如何与 on-premise 服务的策略执行和服务分析协作呢? 你能告诉我们更多关于 Anypoint 内部的信息吗? 它是基于哪种代理,agent 还是 proxy 呢?

RM:Anypoint 服务注册表是一种混合架构,带有作为安全多租户云发布的管理程序和资源库;每个用户都会获得包含元数据和策略的独立模式(schema)。而运行时查找、策略和契约的执行、数据搜集以及执行都是通过 agent 在 on-premise 上发生的。应用程序的策略、跟踪和处理都是通过 agents 在 Mule servers on-premise 完成,或者通过在与 agents 通信的 CloudHub workers 上面完成,那些 agents 会通过唯一令牌进行路由。这种混合的 agent 方法支持其他方法所不支持的大规模和性能,因为调用不是通过中心代理路由的。agent 还提供了缓存层,以减少延迟,并提供一种安全的机制,如果与云服务器的连接中断,也可以离线工作。

InfoQ: 这对于服务虚拟化有什么好处呢?

RM:我们不需要在应用程序中硬编码端点的地址,而可以在运行时查询注册表,以基于元数据获得位置,这些信息可以缓存,当 Anypoint 服务注册表中发生变更的时候,新的策略可以被推送下去。缓存和推送通知都用于确保没有不必要的网络通信。

InfoQ: APIKit 包含了 Swagger。如果我使用 APIKit,Swagger 给了我们哪些立即可用的功能呢?

RM:Swagger 是一种和语言无关的规范和框架,用于定义服务接口,主要用于描述 RESTful 的 API。它专注于为 API 创建优秀的文档和客户端库。支持 Swagger 的 API 可以为 API 方法生成交互式的文档,让用户可以通过以可视化的方式试验,查看请求和响应、头文件和返回代码,从而发现 API 的功能。它本身就非常强大,但是 Swagger 框架还支持为多种流行的语言——包括 JavaScript、Python、Ruby、Java、Scala 等等——生成客户端代码。

InfoQ:REST 服务的 API 契约一直是一种热门的观念话题。你认为 Swagger 会超越 WADL 等方法为这个讨论下个定论吗,或者是根本不使用契约?

RM:我们认为 Swagger 是一种应该支持的良好规范。它的方向是正确的,并且拥有积极的团队和社区,而不是由一些厂商来掌管的。我们在 APIKit 和 APIhub 发布平台中都采用了 Swagger。尽管所有规范都有优势和劣势,但我们感觉 Swagger 已经很好,并提供了足够的价值,可以继续前行或者重新创建。Mule 团队和 Swagger 的成员合作,协作开发了规范的一些边缘功能,以覆盖某些与 API 定义相关的一般需求。

我们查看了 WADL,在过去实践过没有契约的方法,但是你意识到,随着 API 的数量暴增,需要一种更加结构化,而且低摩擦力的方法。使用 APIKit,你会根据 RESTful 规范来设计你的 API,并且我们会帮你处理版本管理、URL 格式化、安全性、Swagger 生成等工作。我们对 API 采用的是一种“rails”式的方法。

InfoQ: API 管理器将会在今年稍后发布。它会增加哪些新功能呢? API Manager 和服务注册表会互为补充,还是会应对完全不同的需求?

RM:在 Anypoint 服务注册表和 Anypoint API 管理器之间有一些类似的地方,但是 API 管理器更关注于外部的 API,例如:对公众、合作社区开放,或者只是和外部消费应用构建的开发 API。外部 API 为开发者提供了一个门户,让用户可以发现、测试和使用 API。这样,Anypoint API 管理器就有集成的功能,可以使用 APIhub 发布平台创建公有或私有的开发者门户。

API 管理器构建在服务注册表之上,并支持关于治理、虚拟化和策略执行的类似功能。渐渐地,我们看到,企业想要创建所有 API,就像它们都是外部 API 一样。这让架构师和开发者从客户的角度来思考所构建的 API,这是很好的现象。我们相信 APIkit 和 Anypoint API 管理器为企业 API 发展的方向提供了很好的蓝图。

REST架构