写点什么

使用 RAML 与 APIkit 以实现 API 需求层次中所定义的目标

  • 2014-12-09
  • 本文字数:3584 字

    阅读完需:约 12 分钟

API 的流行使商业方式出现了快速的改变,各种令人兴奋的创新之举层出不穷,并且围绕着传统的企业级商业模型,涌现出了多种新型的开发者生态系统。API 已经实现了 SOA 愿景中所承诺的景象,即通过简单的接口,在受控的情况下访问数据与业务逻辑。

API 使得底层的应用程序不必受限于预定义的用户界面的功能,这些应用程序的功能可以通过 API 方式为其它应用程序所用,以实现更多更好的服务,而且这种灵活性几乎是没有限制的。

ProgrammableWeb.com 上收集了超过 1 万个公共 API,并且这个数字还在快速增长,看到这一点,我们也应该对 API 在当今世界上的重要性心存敬意。让我们来看看几个 API 应用的例子,以了解各个公司是如何通过 API 来驱动它们的创新的。

Amazon 为用户打造自己的技术平台提供了一个坚实的基础,它不仅为每项功能提供了一个 web 控制台管理器,并且提供了一套完整的 API。这使得 Amazon 的服务能够非常方便地重新包装并整合到客户的解决方案中。与之类似的是,Salesforce 平台上的多数用户操作并非来自 web 用户界面,而是通过使用它们的 API 产生的。Salesforce 允许通过 API 方式方便地访问底层的 CRM 数据,因此该平台的功能能够很容易地整合到客户自己的企业解决方案中。

Amazon 和 Salesforce 的 API 虽然是个有趣的例子,但它的应用只占据了当今所有企业级 API 的冰山一角。当今的企业所采用的 API,大部分是为同一间公司中的一部分内部用户所使用,或者是为某几个固定的合作伙伴所使用。

在公司 API 的设计与构建上,RESTful 方式代表了主流的趋势,在使用度上已经抛离了 SOAP web services 的使用方式,从以下这张由 ProgrammableWeb.com 的 API 目录所创建出的图形就可以得出这一结论。这一趋势也同样延展到了为内部用户及合作伙伴所使用的企业 API。

