Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Integrar el SDK

Última actualización: Sep 23, 2026

El SDK de Alibaba Cloud simplifica el desarrollo y la integración de funciones cuando su aplicación invoca operaciones de OpenAPI. Este tema describe el flujo completo de integración: instalar el SDK, configurar las credenciales de acceso y utilizar el SDK. También abarca la Advance API para cargar archivos y las preguntas frecuentes.

Requisitos previos

  • Python: versión 3.7 o posterior.

  • Par de AccessKey: se requiere un par de AccessKey para invocar las OpenAPI de Alibaba Cloud. El usuario de Resource Access Management (RAM) asociado al par de AccessKey debe contar con los permisos necesarios para invocar las operaciones de API correspondientes. De lo contrario, las llamadas fallarán con el error "You are not authorized to perform this operation".

  • Paquetes del SDK: los ejemplos principales de este tema requieren los paquetes alibabacloud_dysmsapi20180501, alibabacloud_tea_openapi y alibabacloud_tea_util.

Instalar el SDK

SDK Center proporciona el método de instalación del SDK para cada producto. Para obtener e instalar el SDK, siga estos pasos:

  1. Inicie sesión en SDK Center.

  2. Seleccione el producto cuyas API desea invocar, por ejemplo, Short Message Service (SMS).

  3. En la página Installation, seleccione Python en All Languages.

  4. En la pestaña Getting Started, busque el método de instalación del SDK para Short Message Service (SMS) e instálelo.

Configurar las credenciales de acceso

Las llamadas a las OpenAPI de Alibaba Cloud suelen requerir credenciales de acceso. Los tipos más comunes son AccessKey (AK) y los token de Security Token Service (STS). Para evitar filtraciones, una práctica habitual consiste en almacenar las credenciales en variables de entorno. Para conocer las mejores prácticas de seguridad, consulte Secure use of access credentials.

Este tema utiliza un par de AccessKey como ejemplo. A continuación se muestra cómo usar las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET:

Configurar en Linux y macOS

Establecer un AccessKey de Alibaba Cloud en variables de entorno en Linux y macOS

Esta sección toma como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Puede cambiar los nombres de las variables según sus necesidades; por ejemplo, usar OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.

Configure las variables de entorno mediante el comando export:

Importante

Una variable de entorno temporal establecida con el comando export solo es válida durante la sesión actual. La variable se elimina cuando finaliza la sesión. 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.

Configurar en Windows

Establecer un AccessKey de Alibaba Cloud en variables de entorno en Windows

Esta sección toma como ejemplo las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET. Puede cambiar los nombres de las variables según sus necesidades; por ejemplo, usar OSS_ACCESS_KEY_ID y OSS_ACCESS_KEY_SECRET.

Usar la interfaz gráfica de usuario (GUI)

  • Procedimiento

    Los siguientes pasos describen cómo establecer variables de entorno mediante la GUI en Windows 10.

    En el escritorio, haga clic derecho en This PC y elija Properties > Advanced system settings > Environment Variables > New dentro de System variables o 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), haga clic en Run, introduzca cmd y luego haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Usar el 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 /M

    El parámetro /M indica que se trata de una variable de entorno del sistema. Puede omitirlo cuando establezca una variable de entorno de usuario.

  • Prueba de la configuración

    Haga clic en Start (o use el atajo de teclado Win+R), haga clic en Run, introduzca cmd y luego haga clic en OK (o presione Entrar) para abrir el símbolo del sistema. Ejecute los comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% y echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Si los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Usar 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 que solo sean válidas 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 los comandos devuelven el AccessKey correcto, la configuración fue exitosa.

Importante

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 la nueva configuración surta efecto.

Usar el SDK

El flujo de llamada estándar aplica a la mayoría de los escenarios. Sin embargo, algunos productos en la nube no admiten la carga directa de archivos mediante las operaciones estándar de OpenAPI. Para cargar archivos en estos productos, utilice la Advance API. Consulte Upload files with the Advance API.

Este tema toma como ejemplo la operación SendMessageToGlobe de Short Message Service (SMS). Para consultar la referencia de la API de la operación SendMessageToGlobe, consulte SendMessageToGlobe.

Inicializar el cliente de solicitud

Todas las llamadas a OpenAPI se realizan a través del cliente de solicitud (Client) que proporciona el SDK. Inicialice el cliente de solicitud antes de invocar cualquier operación de OpenAPI. Este cliente admite varios métodos de inicialización. En este ejemplo se utiliza un par de AccessKey. Para conocer otros métodos de inicialización, consulte Manage access credentials.

  • Los objetos Client son seguros para hilos. Por ejemplo, puede compartir sin riesgo una única instancia de Dysmsapi20180501Client en un entorno multihilo. No es necesario crear una instancia independiente para cada hilo.

  • Evite crear objetos Client con frecuencia, ya que esto desperdicia recursos y degrada el rendimiento. Se recomienda aplicar el patrón singleton para encapsular el cliente. Así se garantiza que solo se inicialice una instancia de cliente para las mismas credenciales de acceso y endpoint durante todo el ciclo de vida de la aplicación.

