Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Appels génériques

Dernière mise à jour :Aug 11, 2026

Alibaba Cloud SDK V1.0 for Python prend en charge les appels d'API génériques. Cette fonctionnalité permet d'appeler n'importe quelle opération d'API en installant uniquement la bibliothèque principale, sans SDK spécifiques aux services.

Avantages

  1. Légèreté : appelez n'importe quelle opération d'API en installant seulement aliyun-python-sdk-core. Aucun SDK spécifique au service n'est requis.

  2. Rapidité d'itération : utilisez immédiatement les dernières opérations d'API, même si le SDK spécifique au service est indisponible ou obsolète.

Appels génériques et appels spécialisés.

Remarques d'utilisation

Avant d'effectuer un appel générique, récupérez les métadonnées d'API requises, notamment la version de l'API, l'URL de la requête et le type de paramètre.

Installer la bibliothèque principale

Exécutez la commande suivante pour installer la bibliothèque principale :

pip install aliyun-python-sdk-core

Appeler une opération d'API

Initialiser un client de requête

Utilisez le module client de aliyunsdkcore pour créer un client capable d'appeler des opérations d'API. Cet exemple utilise une paire d'AccessKey. D'autres types d'identifiants sont disponibles dans la rubrique Gérer les identifiants d'accès.

Remarque

Pour éviter toute fuite d'AccessKey, stockez votre paire d'AccessKey dans des variables d'environnement. Consultez la rubrique Configurer les variables d'environnement sous Linux, macOS et Windows.

import os
from aliyunsdkcore.client import AcsClient

# Use an AccessKey pair to directly initialize the request client. 
client = AcsClient(
    os.environ['ALIYUN_ACCESS_KEY_ID'],
    os.environ['ALIYUN_ACCESS_KEY_SECRET'],
    region_id='cn-hangzhou',
    # verify=False  # Disable SSL certificate verification.
    # proxy={'http': 'http://127.0.0.1:9898'}, # Configure a proxy.
    # proxy={'https': 'http://<user>:<password>@127.0.0.1:8989'},
    connect_timeout=10, # Configure a timeout period for connection requests.
    timeout=15 # Configure a timeout period for read requests.
)

Configurer les paramètres de la requête

Utilisez CommonRequest pour définir les paramètres communs et spécifiques à l'opération d'API. Les détails sur les paramètres communs se trouvent dans la rubrique Paramètres avancés.

Remarque

Le module request convertit les métadonnées de l'API (version, URL et type de paramètre) en une requête HTTP valide et renvoie la réponse brute. La méthode de transmission des paramètres dépend du style de l'API.

Paramètres spécifiques à l'opération

Les métadonnées de l'API déterminent le mode de transmission de chaque paramètre. Par exemple, l'opération DescribeInstanceStatus définit {"name":"RegionId","in":"query",...}}, où "in":"query" signifie que RegionId doit être passé via putQueryParameter.

Description

Méthode de transmission du paramètre

"in":"query"

dd_query_param(self, k, v)

Remarque

Format pour plusieurs paires clé-valeur : dd_query_param("key.1","value1");

add_query_param("key.2","value2");...

"in":"body" ou "in": "formData"

add_body_params(self, k, v)

Remarque

Convertissez les valeurs de paramètres non textuelles en chaînes JSON.

Téléversement de fichiers

set_content(self, content)

Remarque

Définissez le paramètre content sur un tableau d'octets.

# 2. Create a CommonRequest object and configure the basic information about and request parameters of the API operation. 
request = CommonRequest()

# 2.1 Configure common request parameters.
request.set_domain('ecs-cn-hangzhou.aliyuncs.com')  # The endpoint of the API.
request.set_version('2014-05-26')  # The API version number.
request.set_action_name('DescribeInstanceStatus')  # The name of the API operation. When you call an RPC-style API operation, you must configure set_action_name() to specify the name of the API operation.
request.set_method('POST')  # The request method of the API operation.
request.set_protocol_type('HTTPS')  # The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS. 
# request.set_uri_pattern('/')  # The resource path, which is required by ROA-style API operations. Do not configure this parameter for RPC-style API operations. 

# 2.2 Configure operation-specific request parameters.
# Scenario 1: Specify the query parameters in add_query_param(self, k, v).
InstanceIds = [
    "i-bp1axhql4dqXXXXXXXX",
    "i-bp124uve8zqXXXXXXXX"
]
for depth1 in range(len(InstanceIds)):
    request.add_query_param('InstanceId.' + str(depth1 + 1), InstanceIds[depth1])
request.add_query_param('PageNumber', '1')
request.add_query_param('PageSize', '30')