图 1 – 基于 REST与 SOAP方式构建的 API数量比较(来源: programmableweb.com

虽然这一趋势表现得异常猛烈,但业务目前还没有出现一套完善的解决方案,能够满足 RESTful API 的产品干系人所需的所有需求。实际上,如果有人能够模仿著名的马斯洛需求层次结构理论来规划出一套API 需求层次结构,那他将会得到一个类似于下图的金字塔图形。

换句话说,你必须确保你的API 能够实现这一层次理论的预定目标。如此一来,你就需要以一种高效且可维护的方式实现你的API。当实现完成后,你还需要设法吸引用户的目光,让他们真正开始使用这套API。而在完成了以上工作后,你还需要对这些已经产生价值的API 进行管理与维护。在使用马斯洛需求层次结构的时候,人们会倾向于走捷径的方式,越过底层直奔金字塔顶。这种时候要想想母亲的叮嘱:这不健康!在本文接下来的部分中,我们将采用一种更健康的方式,并且关注于企业级API 设计与实现这两个最基本的需求,同时为你展示如何使用RESTful API 建模语言(RAML)及相关工具,并配合APIkit 的使用,实现这两个基本需求。

使用RAML 进行API 设计

一套RESTful API 的设计总是围绕着这些内容:资源名称、结构、相关的方法、参数、请求与响应的内容体(以实体的方式进行展现),以及响应码。这些设计为开发者创建应用程序定义好了契约。优秀的API 设计应该能够让应用程序的开发者很容易理解这套API 的目的与使用方式,因此很快就能够上手使用。API 的设计也应该为所针对的应用程序类型进行优化,比方说,一个移动应用与一个Web 应用在API 的使用上有不同的限制,移动应用对于API 方法调用的数量和返回的响应数据的大小会更加敏感许多。

为了达到这种良好的API 设计,API 的开发者需要迭代式地以表达式的风格定义API 的结构,并且与预计使用这套API 的应用程序开发者共同进行评审,以此评估这套API 的可用性,以及它是否适合于他们打算创建的应用程序。来看一下RESTful API 建模语言(RAML), RAML.org 对它的描述是:“RAML 是一种能够以简单与简洁的方式描述 RESTful API 的语言。它鼓励重用,允许 API 探索及模式共享。”

RAML 的优势不仅在于它能够允许开发者表达他们的 API 设计,它还有一个重要优势在于:虽然它出现的时间并不长,但已经多个基于它的开源项目存在,这些项目能够促进良好的 API 设计。API Designer 是其中最重要的一个项目,它为使用 RAML 进行 API 结构设计提供了一个编辑器,并且能够在一个互动控制台中实时显示出 API 的更新,以实现用户与 API 之间的交互。

图 2 – API Designer**** 的截图

通过结合使用 RAML 与 API Designer,API 的开发者就可以采取一种 API 优先的设计方式。他们首先会在 API Designer 的编辑器中以 RAML 语言绘制出一套 API 的初步设计,同时将该设计分享给有可能会针对这套 API 进行应用程序开发的开发者们,可以选择只分享 RAML 文档本身,也可以选择将 RAML 自动生成的互动控制台分享给对方。实际上, API Designer 本身就整合了一套用于模拟(mock)的服务,只需提供相应的 RAML 规格说明,该服务就能够自动生成一套关于该 API 的实现。模拟服务能够在互动控制台中进行访问,也可以在类似于 API Notebook 这样的 RAML 工具中访问,甚至可以让在不同设计周期的移动应用进行访问,这也意味着应用的设计可以与 API 的设计同时进行了。它的好处在于能够通过周期性地反馈循环,在开始具体实现之前,就能够为预计的用户提供一套清晰易用于 API。

当 API 的设计结束后,就可以根据 API 开发者的偏好及需求,决定以何种语言及框架具体实现。越来越多的开源项目都提供了根据 RAML 的定义简化 API 具体实现的功能。这些项目包括有:一个为 RAML 生成 JAX-RS 桩(stub)的工具,以及由 MuleSoft 实现的开源项目 APIkit,它能够通过使用 Mule flow 生成一套由 RAML 定义的 API。接下来让我们仔细观察一下 APIkit,看一下它是如何帮助开发者们实现 API 需求结构中的第二个条目——“API 实现”的。

使用 APIkit 实现 API

一套 API 的实现不仅包括了一系列的新业务逻辑,也包括连接与整合的逻辑。很多情况下,连接与整合的逻辑并不简单,需要复杂的自定义代码进行实现。在这种情况下,使用 Mule flows 进行 API 的实现的方式就比使用自定义代码的实现有更大的好处,因为 Mule flows 允许 API 开发者充分利用 MuleSoft Anypoint 平台的能力来交付 API。

这一平台的能力包括有:高级消息处理(比方说将某个消息的片段进行切分,或是整合)、复杂的数据转换,并且能够通过简单而健壮的连接性,连接到多达数百种 SaaS 应用或是本地应用程序的终结点上,这些应用包括 Salesforce、SAP 或是 Microsoft Dynamics,并且支持多种异质的连接协议,例如 FTP/S、MQ(消息队列)、JMS(Java 消息服务)或 AMQP(高级消息队列协议)。

APIkit 是一个开源项目,它极大的简化了在 Mule flows 上开发由 RAML 语言定义的 API 的难度。这个项目中还包括了基于 Maven 和基于 Eclipse 的工具,可直接用于 MuleSoft 的 Anypoint Studio IDE 工具中。对于初学者来说,可以基于一个现有的 RAML API 定义创建一个全新的 Mule 项目,并自动生成一个整合 flow,并将该整合 flow 与由 RAML 规格中定义的每一组资源 / 方法对进行关联。

图 3 – 在 Anypoint Studio**** 中使用 APIkit Project

由 APIkit 生成的 Mule flow 包含了一个默认的实现,它能够返回在 RAML API 中定义的响应的一个示例,这使得该项目能够作为这套 API 的一个模拟实现被使用。这样,开发者就得到了一套完整的 API 实现,它包含了可以运行的模拟版本的逻辑。开发者随后以迭代式的方式,通过使用 Mule 中的各种构件,实现每一组资源 / 方法对的真实的整合逻辑。

开发者还能够完全利用 Anypoint Studio 所包含的各种功能,例如 Visual Flow 调试器,或者在实现高级数据转换时也可以用到 Anypoint DataMapper 。APIkit 还允许将传入的 API 请求路由至现有的 Mule flow 中(而不用完全重新创建新的 flow),它还能够方便地将 Java 及 Mule 中的异常映射至 API 必需返回的 HTTP 响应代码。

最后,APIkit 项目中也包含了一个预定义的交互控制台,这和 API Designer 工具中所包含的(也是动态生成的)控制台是完全相同的。该控制台允许 API 与应用程序的开发者方便地与 API 进行交互,包括浏览它的 RAML 嵌入文档。

当 API 开发者完成了 API 的实现之后,就可以将它部署到 MuleSoft Anypoint 平台上了,可以选择在一个本地的 Mule ESB 实例上托管该平台,也可以选择通过 MuleSoft iPaaS 服务,将 API 托管在 CloudHub 这一云端环境中。

结论

通过这篇文章,我们介绍了 REST API 建模语言(RAML)以及基于它的一些开源项目,包括 API Designer 和 APIkit,并展示了如何使用 RAML 以满足 API 需求结构中的两个最基本的需求,即 API 设计与 API 实现。

关于作者

Reza Shafii MuleSoft 公司的产品管理总监,MuleSoft 是当今世界上使用最广泛的整合平台的供应商。

查看英文原文: Article: Minding the API Hierarchy of Needs with RAML and APIkit

2014-12-09 10:569390
用户头像

发布了 428 篇内容, 共 177.4 次阅读, 收获喜欢 38 次。

关注

评论

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

Go-Zero微服务快速入门和最佳实践(一)

王中阳Go

Go golang 分布式 微服务 go-zero

助力用户快速学习、使用大模型,天翼云即将上线Llama 3大模型学习机

编程猫

Aiseesoft Data Recovery for Mac:数据恢复软件

iMac小白

Tower for Mac v10.5(399)注册激活版

iMac小白

Tower下载 Tower mac版 Tower破解

AnyMP4 Data Recovery for Mac:高效数据恢复新

iMac小白

灵魂画手有救了!字节开放模型 Hyper-SD,最快 1 步生成 SOTA 级图片(有demo 来试试

字节跳动开源

人工智能 视觉智能 开放应用模型 扩散模型

大模型微调提升AI应用性能

百度开发者中心

人工智能 大模型

Cornerstone for Mac(最好用的SVN管理工具)v4.2永久激活版

iMac小白

软件测试如何选择最佳的自动化测试定位策略?

测试人

软件测试

MES系统功能有什么?对企业有什么价值?

万界星空科技

工业互联网 制造业 生产管理系统 mes 万界星空科技

重回铁王座!时隔5年,Quill 2.0 终于发布啦!

OpenTiny社区

前端 富文本

时之鑫门窗|为什么选购门窗时推荐用十大品牌门窗

科技热闻

全球首发!龙蜥社区助力 Intel SPR 加速器上云

OpenAnolis小助手

云原生 操作系统 envoy 龙蜥社区 Intel SPR

张朝阳对话华为Fellow陈海波:万物智联时代,鸿蒙如何实现“换道超车”?

最新动态

华为云FunctionGraph构建高可用系统的实践

华为云开发者联盟

华为云 华为云FunctionGraph 华为云开发者联盟 华为云Serverless 企业号2024年4月PK榜

好消息!职场<火焰杯>测试开发大赛开始报名啦!

测试人

软件测试 自动化测试 测试开发

microsoft remote desktop mac版10.9.6 远程桌面连接工具

iMac小白

Xmind Pro专业版思维导图绘制软件

iMac小白

Syncovery for Mac:高效文件同步与备份工具

iMac小白

Syncovery下载 Syncovery破解版 Syncovery mac

合合信息Embedding模型获得MTEB中文榜单第一

陈橘又青

合合信息

荣获优秀共建方!开放原子开源大赛&龙蜥机密赛题决赛圆满结束

OpenAnolis小助手

操作系统 龙蜥社区 机密计算

基础设施SIG月度动态:社区官网上线《龙蜥理事说》专题页,内核门禁提速

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥社区SIG

浪潮信息联合龙蜥社区推出 InManageBoot:让开局交付变得如此简单!

OpenAnolis小助手

运维 操作系统 龙蜥社区 InManageBoot

IPQ9574 router CUP + QCN9274 RF module - ensure the security of Wi-Fi connection

wifi6-yiyi

5G wifi router

MAC系统进程管理工具 :MenuBar Stats for mac

iMac小白

4 月 30 日启动报名!2024 开源之夏&龙蜥社区赛题等你来挑战

OpenAnolis小助手

开源 操作系统 龙蜥社区 开源之夏

《龙蜥理事说》第二期对话统信软件 AI 让操作系统更智能

OpenAnolis小助手

AI 操作系统 国产操作系统 龙蜥社区

DxO Nik Collection 6 (PS、LR滤镜插件套装) v6.10.0中文版

iMac小白

安全厂商长擎软件加入龙蜥社区,共建领先的 OS 基础设施

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区生态伙伴

程序会自己抛出错误,干嘛还要写try catch?

高端章鱼哥

Anolis OS 23.1 BETA 预览版:龙芯同源异构完成,支持更多芯片厂家

OpenAnolis小助手

开源 操作系统 龙蜥社区 龙蜥操作系统 Anolis OS

使用RAML与APIkit以实现API需求层次中所定义的目标_架构_Reza Shafii_InfoQ精选文章