生成された 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 でインストールして使用するには
-
ダウンロード済みの 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
フォルダもあります。 -
Xcode を起動し、新しい iOS Objective-C プロジェクトを作成します。プロジェクトのターゲットを書き留めておきます。それを
Podfile
に設定する必要があります。 -
CocoaPods を使用して AWS Mobile SDK for iOS を Xcode プロジェクト内にインポートするには、以下の操作を行います。
-
ターミナルウィンドウで次のコマンドを実行して、CocoaPods をインストールします。
sudo gem install cocoapods pod setup
-
抽出した SDK フォルダー内にある
Podfile
ファイルを、Xcode プロジェクトファイルがある同じディレクトリ内にコピーします。次のブロックのターゲット名をtarget '
<YourXcodeTarget>
' do pod 'AWSAPIGateway', '~> 2.4.7' end次のようにプロジェクトのターゲット名に置き換えます。
target '
app_objc_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endXcode プロジェクトに
Podfile
という名前のファイルが既に含まれている場合は、次のコード行を追加します。pod 'AWSAPIGateway', '~> 2.4.7'
-
ターミナルウィンドウを開いて、次のコマンドを実行します。
pod install
これにより、API Gateway コンポーネント とその他の依存する AWS Mobile SDK コンポーネントがインストールされます。
-
Xcode プロジェクトを閉じて
.xcworkspace
ファイルを開き、Xcode を再起動します。 -
抽出した SDK の
.h
ディレクトリから、すべての.m
ファイルとgenerated-src
ファイルを 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_CALCInput
と SIMPLE_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 を呼び出すには
-
API クライアントクラスのヘッダーファイルをインポートして、API クライアントクラスをアプリケーションで呼び出せるようにします。
#import "SIMPLE_CALCSimpleCalc.h"
#import
ステートメントにより、2 つのモデルクラスとしてSIMPLE_CALCInput.h
とSIMPLE_CALCResult.h
もインポートされます。 -
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; -
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
と表示されます。 -
ペイロードを渡す
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
と表示されます。 -
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 エンコードされたパス変数が処理されないためです。