Objective-C 또는 Swift에서 API Gateway에 의해 생성되는 REST API용 iOS SDK 사용 - Amazon API Gateway

Objective-C 또는 Swift에서 API Gateway에 의해 생성되는 REST API용 iOS SDK 사용

이 자습서에서는 Objective-C 또는 Swift 앱에서 API Gateway에 의해 생성되는 REST API용 iOS SDK를 사용하여 기본 API를 호출하는 방법을 보여줍니다. SimpleCalc API를 예제로 사용하여 다음 주제를 설명합니다.

  • 필요한 AWS Mobile SDK 구성 요소를 Xcode 프로젝트에 설치하는 방법

  • API 메서드를 호출하기 전에 API 클라이언트 객체를 생성하는 방법

  • API 클라이언트 객체에서 해당 SDK 메서드를 통해 API 메서드를 호출하는 방법

  • 메서드 입력을 준비하고 SDK의 해당 모델 클래스를 사용하여 결과를 구문 분석하는 방법

생성된 iOS SDK(Objective-C)를 사용하여 API 호출

다음 절차를 시작하기 전에 Objective-C에서 iOS에 대한 API Gateway에서 REST API SDK 생성의 단계를 완료하고 생성된 SDK에 대한 .zip 파일을 다운로드해야 합니다.

Objective-C 프로젝트에서 API Gateway에 의해 생성되는 iOS SDK 및 AWS Mobile SDK 설치

다음 절차에서는 SDK를 설치하는 방법을 설명합니다.

Objective-C에서 API Gateway가 생성한 iOS SDK를 설치하고 사용하려면
  1. 앞서 다운로드한 API Gateway가 생성한 .zip 파일의 압축을 풉니다. SimpleCalc API를 사용하여 압축 해제된 SDK 폴더의 이름을 sdk_objc_simple_calc 등으로 바꿉니다. 이 SDK 폴더에는 README.md 파일과 Podfile 파일이 있습니다. README.md 파일에는 SDK를 설치하고 사용하기 위한 지침이 포함되어 있습니다. 이 자습서는 이러한 지침에 대한 세부 정보를 제공합니다. 설치 시 CocoaPods를 활용해 필요한 API Gateway 라이브러리와 기타 종속 AWS Mobile SDK 구성 요소를 가져옵니다. Podfile을 업데이트하여 앱의 Xcode 프로젝트로 SDK를 가져와야 합니다. 아카이빙을 해제한 SDK 폴더에는 사용자 API에서 생성한 SDK의 소스 코드를 포함하는 generated-src 폴더도 포함되어 있습니다.

  2. Xcode를 시작하고 새로운 iOS Objective-C 프로젝트를 생성합니다. 프로젝트의 대상을 기록해 둡니다. Podfile에 이를 설정해야 합니다.

    Xcode에서 대상을 찾습니다.
  3. CocoaPods를 이용해 AWS Mobile SDK for iOS를 Xcode 프로젝트로 가져오려면 다음과 같이 하십시오.

    1. 터미널 창에 다음 명령을 실행하여 CocoaPods를 설치합니다.

      sudo gem install cocoapods pod setup
    2. 압축을 푼 SDK 폴더에서 Podfile 파일을 복사하여 Xcode 프로젝트 파일을 포함하는 동일 디렉터리에 추가합니다. 다음 블록:

      target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' end

      을 프로젝트 대상 이름: 으로 바꿉니다.

      target 'app_objc_simple_calc' do pod 'AWSAPIGateway', '~> 2.4.7' end

      Xcode 프로젝트에 이미 Podfile이라는 파일이 있는 경우, 다음 코드 줄을 추가합니다.

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. 터미널 창을 열고 다음 명령을 실행합니다.

      pod install

      그러면 API Gateway 구성 요소와 기타 종속 AWS Mobile SDK 구성 요소가 설치됩니다.

    4. Xcode 프로젝트를 닫은 후 .xcworkspace 파일을 열어 Xcode를 다시 시작합니다.

    5. 압축을 푼 SDK의 .h 디렉터리에 포함된 모든 .mgenerated-src 파일을 Xcode 프로젝트에 추가합니다.

      .h 및 .m 파일은 generated-src에 있습니다.

    AWS Mobile SDK를 명시적으로 다운로드하거나 Carthage를 이용해 프로젝트로 AWS Mobile SDK for iOS Objective-C를 가져오려면 README.md 파일의 지침을 따르세요. 이러한 옵션 중 하나만 사용하여 AWS Mobile SDK를 가져와야 합니다.

