メニュー
Amazon API Gateway
開発者ガイド

生成された iOS SDK (Objective-C) を使用して API を呼び出す

次の手順を開始する前に、Objective-C で iOS 用の「API Gateway コンソールを使用して API 用の SDKを生成する」のステップを実行し、生成された SDK の .zip ファイルをダウンロードする必要があります。

API Gateway で生成された AWS Mobile SDK と iOS SDK を Objective-C プロジェクトでインストールする

次の手順では、SDK をインストールする方法を説明します。

API Gateway で生成された iOS SDK を Objective-C でインストールして使用するには

  1. ダウンロード済みの API Gateway で生成された .zip ファイルのコンテンツを抽出します。SimpleCalc API を使用して、解凍した SDK フォルダーの名前を sdk_objc_simple_calc などに変更することもできます。この SDK フォルダーには、README.md ファイルと Podfile ファイルが含まれています。README.md ファイルには、SDK をインストールして使用するための手順が記載されています。このチュートリアルでは、この手順について詳しく説明します。インストールでは、CocoaPods を使用して必要な API Gateway ライブラリとその他の依存する AWS Mobile SDK コンポーネントをインポートします。SDK をアプリケーションの XCode プロジェクト内にインポートするには、Podfile を更新する必要があります。解凍した SDK フォルダー内には、API の生成された SDK のソースコードを含む generated-src フォルダーもあります。

  2. Xcode を起動し、新しい iOS Objective-C プロジェクトを作成します。プロジェクトのターゲットを書き留めておきます。それを Podfile に設定する必要があります。

  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 の generated-src ディレクトリから、すべての .h ファイルと .m ファイルを Xcode プロジェクト内に追加します。

    AWS Mobile SDK for iOS Objective-C をプロジェクト内にインポートするために、明示的に AWS Mobile SDK をダウンロードするか、Carthage を使用する場合は、README.md ファイルの手順に従ってください。この 2 つのオプションのうち、必ず 1 つのみを使用して AWS Mobile SDK をインポートしてください。

API Gateway で生成された iOS SDK を使用して Objective-C オブジェクトで API メソッドを呼び出す

SDK の生成時に、メソッドの入力 (Input) と出力 (Result) を 2 つのモデルとする SimpleCalc API のプレフィックスとして SIMPLE_CALC を使用すると、結果の API クライアントクラスは SIMPLE_CALCSimpleCalcClient となり、それぞれ対応するデータクラスは SIMPLE_CALCInputSIMPLE_CALCResult になります。API のリクエストとレスポンスは、次のように SDK メソッドにマッピングされます。

  • 次の API リクエストは

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

    次のような SDK メソッドになります。

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

    Result モデルをメソッドのレスポンスに追加した場合、AWSTask.result プロパティのタイプは SIMPLE_CALCResult です。それ以外の場合、プロパティは 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 ステートメントにより、2 つのモデルクラスとして SIMPLE_CALCInput.hSIMPLE_CALCResult.h もインポートされます。

  2. API クライアントクラスをインスタンス化します。

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    API で Amazon Cognito を使用するには、defaultClient メソッドを呼び出して API クライアントオブジェクトを作成する (前の例を参照) 前に、次に示すようにデフォルトの AWSServiceManager オブジェクトで defaultServiceConfiguration プロパティを設定します。

    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 エンコードされたパス変数が処理されないためです。