Todos los productos
Search
Centro de documentos

Alibaba Cloud SDK:Generalized calls

Última actualización: Sep 10, 2026

Alibaba Cloud SDK V1.0 for Java admite llamadas genéricas a la API. En este tema se describe cómo ejecutar llamadas genéricas con Alibaba Cloud SDK V1.0 for Java.

Características

  1. Ligero: solo necesita instalar aliyun-java-sdk-core para invocar todas las openapi, sin necesidad de instalar los SDK individuales de cada producto.

  2. Iteración rápida y compatibilidad: si un servicio en la nube no proporciona un SDK, o si el SDK no está actualizado con las operaciones más recientes de la API, puede ejecutar llamadas genéricas. De esta manera, invoca las operaciones más recientes sin esperar a que se actualice el SDK.

Para obtener más información, consulte Generic calls and specialized calls.

Notas de uso

Antes de ejecutar una llamada genérica, obtenga y especifique manualmente los metadatos obligatorios, como la versión de la API, la URL de la solicitud y el tipo de parámetro. Para obtener más información, consulte API metadata.

Instalar el SDK principal

Agregue la siguiente dependencia al archivo pom.xml para instalar la biblioteca principal de Alibaba Cloud SDK V1.0 for Java.

<dependency>
     <groupId>com.aliyun</groupId>
     <artifactId>aliyun-java-sdk-core</artifactId>
     // Select a version.
     <version>[(4.0.0,5.0.0)]</version>
</dependency>

Invocar una operación de la API

Inicializar un cliente de solicitudes

En el paquete com.aliyuncs, cree un módulo client para inicializar el cliente de solicitudes. Después, utilice ese client para invocar las API operations. En este ejemplo se usa un AccessKey pair para inicializar el cliente de solicitudes. Para obtener más información, consulte Manage access credentials.

Nota

Para evitar filtraciones del accesskey, almacene el par de claves en variables de entorno. Para obtener más información, consulte Configure environment variables in Linux, macOS, and Windows.

 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.profile.DefaultProfile;
 
        // 1. Create and initialize a DefaultAcsClient instance.
        DefaultProfile profile = DefaultProfile.getProfile(
                // Your region ID.
                "cn-hangzhou",
                // System.getenv indicates that the AccessKey ID of the Resource Access Management (RAM) user is obtained from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // System.getenv indicates that the AccessKey secret of the RAM user is obtained from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Optional. Configure HTTPS for the client.
        HttpClientConfig clientConfig = HttpClientConfig.getDefault();
//        // Do not verify the server-side certificate.
//        clientConfig.setIgnoreSSLCerts(true);
//        // The maximum number of connections for each host.
//        clientConfig.setMaxRequestsPerHost(6);
//        // The connection timeout.
//        clientConfig.setConnectionTimeoutMillis(30000L);
//        // The read timeout.
//        clientConfig.setReadTimeoutMillis(30000L);
//        // The write timeout.
//        clientConfig.setWriteTimeoutMillis(60000L);
//        // Set an HTTP proxy.
//        clientConfig.setHttpProxy("http://127.0.0.1:9898");
//        // Set an HTTPS proxy.
//        clientConfig.setHttpsProxy("http://user:password@127.0.0.1:8989");
//        // Set a list of addresses to ignore for the proxy.
//        clientConfig.setNoProxy("127.0.0.1,localhost");

        profile.setHttpClientConfig(clientConfig);
        IAcsClient client = new DefaultAcsClient(profile);

Configurar la información básica y los parámetros de solicitud de la operación de la API

Utilice CommonRequest para configurar los parámetros comunes de solicitud y los parámetros específicos de la API operation. Para obtener más información sobre los parámetros comunes de solicitud, consulte Advanced settings.

Nota

El módulo CommonRequest convierte los metadatos de la API —como el número de versión, la URL y el tipo de parámetro— en una solicitud HTTP válida mediante un proceso estándar de configuración de solicitudes. Luego devuelve los datos de respuesta originales. La forma de pasar los parámetros depende del estilo y el diseño de la API.

Parámetros de solicitud de la API

La forma de pasar un parámetro de solicitud depende de los metadatos de la operación de la API. Por ejemplo, la operación DescribeInstanceStatus se define como {"name":"RegionId","in":"query",...}} en los metadatos. En este caso, "in":"query" indica que el identificador de región (RegionId) debe pasarse en putQueryParameter.