Objective-C 프로젝트에서 API Gateway에 의해 생성되는 iOS SDK를 사용하여 API 메서드 호출

SimpleCalc API에 대한 SIMPLE_CALC 접두사와 메서드의 입력(Input) 및 출력(Result)에 대한 두 모델을 사용하여 SDK를 생성한 경우 SDK에서 결과 API 클라이언트 클래스는 SIMPLE_CALCSimpleCalcClient이고 해당 데이터 클래스는 각각 SIMPLE_CALCInputSIMPLE_CALCResult입니다. API 요청 및 응답은 SDK 메서드에 다음과 같이 매핑됩니다.

  • 다음의 API 요청이

    GET /?a=...&b=...&op=...

    다음의 SDK 메서드가 됩니다.

    (AWSTask *)rootGet:(NSString *)op a:(NSString *)a b:(NSString *)b

    AWSTask.result 모델이 메서드 응답에 추가된 경우 SIMPLE_CALCResult 속성은 Result 유형입니다. 그렇지 않은 경우 속성은 NSDictionary 유형입니다.

  • 다음의 이 API 요청이

    POST / { "a": "Number", "b": "Number", "op": "String" }

    다음의 SDK 메서드가 됩니다.

    (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  • 다음의 API 요청이

    GET /{a}/{b}/{op}

    다음의 SDK 메서드가 됩니다.

    (AWSTask *)aBOpGet:(NSString *)a b:(NSString *)b op:(NSString *)op

다음 절차에서는 Objective-C 앱 소스 코드에서 API 메서드를 호출하는 방법(예: viewDidLoad 파일에서 ViewController.m 위임자의 일부로 호출)을 설명합니다.

API Gateway가 생성한 iOS SDK를 통해 API를 호출하려면
  1. API 클라이언트 클래스 헤더 파일을 가져와 앱에서 API 클라이언트 클래스를 호출할 수 있도록 합니다.

    #import "SIMPLE_CALCSimpleCalc.h"

    #import 명령문은 두 모델 클래스에 대한 SIMPLE_CALCInput.hSIMPLE_CALCResult.h도 가져옵니다.

  2. API 클라이언트 클래스 인스턴스화:

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    API를 통해 Amazon Cognito를 사용하려면 다음과 같이 기본 AWSServiceManager 객체에 defaultServiceConfiguration 속성을 설정한 후 defaultClient 메서드를 호출해 API 클라이언트 객체를 생성합니다(앞의 예와 같음).

    AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:your_cognito_pool_id]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:creds]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
  3. GET /?a=1&b=2&op=+ 메서드를 호출하여 1+2를 수행합니다.

    [[apiInstance rootGet: @"+" a:@"1" b:@"2"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField1.text = [self handleApiResponse:task]; return nil; }];

    여기에서 헬퍼 함수 handleApiResponse:task는 결과 서식을 텍스트 필드 (_textField1)에 표시할 문자열로 지정합니다.

    - (NSString *)handleApiResponse:(AWSTask *)task { if (task.error != nil) { return [NSString stringWithFormat: @"Error: %@", task.error.description]; } else if (task.result != nil && [task.result isKindOfClass:[SIMPLE_CALCResult class]]) { return [NSString stringWithFormat:@"%@ %@ %@ = %@\n",task.result.input.a, task.result.input.op, task.result.input.b, task.result.output.c]; } return nil; }

    표시되는 결과는 1 + 2 = 3입니다.

  4. 페이로드와 함께 POST / 메서드를 호출하여 1-2를 수행합니다.

    SIMPLE_CALCInput *input = [[SIMPLE_CALCInput alloc] init]; input.a = [NSNumber numberWithInt:1]; input.b = [NSNumber numberWithInt:2]; input.op = @"-"; [[apiInstance rootPost:input] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField2.text = [self handleApiResponse:task]; return nil; }];

    표시되는 결과는 1 - 2 = -1입니다.

  5. GET /{a}/{b}/{op}를 호출하여 1/2를 수행합니다.

    [[apiInstance aBOpGet:@"1" b:@"2" op:@"div"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField3.text = [self handleApiResponse:task]; return nil; }];

    표시되는 결과는 1 div 2 = 0.5입니다. 여기서 div 자리에 /가 사용되는데, 이유는 백엔드의 간단한 Lambda 함수가 URL로 인코딩된 경로 변수를 처리하지 않기 때문입니다.

