Cuando llame a operaciones de OpenAPI, se recomienda integrar el SDK en su proyecto. El uso del SDK simplifica el desarrollo, permite incorporar funciones rápidamente y reduce los costos de mantenimiento. La integración de Alibaba Cloud SDK consta de tres pasos: importar Alibaba Cloud SDK, establecer las credenciales de acceso y usar el SDK. En este tema se describe el proceso de integración del SDK en detalle.
Requisitos previos
Go 1.10.x o posterior
Importación del SDK
Inicie sesión en SDK Center y seleccione el producto cuya API desea llamar, por ejemplo, Short Message Service (SMS).
-
En la página Installation. Luego, en All Languages, seleccione Go. En la pestaña Quick Start encontrará el método de instalación del SDK para Short Message Service (SMS).
Comando para instalar la biblioteca principal del SDK:
go get github.com/alibabacloud-go/darabonba-openapi/v2/client. Comando para instalar el SDK de Short Message Service (SMS):go get github.com/alibabacloud-go/dysmsapi-20170525/v4. Repositorio de código fuente y de la versión: https://github.com/alibabacloud-go/dysmsapi-20170525/.
Configuración de las credenciales de acceso
Para llamar a las OpenAPI de Alibaba Cloud, generalmente es necesario configurar credenciales de acceso. Los tipos más comunes son AccessKey (AK) y Security Token Service token (STS token). Una práctica habitual para evitar filtraciones consiste en almacenarlas en variables de entorno. Para conocer otras soluciones de seguridad, consulte Securely use access credentials. Este tema toma como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Configúrelas de la siguiente manera.
Configuración en Linux y macOS
Configuración de una AccessKey de Alibaba Cloud en variables de entorno en Linux y macOS
Esta sección utiliza como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si lo requiere, sustituya estos nombres por otros, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.
Configure las variables de entorno mediante el comando export:
Una variable de entorno temporal establecida con el comando export solo es válida durante la sesión actual. Al finalizar la sesión, la variable se elimina. Para conservarla de forma permanente, agregue el comando export al archivo de configuración de inicio de su sistema operativo.
-
Configure el AccessKey ID y presione Entrar.
# Replace yourAccessKeyID with your AccessKey ID. export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID -
Configure el secreto de AccessKey y presione Entrar.
# Replace yourAccessKeySecret with your AccessKey secret. export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret -
Compruebe la configuración.
Ejecute el comando
echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Si el comando devuelve el AccessKey ID correcto, la configuración fue exitosa.
Configuración en Windows
Configuración de una AccessKey de Alibaba Cloud en variables de entorno en Windows
Esta sección utiliza como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si lo requiere, sustituya estos nombres por otros, como OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.
Uso de la interfaz gráfica de usuario (GUI)
-
Procedimiento
A continuación se describen los pasos para configurar variables de entorno mediante la GUI en Windows 10.
En el escritorio, haga clic con el botón derecho en This PC y elija Properties > Advanced system settings > Environment Variables > New, ya sea en System variables o en User variables. Después, complete la configuración.
Variable
Valor de ejemplo
AccessKey ID
Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_ID
Valor de la variable: yourAccessKeyID
Secreto de AccessKey
Nombre de la variable: ALIBABA_CLOUD_ACCESS_KEY_SECRET
Valor de la variable: yourAccessKeySecret
-
Prueba de la configuración
Haga clic en Start (o use el atajo de teclado Win+R), luego en Run, introduzca
cmdy haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%yecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si devuelven la AccessKey correcta, la configuración fue exitosa.
Uso del símbolo del sistema (CMD)
-
Procedimiento
Abra el símbolo del sistema como administrador y ejecute los siguientes comandos para agregar nuevas variables de entorno al sistema.
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /MEl parámetro
/Mindica que se trata de una variable de entorno del sistema. Puede omitirlo cuando configure una variable de entorno de usuario. -
Prueba de la configuración
Haga clic en Start (o use el atajo de teclado Win+R), luego en Run, introduzca
cmdy haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandosecho %ALIBABA_CLOUD_ACCESS_KEY_ID%yecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si devuelven la AccessKey correcta, la configuración fue exitosa.
Uso de Windows PowerShell
En PowerShell puede establecer nuevas variables de entorno válidas para todas las sesiones nuevas:
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)
Para establecer variables de entorno aplicables a todos los usuarios, necesita permisos de administrador:
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)
También puede definir variables de entorno temporales, válidas únicamente durante la sesión actual:
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"
En PowerShell, ejecute los comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID y Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Si devuelven la AccessKey correcta, la configuración fue exitosa.
Después de configurar las variables de entorno, es posible que deba reiniciar sus herramientas de desarrollo, como los entornos de desarrollo integrados (IDE), o los servicios para que los nuevos ajustes surtan efecto.
Uso del SDK
Este tema utiliza como ejemplo la API SendMessageToGlobe de Short Message Service (SMS). Para consultar la referencia de la API SendMessageToGlobe, consulte SendMessageToGlobe.
1. Inicialización del cliente de solicitud
En el SDK V2.0, todas las llamadas a OpenAPI se inician a través de un cliente de solicitud (Client) proporcionado por el SDK. Por lo tanto, debe inicializarlo antes de llamar a cualquier operación de OpenAPI. El cliente admite varios métodos de inicialización. Este ejemplo utiliza una AccessKey. Para conocer otros métodos, consulte Manage access credentials.
Seguridad de hilos: la instancia del cliente es segura para hilos y se puede utilizar sin problemas en un entorno multihilo. No es necesario crear una instancia independiente para cada hilo.
En el desarrollo real, no se recomienda crear objetos de cliente con frecuencia, ya que esto desperdicia recursos y degrada el rendimiento. Se recomienda aplicar el patrón singleton para encapsular el cliente. De esta forma, solo se inicializa un objeto de cliente para las mismas credenciales de acceso y endpoint durante todo el ciclo de vida de la aplicación.
import (
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
"github.com/alibabacloud-go/tea/tea"
)
func CreateClient () (_result *dysmsapi20180501.Client, _err error) {
config := &openapi.Config{
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
// Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
_result = &dysmsapi20180501.Client{}
_result, _err = dysmsapi20180501.NewClient(config)
return _result, _err
}
2. Creación de una instancia de estructura de solicitud
Al llamar a una operación de OpenAPI para pasar parámetros, utilice la estructura Request que proporciona el SDK. El formato de nombre de la estructura Request de OpenAPI es <OpenAPI name>Request. Por ejemplo, el objeto de solicitud de la API SendSms es SendSmsRequest. Para obtener más información sobre los parámetros de solicitud, consulte la referencia de la API correspondiente. La referencia utilizada en este ejemplo se encuentra en SendMessageToGlobe.
Si la operación de OpenAPI no admite parámetros de solicitud, no es necesario crear un objeto de solicitud. Por ejemplo, al llamar a DescribeCdnSubList, dicha API no acepta parámetros de solicitud.
// Create request object and set required input parameters
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
// Please replace with the actual recipient number.
To: tea.String("<YOUR_VALUE>"),
// Please replace with the actual SMS content.
Message: tea.String("<YOUR_VALUE>"),
}
3. Envío de la solicitud
Cuando llame a una operación de OpenAPI mediante el cliente de solicitud, se recomienda usar la función <API name>WithOptions. Esta función recibe dos parámetros: el primero es un puntero a la estructura Request de la API y el segundo es un puntero a la estructura de opciones de ejecución. Las opciones de ejecución definen el comportamiento de la solicitud, como los tiempos de espera y las configuraciones de proxy. Para obtener más información, consulte Advanced configurations.
Si la operación de OpenAPI no admite parámetros de solicitud, no es necesario pasar un objeto de solicitud al enviarla. Por ejemplo, al llamar a DescribeCdnSubList, esta API solo requiere las opciones de ejecución.
// You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import.
func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
client, _err := CreateClient()
if _err != nil {
return nil, _err
}
// Create request object and set required input parameters
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
// Please replace with the actual recipient number.
To: tea.String("<YOUR_VALUE>"),
// Please replace with the actual SMS content.
Message: tea.String("<YOUR_VALUE>"),
}
runtime := &util.RuntimeOptions{}
// To run the code, copy it and print the API return value.
response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
if _err != nil {
return nil, _err
}
return response, _err
}
4. Manejo de excepciones
El SDK V2.0 de Go clasifica las excepciones en dos tipos principales: error y SDKError.
error: errores ajenos a la lógica de negocio, como fallos de validación provocados por modificaciones en los archivos de origen del SDK o errores de análisis sintáctico.
SDKError: errores relacionados con la lógica de negocio.
Para obtener más información sobre el manejo de excepciones, consulte Handle exceptions.
Se recomienda adoptar medidas adecuadas para manejar las excepciones. Entre ellas destacan propagarlas correctamente, registrarlas en los registros e intentar la recuperación, con el fin de garantizar la solidez y estabilidad de su sistema.
Haga clic para ver el ejemplo de código completo
Escenario especial: configuración de la API Advance para cargar archivos
Cuando utiliza productos en la nube como Image Search y Visual Intelligence API para procesar imágenes locales o cargar imágenes, las operaciones de OpenAPI descritas en la documentación oficial no permiten cargar archivos directamente. Para cargar un archivo, utilice la API Advance del producto en la nube, la cual admite el paso de un objeto de flujo de archivo. El mecanismo subyacente funciona así: el producto almacena temporalmente el archivo cargado en Alibaba Cloud OSS, en la región de almacenamiento predeterminada cn-shanghai, e implementa la función correspondiente leyendo dicho archivo temporal desde ese servicio de OSS. Este ejemplo utiliza la API DetectBodyCount de Visual Intelligence API. A continuación se detalla el procedimiento.
Los archivos temporales almacenados en Alibaba Cloud OSS se eliminan periódicamente.
-
Inicializar el cliente de solicitud
Tenga en cuenta que debe configurar tanto
RegionIdcomo elEndpointdel producto en la nube. El parámetroRegionIdespecifica la región donde se almacenará el archivo temporal en OSS. Si no estableceRegionId, podrían producirse tiempos de espera agotados al llamar a la operación de OpenAPI, dado que el producto en la nube y OSS podrían encontrarse en regiones distintas.import ( "os" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client" "github.com/alibabacloud-go/tea/tea" ) func CreateClient() (_result *facebody20191230.Client, _err error) { config := &openapi.Config{ // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set. AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set. AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), } // The endpoint and regionId must be set to the same region. config.RegionId = tea.String("cn-shanghai") config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com") _result, _err = facebody20191230.NewClient(config) return _result, _err } -
Crear una instancia de la estructura AdvanceRequest
Al cargar un archivo local, debe utilizar la estructura AdvanceRequest proporcionada por el SDK para pasar el flujo del archivo. El formato de nombre de esta estructura es
<OpenAPI name>AdvanceRequest. Para identificar el nombre del parámetro que recibe el flujo, busque aquel cuyo tipo seaio.Readerdentro de la estructura AdvanceRequest correspondiente.// Replace with the file path. filePath := `<FILE_PATH>` // Open the file and create a stream. file, err := os.Open(filePath) if err != nil { return fmt.Errorf("Failed to open file: %v", err) } defer file.Close() // Close the file. // Create an AdvanceRequest struct instance. detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{ ImageURLObject: file, } -
Enviar la solicitud
Llame a la función
<API name>Advancepara enviar la solicitud. El parámetro de entrada es un puntero a la estructura AdvanceRequest.// You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import. func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) { client, _err := CreateClient() if _err != nil { return nil, _err } // Replace with the file path. filePath := `<FILE_PATH>` // Open the file and create a stream. file, err := os.Open(filePath) if err != nil { return nil, fmt.Errorf("Failed to open file: %v", err) } defer file.Close() // Close the file. // Create a request object. detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{ ImageURLObject: file, } runtime := &util.RuntimeOptions{} // Send the request. response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime) if _err != nil { return nil, _err } return response, nil }
Preguntas frecuentes
-
Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "You are not authorized to perform this operation".
-
Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host".
-
Al llamar a una operación de OpenAPI, se devuelve el mensaje de error "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found.".
Para conocer las soluciones a otros errores que pueden presentarse al usar el SDK, consulte FAQ.