Descripción

Forma de pasar el parámetro

Se aplica cuando el parámetro de solicitud tiene el valor "in":"query".

putQueryParameter(String key,String value)

Nota

Si un parámetro de solicitud es una colección, especifíquelo como putQueryParameter("key.1","value1");

Puede pasar los parámetros con el formato putQueryParameter("key.2","value2");...

Se aplica cuando el parámetro de solicitud es "in":"body" o "in": "formData".

putBodyParameter(String key,String value)

Nota

Si el parámetro de solicitud no especifica una cadena, convierta su valor a una cadena JSON y asígnela como valor de la variable. Ejemplo: request.putBodyParameter("key",new Gson().toJson(value));

Cargar archivos

setHttpContent(byte[] content,String charset,FormatType formatType)

Nota

Establezca formatType como FormatType.RAW.

        // 2. Create an API request and configure the request parameters.
        // This example shows how to create a request to call the DescribeInstanceStatus operation, which is used to obtain the status of an Elastic Compute Service (ECS).
        CommonRequest request = new CommonRequest();
        // 2.1  Configure the common request parameters.
        request.setSysMethod(com.aliyuncs.http.MethodType.POST);
        request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com");// The domain name of the API operation.
        request.setSysVersion("2014-05-26");// The API version.
        request.setSysAction("DescribeInstanceStatus"); // The name of the API operation. When you call an RPC-style API operation, you must configure SysAction() to specify the name of the API operation.
        request.setSysConnectTimeout(30000); // The timeout period.
        request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS. 
//        request.setSysUriPattern("/"); // The request protocol. Valid values: HTTP and HTTPS. We recommend that you use HTTPS. Do not configure this parameter for RPC-style API operations. 
        
        // 2.2 Configure operation-specific request parameters.
        // Scenario 1: Specify the query parameters in putQueryParameter(string key,string value).
        request.putQueryParameter("RegionId", "cn-hangzhou");
        List<String> instanceIds = List.of(
                "i-bp1axhql4dqXXXXXXXX",
                "i-bp124uve8zqXXXXXXXX"
        );
        for(int i = 0; i < instanceIds.size(); ++i) {
            request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
        }
        request.putQueryParameter("PageNumber", "1");
        request.putQueryParameter("PageSize", "30");

        // Scenario 2: Specify the body parameters in putBodyParameter(string key,string value).
        // request.putBodyParameter("key1", "value1");
        // request.putBodyParameter("key2", "value2");
        // request.putBodyParameter("key3", "value3");

        // Scenario 3: To upload files, specify setHttpContent(byte[] content,String charset,FormatType formatType). Set formatType to FormatType.RAW. 
        // byte[] bodyImg = Files.readAllBytes(Paths.get("<FILE_PATH>")); // Replace <FILE_PATH> with the actual file path.
        // request.setHttpContent(bodyImg, "UTF-8", FormatType.RAW);
  

Enviar una solicitud

Utilice el client para invocar el método getCommonResponse.

// Send the request.
CommonResponse response = client.getCommonResponse(request);
// The return value, response.getData(), is JSON-formatted data that contains the RequestId and the OpenAPI return parameters.
System.out.println(response.getData());

Código de ejemplo

Ejemplo: invocar una operación de la API de estilo RPC