API를 호출하기 위해 생성된 iOS SDK(Swift) 사용

다음 절차를 시작하기 전에 Swift에서 iOS에 대한 API Gateway에서 REST API SDK 생성의 단계를 완료하고 생성된 SDK에 대한 .zip 파일을 다운로드해야 합니다.

AWS Mobile SDK 및 API Gateway 생성 SDK를 Swift 프로젝트에 설치

다음 절차에서는 SDK를 설치하는 방법을 설명합니다.

Swift에서 API Gateway가 생성한 iOS SDK를 설치하고 사용하려면
  1. 앞서 다운로드한 API Gateway가 생성한 .zip 파일의 압축을 풉니다. SimpleCalc API를 사용하여 압축 해제된 SDK 폴더의 이름을 sdk_swift_simple_calc 등으로 바꿉니다. 이 SDK 폴더에는 README.md 파일과 Podfile 파일이 있습니다. README.md 파일에는 SDK를 설치하고 사용하기 위한 지침이 포함되어 있습니다. 이 자습서는 이러한 지침에 대한 세부 정보를 제공합니다. 설치 시 CocoaPods를 활용해 필요한 AWS Mobile SDK 구성 요소를 가져옵니다. Podfile을 업데이트하여 Swift 앱의 Xcode 프로젝트로 SDK를 가져와야 합니다. 아카이빙을 해제한 SDK 폴더에는 사용자 API에서 생성한 SDK의 소스 코드를 포함하는 generated-src 폴더도 포함되어 있습니다.

  2. Xcode를 시작하고 새로운 iOS Swift 프로젝트를 생성합니다. 프로젝트의 대상을 기록해 둡니다. Podfile에 이를 설정해야 합니다.

    Xcode에서 대상을 찾습니다.
  3. CocoaPods를 이용해 필요한 AWS Mobile SDK 구성 요소를 Xcode 프로젝트로 가져오려면 다음과 같이 합니다.

    1. CocoaPods가 아직 설치되어 있지 않은 경우 터미널 창에 다음 명령을 실행하여 설치합니다.

      sudo gem install cocoapods pod setup
    2. 압축을 푼 SDK 폴더에서 Podfile 파일을 복사하여 Xcode 프로젝트 파일을 포함하는 동일 디렉터리에 추가합니다. 다음 블록:

      target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' end

      프로젝트 대상 이름은 다음과 같습니다.

      target 'app_swift_simple_calc' do pod 'AWSAPIGateway', '~> 2.4.7' end

      Xcode 프로젝트에 이미 올바른 대상의 Podfile이 있는 경우, 다음 코드 줄을 do ... end 루프에 추가하기만 하면 됩니다.

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. 터미널 창을 열고 앱 디렉터리에서 다음 명령을 실행합니다.

      pod install

      그러면 앱의 프로젝트에 API Gateway 구성 요소와 종속 AWS Mobile SDK 구성 요소가 설치됩니다.

    4. Xcode 프로젝트를 닫은 후 *.xcworkspace 파일을 열어 Xcode를 다시 시작합니다.

    5. 추출한 .h 디렉터리에서 SDK의 모든 헤더 파일(.swift) 및 Swift 소스 코드 파일(generated-src)을 Xcode 프로젝트에 추가합니다.

      .h 및 .swift 파일은 generated-src에 있습니다.
    6. Swift 코드 프로젝트에서 AWS Mobile SDK의 Objective-C 라이브러리 호출을 활성화하려면 Xcode 프로젝트 구성의 Swift Compiler - General 설정에서 Objective-C Bridging Header 속성에 Bridging_Header.h 파일 경로를 설정합니다.

      Swift Compiler - General에서 Bridging_Header.h 파일 경로를 설정합니다.
      작은 정보

      Xcode의 검색 상자에 bridging을 입력하여 Objective-C Bridging Header 속성을 찾을 수 있습니다.

    7. Xcode 프로젝트를 구축하여 적절하게 구성되어 있는지 확인한 후 다음 단계로 진행합니다. Xcode가 AWS Mobile SDK에 지원되는 Swift보다 최신 버전을 사용하는 경우, Swift 컴파일러 오류를 받게 됩니다. 이 경우 Swift Compiler - Version 설정에서 Use Legacy Swift Language Version 속성을 로 설정합니다.

      Legacy Swift Language Version 속성을 Yes로 설정합니다.

    AWS Mobile SDK를 명시적으로 다운로드하거나 Carthage를 이용해 Swift에서 AWS Mobile SDK for iOS를 프로젝트로 가져오려면 SDK 패키지와 함께 제공된 README.md 파일의 지침을 따릅니다. 이러한 옵션 중 하나만 사용하여 AWS Mobile SDK를 가져와야 합니다.

