中国领先的IT技术网站
|
|

开发云API连接器的最佳实践

各家云服务提供商,例如亚马逊Web Services、微软Azure、谷歌Compute Engine等,及其OpenStack平台、vCloud、OnApp等都越来越多地实现了通过APIs或web services的可编程服务。为了调用这些APIs和web services,我们必然需要开发出一个连接器(connector)。现如今,我们已经积累了对几乎所有的云平台或服务进行API连接器的开发经验。本博文旨在分享我们的经验,并提供一些开发web service连接器用以连接到云服务或平台所需要遵循的最佳实践。

作者:陈峻译来源:云计算|2017-04-27 10:33

【51CTO.com快译】

各家云服务提供商,例如亚马逊Web Services、微软Azure、谷歌Compute Engine等,及其OpenStack平台、vCloud、OnApp等都越来越多地实现了通过APIs或web services的可编程服务。为了调用这些APIs和web services,我们必然需要开发出一个连接器(connector)。现如今,我们已经积累了对几乎所有的云平台或服务进行API连接器的开发经验。本博文旨在分享我们的经验,并提供一些开发web service连接器用以连接到云服务或平台所需要遵循的最佳实践。

为什么需要API连接器

如下是要用到API连接器的几个原因:

1.发现云资源
2.管理资源
3.自动化操作
4.协调资源
5.与工具和产品集成
6.报告总结资源及其利用

开发API连接器的步骤

下面是针对云平台/服务开发出高效和实用的连接器所需的步骤顺序:

1.理解API特性
2.分析云平台/服务所提供的API支持
3.识别API的各种操作
4.验证API的各个端点
5.验证API的授权
6.检查配额
7.分析云资源的定价
8.设计考虑API连接器

API特性

API的特性包括API的类型、认证机制和请求/响应的类型。

API类型

通常情况下,APIs是通过REST(即,表述性状态传递 Representational State Transfer)或SOAP(即,简单对象访问协议 Simple Object Access Protocol)发布的。其中,REST正在成为标准,并取代旧的SOAP APIs。这一点可以通过文末表格中的数据予以充分证明。

API认证

每个云平台都使用不同类型的认证机制来访问APIs,因此理解这些认证机制是非常重要的。一些典型的例子会包括如下部分:

·基本认证
·基于令牌的认证
·SSL认证
·多因素认证

基本认证

基本认证使用的是以base64编码的用户名和密码的经典组合,并在HTTP头部的授权中提供。

例子: Authorization:Base64(username:password)

请求:

Headers: Content-type: application/xml
Authorization: Basic dG9ib3RyYXM6cTE=
Method: GET
API: http://api.xyzcloud.com:4465/paci/v1.0/ve
IPaddress | host - api.xyzcloud.com
PortNo – 4465
Path – paci/v1.0/ve

响应:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ve-list>
<ve-info subscription-id='100001' name='web' state='created' description='Web Server'/>
</ve-list>

基于令牌的认证(X-Auth-Token,Oauth令牌)

基于令牌的认证提供了使用包含用户身份信息的临时令牌来进行认证。当临时令牌到期的时候,它需要被资源进行刷新。内部认证处理器基于头部所提供的令牌信息进行验证。

Request:
Headers: Content-type : application/json
Method: POST
API: https://api.myapplication.com/user/accessToken

内容:

{
userName:'my username',
password:'my password',
token_type:'mac'
}

响应:

{
“access_token”: “okKXxMWOEhnM78Rie02ZjWjP7eQqpp6V”,
“mac_key”:”vV6xEfVgQZv4ABJ6VZDHlQfCaqKgFZuN”,
“mac_algorithm”:”hmac-sha-1”,
“token-type”:”mac”,
“expires_in”:3600,
“refresh_token”:”nZSiH3L5K4febMlELguILucrWpjRud56”
}

SSL认证

安全套接字层是一种标准的安全技术,它在服务器和客户机,典型场景是web服务器(网站)与浏览器之间建立了一个加密的连接。SSL认证需要将SSL证书上载到订阅它的平台之上。而API的端点则需要通过SSL证书来进行身份认证。

多因素认证

多因素认证(Multi-factor authentication MFA)在用户名和密码之上增加了一层保护。支持MFA的APIs需要把用户名和密码作为第一因素;而把从MFA设备上获取的认证代码作为第二个因素。这些多因素为API的端点提供了更高的安全性。

API响应类型

在提供输入和使用输出的时候,请求和响应类型的API需要被进行查看。API的请求和响应都是XML或JSON类型的,因此连接器需要根据它的接口需求来转换其相应的响应。

API的支持

可以通过以下选项来开发云平台/服务的API连接器。

