Alibaba Cloud SDK V1.0 for Go admite llamadas genéricas a la API, las cuales le permiten invocar cualquier operación de la API sin instalar el SDK de cada servicio.
Características
Ligero: solo necesita instalar la biblioteca principal para llamar a todas las operaciones de la API, sin instalar el SDK de cada servicio.
Iteración rápida y compatibilidad: si un servicio en la nube aún no proporciona un SDK, o este no se ha actualizado para las operaciones más recientes de la API, puede usar llamadas genéricas. Así accederá a las últimas operaciones sin esperar actualizaciones del SDK.
Para obtener más información, consulte Generic calls and specialized calls.
Notas de uso
Antes de hacer una llamada genérica, obtenga y especifique manualmente los metadatos obligatorios, como la versión de la API, la URL de la solicitud y el tipo de parámetro. Para obtener más información, consulte API metadata.
Instale la biblioteca principal de Alibaba Cloud SDK V1.0 for Go
Ejecute el siguiente comando para instalar la biblioteca principal de Alibaba Cloud SDK V1.0 for Go:
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
Llame a una operación de la API
Inicialice un cliente de solicitudes
Cree un client en el paquete aliyunsdkcore para inicializar el cliente de solicitudes. En este ejemplo se usa un AccessKey pair para la autenticación. Para obtener más información, consulte Manage access credentials.
Para evitar filtraciones de claves, almacene su AccessKey pair en variables de entorno. Para obtener más información, consulte Configure environment variables in Linux, macOS, and Windows.
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
)
// Use an AccessKey pair to directly initialize the request client. os.Getenv indicates that the AccessKey ID and AccessKey secret are obtained from environment variables.
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
Configure la información de la operación de la API y los parámetros de la solicitud
Use CommonRequest para configurar los parámetros comunes de la solicitud y los parámetros específicos de la API operation. Para obtener más información sobre los parámetros comunes de la solicitud, consulte Advanced settings.
CommonRequest convierte los metadatos de la API, como el número de versión, la URL y el tipo de parámetro, en una solicitud HTTP válida y devuelve los datos de respuesta sin procesar. La forma de pasar los parámetros depende del estilo y el diseño de la API.
Parámetros específicos de la operación
La forma de pasar un parámetro de solicitud depende de los metadatos de la operación de la API. Por ejemplo, la operación DescribeInstanceStatus se define como {"name":"RegionId","in":"query",...}} en los metadatos. En este caso, "in":"query" indica que el identificador de región (RegionId) debe pasarse en QueryParams["key"] = "value".
|
Escenario |
Forma de pasar el parámetro |
|
|
QueryParams["key"] = "value" Nota
Para especificar un conjunto de pares clave-valor, use el siguiente formato: QueryParams["key.1"] = "value1", QueryParams["key.2"] = "value2",... |
|
|
FormParams["key"] = "value" Nota
Si el parámetro de la solicitud no es una cadena, convierta su valor a una cadena JSON antes de pasarlo. |
// 2. Create a CommonRequest object and configure the basic information about and request parameters of the API operation.
request := requests.NewCommonRequest()
// 2.1 Configure the basic information about the API operation
request.Domain = "ecs-cn-hangzhou.aliyuncs.com" // The endpoint of the API.
request.Version = "2014-05-26" // The version number of the API.
request.ApiName = "DescribeInstanceStatus" // The name of the API operation. When you call an RPC-style API operation, you must configure ApiName() to specify the name of the API operation.
request.Method = "POST" // The request method.
request.Scheme = "https" // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
// request.PathPattern = "/" // The resource path, which is required by ROA-style API operations. Do not configure this parameter for RPC-style API operations.
// 2.2 Configure the request parameters.
// Scenario 1: Configure the query parameters in the format of QueryParams["key"] = "value".
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
// Scenario 2: Configure the body parameters in the format of FormParams["key"] = "value".
// request.FormParams["key1"] = "value1"
// request.FormParams["key2"] = "value2"
// request.FormParams["key3"] = "value3"
Envíe una solicitud
Llame a la función ProcessCommonRequest del client para enviar la solicitud.
// Initiate a request.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
// Parse the response content in the JSON format, including the request ID and the response parameters for the API operation.
fmt.Print(response.GetHttpContentString())
Código de ejemplo
Ejemplo: llame a una operación de la API con estilo RPC
A continuación se llama a la operación DescribeRegions de ECS para mostrar una llamada genérica a una operación de la API con estilo RPC.
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"
request.Version = "2014-05-26"
request.ApiName = "DescribeInstanceStatus"
request.Method = "POST"
request.Scheme = "HTTPS"
instanceIds := []string{
"i-bp1axhql4dqXXXXXXXX",
"i-bp124uve8zqXXXXXXXX",
}
request.QueryParams["RegionId"] = "cn-hangzhou"
for i, id := range instanceIds {
request.QueryParams[fmt.Sprintf("InstanceId.%d", i+1)] = id
}
request.QueryParams["PageNumber"] = "1"
request.QueryParams["PageSize"] = "30"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
Ejemplo: llame a una operación de la API con estilo RESTful (ROA)
A continuación se llama a la operación DescribeClustersV1 de Container Service for Kubernetes (ACK) para mostrar una llamada genérica a una operación de la API con estilo RESTful (ROA).
package main
import (
"fmt"
"os"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "cs.aliyuncs.com" // The endpoint of the API operation.
request.Version = "2015-12-15" // The version number of the API operation.
// This is a RESTful API. Therefore, the PathPattern field must be specified.
request.PathPattern = "/api/v1/clusters" // The URL of the API operation. When you call an ROA-style API operation, you must configure set_uri_pattern() to specify a complete URL of the API operation. You can obtain the URL of an API operation from the API metadata.
request.Method = "GET" // The request method.
request.Scheme = "https" // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS.
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
Preguntas frecuentes
¿Qué debo hacer si aparece el mensaje de error "SDK.ServerError MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied"?
Causa: el AccessKey pair no se configuró correctamente.
Soluciones:
-
Ejecute los comandos a continuación para comprobar si las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET están configuradas.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Si se devuelve un AccessKey pair válido, las variables de entorno están configuradas correctamente. Si no se devuelve ningún AccessKey pair o el devuelto no es válido, configure las variables de entorno según corresponda. Para obtener más información, consulte Configure environment variables in Linux, macOS, and Windows.
-
Revise el código en busca de errores relacionados con el AccessKey pair.
Ejemplo de solicitud con error:
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("yourAccessKeyID"), os.Getenv("yourAccessKeySecret")) if err != nil { panic(err) }NotaEn el ejemplo anterior, las cadenas literales que se pasan a os.Getenv() no coinciden con los nombres reales de las variables de entorno. Una vez que configure las variables de entorno como ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET en su computadora, os.Getenv leerá los valores correctos.
Ejemplo de solicitud exitosa:
client, err := sdk.NewClientWithAccessKey("<RegionId>", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) if err != nil { panic(err) }