
# 调用APIG开放的API
API提供者在API网关开放自己的API后，API调用者从API网关中调用API。
#### 约束与限制
- AIAPIKey认证受限使用，如需使用，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)申请。
- 如果您使用调试域名（创建API分组时系统分配的调试域名）访问API，该调试域名每天最多可以访问1000次。
- 如果在API网关控制台"API管理 \> API策略 \> SSL证书管理"界面的"创建SSL证书"窗口中设置了"CA"参数，那么在调用API时，请注意以下限制。
  - 使用HTTP/1.0协议调用API时，不允许请求头中存在 "Transfer-Encoding"参数。
  
  - 不允许使用CONNECT请求方法。
  
  - 不允许请求头中同时存在参数"Content-Length"和"Transfer-Encoding"。
  
  - 不允许请求行中存在空格或控制符。
  
  - 不允许header name中存在空格或控制符。
  
  - 不允许请求头"Host"中存在空格或控制符。
  
  - 不允许请求头中存在多个"Host"。
   
 
#### 前提条件
在调用API前，确保您的业务系统所在网络与API的访问域名或地址互通。
- 如果业务系统与API网关在相同VPC内时，可直接访问API。
- 如果业务系统与API网关在同一区域的不同VPC内时，可通过创建VPC对等连接，将两个VPC的网络打通，实现同一区域跨VPC访问API。具体步骤请参考[VPC对等连接说明](https://support.huaweicloud.com/usermanual-vpc/vpc_peering_0000.html)章节。
- 如果业务系统与API网关在不同区域的不同VPC内时，可通过创建云连接实例并加载需要互通的VPC，将两个VPC的网络打通，实现跨区域跨VPC访问API。具体步骤请参考[跨区域VPC互通](https://support.huaweicloud.com/qs-cc/cc_02_0201.html)章节。
- 如果业务系统与API网关通过公网互通，请确保API网关已绑定弹性IP。
 
 #### 获取API的调用信息
在调用API前，您需要向API提供者获取API的调用信息。
- 获取API的请求信息 在API网关控制台选择"API管理 \> API列表"，在"API列表"页签中可获取API的"域名"、"请求方法"和"请求路径"。单击API的名称进入"API运行"页面，在"前端配置"或"后端配置"区域获取API基本信息。
  
- 获取API的认证信息 根据API使用的安全认证方式不同，还要获取相关的请求认证信息，请根据下表说明获取。
  
  | 认证方式                 | 认证信息                                         |
  |:---|:---|
  | APP认证（签名认证）          | 向API提供者获取该API所授权凭据的Key和Secret，以及认证签名所使用的SDK。 |
  | APP认证（简易认证）          | 向API提供者获取该API所授权凭据的AppCode。                  |
  | APP认证（AIAPIKey认证）    | 向API提供者获取该API所授权凭据的AIAPIKey。                 |
  | APP认证（双重认证）          | 同时获取APP认证以及自定义认证所需的认证信息。                     |
  | APP认证（app_api_key认证） | 向API提供者获取该API所授权凭据的Key和Secret。               |
  | APP认证（app_secret认证）  | 向API提供者获取该API所授权凭据的Key和Secret。               |
  | APP认证（app_basic认证）   | 向API提供者获取该API所授权凭据的Key和Secret。               |
  | APP认证（app_jwt认证）     | 向API提供者获取该API所授权凭据的Key和Secret。               |
  | IAM认证（Token认证）       | 获取云服务平台的用户账号密码。                              |
  | IAM认证（AK/SK认证）       | 获取云服务平台的用户账号的AK/SK，以及认证签名所使用的SDK。            |
  | IAM认证（双重认证）          | 同时获取IAM认证以及自定义认证所需的认证信息。                     |
  | 自定义认证                | 向API提供者获取请求参数中要携带的自定义认证信息。                   |
  | 无认证                  | 无需认证信息。                                      |
  | 第三方认证（API策略）         | 向API提供者获取请求参数中要携带的第三方认证信息。                   |
     
  
- 获取凭据的Key和Secret： 使用APP认证时，在API网关控制台选择"API管理 \> 凭据管理"，在凭据列表中单击API所授权凭据的名称，进入凭据详情页面，获取凭据的Key和Secret。
  - Key：访问密钥ID。与私有访问密钥关联的唯一标识符；访问密钥ID和私有访问密钥一起使用，对请求进行加密签名。
  
  - Secret：与访问密钥ID结合使用的密钥，对请求进行加密签名，可标识发送方，并防止请求被修改。
   
- 获取认证签名所使用SDK： 使用APP认证（签名认证）或IAM认证（AK/SK认证）时，在API网关控制台选择"帮助中心"，在"SDK使用指引"页签中下载对应语言所使用SDK。
  
- 获取AppCode： 使用APP认证（简易认证）时，在API网关控制台选择"API管理 \> 凭据管理"，在凭据列表中单击API所授权凭据的名称，进入凭据详情页面，在"AppCodes"区域中获取AppCode。
  
- 获取AIAPIKey： 使用APP认证（AIAPIKey认证）时，在API网关控制台选择"API管理 \> 凭据管理"，在凭据列表中单击API所授权凭据的名称，进入凭据详情页面，在"AIAPIKeys"区域中获取AIAPIKey。
  
 
#### 调用API
本章节仅提供请求地址和认证参数的配置指导，客户端的其他参数配置需要用户自行调整，如超时配置、SSL配置等。如果客户端参数配置错误会导致业务受损，建议参考业界标准进行配置。
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
API调用支持长连接。但是需要适当使用长连接，避免占用太多资源。
1. 构造API请求，示例如下：
   ```
   POST https://{Address}/{Path}?{Query}
   {Header}
   {
     {Body}
   }
   ```
   - **POST** ：请求方法，需替换为[获取API的调用信息]中获取的请求方法。
   
   - **{Address}** ：请求地址，需替换为[获取API的调用信息]中获取的域名地址。
     
     | API调用场景              | API请求参数配置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     |:---|:---|
     | 使用域名调用API            | 使用服务分配的调试域名或服务绑定的域名调用API，无需另外配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | 使用IP调用DEFAULT分组的API  | API允许使用IP地址调用DEFAULT分组下的API，无需另外配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | 使用IP调用非DEFAULT分组的API | - 使用IP地址直接调用非DEFAULT分组下的APP认证的API： 1. 将实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)"app_route"和"app_secret"设置为"on"。开启"app_route"之后，同一凭据不能授权给相同请求路径和方法的API。  2. 在请求消息中添加Header参数"X-HW-ID"和"X-HW-APPKEY"，参数值为API所授权凭据的Key和Secret。   使用**简易认证**（APP认证）调用API时，仅需在请求消息中添加Header参数"X-Apig-AppCode"和"host"即可。   - 使用IP地址直接调用非DEFAULT分组下的非APP认证的API，需要在请求消息中添加Header参数"host"。   |
        
     
   
   - **{Path}** ：请求路径，需替换为[获取API的调用信息]中获取的请求路径。
   
   - **{Query}** ：查询参数，可选，格式为"参数名=参数取值"，例如limit=10，多个查询参数之间使用"**\&** "隔开。需根据[获取API的调用信息]中获取的请求参数进行设置。
   
   - **{Header}** ：请求头参数，格式为"参数名: 参数取值"，例如Content-Type: application/json。需根据[获取API的调用信息]中获取的请求参数进行设置。
   
   - **{Body}** ：请求消息体，JSON格式。需根据[获取API的调用信息]中获取的请求体内容描述进行设置。
    

2. 为API请求添加认证信息。
   
   | API认证方式                                     | API请求参数配置                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   |:---|:---|
   | APP认证（签名认证）                                 | 使用获取的SDK对API请求进行签名，具体请参考[使用APP认证调用API](https://support.huaweicloud.com/devg-apig/apig-dev-180307034.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | APP认证（简易认证）                                 | 在API请求中添加Header参数"X-Apig-AppCode"，参数值为[获取API的调用信息]中获取到的AppCode。具体请参考[快速入门](https://support.huaweicloud.com/qs-apig/apig-ug-180307002.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | APP认证（AIAPIKey认证）                           | 在API请求中添加Header参数"Authorization"，参数值为：Bearer [获取API的调用信息]中获取到的AIAPIKey。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | APP认证（app_api_key认证）                        | - 实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)"app_api_key"已设置为"on"，开启app_api_key认证。  - 在API请求中添加Header或Query参数"apikey"，参数值为[获取API的调用信息]中获取到的Key。                                                                                                                                                                                                                                                                                                                                                                                                          |
   | APP认证（app_secret认证）                         | - 实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)"app_secret"已设置为"on"，开启app_secret认证，且"app_api_key"已设置为"off"，关闭app_api_key认证。  - 在API请求中添加Header参数"X-HW-ID"，参数值为[获取API的调用信息]中获取到的Key。  - 在API请求中添加Header参数"X-HW-AppKey"，参数值为[获取API的调用信息]中获取到的Secret。                                                                                                                                                                                                            |
   | APP认证（app_basic认证）                          | - 实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)"app_basic"已设置为"on"，开启app_basic认证。  - 在API请求中添加Header参数"Authorization"，参数值为"Basic"+base64(appkey+":"+appsecret)，其中appkey和appsecret分别为[获取API的调用信息]中获取到的Key和Secret。                                                                                                                                                                                                                                                                                                                                        |
   | APP认证（app_jwt认证）                            | - 实例的[配置参数](https://support.huaweicloud.com/usermanual-apig/apig_03_0039.html)"app_jwt"已设置为"on"，开启app_jwt认证。  - 在API请求中添加Header参数"Timestamp"，参数值为当前时间的Unix时间戳，单位为毫秒。  - 在API请求中添加Header参数"Authorization"，参数值为sha256(appkey+appsecret+timestamp)，且sha256加密后的字符串需为小写字母。其中appkey和appsecret分别为[获取API的调用信息]中获取到的Key和Secret，timestamp为当前时间的Unix时间戳，单位为毫秒。  - 在API请求中添加Header参数"X-HW-ID"，参数值为[获取API的调用信息]中获取到的Key。   |
   | APP认证（双重认证）                                 | 在API请求中同时携带APP认证和自定义认证的认证信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | IAM认证（Token认证）                              | 先获取云服务平台的认证Token，然后在API请求中添加Header参数"X-Auth-Token"，参数值为认证Token，具体请参考[Token认证](https://support.huaweicloud.com/devg-apig/apig-dev-180307020.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | IAM认证（AK/SK认证）                              | 使用获取的SDK对API请求进行签名，具体请参考[AK/SK认证](https://support.huaweicloud.com/devg-apig/apig-dev-180307021.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | IAM认证（双重认证）                                 | 在API请求中同时携带IAM认证和自定义认证的认证信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 自定义认证  | 根据自定义认证的定义，在API请求参数中携带相关认证信息进行认证。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 无认证     | 无需认证，可直接调用API。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 第三方认证（API策略）                                | 向API提供者获取请求参数中要携带的第三方认证信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      
   
 
