Nesta seção, descreveremos as etapas para usar um SDK Java gerado pelo API Gateway para uma API REST ao utilizar a API de Calculadora simples como exemplo. Antes de prosseguir, você deve concluir as etapas em Gerar SDKs para APIs REST no API Gateway.
Para instalar e usar um SDK Java gerado pelo API Gateway
-
Extraia o conteúdo do arquivo .zip gerado pelo API Gateway que você baixou anteriormente.
-
Baixe e instale o Apache Maven
(deve ser a versão 3.5 ou posterior). -
Faça download e instale o JDK 8
. -
Defina a variável de ambiente
JAVA_HOME
. -
Acesse a pasta do SDK descompactada na qual o arquivo pom.xml está localizado. Essa pasta é
generated-code
por padrão. Execute o comando mvn install para instalar os arquivos de artefato compilados no seu repositório Maven local. Isso cria uma pastatarget
, que contém a biblioteca SDK compilada. -
Digite o comando a seguir para criar um stub de projeto de cliente para chamar a API usando a biblioteca SDK instalada.
mvn -B archetype:generate \ -DarchetypeGroupdId=org.apache.maven.archetypes \ -DgroupId=
examples.aws.apig.simpleCalc.sdk.app
\ -DartifactId=SimpleCalc-sdkClient
nota
O separador
\
no comando anterior é incluído para facilitar a leitura. O comando inteiro deve estar em uma única linha, sem separadores.Esse comando cria um stub de aplicativo. O stub do aplicativo contém um arquivo
pom.xml
e uma pastasrc
no diretório raiz do projeto (SimpleCalc-sdkClient
no comando anterior). Inicialmente, há dois arquivos de origem:src/main/java/
e{package-path}
/App.javasrc/test/java/
. Neste exemplo,{package-path}
/AppTest.java{package-path}
éexamples/aws/apig/simpleCalc/sdk/app
. Este caminho de pacote é derivado do valorDarchetypeGroupdId
. Você pode usar o arquivoApp.java
como um modelo para o seu aplicativo cliente e pode adicionar outros na mesma pasta, se necessário. Você pode usar o arquivoAppTest.java
como modelo de teste unitário para o seu aplicativo e pode adicionar outros arquivos de código de teste à mesma pasta de teste, conforme necessário. -
Atualize as dependências de pacotes no arquivo
pom.xml
gerado para o seguinte, substituindo as propriedadesgroupId
,artifactId
,version
ename
do seu projeto, se necessário:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>examples.aws.apig.simpleCalc.sdk.app</groupId> <artifactId>SimpleCalc-sdkClient</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>SimpleCalc-sdkClient</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.94</version> </dependency> <dependency> <groupId>my-apig-api-examples</groupId> <artifactId>simple-calc-sdk</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
nota
Quando uma versão mais recente do artefato dependente de
aws-java-sdk-core
não for compatível com a versão especificada acima (1.11.94
), você deve atualizar a tag<version>
para a nova versão. -
Em seguida, mostramos como chamar a API com o uso do SDK, chamando os métodos
getABOp(GetABOpRequest req)
,getApiRoot(GetApiRootRequest req)
epostApiRoot(PostApiRootRequest req)
do SDK. Esses métodos correspondem aos métodosGET /{a}/{b}/{op}
,GET /?a={x}&b={y}&op={operator}
ePOST /
, com uma carga de solicitações da API{"a": x, "b": y, "op": "operator"}
, respectivamente.Atualize o arquivo
App.java
da seguinte maneira:package examples.aws.apig.simpleCalc.sdk.app; import java.io.IOException; import com.amazonaws.opensdk.config.ConnectionConfiguration; import com.amazonaws.opensdk.config.TimeoutConfiguration; import examples.aws.apig.simpleCalc.sdk.*; import examples.aws.apig.simpleCalc.sdk.model.*; import examples.aws.apig.simpleCalc.sdk.SimpleCalcSdk.*; public class App { SimpleCalcSdk sdkClient; public App() { initSdk(); } // The configuration settings are for illustration purposes and may not be a recommended best practice. private void initSdk() { sdkClient = SimpleCalcSdk.builder() .connectionConfiguration( new ConnectionConfiguration() .maxConnections(100) .connectionMaxIdleMillis(1000)) .timeoutConfiguration( new TimeoutConfiguration() .httpRequestTimeout(3000) .totalExecutionTimeout(10000) .socketTimeout(2000)) .build(); } // Calling shutdown is not necessary unless you want to exert explicit control of this resource. public void shutdown() { sdkClient.shutdown(); } // GetABOpResult getABOp(GetABOpRequest getABOpRequest) public Output getResultWithPathParameters(String x, String y, String operator) { operator = operator.equals("+") ? "add" : operator; operator = operator.equals("/") ? "div" : operator; GetABOpResult abopResult = sdkClient.getABOp(new GetABOpRequest().a(x).b(y).op(operator)); return abopResult.getResult().getOutput(); } public Output getResultWithQueryParameters(String a, String b, String op) { GetApiRootResult rootResult = sdkClient.getApiRoot(new GetApiRootRequest().a(a).b(b).op(op)); return rootResult.getResult().getOutput(); } public Output getResultByPostInputBody(Double x, Double y, String o) { PostApiRootResult postResult = sdkClient.postApiRoot( new PostApiRootRequest().input(new Input().a(x).b(y).op(o))); return postResult.getResult().getOutput(); } public static void main( String[] args ) { System.out.println( "Simple calc" ); // to begin App calc = new App(); // call the SimpleCalc API Output res = calc.getResultWithPathParameters("1", "2", "-"); System.out.printf("GET /1/2/-: %s\n", res.getC()); // Use the type query parameter res = calc.getResultWithQueryParameters("1", "2", "+"); System.out.printf("GET /?a=1&b=2&op=+: %s\n", res.getC()); // Call POST with an Input body. res = calc.getResultByPostInputBody(1.0, 2.0, "*"); System.out.printf("PUT /\n\n{\"a\":1, \"b\":2,\"op\":\"*\"}\n %s\n", res.getC()); } }
No exemplo anterior, as definições de configuração usadas para instanciar o cliente SDK são para fins ilustrativos e não são necessariamente as melhores práticas recomendadas. Além disso, a chamada de
sdkClient.shutdown()
é opcional, especialmente se for necessário um controle preciso sobre quando liberar recursos.
Mostramos os padrões essenciais para chamar uma API usando um SDK do Java. É possível estender as instruções para chamar outros métodos de API.