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
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.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.
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.
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 |
|
|
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");... |
|
|
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 |
# 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
-
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 :
-
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_SECRETWindows
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.
-
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']RemarqueCette 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'],
-
-
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.