Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Generalized calls

Última atualização: Sep 10, 2026

O Alibaba Cloud SDK V1.0 for Java oferece suporte a chamadas de API genéricas. Este tópico descreve como fazer chamadas genéricas com o Alibaba Cloud SDK V1.0 for Java.

Características

  1. Leveza: basta instalar o aliyun-java-sdk-core para chamar todas as OpenAPIs, sem instalar SDKs individuais de cada produto.

  2. Iteração rápida e compatibilidade: caso um serviço de cloud não forneça um SDK ou se o SDK não estiver atualizado com as operações de API mais recentes, faça chamadas genéricas. Assim, você acessa as operações de API mais recentes sem aguardar atualizações do SDK.

Para mais informações, consulte Generic calls and specialized calls.

Observações de uso

Antes de fazer uma chamada genérica, obtenha e especifique manualmente os metadados necessários, incluindo a versão da API, a URL da solicitação e o tipo de parâmetro. Para mais informações, consulte API metadata.

Instalar o Core SDK

Adicione a seguinte dependência ao arquivo pom.xml para instalar a biblioteca principal do 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>

Chamar uma operação de API

Inicializar um cliente de solicitação

No pacote com.aliyuncs, crie um módulo client para inicializar o cliente de solicitação e use o client para chamar as operações de API. Neste exemplo, usa-se um par de AccessKey para inicializar o cliente de solicitação. Para mais informações, consulte Manage access credentials.

Nota

Para evitar vazamentos de AccessKey, armazene o par de AccessKey em variáveis de ambiente. Para mais informações, 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 as informações básicas e os parâmetros de solicitação da operação de API

Use o CommonRequest para definir os parâmetros comuns de solicitação e os parâmetros específicos da operação de API. Para mais detalhes sobre os parâmetros comuns de solicitação, consulte Advanced settings.

Nota

O módulo CommonRequest converte os metadados da API, como número da versão, URL e tipo de parâmetro, em uma solicitação HTTP válida por meio de um processo padrão de configuração de solicitação e retorna os dados de resposta originais. A forma de passagem dos parâmetros depende do estilo e do design da API.

Parâmetros de solicitação da API

A maneira como um parâmetro de solicitação é passado depende dos metadados da operação de API. Por exemplo, a operação de API DescribeInstanceStatus é definida como {"name":"RegionId","in":"query",...}} nos metadados. Nesse caso, "in":"query" indica que o ID da região (RegionId) deve ser passado via putQueryParameter.

Descrição

Como o parâmetro é passado

Aplica-se quando o parâmetro de solicitação está definido como "in":"query".

putQueryParameter(String key,String value)

Nota

Se um parâmetro de solicitação for uma coleção, especifique o parâmetro como putQueryParameter("key.1","value1");

É possível passar parâmetros usando o formato putQueryParameter("key.2","value2");...

Aplica-se quando o parâmetro de solicitação é "in":"body" ou "in": "formData".

putBodyParameter(String key,String value)

Nota

Se o parâmetro de solicitação não especificar uma string, converta o valor do parâmetro para uma string JSON e defina essa string como o valor da variável. Exemplo: request.putBodyParameter("key",new Gson().toJson(value));

Upload de arquivos

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

Nota

Defina 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);
  

Iniciar uma solicitação

Use o client para chamar o 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 exemplo

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

Neste exemplo, a operação DescribeInstanceStatus do ECS é chamada usando 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();
        }
    }
}

Exemplo: Chamar uma operação de API RESTful

Neste exemplo, a operação DescribeClustersV1 do Container Service for Kubernetes (ACK) é chamada usando 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();
        }
    }
}

Perguntas frequentes

  1. A mensagem de erro indica que o parâmetro obrigatório "AccessKeyId" está ausente.

    Causa: O par de AccessKey não está configurado corretamente.

    Soluções:

    1. Execute os comandos abaixo para verificar se as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estão 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%

      Se um par de AccessKey válido for retornado, as variáveis de ambiente estão configuradas corretamente. Caso nenhum par de AccessKey seja retornado ou se o par for inválido, configure as variáveis de ambiente conforme necessário. Para mais informações, consulte Configure environment variables in Linux, macOS, and Windows.

    2. Verifique se há erros relacionados ao par de AccessKey no código.

      Exemplos de erros comuns:

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

      No exemplo de solicitação com erro acima, os valores de entrada de System.getenv() são usados como o par de AccessKey. No entanto, essa função serve para ler valores das variáveis de ambiente. Após definir os nomes das variáveis de ambiente como ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET na sua máquina, o System.getenv conseguirá ler os valores dessas variáveis.

      Exemplo correto

      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
      System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
  2. A solicitação falha com a seguinte mensagem de erro: "com.aliyuncs.exceptions.ClientException: MissingParameter : The input parameter "Timestamp" that is mandatory for processing this request is not supplied."

    Causa: O parâmetro SysUriPattern foi configurado nos parâmetros comuns de solicitação da operação de API estilo RPC.

    Solução: Remova o parâmetro SysUriPattern dos parâmetros comuns de solicitação.