QingCloud 文档 – API文档 - kaiyun官方网站下载手机网页 /development_docs/api/ Recent content in API文档 on QingCloud 文档 Hugo -- gohugo.io Development_docs: 概述 /development_docs/api/overview/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/overview/ <p>开·云app官方版下载QingCloud向用户开放所有资源操作相关的API,我们的API是通过 HTTPS GET 方式来进行调用的。在调用我们的API之前,您需要先在我们的控制台申请API密钥,包括 API密钥ID ( access_key_id ) 和 API密钥的私钥 ( secret_access_key )。 API密钥ID 将作为参数包含在每一个请求中发送;而 API密钥的私钥 负责生成请求串的签名,API密钥的私钥 需要被妥善保管,请勿外传。</p> <p><strong>API 请求限制</strong></p> <blockquote> <ul> <li>配额限制: 为了保证用户能合理地使用 API ,我们对每位用户的 API 访问配额进行了限制,初始用户: 2000次 / 3600秒,未来会开放更高的配额。</li> <li>返回数据集长度限制: 当获取资源列表时,系统返回的最大数据长度是 100 ,即便你传了更大的 limit , 所以如果你需要获取很多的数据时,请根据返回的 total_sum (根据请求时的过滤参数,得到的数据集总数)分批获取。</li> </ul> </blockquote> <p><strong>API 请求结构</strong></p> <table> <thead> <tr> <th>Name</th> <th>Description</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td>API入口</td> <td>API 调用的 webservice 入口</td> <td>我们的API入口目前统一为:<a href="https://api.qingcloud.com/iaas/">https://api.qingcloud.com/iaas/</a></td> </tr> <tr> <td>公共参数</td> <td>每个 API 调用都需要包含公共参数</td> <td>详情可见 <a href="../parameters/"><em>公共参数</em></a></td> </tr> <tr> <td>指令名称</td> <td>API指令的名称 ( action ),例如 DescribeInstances 等。</td> <td>完整的指令名称列表请参见 <a href="../command_list/instance/"><em>API指令列表</em></a>。</td> </tr> <tr> <td>指令参数</td> <td>指令参数请参见每个指令的相关文档。</td> <td> </td> </tr> </tbody> </table> <p><strong>API 请求样例</strong></p> <p>一个典型的API请求如下所示,这是一个 DescribeInstances 的API请求:</p> <pre tabindex="0"><code>https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE&amp;action=DescribeInstances&amp;expires=2013-08-29T07%3A42%3A25Z&amp;limit=20&amp;signature_method=HmacSHA256&amp;signature_version=1&amp;status.1=running&amp;time_stamp=2013-08-29T06%3A42%3A25Z&amp;version=1&amp;zone=pek3b&amp;signature=ihPnXFgsg5yyqhDN2IejJ2%2Bbo89ABQ1UqFkyOdzRITY%3D </code></pre><p>为了方便查看,我们将文档中的请求都进行换行来显示:</p> <pre tabindex="0"><code>https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE &amp;action=DescribeInstances &amp;expires=2013-08-29T07%3A42%3A25Z &amp;limit=20 &amp;signature_method=HmacSHA256 &amp;signature_version=1 &amp;status.1=running &amp;time_stamp=2013-08-29T06%3A42%3A25Z &amp;version=1 &amp;zone=pek3b &amp;signature=ihPnXFgsg5yyqhDN2IejJ2%2Bbo89ABQ1UqFkyOdzRITY%3D </code></pre><p><strong>API 返回结构</strong></p> <table> <thead> <tr> <th>Name</th> <th>Description</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td>指令名称</td> <td>API 返回的指令名称 ( action ),例如 DescribeInstancesResponse 等。</td> <td>API 返回的指令名称一般以 “API 请求指令名称” + “Response” 来表示。</td> </tr> <tr> <td>返回码</td> <td>返回码 ( ret_code ) 用来表示API请求的返回值,当ret_code = 0时表示API请求正常,ret_code != 0时表示API请求错误。</td> <td>详情可见 <a href="../error_code/"><em>错误码</em></a></td> </tr> <tr> <td>返回参数</td> <td>返回参数请参见每个指令的相关文档。</td> <td> </td> </tr> </tbody> </table> <p><strong>API 返回样例</strong></p> <p>API的返回结果为 JSON 结构,这是一个 DescribeInstances 的API请求返回:</p> <pre tabindex="0"><code>{ &#34;action&#34;:&#34;DescribeInstancesResponse&#34;, &#34;instance_set&#34;:[ { &#34;vcpus_current&#34;:1, &#34;instance_id&#34;:&#34;i-ogbndull&#34;, &#34;vxnets&#34;:[ { &#34;vxnet_name&#34;:&#34;primary vxnet&#34;, &#34;vxnet_type&#34;:1, &#34;vxnet_id&#34;:&#34;vxnet-0&#34;, &#34;nic_id&#34;:&#34;52:54:ef:0c:ed:66&#34;, &#34;private_ip&#34;:&#34;10.50.13.54&#34; } ], &#34;memory_current&#34;:1024, &#34;sub_code&#34;:0, &#34;transition_status&#34;:&#34;&#34;, &#34;instance_name&#34;:&#34;&#34;, &#34;instance_type&#34;:&#34;c1m1&#34;, &#34;create_time&#34;:&#34;2013-08-28T14:26:03Z&#34;, &#34;status&#34;:&#34;running&#34;, &#34;status_time&#34;:&#34;2013-08-28T14:26:03Z&#34;, &#34;image&#34;:{ &#34;processor_type&#34;:&#34;64bit&#34;, &#34;platform&#34;:&#34;linux&#34;, &#34;image_size&#34;:20, &#34;image_name&#34;:&#34;CentOS 6.4 64bit&#34;, &#34;image_id&#34;:&#34;centos64x64&#34;, &#34;os_family&#34;:&#34;centos&#34;, &#34;provider&#34;:&#34;system&#34; }, &#34;description&#34;:null } ], &#34;ret_code&#34;:0, &#34;total_count&#34;:1 } </code></pre><p><strong>API 请求类型</strong></p> <p>我们的API请求主要分为 <strong>延迟请求</strong> 和 <strong>实时请求</strong> 两种。</p> <blockquote> <ul> <li><strong>延迟请求</strong>: 对于耗时请求,无法实时返回执行结果,例如 RunInstances 等。这些请求将以任务形式提交给QingCloud后台执行,并会在API请求返回中返回任务ID ( job_id )。这种情况下,用户可以通过查看资源状态来判断任务是否执行完成。例如,在提交 RunInstances 操作之后,用户可以通过 DescribeInstances 来查看 Instance 的状态以确认 Instance 是否创建成功。</li> <li><strong>实时请求</strong>: 对于非耗时请求,会直接返回操作结果。</li> </ul> </blockquote> Development_docs: 公共参数 /development_docs/api/parameters/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/parameters/ <p>公共参数是所有 API 请求都必需的参数。</p> <p>注解</p> <p>为减少内容重复,公共参数就不在各 API 详情中列出了。</p> <p><strong>公共参数</strong>:</p> <table> <thead> <tr> <th>Name</th> <th>Description</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td><strong>action</strong></td> <td>每个 API 都有自己的 action,用来标识所请求指令。例如 RunInstances。</td> <td>完整的指令名称列表请参见 <a href="../command_list/instance/"><em>API指令列表</em></a>。</td> </tr> <tr> <td><strong>zone</strong></td> <td>区域 ID,当 API 请求是需要在某个具体的区域执行时,需要加上该参数。例如 pek3a。</td> <td>目前支持的区域 ID 有:<br/>pek3a:北京3区-A<br/>pek3:北京3区(包括 pek3b/pek3c/pek3d)<br/>sh1a:上海1区-A<br/>gd2:广东2区(包括 gd2a/gd2b)<br/>ap2a:亚太2区-A</td> </tr> <tr> <td><strong>time_stamp</strong></td> <td>请求串生成时间,格式为 YYYY-MM-DDThh:mm:ssZ,例如”2013-08-27T13:58:35Z”,具体格式可以参见 <a href="http://www.w3.org/TR/NOTE-datetime">ISO8601</a>.</td> <td>这个时间为 UTC 时间,假设您的本地时间为北京时间 UTC+8 ,您需要将其转化为 UTC+0 的时间。</td> </tr> <tr> <td><strong>access_key_id</strong></td> <td>申请的 API密钥ID,例如”QYACCESSKEYIDEXAMPLE”。</td> <td> </td> </tr> <tr> <td><strong>version</strong></td> <td>API的版本号,目前只支持版本号为 1。</td> <td> </td> </tr> <tr> <td><strong>signature_method</strong></td> <td>签名所用哈希算法,目前支持 HmacSHA256 和 HmacSHA1。</td> <td> </td> </tr> <tr> <td><strong>signature_version</strong></td> <td>签名函数的版本号,目前只支持版本号为 1。</td> <td> </td> </tr> <tr> <td><strong>signature</strong></td> <td>请求消息的签名,请参见 <a href="../signature/"><em>签名方法</em></a></td> <td> </td> </tr> </tbody> </table> <p><strong>请求样例</strong>:</p> <blockquote> <p><a href="https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE">https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE</a></p> <p>&amp;action=RunInstances</p> <p>&amp;count=1</p> <p>&amp;time_stamp=2013-08-27T13%3A58%3A35Z</p> <p>&amp;image_id=centos64x64</p> <p>&amp;instance_type=small_b</p> <p>&amp;signature_method=HmacSHA256</p> <p>&amp;signature_version=1</p> <p>&amp;version=1</p> <p>&amp;zone=pek3a</p> <p>&amp;signature=xMFvKenlbAAc0jGJ0iBHUhzh/wOBu3B8hypk+fTThFY=</p> </blockquote> Development_docs: 签名方法 /development_docs/api/signature/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/signature/ <p>这里介绍 API 请求中签名 ( signature ) 的生成方法。您可以根据实际情况选择使用 <strong>API 密钥</strong> 或 <a href="../../../authorization/iam/">IAM</a> <strong>身份</strong> 来完成签名。</p> <h2 id="api-密钥签名">API 密钥签名</h2> <p>您需要先在控制台创建<a href="https://console.qingcloud.com/access_keys/">API密钥</a>,获得 accesss_key_id 和 secret_access_key,这里我们假设</p> <pre tabindex="0"><code>access_key_id = &#39;QYACCESSKEYIDEXAMPLE&#39; secret_access_key = &#39;SECRETACCESSKEY&#39; </code></pre><p>例如我们的请求参数如下:</p> <pre tabindex="0"><code>{ &#34;count&#34;:1, &#34;vxnets.1&#34;:&#34;vxnet-0&#34;, &#34;zone&#34;:&#34;pek3a&#34;, &#34;instance_type&#34;:&#34;small_b&#34;, &#34;signature_version&#34;:1, &#34;signature_method&#34;:&#34;HmacSHA256&#34;, &#34;instance_name&#34;:&#34;demo&#34;, &#34;image_id&#34;:&#34;centos64x86a&#34;, &#34;login_mode&#34;:&#34;passwd&#34;, &#34;login_passwd&#34;:&#34;QingCloud20130712&#34;, &#34;version&#34;:1, &#34;access_key_id&#34;:&#34;QYACCESSKEYIDEXAMPLE&#34;, &#34;action&#34;:&#34;RunInstances&#34;, &#34;time_stamp&#34;:&#34;2013-08-27T14:30:10Z&#34; } </code></pre><p>注解</p> <p>你可以使用上述的 AccessKey 和 Request 调试你的代码, 当得到跟后面一致的签名结果后(即表示你的代码是正确的), 可再换为你自己的 AccessKey 和其他 API 请求。</p> <p>签名步骤</p> <p><strong>1. 按参数名进行升序排列</strong></p> <p>排序后的参数为:</p> <pre tabindex="0"><code>{ &#34;access_key_id&#34;:&#34;QYACCESSKEYIDEXAMPLE&#34;, &#34;action&#34;:&#34;RunInstances&#34;, &#34;count&#34;:1, &#34;image_id&#34;:&#34;centos64x86a&#34;, &#34;instance_name&#34;:&#34;demo&#34;, &#34;instance_type&#34;:&#34;small_b&#34;, &#34;login_mode&#34;:&#34;passwd&#34;, &#34;login_passwd&#34;:&#34;QingCloud20130712&#34;, &#34;signature_method&#34;:&#34;HmacSHA256&#34;, &#34;signature_version&#34;:1, &#34;time_stamp&#34;:&#34;2013-08-27T14:30:10Z&#34;, &#34;version&#34;:1, &#34;vxnets.1&#34;:&#34;vxnet-0&#34;, &#34;zone&#34;:&#34;pek3a&#34; } </code></pre><p><strong>2. 对参数名称和参数值进行URL编码</strong></p> <p>编码后的请求串为:</p> <pre tabindex="0"><code>{ &#34;access_key_id&#34;:&#34;QYACCESSKEYIDEXAMPLE&#34;, &#34;action&#34;:&#34;RunInstances&#34;, &#34;count&#34;:1, &#34;image_id&#34;:&#34;centos64x86a&#34;, &#34;instance_name&#34;:&#34;demo&#34;, &#34;instance_type&#34;:&#34;small_b&#34;, &#34;login_mode&#34;:&#34;passwd&#34;, &#34;login_passwd&#34;:&#34;QingCloud20130712&#34;, &#34;signature_method&#34;:&#34;HmacSHA256&#34;, &#34;signature_version&#34;:1, &#34;time_stamp&#34;:&#34;2013-08-27T14%3A30%3A10Z&#34;, &#34;version&#34;:1, &#34;vxnets.1&#34;:&#34;vxnet-0&#34;, &#34;zone&#34;:&#34;pek3a&#34; } </code></pre><p>警告</p> <p>编码时空格要转换成 “%20” , 而不是 “+”</p> <p>警告</p> <p>转码部分的字符要用大写,如 ”:” 应转成 “%3A”,而不是 “%3a”</p> <p><strong>3. 构造URL请求</strong></p> <p>参数名和参数值之间用 “=” 号连接,参数和参数之间用 “&” 号连接,构造后的URL请求为</p> <pre tabindex="0"><code>access_key_id=QYACCESSKEYIDEXAMPLE&amp;action=RunInstances&amp;count=1&amp;image_id=centos64x86a&amp;instance_name=demo&amp;instance_type=small_b&amp;login_mode=passwd&amp;login_passwd=QingCloud20130712&amp;signature_method=HmacSHA256&amp;signature_version=1&amp;time_stamp=2013-08-27T14%3A30%3A10Z&amp;version=1&amp;vxnets.1=vxnet-0&amp;zone=pek3a </code></pre><p><strong>4. 构造被签名串</strong></p> <p>被签名串的构造规则为: 被签名串 = HTTP请求方式 + “\n” + uri + “\n” + url 请求串</p> <p>警告</p> <p>“\n” 是换行符,不要将 “\” 转义。也就是说,不要用 “\n” ,有些语言,比如 php 和 ruby ,请用 “\n” , 而不是 ‘\n’</p> <p>假设 HTTP 请求方法为 GET 请求的uri路径为 “/iaas/” , 则被签名串为</p> <pre tabindex="0"><code>GET\n/iaas/\naccess_key_id=QYACCESSKEYIDEXAMPLE&amp;action=RunInstances&amp;count=1&amp;image_id=centos64x86a&amp;instance_name=demo&amp;instance_type=small_b&amp;login_mode=passwd&amp;login_passwd=QingCloud20130712&amp;signature_method=HmacSHA256&amp;signature_version=1&amp;time_stamp=2013-08-27T14%3A30%3A10Z&amp;version=1&amp;vxnets.1=vxnet-0&amp;zone=pek3a </code></pre><p><strong>5. 计算签名</strong></p> <p>计算被签名串的签名 signature。</p> <ul> <li> <p>将API密钥的私钥 ( secret_access_key ) 作为key,生成被签名串的 HMAC-SHA256 或者 HMAC-SHA1 签名,更多信息可参见 <a href="http://www.ietf.org/rfc/rfc2104.txt">RFC2104</a></p> </li> <li> <p>将签名进行 Base64 编码</p> </li> <li> <p>将 Base64 编码后的结果进行 URL 编码</p> <p>警告</p> <p>当 Base64 编码后存在空格时,不要对空格进行 URL 编码,而要直接将空格转为 “+”</p> </li> </ul> <p>以 Python (版本 2.7) 代码为例 (其他语言类似,需要使用 sha256 + base64 编码,最后需要再进行 URL 编码,URL 编码时需要将原有的空格 ” ” 转为 “+”)</p> <pre tabindex="0"><code>import base64 import hmac import urllib from hashlib import sha256 # 前面生成的被签名串 string_to_sign = &#39;GET\n/iaas/\naccess_key_id=QYACCESSKEYIDEXAMPLE&amp;action=RunInstances&amp;count=1&amp;image_id=centos64x86a&amp;instance_name=demo&amp;instance_type=small_b&amp;login_mode=passwd&amp;login_passwd=QingCloud20130712&amp;signature_method=HmacSHA256&amp;signature_version=1&amp;time_stamp=2013-08-27T14%3A30%3A10Z&amp;version=1&amp;vxnets.1=vxnet-0&amp;zone=pek3a&#39; h = hmac.new(secret_access_key, digestmod=sha256) h.update(string_to_sign) sign = base64.b64encode(h.digest()).strip() signature = urllib.quote_plus(sign) </code></pre><p><strong>6. 添加签名</strong></p> <p>将签名参数附在原有请求串的最后面。 最终的HTTP请求串为(为了查看方便,我们人为地将参数之间用回车分隔开)</p> <pre tabindex="0"><code>access_key_id=QYACCESSKEYIDEXAMPLE &amp;action=RunInstances &amp;count=1 &amp;image_id=centos64x86a &amp;instance_name=demo &amp;instance_type=small_b &amp;login_mode=passwd &amp;login_passwd=QingCloud20130712 &amp;signature_method=HmacSHA256 &amp;signature_version=1 &amp;time_stamp=2013-08-27T14%3A30%3A10Z &amp;version=1 &amp;vxnets.1=vxnet-0 &amp;zone=pek3a &amp;signature=byjccvWIvAftaq%2BoublemagH3bYAlDWxxLFAzAsyslw%3D </code></pre><p>完整的请求URL为(为了查看方便,我们人为地将参数之间用回车分隔开)</p> <pre tabindex="0"><code>https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE &amp;action=RunInstances &amp;count=1 &amp;image_id=centos64x86a &amp;instance_name=demo &amp;instance_type=small_b &amp;login_mode=passwd &amp;login_passwd=QingCloud20130712 &amp;signature_method=HmacSHA256 &amp;signature_version=1 &amp;time_stamp=2013-08-27T14%3A30%3A10Z &amp;version=1 &amp;vxnets.1=vxnet-0 &amp;zone=pek3a &amp;signature=byjccvWIvAftaq%2BoublemagH3bYAlDWxxLFAzAsyslw%3D </code></pre><p>实际URL为</p> <pre tabindex="0"><code>https://api.qingcloud.com/iaas/?access_key_id=QYACCESSKEYIDEXAMPLE&amp;action=RunInstances&amp;count=1&amp;image_id=centos64x86a&amp;instance_name=demo&amp;instance_type=small_b&amp;login_mode=passwd&amp;login_passwd=QingCloud20130712&amp;signature_method=HmacSHA256&amp;signature_version=1&amp;time_stamp=2013-08-27T14%3A30%3A10Z&amp;version=1&amp;vxnets.1=vxnet-0&amp;zone=pek3a&amp;signature=byjccvWIvAftaq%2BoublemagH3bYAlDWxxLFAzAsyslw%3D </code></pre><h2 id="iam-身份签名">IAM 身份签名</h2> <p>您需要先到IAM控制面板创建一个基于特定信任载体类型的身份,并将身份绑定到 API 执行设备上。</p> <p>这里我们假设您的 API 执行设备为 QingCloud 广东 2 区 id 为 i-7lchv5u3 的云服务器:</p> <p><img src="../../../authorization/iam/_images/iam_role.png" alt="iam_role"></p> <p><strong>1. 获取 IAM 身份的临时凭证</strong></p> <p>在云服务器中执行如下命令,即可取得身份的临时凭证:</p> <pre tabindex="0"><code>curl -i -H &#34;Accept: application/json&#34; http://169.254.169.254/latest/meta-data/security-credentials </code></pre><p>返回信息:</p> <pre tabindex="0"><code>&#34;{\&#34;jti\&#34;:\&#34;0z7dO3oN03byx1CepBDTyl\&#34;,\&#34;id_token\&#34;:\&#34;eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3IiOiIxIiwiYXVkIjoiaWFtIiwiYXpwIjoiaWFtIiwiY29ucyI6ImFkbWluIiwiY3VpZCI6ImlhbXItejU3dm42anIiLCJlaXNrIjoieUxjcFViRXZVOWZQZmJSQTA2eUFQMUtMS21keVpoX1JueDJmNmRmeFZZZz0iLCJleHAiOjE1OTAzMTk1MjMsImlhdCI6MTU5MDMxNTkyMywiaXNzIjoic3RzIiwianRpIjoiMHo3ZE8zb04wM2J5eDFDZXBCRFR5bCIsIm5iZiI6MCwib3JnaSI6ImFwcC0xMjM0NTY3OCIsIm93dXIiOiJ1c3ItQ29qOGFIZ24iLCJwcmVmIjoicXJuOnFpbmdjbG91ZDppYW06Iiwicm91ciI6InVzci1Db2o4YUhnbiIsInJ0eXAiOiJyb2xlIiwic3ViIjoic3RzIiwidHlwIjoiSUQifQ.YrCnvySApej2zHsn9cfn3D7tgOahDzeTP1TRBVMZ_3TyToo-H7hB2_mx_J_Qy1NY5K-WykYE4NFxqVN7PqsnAmskqAnRM2D7Gza_PffO7ajEJhtVF7Fo7nsmPKs7y1kryQ2Rvj3ABBJThHjQDtYVsk_pLUio5P0Nl9zb1sSswN4\&#34;,\&#34;access_key\&#34;:\&#34;0z7dO3oN03byx1CepBDTyl\&#34;,\&#34;secret_key\&#34;:\&#34;5qlKnUc3esKJp3G\&#34;,\&#34;expiration\&#34;:1590319523}&#34; </code></pre><p>为了查看方便,我们人为地将参数之间用回车分隔开:</p> <pre tabindex="0"><code>&#34;jti&#34;:&#34;0z7dO3oN03byx1CepBDTyl&#34;, &#34;id_token&#34;:&#34;eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3IiOiIxIiwiYXVkIjoiaWFtIiwiYXpwIjoiaWFtIiwiY29ucyI6ImFkbWluIiwiY3VpZCI6ImlhbXItejU3dm42anIiLCJlaXNrIjoieUxjcFViRXZVOWZQZmJSQTA2eUFQMUtMS21keVpoX1JueDJmNmRmeFZZZz0iLCJleHAiOjE1OTAzMTk1MjMsImlhdCI6MTU5MDMxNTkyMywiaXNzIjoic3RzIiwianRpIjoiMHo3ZE8zb04wM2J5eDFDZXBCRFR5bCIsIm5iZiI6MCwib3JnaSI6ImFwcC0xMjM0NTY3OCIsIm93dXIiOiJ1c3ItQ29qOGFIZ24iLCJwcmVmIjoicXJuOnFpbmdjbG91ZDppYW06Iiwicm91ciI6InVzci1Db2o4YUhnbiIsInJ0eXAiOiJyb2xlIiwic3ViIjoic3RzIiwidHlwIjoiSUQifQ.YrCnvySApej2zHsn9cfn3D7tgOahDzeTP1TRBVMZ_3TyToo-H7hB2_mx_J_Qy1NY5K-WykYE4NFxqVN7PqsnAmskqAnRM2D7Gza_PffO7ajEJhtVF7Fo7nsmPKs7y1kryQ2Rvj3ABBJThHjQDtYVsk_pLUio5P0Nl9zb1sSswN4&#34;, &#34;access_key&#34;:&#34;0z7dO3oN03byx1CepBDTyl&#34;, &#34;secret_key&#34;:&#34;5qlKnUc3esKJp3G&#34;, &#34;expiration&#34;:1590319523 </code></pre><p><strong>2. 添加签名</strong></p> <p>将身份临时凭证中的 access_key 和 secret_key 按照前文 API 密钥同样的方法进行签名计算,然后将请求的 uri 路径改为 “/iam/”,最后在请求中附上 token 参数(参数值为临时凭证中的 id_token )。</p> <p>以 DescribeInstances 为例,最后请求的 URL 为(为了查看方便,我们人为地将参数之间用回车分隔开):</p> <pre tabindex="0"><code>https://api.qingcloud.com/iam/?access_key_id=0z7dO3oN03byx1CepBDTyl &amp;action=DescribeInstances &amp;req_id=35430c022b694133a6a758b62e21067b &amp;signature_method=HmacSHA256 &amp;signature_version=2 &amp;status.1=running &amp;status.2=stopped &amp;time_stamp=2020-05-25T07%3A20%3A28Z &amp;token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3IiOiIxIiwiYXVkIjoiaWFtIiwiYXpwIjoiaWFtIiwiY29ucyI6ImFkbWluIiwiY3VpZCI6ImlhbXItejU3dm42anIiLCJlaXNrIjoieUxjcFViRXZVOWZQZmJSQTA2eUFQMUtMS21keVpoX1JueDJmNmRmeFZZZz0iLCJleHAiOjE1OTAzMTk1MjMsImlhdCI6MTU5MDMxNTkyMywiaXNzIjoic3RzIiwianRpIjoiMHo3ZE8zb04wM2J5eDFDZXBCRFR5bCIsIm5iZiI6MCwib3JnaSI6ImFwcC0xMjM0NTY3OCIsIm93dXIiOiJ1c3ItQ29qOGFIZ24iLCJwcmVmIjoicXJuOnFpbmdjbG91ZDppYW06Iiwicm91ciI6InVzci1Db2o4YUhnbiIsInJ0eXAiOiJyb2xlIiwic3ViIjoic3RzIiwidHlwIjoiSUQifQ.YrCnvySApej2zHsn9cfn3D7tgOahDzeTP1TRBVMZ_3TyToo-H7hB2_mx_J_Qy1NY5K-WykYE4NFxqVN7PqsnAmskqAnRM2D7Gza_PffO7ajEJhtVF7Fo7nsmPKs7y1kryQ2Rvj3ABBJThHjQDtYVsk_pLUio5P0Nl9zb1sSswN4 &amp;verbose=0 &amp;version=1 &amp;zone=pekt3 &amp;signature=o8TW8DUQ3wyHz5YSkpMd9fSj4pJ24U7%2Buf7CeWKMoQw%3D </code></pre><p>实际 URL 为</p> <pre tabindex="0"><code>https://api.qingcloud.com/iam/?access_key_id=0z7dO3oN03byx1CepBDTyl&amp;action=DescribeInstances&amp;req_id=35430c022b694133a6a758b62e21067b&amp;signature_method=HmacSHA256&amp;signature_version=2&amp;status.1=running&amp;status.2=stopped&amp;time_stamp=2020-05-25T07%3A20%3A28Z&amp;token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3IiOiIxIiwiYXVkIjoiaWFtIiwiYXpwIjoiaWFtIiwiY29ucyI6ImFkbWluIiwiY3VpZCI6ImlhbXItejU3dm42anIiLCJlaXNrIjoieUxjcFViRXZVOWZQZmJSQTA2eUFQMUtMS21keVpoX1JueDJmNmRmeFZZZz0iLCJleHAiOjE1OTAzMTk1MjMsImlhdCI6MTU5MDMxNTkyMywiaXNzIjoic3RzIiwianRpIjoiMHo3ZE8zb04wM2J5eDFDZXBCRFR5bCIsIm5iZiI6MCwib3JnaSI6ImFwcC0xMjM0NTY3OCIsIm93dXIiOiJ1c3ItQ29qOGFIZ24iLCJwcmVmIjoicXJuOnFpbmdjbG91ZDppYW06Iiwicm91ciI6InVzci1Db2o4YUhnbiIsInJ0eXAiOiJyb2xlIiwic3ViIjoic3RzIiwidHlwIjoiSUQifQ.YrCnvySApej2zHsn9cfn3D7tgOahDzeTP1TRBVMZ_3TyToo-H7hB2_mx_J_Qy1NY5K-WykYE4NFxqVN7PqsnAmskqAnRM2D7Gza_PffO7ajEJhtVF7Fo7nsmPKs7y1kryQ2Rvj3ABBJThHjQDtYVsk_pLUio5P0Nl9zb1sSswN4&amp;verbose=0&amp;version=1&amp;zone=pekt3&amp;signature=o8TW8DUQ3wyHz5YSkpMd9fSj4pJ24U7%2Buf7CeWKMoQw%3D </code></pre> Development_docs: 错误码 /development_docs/api/error_code/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/error_code/ <p>当请求发生错误时,服务器会返回错误码 ( ret_code ) 和错误信息 ( message ),完整的错误码如下表。</p> <p>错误分为 <strong>客户端错误</strong> , <strong>服务器端错误</strong> , <strong>配置文件错误</strong>, <strong>License 错误</strong> 四种,如果是客户端错误,说明该错误是由用户提交的 API 引起的;如果是服务器端错误,说明该错误是由服务器端引起的;如果是配置文件错误,说明配置文件中的某项存在问题;如果是 License 错误, 说明授权证书存在错误。</p> <p><strong>客户端错误</strong>:</p> <table> <thead> <tr> <th>错误代码</th> <th>错误类型</th> <th>提示</th> </tr> </thead> <tbody> <tr> <td>1100</td> <td>消息格式错误</td> <td>当缺少必要参数,或者参数值格式不正确时,会返回该错误。此时可以查看相关文档确认每个参数的格式是否正确。</td> </tr> <tr> <td>1101</td> <td>请求方法错误</td> <td>当请求了不存在的方法,或者参数值不正确时, 会返回该错误</td> </tr> <tr> <td>1200</td> <td>身份验证失败</td> <td>当用户提供了不存在的 access_key_id 参数,或者 API 请求的签名不正确时,会返回该错误。<br>此时可以检查 access_key_id 和 secret_access_key 是否配置正确,或者参考我们的签名文档 <a href="../signature/"><em>签名方法</em></a> 检查是否签名有误。</td> </tr> <tr> <td>1300</td> <td>消息已过期</td> <td>当用户提交的 time_stamp 参数时间过期(超过 60 秒)时会返回该错误。关于 time_stamp ,可以参考 <a href="../parameters/"><em>公共参数</em></a></td> </tr> <tr> <td>1400</td> <td>访问被拒绝</td> <td>当用户试图访问不属于自己的资源,或者对于提交的操作没有权限,或者试图更改的资源处于不可更改的状态时等,会返回该错误。我们会在返回的错误信息里头提及错误原因。</td> </tr> <tr> <td>1500</td> <td>注册用户失败</td> <td>当用户注册失败时, 会返回该错误</td> </tr> <tr> <td>1510</td> <td>帐号已存在</td> <td>当注册已存在的账号时, 会返回该错误</td> </tr> <tr> <td>1520</td> <td>帐号格式不合法</td> <td>当注册的账号格式不满足要求时, 会返回该错误</td> </tr> <tr> <td>1600</td> <td>登录失败</td> <td>当用户输入错误的登录信息时, 会返回该错误</td> </tr> <tr> <td>1610</td> <td>找不到该用户</td> <td>当用户提供了不存在的用户名时, 会返回该错误</td> </tr> <tr> <td>1620</td> <td>密码不匹配</td> <td>当用户提供了不匹配的密码时, 会返回该错误</td> </tr> <tr> <td>1630</td> <td>重置密码失败</td> <td>当用户重置密码不符合要求时, 会返回该错误</td> </tr> <tr> <td>1640</td> <td>重置密码过于频繁</td> <td>当用户重置密码过于频繁时, 会返回该错误</td> </tr> <tr> <td>1650</td> <td>无效的密码重置 token</td> <td>当用户重置密码 token 无效时, 会返回该错误</td> </tr> <tr> <td>1660</td> <td>用户名或密码不匹配</td> <td>当用户提供了不匹配的用户名密码时, 会返回该错误</td> </tr> <tr> <td>1661</td> <td>用户未完成注册</td> <td>当用户注册未完成时, 会返回该错误</td> </tr> <tr> <td>1662</td> <td>用户已被禁止访问</td> <td>当用户执行超出权限时, 会返回该错误</td> </tr> <tr> <td>2000</td> <td>登录会话过期</td> <td>当用户会话空闲过久时, 会返回该错误 ,请重新登录</td> </tr> <tr> <td>2100</td> <td>找不到资源</td> <td>当用户试图访问不存在的资源时,会返回该错误。</td> </tr> <tr> <td>2110</td> <td>资源已存在</td> <td>当用户创建已存在的资源时, 会返回该错误</td> </tr> <tr> <td>2200</td> <td>租赁资源失败</td> <td>当用户租赁信息存在错误时, 会返回该错误</td> </tr> <tr> <td>2300</td> <td>解除租赁失败</td> <td>当用户解除租赁失败时, 会返回该错误</td> </tr> <tr> <td>2400</td> <td>余额不足</td> <td>当用户余额不足时,会返回该错误。</td> </tr> <tr> <td>2500</td> <td>超过配额</td> <td>当用户试图创建的资源超过用户配额,或者短时间内的API访问请求超过配额限制,会返回该错误。<br>API 访问请求配额限制是以天为单位,当超过配置限额时, 将会在在次日零点恢复。<br>您可以通过提交工单的方式来向我们申请提高配额,并说明你申请的理由。</td> </tr> <tr> <td>3300</td> <td>无效的 API 模块</td> <td>当用户使用了无效的 API 模块时, 会返回该错误</td> </tr> </tbody> </table> <p><strong>License 错误</strong>:</p> <table> <thead> <tr> <th>错误代码</th> <th>错误类型</th> <th>提示</th> </tr> </thead> <tbody> <tr> <td>4000</td> <td>无效的证书</td> <td>当用户的证书失效时, 会返回该错误</td> </tr> <tr> <td>4001</td> <td>授权证书已经过期</td> <td>当用户的授权证书已经过期时,会返回该错误</td> </tr> <tr> <td>4002</td> <td>平台已有相同的授权证书</td> <td>当用户的证书重复时,会返回该错误</td> </tr> <tr> <td>4003</td> <td>超出证书授权</td> <td>当用户的当前宿云服务器的数量已超过授权证书的规定数量时,会返回该错误</td> </tr> <tr> <td>4004</td> <td>加载授权证书失败</td> <td>当用户加载授权证书失败时,会返回该错误</td> </tr> <tr> <td>4005</td> <td>找不到授权证书</td> <td>当用户没有有效的授权证书时,会返回该错误</td> </tr> </tbody> </table> <p><strong>服务器端错误</strong>:</p> <table> <thead> <tr> <th>错误代码</th> <th>错误类型</th> <th>提示</th> </tr> </thead> <tbody> <tr> <td>5000</td> <td>内部错误</td> <td>当服务器执行请求过程中,遇到未知错误时,会返回该错误信息。遇到这种错误,请及时与我们联系。</td> </tr> <tr> <td>5100</td> <td>服务器繁忙</td> <td>当服务器执行超时,或者服务器负载过高无法完成请求时,会返回该错误信息。遇到这种错误,请稍后再尝试,或者及时与我们联系。</td> </tr> <tr> <td>5200</td> <td>资源不足</td> <td>当我们后台计算资源不足以满足用户的创建需求时,会返回该错误信息。遇到这种错误,请及时与我们联系。</td> </tr> <tr> <td>5300</td> <td>服务更新中</td> <td>当我们的后台服务正在更新时,会返回该错误信息。遇到这种错误,请稍后再尝试,或者及时与我们联系。</td> </tr> <tr> <td>5400</td> <td>存在依赖关系</td> <td>当我们的后台服务正在更新时,会返回该错误信息。遇到这种错误,请稍后再尝试,或者及时与我们联系。</td> </tr> <tr> <td>5500</td> <td>Warehouse 服务未开启</td> <td>当服务器 Warehouse 服务未开启时,会返回该错误信息 。遇到这种错误,请及时与我们联系。</td> </tr> <tr> <td>5600</td> <td>不支持的硬盘类型</td> <td>当用户向一个不支持加密的云服务器挂载加密硬盘时,会返回该错误信息。</td> </tr> </tbody> </table> <p><strong>配置文件错误</strong>:</p> <table> <thead> <tr> <th>错误代码</th> <th>错误类型</th> <th>提示</th> </tr> </thead> <tbody> <tr> <td>8000</td> <td>命令参数验证失败</td> <td>当用户在配置文件中提供了错误的参数时,会返回该错误</td> </tr> <tr> <td>8001</td> <td>配置文件中无任何镜像</td> <td>当用户配置文件中无镜像时,会返回该错误</td> </tr> <tr> <td>8002</td> <td>配置文件中镜像在指定区不存在</td> <td>当用户配置文件中的镜像在指定区不存在时,会返回该错误</td> </tr> <tr> <td>8003</td> <td>无效的集群设置</td> <td>当用户配置文件提供了无效的集群设置时,会返回该错误</td> </tr> <tr> <td>8004</td> <td>缺少配置文件</td> <td>当缺少相应配置文件时,会返回该错误</td> </tr> </tbody> </table> <p><strong>错误样例</strong>:</p> <p>出现错误时,我们会返回错误码和详细的错误提示:</p> <pre tabindex="0"><code>{ &#34;message&#34;:&#34;PermissionDenied, instance [i-2aypaijz] is not running, can not be stopped&#34;, &#34;ret_code&#34;:1400 } </code></pre> Development_docs: API指令列表 /development_docs/api/command_list/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/command_list/ <p>这里列出了所有的API请求指令列表。</p> Development_docs: 通用部分 /development_docs/api/common/ Mon, 01 Jan 0001 00:00:00 +0000 /development_docs/api/common/