@staticmethod
def create_client() -> Dysmsapi20180501Client:
    config = open_api_models.Config(
        # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
        access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
        access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    )
    # See https://api.alibabacloud.com/product/Dysmsapi.
    config.endpoint = f'dysmsapi.aliyuncs.com'
    return Dysmsapi20180501Client(config)

Crear un objeto de solicitud

Para pasar parámetros al invocar una operación de OpenAPI, utilice el objeto de solicitud que proporciona el SDK. Estos objetos siguen el formato <API operation name>Request. Para obtener más información sobre los parámetros de solicitud, consulte la documentación de la API correspondiente. La documentación de la API utilizada en este ejemplo se encuentra en SendMessageToGlobe.

Si una operación de OpenAPI no admite parámetros de solicitud, no es necesario crear un objeto de solicitud. Por ejemplo, la operación DescribeCdnSubList no acepta parámetros de solicitud.

# Create a request object and set the required input parameters.
send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
    # Replace with the recipient number.
    to='<YOUR_NUMBER>',
    # Replace with the SMS content.
    message='<YOUR_MESSAGE>'
)

Enviar la solicitud

Se recomienda invocar la función <api_name>_with_options para enviar la solicitud, donde <api_name> es el nombre de la OpenAPI en formato snake_case. Esta función recibe dos parámetros: el objeto de solicitud creado en el paso anterior y un objeto de opciones de ejecución. El objeto de opciones de ejecución define el comportamiento de la solicitud, como los tiempos de espera y la configuración del proxy. Para más detalles, consulte Advanced Configurations.

La función devuelve un objeto de respuesta si la solicitud se completa correctamente. Imprima o registre la respuesta para comprobar el resultado de la llamada.

Si una operación de OpenAPI no admite parámetros de solicitud, no es necesario pasar un objeto de solicitud al enviarla. Por ejemplo, al invocar DescribeCdnSubList, solo se pasan las opciones de ejecución.

# Create runtime parameters.
runtime = util_models.RuntimeOptions()
client = create_client()
# Send the request.
client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)

Gestionar excepciones

El SDK de Python V2.0 clasifica las excepciones en dos tipos principales:

  • TeaUnretryableException: se genera principalmente por problemas de red, después de que los reintentos alcanzan el límite máximo permitido.

  • TeaException: se produce sobre todo ante errores de lógica de negocio en el lado del servicio.

    Para más información sobre la gestión de excepciones, consulte Exception handling.

Importante

Implemente medidas adecuadas para gestionar las excepciones, como propagarlas, registrarlas e intentar recuperarse de ellas. Esto garantiza la robustez y estabilidad de su sistema.

Ejemplo de código completo

El siguiente ejemplo integra los pasos anteriores: inicializar el cliente de solicitud, crear un objeto de solicitud, enviar la solicitud y gestionar las excepciones.

Ejemplo de llamada a la API

import os
import sys
from typing import List
from alibabacloud_dysmsapi20180501.client import Client as Dysmsapi20180501Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20180501 import models as dysmsapi_20180501_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Dysmsapi20180501Client:
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # See https://api.alibabacloud.com/product/Dysmsapi.
        config.endpoint = f'dysmsapi.aliyuncs.com'
        return Dysmsapi20180501Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        # Create a request object and set the required input parameters.
        send_message_to_globe_request = dysmsapi_20180501_models.SendMessageToGlobeRequest(
            # Replace with the recipient number.
            to='<YOUR_NUMBER>',
            # Replace with the SMS content.
            message='<YOUR_MESSAGE>'
        )
        # Create runtime parameters.
        runtime = util_models.RuntimeOptions()
        try:
            # Send the request.
            send_message_to_globe_response = client.send_message_to_globe_with_options(send_message_to_globe_request, runtime)
            # Print the API response to verify the result.
            print(send_message_to_globe_response)
        except Exception as error:
            # For demonstration purposes only. Handle exceptions with care and never ignore exceptions in your project.
            # The error message.
            error_message = getattr(error, 'message', str(error))
            print(error_message)
            # The diagnostic URL.
            print(getattr(error, 'data', {}).get("Recommend"))
            UtilClient.assert_as_string(error_message)

if __name__ == '__main__':
    Sample.main(sys.argv[1:])

Cargar archivos con la Advance API

