Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Chamadas genéricas

Última atualização: Jul 03, 2026

O Alibaba Cloud SDK for Java V2.0 oferece suporte a chamadas de API genéricas, que permitem invocar qualquer operação OpenAPI sem instalar SDKs específicos de cada serviço.

Características

Leveza: Com o Alibaba Cloud SDK V2.0 para Python, você chama operações de API instalando apenas a biblioteca principal do Alibaba Cloud SDK, sem precisar instale o SDK de cada serviço.

Facilidade de uso: Crie parâmetros de solicitação comuns e use um cliente genérico para iniciar as requisições. As respostas retornam em formatos padronizados.

Para obter mais informações, consulte Chamadas genéricas e chamadas especializadas.

Observações de uso

Antes de fazer uma chamada genérica, recomendamos consultar os metadados da operação de API para obter o estilo da API, os parâmetros de solicitação e a URL.

Instale a biblioteca principal do Alibaba Cloud SDK

Execute o comando abaixo no terminal para instale a biblioteca principal do Alibaba Cloud SDK V2.0 para Python:

pip install alibabacloud-tea-openapi

Chamar uma operação de API

1. Inicializar o cliente de solicitação

Inicialize o cliente de solicitação criando uma classe Client do módulo client no pacote alibabacloud_tea_openapi. Use esse cliente para fazer chamadas OpenAPI. Você também pode usar a ferramenta Credentials ao inicializar o cliente. Para mais detalhes sobre a ferramenta Credentials, consulte Gerencie credenciais de acesso.

Importante

A instância do cliente é thread-safe. Na sua aplicação, use o padrão singleton para crie o cliente. Isso garante a inicialização de apenas uma instância para a mesma credencial e endpoint durante todo o ciclo de vida da aplicação.

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. Configure as informações da OpenAPI

Use a classe Params do módulo models no pacote alibabacloud_tea_openapi para configure as informações básicas da OpenAPI, como estilo da API, versão e método de solicitação. O exemplo a seguir demonstra como chamar a operação 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. Configure os parâmetros da solicitação

Use a classe OpenApiRequest do módulo models no pacote alibabacloud_tea_openapi para defina os parâmetros da requisição. Transmita parâmetros via query, body ou stream. Escolha o método adequado com base nas informações dos metadados. Por exemplo, o parâmetro de solicitação RegionId da operação DescribeInstanceTypeFamilies aparece como {"name":"RegionId","in":"query",...}} nos metadados. A indicação "in":"query" significa que RegionId deve ser passado como um parâmetro de query.

Forma de transmissão do parâmetro

Descrição

query

Se o parâmetro de solicitação indicar "in":"query", transmita-o via query.

body

Se o parâmetro apresentar "in":"body" ou "in": "formData", envie-o no corpo da requisição. Ao passar parâmetros no body, defina o valor de reqBodyType conforme o tipo de corpo utilizado.

stream

Para fazer upload de arquivos, configure o parâmetro Stream para transmitir fluxos de arquivo.

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. Enviar a solicitação

Use o client criado na Etapa 1 para invocar call_api em uma requisição síncrona ou call_api_async para uma requisição assíncrona. Defina parâmetros de runtime para a solicitação atual, incluindo configurações de timeout e proxy. Para mais detalhes, consulte Configurações avançadas.

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'])

Código de exemplo

Exemplo: Chamar uma operação de API no estilo RPC

O exemplo abaixo faz uma chamada genérica para a operação DescribeInstanceTypeFamilies do ECS.

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

Exemplo: Chamar uma operação de API no estilo RESTful (ROA)

Este exemplo faz uma chamada genérica para a operação DescribeClustersV1 do ACK.

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