API Gateway에서 생성한 REST API용 Java SDK 사용 - Amazon API Gateway

API Gateway에서 생성한 REST API용 Java SDK 사용

이 단원에서는 API Gateway에서 생성된 REST API용 Java SDK를 사용하는 단계를 간편 계산기 API를 예로 들어 설명합니다. 계속하려면 먼저 API Gateway에서 REST API SDK 생성의 단계를 완료해야 합니다.

API Gateway가 생성한 Java SDK를 설치하고 사용하려면
  1. 앞서 다운로드한 API Gateway가 생성한 .zip 파일의 압축을 풉니다.

  2. Apache Maven(버전 3.5 이상)을 다운로드하여 설치합니다.

  3. JDK 8을 다운로드하여 설치합니다.

  4. JAVA_HOME 환경 변수를 설정합니다.

  5. pom.xml 파일이 있는, 압축을 해제한 SDK 폴더로 이동합니다. 기본적으로 이 폴더는 generated-code입니다. mvn install 명령을 실행해 컴파일된 아티팩트 파일을 로컬 Maven 리포지토리에 설치합니다. 그러면 컴파일된 SDK 라이브러리를 포함하는 target 폴더가 생성됩니다.

  6. 빈 디렉터리에 다음 명령을 입력해 클라이언트 프로젝트 스텁을 생성하여 설치된 SDK 라이브러리를 사용해 API를 호출합니다.

    mvn -B archetype:generate \ -DarchetypeGroupdId=org.apache.maven.archetypes \ -DgroupId=examples.aws.apig.simpleCalc.sdk.app \ -DartifactId=SimpleCalc-sdkClient
    참고

    앞의 명령에서 가독성을 높이기 위해 \ 구분자가 포함됩니다. 전체 명령은 구분자 없이 한 줄로 표시되어야 합니다.

    이 명령은 애플리케이션 스텁을 생성합니다. 이 애플리케이션 스텁은 프로젝트의 루트 디렉터리에 pom.xml 파일과 src 폴더를 포함합니다(앞의 명령에서 SimpleCalc-sdkClient). 처음에는 두 개의 소스 파일, src/main/java/{package-path}/App.javasrc/test/java/{package-path}/AppTest.java가 있습니다. 이 예제에서 {package-path}examples/aws/apig/simpleCalc/sdk/app입니다. 이 패키지 경로는 DarchetypeGroupdId 값에서 파생됩니다. 클라이언트 애플리케이션에 App.java 파일을 템플릿으로 사용하고, 필요에 따라 같은 폴더에 다른 템플릿을 추가할 수 있습니다. 애플리케이션에 AppTest.java 파일을 단위 테스트 템플릿으로 사용하고, 필요에 따라 같은 테스트 폴더에 다른 테스트 코드 파일을 추가할 수 있습니다.

  7. 생성된 pom.xml 파일의 패키지 종속성을 다음과 같이 업데이트하여, 프로젝트의 groupId, artifactId, version, name 속성을 대체합니다.

    <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>
    참고

    aws-java-sdk-core의 종속 아티팩트 새 버전이 위에서 지정한 버전(1.11.94)과 호환되지 않는 경우, <version> 태그를 새 버전으로 업데이트해야 합니다.

  8. 다음으로, SDK의 getABOp(GetABOpRequest req), getApiRoot(GetApiRootRequest req), postApiRoot(PostApiRootRequest req) 메서드를 호출하여, SDK를 사용해 API를 호출하는 방법을 살펴봅니다. 이 메서드는 각각 GET /{a}/{b}/{op} API 요청의 페이로드가 포함된 GET /?a={x}&b={y}&op={operator}, POST /, {"a": x, "b": y, "op": "operator"} 메서드에 해당합니다.

    다음과 같이 App.java 파일을 업데이트합니다.

    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()); } }

    앞의 예에서 SDK 클라이언트를 인스턴스화하는 데 사용된 구성 설정은 설명용이며, 권장되는 모범 사례라고 볼 수는 없습니다. sdkClient.shutdown() 호출도 마찬가지로, 리소스 확보 시점에 대한 정밀한 제어가 필요한 경우 등에 선택하는 옵션입니다.

Java SDK를 사용하여 API를 호출하는 기본 패턴은 이미 살펴보았습니다. 다른 API 메서드 호출에도 이 지침을 적용할 수 있습니다.