En este ejemplo se invoca la operación DescribeInstanceStatus de ECS mediante CommonRequest.

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.GsonBuilder;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Sample {
    public static void main(String[] args) throws ClientException, UnsupportedEncodingException {
        // Create and initialize a DefaultAcsClient instance.
        DefaultProfile profile = DefaultProfile.getProfile(
                // Your region ID.
                "cn-hangzhou",
                // Obtain the AccessKey ID of the RAM user from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Obtain the AccessKey secret of the RAM user from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);
        
        // Create an API request and set parameters.
        CommonRequest request = new CommonRequest();
        request.setSysMethod(com.aliyuncs.http.MethodType.POST); // The request method.
        request.setSysDomain("ecs-cn-hangzhou.aliyuncs.com"); // The domain name of the API operation.
        request.setSysVersion("2014-05-26"); // The API version number.
        request.setSysAction("DescribeInstanceStatus"); // The name of the API operation. When you call an RPC-style API operation, you must configure SysAction() to specify the operation name.
         request.setSysProtocol(com.aliyuncs.http.ProtocolType.HTTPS); // The request protocol. Valid values: HTTPS and HTTP. We recommend that you use HTTPS.
        request.putQueryParameter("RegionId", "cn-hangzhou");
        List<String> instanceIds = List.of(
                "i-bp1axhql4dqXXXXXXXX",
                "i-bp124uve8zqXXXXXXXX"
        );
        for(int i = 0; i < instanceIds.size(); ++i) {
            request.putQueryParameter("InstanceId." + (i + 1), (String)instanceIds.get(i));
        }
        request.putQueryParameter("PageNumber", "1");
        request.putQueryParameter("PageSize", "30");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Ejemplo: invocar una operación de la API RESTful

En este ejemplo se invoca la operación DescribeClustersV1 de Container Service for Kubernetes (ACK) mediante CommonRequest.

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
    public static void main(String[] args) {
        // Create and initialize a DefaultAcsClient instance.
        DefaultProfile profile = DefaultProfile.getProfile(
                // Your region ID.
                "cn-hangzhou",
                // Obtain the AccessKey ID of the RAM user from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Obtain the AccessKey secret of the RAM user from an environment variable.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);
        // Create an API request and set parameters.
        CommonRequest request = new CommonRequest();
        request.setSysDomain("cs.aliyuncs.com");// The domain name.
        request.setSysVersion("2015-12-15");// The API version.
        request.setSysUriPattern("/clusters"); // The URI of the API resource. When you call a ROA-style API operation, you must configure UriPattern() to specify the complete resource path. Obtain the resource path from data.path in the OpenAPI metadata.
        request.setSysMethod(MethodType.GET);// The request method.
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Preguntas frecuentes

  1. El mensaje de error indica que falta el parámetro obligatorio "AccessKeyId".

    Causa: el par de claves de acceso no se configuró correctamente.

    Soluciones:

    1. Ejecute los siguientes comandos para comprobar si las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET están configuradas.

      Linux/macOS

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

      Windows

      echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
      echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

      Si se devuelve un par de claves válido, las variables de entorno están configuradas correctamente. Si no se devuelve ningún par de claves o el resultado no es válido, configure las variables de entorno según corresponda. Para obtener más información, consulte Configure environment variables in Linux, macOS, and Windows.

    2. Revise el código en busca de errores relacionados con el par de claves de acceso.

      Ejemplos de errores comunes:

      accessKeyId = System.getenv("yourAccessKeyID"),
      accessKeySecret = System.getenv("yourAccessKeySecret")
      Nota

      En el ejemplo anterior de solicitud incorrecta, los valores de entrada de System.getenv() se usan directamente como el par de claves de acceso. Sin embargo, esta función sirve para leer valores de las variables de entorno. Una vez que establezca los nombres de las variables de entorno como ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET en su máquina, System.getenv podrá leer los valores correspondientes.

      Ejemplo correcto

      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
  2. La solicitud falla con el siguiente mensaje de error: "com.aliyuncs.exceptions.ClientException: MissingParameter : The input parameter "Timestamp" that is mandatory for processing this request is not supplied."

    Causa: el parámetro SysUriPattern se configuró dentro de los parámetros comunes de solicitud de la operación de la API de estilo RPC.

    Solución: elimine el parámetro SysUriPattern de los parámetros comunes de solicitud.