为云开发API接口的最佳方案

一些云服务提供商及其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(Simple Object Access Protocol,简单对象访问协议)公开。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身份验证

安全套接字层是一种标准的安全技术,用于在服务器和客户端之间建立加密链接 - 通常是web服务器(网站)和浏览器。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支持。

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

API操作

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

验证API端点

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

API授权

在API验证之后,我们需要知道云平台或服务对给定用户的授权情况。

配额

云平台/服务为用户帐户使用的资源强加限额。最好先了解配额限制。OpenStack管理员可以定义用户使用的每个项目中资源的限制。

分析云资源定价

云服务提供商检查资源定价非常重要。云服务提供商针对每月,每小时或每分钟收取资源费用。消费前了解定价非常重要,否则我们的账单会有惊喜。详细了解服务提供商提供的免费服务也是非常重要的,这样我们才不会感到意外。

API接口开发的设计注意事项

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

希望这对你有所帮助。享受API接口的开发过程吧...

本文的版权归 nnynn 所有,如需转载请联系作者。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏tiane12

通过抓包获取ActiveX控件通信数据时的一点心得

14320
来自专栏数据和云

深入解析:由expdp遇到ORA-7445问题的深入展开

李真旭(Roger) ACOUG 核心专家,Oracle ACE,云和恩墨技术专家 编辑手记:由一个问题入手,深入其根本原因,层层递进,细致分析,由点及面,这...

29960
来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下:

1K80
来自专栏乐沙弥的世界

Percona XtraDB Cluster集群节点重启及故障转移

要重新启动集群节点,请关闭MySQL并重新启动它。该节点将离开集群(并且法定人数的总计数应该减少)。发布命令 systemctl restart mysql

11220
来自专栏张戈的专栏

WordPress发布文章同步到新浪微博失败的问题解决与分享

张戈博客很久之前分享过一篇 WordPress 发布文章同步到新浪微博 的文章,但经常有站长留言反馈同步失败,我一直觉得是代码部署问题。 最近很长一段时间,张戈...

37870
来自专栏一名叫大蕉的程序员

分布式文件系统.get(V2)No.106

2018年9月28号,我估计会记得很久这一天,因为那天刚刚好是我来西厂的一周年,那天刚刚好是农历生日,刚刚好那天晚上我挖了一个大坑,跟遣怀师兄和小美姐姐一起填坑...

12520
来自专栏腾讯移动品质中心TMQ的专栏

30分钟轻松搞定代码瘦身

导语 当一个新的产品想要复用一个旧的产品的逻辑的时候,是直接把全盘的代码copy过去就可以了吗?站在功能的角度当然没问题,但是这对于新产品是相当臃肿的,因为一些...

25890
来自专栏WeTest质量开放平台团队的专栏

https大势已来?看腾讯专家如何在高并发压测中支持https

用epoll编写一个高并发网络程序是很常见的任务,但在epoll中加入ssl层的支持则是一个不常见的场景。腾讯WeTest服务器压力测产品,在用户反馈中收到了不...

20330
来自专栏H2Cloud

游戏服务器设计之任务系统

游戏服务器设计之任务系统 介绍 任务系统是游戏中最重要的系统之一,本文旨在设计一个轻量清晰的任务系统。通用易扩展是本系统关注的重点。任务系统中当角色的条件满足时...

76640
来自专栏思考的代码世界

Python网络数据采集之创建爬虫|第00天

开始本系列的文章时,可能你需要了解一下Python的基础知识,熟悉Python的基本编程,了解一些网络知识等。如果不是特别了解,可以看看我的Python基础系列...

43150

扫码关注云+社区

领取腾讯云代金券