Swift 프로젝트에서 API Gateway가 생성한 iOS SDK를 통해 API 메서드 호출

API 요청 및 응답의 입력(Input) 및 출력(Result)을 설명하는 두 가지 모델을 사용하여 이 SimpleCalc API에 대한 SIMPLE_CALC 접두사를 사용하여 SDK를 생성한 경우 SDK에서 결과 API 클라이언트 클래스는 SIMPLE_CALCSimpleCalcClient가 되고 해당 데이터 클래스는 각각 SIMPLE_CALCInputSIMPLE_CALCResult입니다. API 요청 및 응답은 SDK 메서드에 다음과 같이 매핑됩니다.

  • 다음의 API 요청이

    GET /?a=...&b=...&op=...

    다음의 SDK 메서드가 됩니다.

    public func rootGet(op: String?, a: String?, b: String?) -> AWSTask

    AWSTask.result 모델이 메서드 응답에 추가된 경우 SIMPLE_CALCResult 속성은 Result 유형입니다. 그렇지 않으면 NSDictionary 유형입니다.

  • 다음의 이 API 요청이

    POST / { "a": "Number", "b": "Number", "op": "String" }

    다음의 SDK 메서드가 됩니다.

    public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  • 다음의 API 요청이

    GET /{a}/{b}/{op}

    다음의 SDK 메서드가 됩니다.

    public func aBOpGet(a: String, b: String, op: String) -> AWSTask

다음 절차에서는 Swift 앱 소스 코드에서 API 메서드를 호출하는 방법(예: viewDidLoad() 파일에서 ViewController.m 위임자의 일부로 호출)을 설명합니다.

API Gateway가 생성한 iOS SDK를 통해 API를 호출하려면
  1. API 클라이언트 클래스 인스턴스화:

    let client = SIMPLE_CALCSimpleCalcClient.default()

    API를 통해 Amazon Cognito를 사용하려면 (다음과 같이) 기본 AWS 서비스 구성을 설정한 후, (이전과 같이) default 메서드를 가져옵니다.

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "my_pool_id") let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
  2. GET /?a=1&b=2&op=+ 메서드를 호출하여 1+2를 수행합니다.

    client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }

    헬퍼 함수 self.showResult(task)가 콘솔에 결과나 오류를 인쇄합니다. 예:

    func showResult(task: AWSTask) { if let error = task.error { print("Error: \(error)") } else if let result = task.result { if result is SIMPLE_CALCResult { let res = result as! SIMPLE_CALCResult print(String(format:"%@ %@ %@ = %@", res.input!.a!, res.input!.op!, res.input!.b!, res.output!.c!)) } else if result is NSDictionary { let res = result as! NSDictionary print("NSDictionary: \(res)") } } }

    생산 앱에서 텍스트 필드에 결과나 오류를 표시할 수 있습니다. 표시되는 결과는 1 + 2 = 3입니다.

  3. 페이로드와 함께 POST / 메서드를 호출하여 1-2를 수행합니다.

    let body = SIMPLE_CALCInput() body.a=1 body.b=2 body.op="-" client.rootPost(body).continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }

    표시되는 결과는 1 - 2 = -1입니다.

  4. GET /{a}/{b}/{op}를 호출하여 1/2를 수행합니다.

    client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }

    표시되는 결과는 1 div 2 = 0.5입니다. 여기서 div 자리에 /가 사용되는데, 이유는 백엔드의 간단한 Lambda 함수가 URL로 인코딩된 경로 변수를 처리하지 않기 때문입니다.