CloudStack API调用 <1>制作API请求 所有的CloudStack API请求是以HTTP GET / POST有一个关联的命令和任何参数的形式提交的。无论在HTTP或HTTPS中请求都由一下组成: l CloudStack API URL:这是Web服务的API入口点(例如,http://域名:8080/client/api)。 l 命令(Command):Web服务命令要执行,如启动虚拟机或创建一个磁盘卷。 l 参数(Parameters):任何额外的要求或命令的可选参数。 一个API GET请求示例如下: http。//localhost。8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D 或如下一个更可读的示例: 1. http。//localhost。8080/client/api?command=deployVirtualMachine 3. &serviceOfferingId=1 4. &diskOfferingId=1 5. &templateId=2 6. &zoneId=4 7.&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ 8. &signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D%3D 第1行是的CloudStackAPI URL。这是你希望进行交互的云实例。 第2行是指你要执行的命令。在我们的例子中,我们试图部署一个新的虚拟机。通过前面的一个(?)将要执行的命令从CloudStackAPI URL中分离出来。 第3-6行是此命令的参数。要查看命令和请求参数,请参阅在CloudStack API文档的相应部分。每个参数字段-值对(field =value)通过前面的字符(&)分隔开。 第7行是可以唯一标识帐户的APIkey。请参阅第9页上的签名API请求。 第8行是创建的签名哈希来验证用户帐户执行的API命令。 请参阅第9页上的签名API请求。 2启用API调用过期 您可以设定的到期时间戳记API调用以防止重放攻击通过非安全通道,如HTTP。服务器跟踪您所指定的到期时间戳记,并拒绝所有后续的API请求,在此有效期后。 要启用此功能,将以下参数添加到API请求: •signatureVersion = 3:如果signatureVersion参数丢失或不等于3,在到期的API请求参数将被忽略。 •expires=YYYY-MM-DDThh:mm:ssZ:指定在哪些包含在请求中的签名已过期的日期和时间。时间戳表示YYYY-MM-DDTHH:MM:SSZ格式,ISO 8601标准中规定的。例子如下:expires=2011-10-10T12:00:00+0530。 下面给出了一个到期API请求示例: http。//<IPAddress>。8080/client/api? command=listZones&signatureVersion=3&expires=2011-10-10T12:00:00+0530&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D%3D 3 API 请求签名 无论你使用HTTP还是使用HTTPS访问CloudStack API,它仍必须签署CloudStack可以验证调用者的身份验证和授权来执行命令。 请确保你有由CloudStack管理员为您的帐户提供的API Key和Secret Key,然后再进行签名的过程。为了显示如何注册请求,我们将再次使用前面的例子。 http。//localhost。8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D 每个API请求的格式:基本URL(Base URL)+ API路径(API Path)+命令字符串(CommandString)+签名(Signature)。 为了生成签名(可以用以下步骤实现)。 1.在命令字符串的每个字段的值对(由一个“&”隔开),URL解析每个值以便它可以通过HTTP GET被安全地发送。 确保所有的空格被编码为“%20”,而不是“+”。 2.整个命令字符串(Command String)小写字母顺序并通过字段对每个字段- 值排序。这一步的结果如下: apikey=mivr6x7u6bn_sdahobpjnejpgest35exqjb8cg20yi3yaxxcgpyuairmfi_ejtvwz0nukkjbpmy3y2bcikwfq&command=deployvirtualmachine&diskofferingid=1&se 3.通过验证用户的Secret Key以排序的命令字符串(Command String)并通过HMAC SHA-1散列算法(大多数编程语言提供了一个实用的方法来做到这一点)运行它。Base64编码所产生的UTF-8字节数组可安全地通过HTTP传输。经Base64编码后产生的最后字符串应该是: “Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D”。 通过以基本URL(Base URL)+ API路径(API Path)+命令字符串(CommandString)+签名(Signature)的格式重构最终的URL
时间: 2024-12-24 18:26:57