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.
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 |
|
body |
Se o parâmetro apresentar |
|
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()