·使用你所选用的编程语言,例如:Python、Java、.Net、Ruby、GO、Node.JS等来直接调用REST和SOAP的API。
·一些云平台/服务提供各种针对API的软件开发工具包(SDKs),以方便开发人员使用由平台/服务所提供的可编程的SDKs,例如特定的Python、Java、.Net、Ruby等
·使用第三方的库,例如基于他们支持的LibCloud(Python)、Fog (Ruby)、jCloud (Java)、Libretto (JavaScript)、pkgcloud (Node.JS)或是gophercloud (GO)。

下表显示了一些针对各大领先的云服务提供商和平台的API支持。

注意:这些云服务API的细节可以在谷歌表格(Google Sheets)中找到。而且它鼓励服务提供商和其他的读者去更新他们自己的各种云API端点,从而为开发人员的提供更为方便的参考。

API的各种操作

通过浏览API文档以识别你想要调用的操作,这样有助于你去了解本平台所支持的各种API操作。在开始通过API进行调用之前,你最好是通过管理门户网站或是仪表盘界面来执行各种操作,以便你能够了解它是如何工作的。要调用API,你首先要做的是认证,然后在执行各种创建选项之前,你可以尝试一些基本的读取操作。

验证API的各个端点

API端点与云平台管理的URL并不相同。一个API端点通常包括主机、端口和路径。如果是REST API的话,它会包括一个访问的密钥和一个私钥。可以运用诸如POSTMAN、RESTClient等工具来为平台或服务验证API各个端点的可访问性。而对于一个基于令牌的认证,我们则需要生成令牌,并将该令牌提供给RESTClient。

API的授权

在对API进行认证之后,我们需要了解云平台或服务中的给定用户的授权问题。例如,通过使用AWS身份和访问管理(Identity and Access Management IAM),我们可能在成功认证之后,也只能执行那些被IAM所授权给我们的操作。

配额

云平台/服务对于可由用户帐户调用的资源实施配额管理。因此你最好是事先了解一下配额限制的机制。例如,AWS对单个账户的弹性IP地址(elastic IP)的分配就限制为5个。但是,这是可以通过提出请求来进行增加的。而OpenStack的管理员则可以在用户使用的每个项目中定义资源的限制。

分析云资源的定价

检查云服务提供商的资源定价是非常重要的。由于云服务提供商是按每月、每小时或每分钟进行收费的,因此在消费前了解定价是很重要的,否则我们在收到账单时肯定会有所“惊喜”的。同样重要的是要详细了解服务提供商所能提供的免费层级,这也会让我们避免那些所谓的“惊喜”。

设计考虑API连接器的开发

•如果你只为单个平台开发一个连接器的话,使用该平台所提供的SDKs乃是理想选择。
•如果平台并不提供所需语言的SDK,你可以用到诸如APIMatic、AWS API Gateway等工具,它们能够为API端点生成各种SDKs。在连接器的开发过程中,使用SDKs将会减少许多开发的工作量。
•如果你想开发跨多个云的连接器,你可以考虑使用第三方的SDKs,这将有助于加速你的开发速度。然而,如果你希望连接器是动态的,而且它能够随着平台或服务进行迭代的话,最好是使用平台或服务所提供的SDK,因为第三方SDK对一些新版本的支持可能会需要一段滞后的时间。
•你需要理解由一些提供商和平台所设置的API流量限制(即单个用户在一段时间内对API端点所产生的API请求的数量),因为它将是我们能够调用单个端点的一个给定阀值。
•对于一些异步的APIs(那些并非及时响应的API),请使用PUSH来提供响应或用POLL来接收。“Push”模式用到一个回调类型的端点,当它在可用时会发送一个响应。而在“POLL”模式里,请求反复调用一个API来检查其状态的更新情况。当你需要轮询或重试API请求时,我们建议使用一个指数型的回退算法(backoff algorithm)来计算API调用之间的休眠间隔(sleep interval)。而指数型回退算法背后的思想就是在各个连续错误响应的重试之间,使用递增的等待时间。
•一些云服务提供商/平台会为每个服务的调用发布不同的端点。因此我们建议你维护一个包含多个API端点的服务目录,以确保你在使用过程中能调用到那些正确的服务。
•有时各个端点会根据云平台或服务的子账户的不同而有所区别。因此你需要确保在调用之前,各个端点能够根据不同的需求被“串联”起来。

希望上述最佳实践能对你有所帮助,能让你愉快的开发出API连接器。

【原标题】Best Practices for Developing API Connectors for Clouds (作者: Sabapathy Arumugam)
原文链接:https://dzone.com/articles/best-practices-for-developing-connectors-to-cloud

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:刘晓旭 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

热门职位+更多

读 书 +更多

Linux指令速查手册

Linux是一款开源的操作系统,得到了广大开发者的青睐。掌握Linux系统的指令及其用法是学习Linux系统的基础。本书详细地介绍了常用Linux指令...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 四周年庆  签到赢手机