Tous les produits
Search
Centre de documentation

Alibaba Cloud SDK:Appels génériques

Dernière mise à jour :Aug 11, 2026

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.

Important

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 "in":"query", transmettez-le via une requête.

body

Si le paramètre indique "in":"body" ou "in": "formData", placez-le dans le corps de la requête. Dans ce cas, définissez la valeur de reqBodyType en fonction du type de corps utilisé.

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()