云开发API连接器的最佳练习

Amazon Web Services,Microsoft Azure,Google Compute Engine等云服务提供商以及OpenStack,vCloud,OnApp等平台经过API或Web服务正变得日益可编程。若要使用这些API / Web服务,我们需要开发一个连接器。我们有开发当今几乎所有云平台或服务的API连接器的经验。本博客旨在分享我们的经验,并提供开发云服务或平台Web服务连接器所需的一些最佳练习。

为什么是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类型

通常,API通过REST(Representational State Transfer)或SOAP(简单对象访问协议)展现。REST正在成为标准,取代了一些旧的SOAP API。根据表1中的数据,这一点非常明显。

API认证

每个云平台都使用不同类型的认证机制来访问API,了解这些认证机制很重要。典型的例子是:

  • 基本认证
  • 基于令牌的认证
  • SSL认证
  • 多重认证

基本认证

基本身份验证使用在base64中编码的用户名和密码的经典组合,这是在授权HTTP开头中提供的。

示例: 授权:Base64(用户名:密码)

请求:

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 Token)

基于令牌的认证提供基于用户认证的临时令牌。资源到期时需要刷新临时令牌。内部认证处理程序根据标题中提供的标记进行认证。

请求:

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认证

安全套接字层是一种标准的安全技术,用于在服务器和客户端之间建立加密链接 - 通常是网络服务器(网站)和浏览器。SSL认证需要在订阅下将SSL证书上传到平台。API端点需要通过SSL证书进行认证。

多重认证

多重身份验证(MFA)在用户名和密码之上加了一层额外的保护。MFA支持的API需要第一因素的用户名和密码以及来自MFA设备的验证码作为第二因素。这些多重因素为API端点提供了更高的安全性。

API响应类型

API的请求和响应类型需要考虑输入和输出的消耗。API请求和响应可以是XML或JSON。连接器需要根据接口要求转换响应

API支持

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

  • 直接使用您选择的编程语言(如Python,Java,.NET,Ruby,GO,Node.JS等)来使用REST / SOAP API
  • 一些云平台/服务提供了环绕API的SDK,使开发人员可以轻松使用由平台/服务提供的特定于Python,Java,.NET,Ruby等的可编程SDK
  • 根据他们的支持,使用LibCloud(Python),Fog(Ruby),jCloud(Java),Libretto(JavaScript),pkgcloud(Node.JS)或gophercloud(GO)等第三方库。

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

4921207-screen-shot-2017-04-10-at-104015-am.png

注意: Google表格中提供了这些 Cloud Service API的详细信息。鼓励服务提供商和其他读者更新其云端的API端点,以便作为开发人员的简单参考。

API操作

通过API文档了解您的平台支持的API操作,并确定您想要使用的操作。最好通过管理门户或面板来执行操作,以便在开始使用API之前了解它的工作原理。您需要做的第一件事是使用API进行身份验证,然后您可以在执行创建选项之前尝试基本的读取操作。

验证API端点

API端点与云平台管理网址不同。API端点通常包括主机,端口和路径。如果它是一个REST API,那么它包括一个访问密钥和一个普通密钥。可以通过使用POSTMAN,RESTClient等工具验证平台或服务的API端点进行访问。对于基于标记的身份验证,我们需要生成令牌并在RESTClient中提供令牌。

API授权

在API验证之后,我们需要知道云平台或服务中给定用户的授权。例如,使用AWS Identity and Access Management(IAM)时,我们可能已经成功通过身份验证,但是我们只能执行我们在IAM中授权的操作。

引用

云平台/服务可通过用户的帐户使用的资源增加限额。最好先了解配额限制。例如,AWS将帐户弹性IP的分配限制为5。但是,这可以通过提出请求来增加。OpenStack管理员可以定义用户使用的每个项目中资源的限制。

分析云资源定价

云服务提供商检查资源定价是非常重要的。云服务提供商会每月,每小时或每分钟收取资源。消费前了解定价非常重要,否则我们的账单会有意外情况。详细地了解服务提供商提供的免费服务也是非常重要的,这样我们才没有任何意外。

