El SDK de Alibaba Cloud para Java V2.0 es compatible con llamadas genéricas a la API, las cuales permiten invocar cualquier operación de OpenAPI sin instalar los SDK específicos de cada servicio.
Características
Ligero: el SDK de Alibaba Cloud V2.0 para Python permite llamar a las operaciones de la API con solo instalar la biblioteca principal del SDK. No es necesario instalar el SDK de cada servicio.
Fácil de usar: únicamente debe crear parámetros de solicitud comunes y usar un cliente común para iniciar las solicitudes. Las respuestas se devuelven en formatos comunes.
Para obtener más información, consulte Generic calls and specialized calls.
Notas de uso
Antes de hacer una llamada genérica, se recomienda consultar los metadata of the API operation para obtener el estilo de la API, los parámetros de solicitud y la URL.
Instalación de la biblioteca principal del SDK de Alibaba Cloud
Ejecute el siguiente comando en su terminal para instalar la biblioteca principal del SDK de Alibaba Cloud V2.0 para Python:
pip install alibabacloud-tea-openapi
Llamada a una operación de la API
1. Inicializar el cliente de solicitud
Inicialice el cliente de solicitud mediante la creación de una clase Client desde el módulo client del paquete alibabacloud_tea_openapi. Use este cliente para hacer llamadas a OpenAPI. También puede usar la herramienta Credentials durante la inicialización del cliente. Para obtener más información sobre esta herramienta, consulte Manage access credentials.
La instancia del cliente es segura para hilos. En su aplicación, use el patrón singleton para crear el cliente. Esto garantiza que solo se inicialice una instancia del cliente para la misma credencial y endpoint durante el ciclo de vida de la aplicación.
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. Configurar la información de OpenAPI
Use la clase Params del módulo models en el paquete alibabacloud_tea_openapi para configurar la información básica de OpenAPI, como el estilo de la API, la versión de la API y el método de solicitud. A continuación se muestra cómo llamar a la operación 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. Configurar los parámetros de solicitud
Use la clase OpenApiRequest del módulo models en el paquete alibabacloud_tea_openapi para configurar los parámetros de solicitud. Los parámetros se pueden pasar mediante una consulta (query), el cuerpo (body) o un flujo (stream). Seleccione el método adecuado según la información de los metadatos. Por ejemplo, el parámetro de solicitud RegionId de la operación DescribeInstanceTypeFamilies se especifica como {"name":"RegionId","in":"query",...}} en los metadatos. El valor "in":"query" indica que RegionId se pasa como parámetro de consulta.
|
Forma de envío del parámetro |
Descripción |
|
query |
Si el parámetro de solicitud muestra |
|
body |
Cuando el parámetro de solicitud muestra |
|
stream |
Para cargar archivos, configure el parámetro Stream y pase flujos de archivo. |
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 la solicitud
Use el client creado en el paso 1 para llamar a call_api en una solicitud síncrona, o bien a call_api_async en una solicitud asíncrona. También puede establecer parámetros de tiempo de ejecución para la solicitud actual, como las configuraciones de tiempo de espera y de proxy. Para obtener más información, consulte Advanced configurations.
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 ejemplo
Ejemplo: llamar a una operación de la API con estilo RPC
En el siguiente ejemplo se hace una llamada genérica a la operación DescribeInstanceTypeFamilies de 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()
Ejemplo: llamar a una operación de la API con estilo RESTful (ROA)
En el siguiente ejemplo se hace una llamada genérica a la operación DescribeClustersV1 de 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()