Algunos productos en la nube, como Image Search y Visual Intelligence API, no admiten la carga directa de archivos mediante las operaciones estándar de OpenAPI descritas en la documentación oficial. Para cargar archivos en estos productos, utilice la API Advance que proporciona el producto en la nube. La API Advance acepta un objeto de flujo de archivo. Internamente, el producto almacena temporalmente el archivo cargado en Alibaba Cloud OSS. La región de almacenamiento predeterminada es cn-shanghai. Posteriormente, el producto lee el archivo temporal desde OSS para ofrecer la función solicitada. El siguiente ejemplo utiliza la API DetectBodyCount del servicio Face and Body de Alibaba Cloud Visual Intelligence API.

Nota

Los archivos temporales almacenados en Alibaba Cloud OSS se eliminan periódicamente.

Para inicializar el cliente de solicitud

Establezca tanto region_id como el endpoint del producto al inicializar el cliente de solicitud. El parámetro region_id especifica la región de almacenamiento del archivo temporal en OSS. Si no establece region_id, el producto y OSS podrían ubicarse en regiones distintas, lo cual puede provocar tiempos de espera agotados al invocar la operación de OpenAPI.

def create_client() -> facebody20191230Client:
    config = open_api_models.Config(
        # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set in your code execution environment.
        access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set in your code execution environment.
        access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    )
    # The endpoint and regionId must be set to the same region.
    config.region_id = 'cn-shanghai'
    config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'
    return facebody20191230Client(config)

Para crear un objeto de solicitud

Cree un objeto de solicitud <OpenAPIName>AdvanceRequest para pasar el flujo del archivo. El nombre del parámetro siempre es ImageURLObject.

# Open the file as a binary stream.
with open('<FILE_PATH>', "rb") as f:  # Replace with your file path.
    # Set request parameters.
    detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
        image_urlobject=f,
    )

Para enviar la solicitud

Invoque la función <apiName>Advance para enviar la solicitud, donde <apiName> es el nombre de la OpenAPI en formato lower camelCase.

# Runtime configuration.
runtime = util_models.RuntimeOptions()
client = create_client()
# Send the request.
res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)

El siguiente ejemplo muestra el código completo para cargar un archivo con la Advance API.

import os

from alibabacloud_facebody20191230 import models as facebody_20191230_models
from alibabacloud_facebody20191230.client import Client as facebody20191230Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> facebody20191230Client:
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set in your code execution environment.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set in your code execution environment.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        config.region_id = 'cn-shanghai'
        config.endpoint = 'facebody.cn-shanghai.aliyuncs.com'
        return facebody20191230Client(config)

    @staticmethod
    def main() -> None:
        client = Sample.create_client()
        # Open the file as a binary stream.
        with open('<FILE_PATH>', "rb") as f:  # Replace <FILE_PATH> with your file path.
            # Set request parameters.
            detect_body_count_advance_request = facebody_20191230_models.DetectBodyCountAdvanceRequest(
                image_urlobject=f,
            )
            runtime = util_models.RuntimeOptions()
            try:
                # Send the request.
                res = client.detect_body_count_advance(detect_body_count_advance_request, runtime)
                print(res)
            except Exception as error:
                # This is for printing and demonstration purposes only. Handle exceptions with care and do not ignore them in your project.
                print(error)

if __name__ == '__main__':
    Sample.main()

Preguntas frecuentes

"You are not authorized to perform this operation"

Causa: el usuario de RAM asociado a su par de AccessKey no cuenta con los permisos necesarios para invocar esta operación de la API.

Solución: otorgue al usuario de RAM los permisos de OpenAPI requeridos. Para más información sobre cómo conceder permisos a un usuario de RAM, consulte Manage RAM user permissions.

Por ejemplo, la invocación de la operación SendMessageToGlobe devuelve este error si el usuario de RAM carece del permiso correspondiente. Cree una directiva de permisos personalizada como la siguiente y asígnela al usuario de RAM.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "dysms:SendMessageToGlobe",
      "Resource": "*"
    }
  ]
}

"SDK.EndpointResolvingError"

Causa: la operación de OpenAPI que intenta invocar no es compatible con el endpoint especificado al inicializar el cliente de solicitud.

Solución: consulte Endpoint configuration, actualice el endpoint a un valor compatible y vuelva a invocar la operación de OpenAPI.

AttributeError o KeyError relacionados con el AccessKey

Una llamada a OpenAPI reporta AttributeError: 'AttributeError' object has no attribute 'message' o KeyError: 'ALIBABA_CLOUD_ACCESS_KEY_ID'.

Causa: el par de AccessKey no se pasó correctamente.

Solución: al inicializar el cliente de solicitud, compruebe que el par de AccessKey se haya pasado de forma correcta. Tenga en cuenta que os.environ["XXX"] obtiene el valor de XXX desde las variables de entorno.

Para conocer más soluciones a los errores que encuentre al usar el SDK, consulte FAQ.