API连接器开发的设计注意事项

  • 如果您只开发一个连接器到一个平台,那么使用平台提供的SDK是理想的。
  • 如果平台没有提供所需语言的SDK,则有APIMatic,AWS API网关等工具可帮助为API端点生成SDK。在连接器开发中使用SDK减少了开发工作。
  • 如果您希望开发跨多个云的连接器,则可以考虑使用第三方SDK,因为这有助于加速开发。但是,如果您希望连接器是动态的,并且您需要与平台或服务一起发展,那么最好使用由平台或服务提供的SDK,因为某些新版本的第三方SDK支持可能需要时间。
  • 了解某些提供程序和平台设置的API速率限制(由用户在一段时间内可以对API端点进行的API请求数),因为它显示了我们可以怎样频繁地调用端点。
  • 对于一些异步API(API响应不是即时的),响应通过PUSH提供或通过POLL检索。'Push'模型需要一个回调端点,当它可用时,它会发送响应。在“POLL”模式中,请求者重复调用API以检查状态更新。当您必须轮询或重试API请求时,我们建议使用指数退避算法计算API调用之间的休眠时间间隔。指数退避背后的思想是在连续错误响应的重试之间逐渐使用更长的等待时间。
  • 一些云服务提供商/平台为每个要使用的服务开设不同的端点。建议使用API端点维护一个服务目录,以确保使用正确的服务目录。
  • 有时端点根据云平台或服务的子帐户而有所不同。确保在拨打电话之前按照要求连接端点

希望这可以帮助你们。愉快地开发API连接器...

本文的版权归 踏_无痕 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏F_Alex

SpringCloud-初识微服务(一)

1503
来自专栏ArrayZoneYour的专栏

Kubernetes的服务网格(第1部分):获取关键的服务指标

看到这个标题,你可能会问:什么是服务网格?在云服务广泛应用的现在又如何应用?马上我们就会在本文中将向您展示如何在Kubernetes上使用linkerd作为服务...

3518
来自专栏程序你好

无服务器架构中的十大安全风险

无服务器架构(作为服务或FaaS的功能)是应用程序在其上构建和部署后,可以根据云工作负载流自伸缩的架构。从开发的角度来看,无服务器架构主要关注核心功能,而忽略所...

2613
来自专栏jerryteng的专栏

如何利用最低配的腾讯云快速搭建高并发在线服务

这里是作为开发用,我们就选择一个普通的服务器,我也是很不好意思的申请了相关的学生机,那我们就用学生机来搭建一个高并发的在线服务。这个机器配置很低,我还进行了降级...

99810
来自专栏重庆的技术分享区

创建一个微服务?首先回答这10个问题

原文地址:https://articles.microservices.com/creating-a-microservice-answer-these-10-...

2882
来自专栏Linyb极客之路

互联网常见架构接口压测性能分析及调优手段建议

常见的互联网架构中,一般都能看到spring+mybatis+mysql+redis搭配的身影,在我所服务的公司亦是如此。一般来说,应用内部的接口都是直接调用的...

2095
来自专栏FreeBuf

利用HTTP参数污染方式绕过谷歌reCAPTCHA验证机制

今年初,我上报了一个谷歌reCAPTCHA验证码绕过漏洞,该漏洞在于能用一种HTTP参数污染的不安全方式,让Web页面上的reCAPTCHA构造一个针对 /re...

3393
来自专栏ThoughtWorks

避免CI成为一个安全隐患|洞见

背景 最近临时交接了一个客户测试环境和产品环境的维护工作。交接的客户资产包含:代码库、生产环境主机、测试环境主机、搭建在测试环境主机上的持续集成服务器以及对应的...

3568
来自专栏C++

python笔记:#006#程序执行原理

1171
来自专栏FreeBuf

如何使用serviceFu这款功能强大的远程收集服务帐户凭据工具

在近期所进行的安全审计活动中,我们的团队设计出了一种新的安全工具,并希望能跟整个社区一起分享。

892

扫码关注云+社区

领取腾讯云代金券