# Scenario 2: Specify the body parameters in add_body_params(self, k, v).
# request.add_body_params('key1', 'value1')
# request.add_body_params('key2', 'value2')
# request.add_body_params('key3', 'value3')

# Scenario 3: Use set_content(self, content) to upload files, and set content to a byte array.
# file_path = "<FILE_PATH>" # Replace <FILE_PATH> with the actual file path.
# with open(file_path, 'rb') as file:
#    Read the image content as a byte array.
#    ByteArray = file.read()
# request.set_content(ByteArray)

Envoyer la requête

Appelez do_action_with_exception sur le client avec l'instance CommonRequest.

# Initiate a request.
response = client.do_action_with_exception(request)
# If the response is of the byte type, the request ID and response parameters are returned.
print(f"response:\n{response}")
# Parse the response in JSON format.
response_json = json.loads(response.decode('utf-8'))  # Convert the response to a Python dictionary.
print("RequestId:", response_json["RequestId"])  # The request ID.

Exemples

Exemple : Appeler une opération d'API de style RPC

Appelez l'opération DescribeInstanceStatus d'Elastic Compute Service (ECS) via un appel générique de style RPC.

import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

class Sample:

    @staticmethod
    def main():
        # Use an AccessKey pair to directly initialize the request client. 
        client = AcsClient(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                           'cn-hangzhou')
        # Create a request object.
        request = CommonRequest()
        request.set_domain('ecs-cn-hangzhou.aliyuncs.com')  # The endpoint of the API.
        request.set_version('2014-05-26')  # The API version number.
        request.set_action_name('DescribeRegions')  # The name of the API operation. When you call an RPC-style API operation, you must configure set_action_name() to specify the name of the API operation.
        request.set_method('POST')  # The request method of the API operation.
        request.set_protocol_type('HTTPS')  # The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS. 
        InstanceIds = [
            "i-bp1axhql4dqXXXXXXXX",
            "i-bp124uve8zqXXXXXXXX"
        ]
        for depth1 in range(len(InstanceIds)):
            request.add_query_param('InstanceId.' + str(depth1 + 1), InstanceIds[depth1])
        request.add_query_param('PageNumber', '1')
        request.add_query_param('PageSize', '30')
        # Initiate a request and handle the response.
        response = client.do_action_with_exception(request)
        print(response)

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

Exemple : Appeler une opération d'API RESTful (style ROA)

Appelez l'opération DescribeClustersV1 de Container Service for Kubernetes (ACK) via un appel générique RESTful (ROA).

import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

class Sample:

    @staticmethod
    def main():
        # Use an AccessKey pair to directly initialize the request client. 
        client = AcsClient(
            os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
            'cn-hangzhou')
        # Create a request object.
        request = CommonRequest()
        request.set_domain('cs.aliyuncs.com')  # The endpoint of the API operation.
        request.set_version('2015-12-15')  # The API version number.
        request.set_uri_pattern(
            f'/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.set_method('GET')  # The request method of the API operation.
        request.add_query_param('name', 'cluster-demo')  # Configure the request parameters.
        # Initiate a request and handle the response.
        response = client.do_action_with_exception(request)
        print(response)

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

FAQ

  1. Que faire si le message d'erreur « Error:MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied » s'affiche ?

    Cause : la paire d'AccessKey est mal configurée.

    Solutions :

    1. Vérifiez si les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sont définies.

      Linux/macOS

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

      Windows

      echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
      echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

      Si une paire d'AccessKey valide s'affiche, les variables d'environnement sont correctement configurées. Sinon, reconfigurez-les. Consultez la rubrique Configurer les variables d'environnement sous Linux, macOS et Windows.

    2. Recherchez les erreurs liées à la paire d'AccessKey dans le code.

      Exemple de requête erronée :

      AccessKeyId = os.environ['yourAccessKeyID'],
      AccessKeySecret = os.environ['yourAccessKeySecret']
      Remarque

      Cette erreur survient car les chaînes passées à os.environ sont des noms de clés littéraux, et non des identifiants. Définissez ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET comme variables d'environnement afin que os.environ puisse lire les valeurs correctes.

      Exemple de requête réussie :

      os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], 
      os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
  2. Que faire si le message d'erreur « aliyunsdkcore.acs_exception.exceptions.ServerException: HTTP Status: 400 Error:MissingParameter The input parameter "Timestamp" that is mandatory for processing this request is not supplied » s'affiche ?

    Cause : uri_pattern est défini pour une opération de style RPC.

    Solution : supprimez uri_pattern des paramètres de la requête.