Alibaba Cloud SDK for Java V2.0 prend en charge les appels d'API génériques. Cette fonctionnalité permet d'invoquer n'importe quelle opération OpenAPI sans installer les SDK spécifiques à chaque service.
Caractéristiques
Légèreté : Alibaba Cloud SDK V2.0 for Python permet d'appeler des opérations API en installant uniquement la bibliothèque principale du SDK, ce qui évite d'installer le SDK de chaque service.
Simplicité d'utilisation : définissez simplement des paramètres de requête communs et utilisez un client standard pour initier les requêtes. Les réponses sont renvoyées dans des formats standards.
Pour plus d'informations, consultez la rubrique Appels génériques et appels spécialisés.
Remarques d'utilisation
Avant d'effectuer un appel générique, nous vous recommandons de consulter les métadonnées de l'opération API afin de récupérer le style de l'API, les paramètres de requête et l'URL.
Installer la bibliothèque principale d'Alibaba Cloud SDK
Exécutez la commande suivante dans votre terminal pour installer la bibliothèque principale d'Alibaba Cloud SDK V2.0 for Python :
pip install alibabacloud-tea-openapi
Appeler une opération API
1. Initialiser le client de requête
Initialisez le client de requête en instanciant la classe Client du module client dans le package alibabacloud_tea_openapi. Utilisez ce client pour effectuer des appels OpenAPI. Vous pouvez également recourir à l'outil Credentials lors de l'initialisation du client. Pour plus d'informations sur cet outil, consultez la rubrique Gérer les identifiants d'accès.
L'instance du client est thread-safe. Dans votre application, adoptez le modèle singleton pour créer le client. Cela garantit qu'une seule instance de client est initialisée pour un même identifiant et un même endpoint durant tout le cycle de vie de l'application.
import os
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
# Obtain the AccessKey pair from environment variables.
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# Set the service endpoint.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
# config.protocol = 'HTTPS' # Send requests over HTTPS.
# config.http_proxy = 'http://127.0.0.1:9898'
# config.https_proxy='http://user:password@127.0.0.1:8989'
# config.read_timeout = 10000, # Read timeout period in milliseconds (ms).
# config.connect_timeout = 5000 # Connection timeout period in milliseconds (ms).
client = OpenApiClient(config)
# Use the Credentials tool.
# crendconfig = credentialConfig()
# crendconfig.type = 'access_key'
# crendconfig.access_key_id = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
# crendconfig.access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
#
# credentialsClient = CredClient(crendconfig)
# config = open_api_models.Config()
# config.credential = credentialsClient
# config.endpoint = f'ecs.cn-hangzhou.aliyuncs.com'
# client = OpenApiClient(config)
2. Configurer les informations OpenAPI
Utilisez la classe Params du module models dans le package alibabacloud_tea_openapi pour configurer les informations OpenAPI de base, telles que le style de l'API, sa version et la méthode de requête. L'exemple suivant montre comment appeler l'opération DescribeInstanceTypeFamilies :
params = open_api_models.Params(
style='RPC', # API style: RPC or ROA.
version='2014-05-26', # API version number.
action='DescribeInstanceTypeFamilies', # API name.
method='POST', # Request method.
pathname='/', # API resource path. The default path for RPC APIs is "/". For ROA APIs, get the resource path from data.path in the OpenAPI metadata.
protocol='HTTPS', # Request protocol: HTTPS or HTTP. We recommend that you use HTTPS.
auth_type='AK', # Authentication type. The default value is used. If the OpenAPI supports anonymous requests, you can pass Anonymous to make an anonymous request.
req_body_type='json', # Request body type. Supported types are byte, json, and formData.
body_type='json' # Response data format. json is supported.
)
3. Configurer les paramètres de requête
La classe OpenApiRequest du module models dans le package alibabacloud_tea_openapi sert à configurer les paramètres de requête. Transmettez ces paramètres via une requête (query), un corps (body) ou un flux (stream). Choisissez la méthode appropriée selon les informations fournies dans les métadonnées. Par exemple, le paramètre de requête RegionId de l'opération DescribeInstanceTypeFamilies est défini par {"name":"RegionId","in":"query",...}} dans les métadonnées. La mention "in":"query" indique que RegionId doit être passé en tant que paramètre de requête.
|
Mode de transmission du paramètre |
Description |
|
query |
Si le paramètre de requête affiche |
|
body |
Si le paramètre indique |
|
stream |
Pour uploader des fichiers, configurez le paramètre Stream afin de transmettre des flux de fichiers. |
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
# Scenario 1: Set query parameters.
query = {'RegionId': 'cn-hangzhou'}
# Create an API request object.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Scenario 2: Set body parameters. The value of reqBodyType is json.
# body = {
# 'param1': 'value1'
# }
# Create an API request object.
# request = open_api_models.OpenApiRequest(
# body=OpenApiUtilClient.query(body),
# )
# Scenario 3: Use a stream parameter to pass a file stream.
# Create an API request object.
# request = open_api_models.OpenApiRequest(
# stream='<FILE_STREAM>', # Replace <FILE_STREAM> with the actual file stream.
# )
# Scenario 4: Set body parameters. The value of reqBodyType is formData.
# form_data = {
# 'param1': 'value1'
# }
# Create an API request object.
# request = open_api_models.OpenApiRequest(
# body=form_data,
# )
4. Envoyer la requête
À l'aide du client créé à l'étape 1, appelez call_api pour une requête synchrone ou call_api_async pour une requête asynchrone. Vous pouvez également définir des paramètres d'exécution pour la requête en cours, comme les délais d'expiration ou les configurations de proxy. Pour plus de détails, reportez-vous à la rubrique Configurations avancées.
from alibabacloud_tea_util import models as util_models
# Runtime configurations, which take effect only for the current request.
runtime = util_models.RuntimeOptions(
# ignore_ssl=True # Ignores SSL certificate verification. Verification is enabled by default.
# autoretry=True, # Specifies whether to enable retries. Default: disabled.
# max_attempts=3 # Number of retries. Default: 3.
)
# Synchronous call.
response = client.call_api(params, request, runtime)
# Asynchronous call.
# response = await client.call_api_async(params, request, runtime)
# The return value is a dict. You can get three types of data from the result: body, headers, and statusCode (the HTTP status code).
print(response['body'])
Exemples de code
Exemple : Appeler une opération API de style RPC
L'exemple ci-dessous effectue un appel générique de l'opération ECS DescribeInstanceTypeFamilies.
import os
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_util import models as util_models
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
class Sample:
@staticmethod
def main():
# Obtain the AccessKey pair from environment variables.
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# Set the service endpoint.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # API style.
version='2014-05-26', # API version number.
action='DescribeInstanceTypeFamilies', # API name.
method='POST', # Request method.
pathname='/', # API PATH. The default path for RPC APIs is "/".
protocol='HTTPS', # API protocol.
auth_type='AK',
req_body_type='json', # Request body content format.
body_type='json' # Response body content format.
)
query = {'RegionId': 'cn-hangzhou'}
# Create an API request object.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Create a runtime options object.
runtime = util_models.RuntimeOptions()
# Call the API and print the response.
response = client.call_api(params, request, runtime)
# The return value is a Map. You can get three types of data from the Map: body, headers, and statusCode (the HTTP status code).
print(response)
@staticmethod
async def main_async():
"""
The asynchronous main function, which shows how to call an Alibaba Cloud API asynchronously.
"""
# Obtain the AccessKey pair from environment variables.
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
# Set the service endpoint.
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
style='RPC', # API style.
version='2014-05-26', # API version number.
action='DescribeInstanceTypeFamilies', # API name.
method='POST', # Request method.
pathname='/', # API PATH.
protocol='HTTPS', # API protocol.
auth_type='AK',
req_body_type='json', # Request body content format.
body_type='json' # Response body content format.
)
query = {'RegionId': 'cn-hangzhou'}
# Create an API request object.
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(query),
)
# Create a runtime options object.
runtime = util_models.RuntimeOptions()
# Make an asynchronous API call.
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()
Exemple : Appeler une opération API de style RESTful (ROA)
L'exemple suivant effectue un appel générique de l'opération ACK DescribeClustersV1.
import os
from alibabacloud_openapi_util.client import Client as OpenApiUtilClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_util import models as util_models
class Sample:
@staticmethod
def main() -> None:
# Obtain the AccessKey ID and AccessKey secret from environment variables.
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = f'cs.cn-qingdao.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
# API name.
action='DescribeClustersV1',
# API version.
version='2015-12-15',
# API protocol.
protocol='HTTPS',
# API HTTP method.
method='GET',
auth_type='AK',
style='ROA',
# API PATH. For ROA APIs, get the resource path from data.path in the OpenAPI metadata.
pathname=f'/api/v1/clusters',
# Request body content format.
req_body_type='json',
# Response body content format.
body_type='json'
)
# query params
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# runtime options
runtime = util_models.RuntimeOptions()
# The return value is a Map. You can get three types of data from the Map: the response body, response headers, and the HTTP status code.
response = client.call_api(params, request, runtime)
print(response)
@staticmethod
async def main_async() -> None:
# Obtain the AccessKey ID and AccessKey secret from environment variables.
config = open_api_models.Config(
access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
)
config.endpoint = f'cs.cn-qingdao.aliyuncs.com'
client = OpenApiClient(config)
params = open_api_models.Params(
# API name.
action='DescribeClustersV1',
# API version.
version='2015-12-15',
# API protocol.
protocol='HTTPS',
# API HTTP method.
method='GET',
auth_type='AK',
style='ROA',
# API PATH.
pathname=f'/api/v1/clusters',
# Request body content format.
req_body_type='json',
# Response body content format.
body_type='json'
)
# query params
queries = {'name': 'cluster-demo'}
request = open_api_models.OpenApiRequest(
query=OpenApiUtilClient.query(queries)
)
# runtime options
runtime = util_models.RuntimeOptions()
# The return value is a Map. You can get three types of data from the Map: the response body, response headers, and the HTTP status code.
await client.call_api_async(params, request, runtime)
if __name__ == '__main__':
Sample.main()