全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云SDK开发指南

使用CommonRequest

更新时间:2018-02-24 18:13:03

CommonRequest调用方式

当您要访问的API没有产品SDK提供时,可以采用泛用型的API调用方式(CommonRequest)。使用CommonRequest调用方式可实现任意OpenAPI接口的调用。

CommonRequest有如下特点:

  1. 轻量:只需Core包即可发起调用,无需下载安装各产品的SDK。
  2. 简便:无需更新SDK即可调用最新发布的API。
  3. 快速迭代。

使用CommonRequest

阿里云产品的API有RPC和RESTful两种风格,不同风格的API的CommonRequest的调用方法也不同。

通常API参数中包含Action参数的是RPC风格,包含PathPattern参数的是RESTful风格。一般情况下,每个产品内,所有API的调用风格是统一的。每个API仅支持特定的一种风格调用,传入错误的标识,可能会调用到其他API,或收到ApiNotFound的错误信息。

发起一次CommonRequest请求,您需要获取以下几个参数的值。您可以在文档中心各产品的API文档中获取以下参数的值。此外,部分产品也可以通过OpenAPI Explorer来获取API的参数信息。

  • 域名(domain):该产品的通用访问域名。

  • API版本(version):该API的版本号,格式为YYYY-MM-DD。

    说明:在”公共参数”内容中,API版本号的信息通常是Version参数的值, 但也有些产品的API版本号为x-acs-version参数的值。

  • 当调用的API为RPC风格时(大部分阿里云产品API为RPC风格)如ECS和RDS,需要获取Action参数,使用request.ApiName = "<Action>"的方式来指定API名称。

    例如RunInstances接口的Action为RunInstances,在发起CommonRequest请求时,要使用request.ApiName = "RunInstances"来指定API名称。

  • 当调用的API为RESTful风格时如容器服务, 需要获取PathPattern参数,使用request.PathPattern = "<PathPattern>"的方式来指定RESTful路径。

    例如容器服务的查看所有集群实例的API的PathPattern为/clusters,在发起CommonRequest请求时,要使用request.PathPattern = "/clusters"指定RESTful路径。

代码示例

调用RPC风格的API

以下代码展示了如何使用CommonRequest的方式调用ECS的DescribeInstanceStatus接口:

  1. #include <iostream>
  2. #include <alibabacloud/core/AlibabaCloud.h>
  3. #include <alibabacloud/core/CommonClient.h>
  4. using namespace AlibabaCloud;
  5. int main(int argc, char** argv)
  6. {
  7. // 初始化 SDK
  8. AlibabaCloud::InitializeSdk();
  9. // 配置 ecs 实例
  10. ClientConfiguration configuration("<your-region-id>");
  11. CommonClient client("<your-access-key-id>", "<your-access-key-secret>", configuration);
  12. // 创建API请求并设置参数
  13. CommonRequest request(CommonRequest::RpcPattern);
  14. request.setDomain("ecs.aliyuncs.com");
  15. request.setVersion("2014-05-26");
  16. // 因为是 RPC 风格接口,需指定 ApiName(Action)
  17. request.setQueryParameter("Action", "DescribeInstanceStatus");
  18. request.setQueryParameter("PageNumber", "1");
  19. request.setQueryParameter("PageSize", "30");
  20. auto outcome = client.commonResponse(request);
  21. if (!outcome.isSuccess())
  22. {
  23. // 异常处理
  24. std::cout << outcome.error().errorCode() << std::endl;
  25. AlibabaCloud::ShutdownSdk();
  26. return -1;
  27. }
  28. std::cout << "result: " << outcome.result().payload() << std::endl;
  29. // 关闭 SDK
  30. AlibabaCloud::ShutdownSdk();
  31. return 0;
  32. }

调用RESTful风格的API

以下代码展示了如何使用CommonRequest的方式调用容器服务的查看所有集群实例接口:

  1. #include <iostream>
  2. #include <alibabacloud/core/AlibabaCloud.h>
  3. #include <alibabacloud/core/CommonClient.h>
  4. using namespace AlibabaCloud;
  5. int main(int argc, char** argv)
  6. {
  7. // 初始化 SDK
  8. AlibabaCloud::InitializeSdk();
  9. // 配置 ecs 实例
  10. ClientConfiguration configuration("<your-region-id>");
  11. CommonClient client("<your-access-key-id>", "<your-access-key-secret>", configuration);
  12. // 创建API请求并设置参数
  13. CommonRequest request(CommonRequest::RoaPattern);
  14. request.setDomain("cs.aliyuncs.com");
  15. request.setVersion("2015-12-15");
  16. // 因为是 Restful 风格接口,需指定 ResourcePath
  17. request.setResourcePath("/clusters");
  18. auto outcome = client.commonResponse(request);
  19. if (!outcome.isSuccess())
  20. {
  21. // 异常处理
  22. std::cout << outcome.error().errorCode() << std::endl;
  23. AlibabaCloud::ShutdownSdk();
  24. return -1;
  25. }
  26. std::cout << "result: " << outcome.result().payload() << std::endl;
  27. // 关闭 SDK
  28. AlibabaCloud::ShutdownSdk();
  29. return 0;
  30. }
本文导读目录