全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云SDK开发指南

使用CommonRequest

更新时间:2018-02-05 22:53:36

Common调用方式

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

CommonRequest有如下特点:

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

开始使用

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

  • 域名(domain):该产品的通用访问域名,一般可以在”调用方式”中获得。

  • API版本(version):该API的版本号,格式为YYYY-MM-DD,一般可以在”公共参数”中获得。

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

  • 当调用的OpenAPI为Rpc风格时(大部分阿里云产品OpenAPI为Rpc风格)如ECS和RDS,需要赋值以下字段:

    • Action字段:使用request.ApiName = "<Action>"来指定API名称。

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

  • 当调用的OpenAPI风格为Restful风格接口时如容器服务, 需要赋值以下字段:

    • PathPattern字段:使用request.PathPattern = "<PathPattern>"来指定Restful路径。

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

      如何区分Rpc风格和Restful风格?

      • 简单来说,API参数中,包含Action字段的是RPC风格,需要PathPattern的是Restful风格。
      • 一般情况下,每个产品内,所有API的调用风格是统一的。
      • 每个API仅支持特定的一种风格调用,传入错误的标识,可能会调用到其他API,或收到“ApiNotFound”的错误信息。

代码示例

调用Rpc风格的接口

以ECS产品的DescribeInstanceStatusAPI为例:

  1. package main
  2. import (
  3. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
  5. "fmt"
  6. )
  7. func main() {
  8. client, err := sdk.NewClientWithAccessKey("cn-hangzhou", "{your_access_key_id}", "{your_access_key_id}")
  9. if err != nil {
  10. panic(err)
  11. }
  12. request := requests.NewCommonRequest()
  13. request.Domain = "ecs.aliyuncs.com"
  14. request.Version = "2014-05-26"
  15. // 因为是RPC接口,因此需指定ApiName(Action)
  16. request.ApiName = "DescribeInstanceStatus"
  17. request.QueryParams["PageNumber"] = "1"
  18. request.QueryParams["PageSize"] = "30"
  19. response, err := client.ProcessCommonRequest(request)
  20. if err != nil {
  21. panic(err)
  22. }
  23. fmt.Print(response.GetHttpContentString())
  24. }

调用Restful风格的接口

以容器服务的查看所有集群实例API为例:

  1. package main
  2. import (
  3. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  4. "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
  5. "fmt"
  6. )
  7. func main() {
  8. client, err := sdk.NewClientWithAccessKey("cn-hangzhou", "{your_access_key_id}", "{your_access_key_id}")
  9. if err != nil {
  10. panic(err)
  11. }
  12. request := requests.NewCommonRequest()
  13. request.Domain = "cs.aliyuncs.com"
  14. request.Version = "2015-12-15"
  15. // 因为是Restful接口,因此需指定PathPattern
  16. request.PathPattern = "/clusters"
  17. response, err := client.ProcessCommonRequest(request)
  18. if err != nil {
  19. panic(err)
  20. }
  21. fmt.Print(response.GetHttpContentString())
  22. }
本文导读目录