在 Objective-C 或 Swift 中使用 API Gateway 為 REST API 產生的 iOS 軟體開發套件 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Objective-C 或 Swift 中使用 API Gateway 為 REST API 產生的 iOS 軟體開發套件

在本教學中,我們會示範如何在 Objective-C 或 Swift 應用程式中,使用 API Gateway 為 REST API 產生的 iOS 軟體開發套件,以呼叫基礎 API。我們將使用 SimpleCalc API 作為示例來說明以下主題:

  • 如何將所需的 AWS 移動 SDK 組件安裝到您的 Xcode 項目中

  • 如何在呼叫 API 的方法前,先建立 API 用戶端物件

  • 如何透過 API 用戶端物件上對應的開發套件方法呼叫 API 方法

  • 如何使用開發套件的對應模型類別準備方法輸入和剖析其結果

使用產生的 iOS 開發套件 (Objective-C) 呼叫 API

開始下列程序之前,您必須先在 Objective-C 中完成在 API Gateway 中針對 REST API 產生軟體開發套件中的 iOS 步驟,並下載已產生之軟體開發套件的 .zip 檔案。

在目標 C 專案中安裝由 API Gateway 產生的 AWS 行動 SDK 和 iOS SDK

下列程序說明如何安裝開發套件。

安裝和使用 API Gateway 在 Objective-C 中產生的 iOS 軟體開發套件
  1. 將您稍早下載之 API Gateway 所產生的 .zip 檔案內容解壓縮。使用 SimpleCalc API,您可能需要將解壓縮的 SDK 文件夾重命名為類似sdk_objc_simple_calc的內容。在這個開發套件資料夾中,有 README.md 檔案和 Podfile 檔案。README.md 檔案包含開發套件的安裝和使用說明。本教學提供這些說明的詳細資訊。安裝會利用CocoaPods匯入必要的 API Gateway 程式庫和其他相依的 AWS 行動 SDK 元件。您必須更新 Podfile,將開發套件匯入至您應用程式的 Xcode 專案。未封存的開發套件資料夾也包含 generated-src 資料夾,其中包含 API 之已產生開發套件的原始程式碼。

  2. 啟動 Xcode 並建立新的 iOS Objective-C 專案。請記下專案的目標。您需要在 Podfile 中設定它。

    在 Xcode 中找到目標。
  3. 要使用 AWS Mobile SDK for iOS 將其導入到 Xcode 項目中 CocoaPods,請執行以下操作:

    1. CocoaPods 透過在終端機視窗中執行下列命令來進行安裝:

      sudo gem install cocoapods pod setup
    2. 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 行動 SDK 元件。

    4. 關閉 Xcode 專案,然後開啟 .xcworkspace 檔案重新啟動 Xcode。

    5. 從解壓縮的開發套件 .h 目錄將所有的 .mgenerated-src 檔案新增到您的 Xcode 專案。

      .h 和 .m 文件位於生成的 src 中

    要通過明確下載 AWS 移動 SDK 或使用迦太基將 AWS Mobile SDK for iOS Objective-C 導入到您的項目中,請按照 README.md 文件中的說明進行操作。請務必只使用其中一個選項來匯入 AWS 行動 SDK。

使用 Objective-C 專案中 API Gateway 產生的 iOS 軟體開發套件呼叫 API 方法

當您使用這個 SimpleCalc APISIMPLE_CALC前置詞產生 SDK 時,其中包含兩個用於輸入 (Input) 和 output (Result) 方法的模型時,在 SDK 中,產生的 API 用戶端類別會變成 SIMPLE_CALCSimpleCalcClientSIMPLE_CALCResult,而對應的資料類別分別為SIMPLE_CALCInput和。API 請求和回應會對應至開發套件方法,如下所示:

  • 下列的 API 請求:

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

    會成為下列的開發套件方法:

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

    如果 AWSTask.result 模型已新增至方法回應,則 SIMPLE_CALCResult 屬性為 Result 類型。否則,屬性為 NSDictionary 類型。

  • 下列的此 API 請求:

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

    會成為下列的開發套件方法:

    (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  • 下列的 API 請求:

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

    會成為下列的開發套件方法:

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

下列程序說明如何在 Objective-C 應用程式原始碼中呼叫 API 方法;例如,在 viewDidLoad 檔案中作為 ViewController.m 委派的一部分。

透過 API Gateway 所產生的 iOS 軟體開發套件來呼叫 API
  1. 匯入 API 用戶端類別標頭檔案,以能在應用程式中呼叫 API 用戶端類別:

    #import "SIMPLE_CALCSimpleCalc.h"

    #import 陳述式也針對兩個模型類別匯入 SIMPLE_CALCInput.hSIMPLE_CALCResult.h

  2. 將 API 用戶端類別執行個體化:

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    若要使用 Amazon Cognito 與 API,請先在預設的 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 編碼的路徑變數。

使用產生的 iOS 開發套件 (Swift) 呼叫 API

開始下列程序之前,您必須先在 Swift 中完成在 API Gateway 中針對 REST API 產生軟體開發套件中的 iOS 步驟,並下載已產生之軟體開發套件的 .zip 檔案。

在 Swift 專案中安裝 AWS 行動 SDK 和 API 閘道產生的 SDK

下列程序說明如何安裝開發套件。

安裝和使用 API Gateway 在 Swift 中產生的 iOS 軟體開發套件
  1. 將您稍早下載之 API Gateway 所產生的 .zip 檔案內容解壓縮。使用 SimpleCalc API,您可能需要將解壓縮的 SDK 文件夾重命名為類似sdk_swift_simple_calc的內容。在這個開發套件資料夾中,有 README.md 檔案和 Podfile 檔案。README.md 檔案包含開發套件的安裝和使用說明。本教學提供這些說明的詳細資訊。安裝會利用CocoaPods匯入必要的 AWS 行動 SDK 元件。您必須更新 Podfile,以將開發套件匯入至您 Swift 應用程式的 Xcode 專案。未封存的開發套件資料夾也包含 generated-src 資料夾,其中包含 API 之已產生開發套件的原始程式碼。

  2. 啟動 Xcode 並建立新的 iOS Swift 專案。請記下專案的目標。您需要在 Podfile 中設定它。

    在 Xcode 中找到目標。
  3. 要使用將所需的 AWS 移動 SDK 組件導入到 Xcode 項目中 CocoaPods,請執行以下操作:

    1. 如果未安裝,請在終端機視窗中執行下列命令 CocoaPods 來進行安裝:

      sudo gem install cocoapods pod setup
    2. 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 行動 SDK 元件安裝到應用程式的專案中。

    4. 關閉 Xcode 專案,然後開啟 *.xcworkspace 檔案重新啟動 Xcode。

    5. 將所有開發套件的標頭檔案 (.h) 和 Swift 原始程式碼檔案 (.swift) 從擷取的 generated-src 目錄新增至 Xcode 專案。

      .h 和 .swift 文件位於生成的 src 中
    6. 要啟用從 Swift 代碼項目調用 AWS 移動 SDK 的 Objective-C 庫,請在 Swift 編譯器-Xcode 項目配置的常規設置下的 Objective-C 橋接頭屬性上設置Bridging_Header.h文件路徑:

      在斯威夫特編譯器-常規下設置橋接頭 .h 文件路徑。
      提示

      您可以在 Xcode 的搜尋方塊中輸入 bridging,以尋找 Objective-C Bridging Header (Objective-C 橋接標頭) 屬性。

    7. 建置 Xcode 專案,驗證已正確地設定它,再繼續進行。如果您的 Xcode 使用的是比 AWS 移動 SDK 支持的更新版本的 Swift,則會出現 Swift 編譯器錯誤。在這種情況下,於 Swift Compiler - Version (Swift 編譯器 - 版本) 設定下方,將 Use Legacy Swift Language Version (使用傳統 Swift 語言版本) 屬性設定為 Yes (是)

      將「舊版 Swift 語言版本」屬性設置為「是」。

    要通過明確下載 AWS 移動 SDK 或使用迦太基將適用於 iOS 的 AWS 移動 SDK 導入到您的項目中,請按照 SDK 包附帶的README.md文件中的說明進行操作。請務必只使用其中一個選項來匯入 AWS 行動 SDK。

在 Swift 專案中透過 API Gateway 所產生的 iOS 軟體開發套件來呼叫 API 方法

當您使用兩個模型來描述 SimpleCalc API 要求和回應的 input (Input) 和 output (Result) 產生 SDK 時,在 SDK 中,產生的 API 用戶端類別會變成SIMPLE_CALCSimpleCalcClient,而對應的資料類別分別為SIMPLE_CALCInputSIMPLE_CALCResultSIMPLE_CALCAPI 請求和回應會對應至開發套件方法,如下所示:

  • 下列的 API 請求:

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

    會成為下列的開發套件方法:

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

    如果 AWSTask.result 模型已新增至方法回應,則 SIMPLE_CALCResult 屬性為 Result 類型。否則,它為 NSDictionary 類型。

  • 下列的此 API 請求:

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

    會成為下列的開發套件方法:

    public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  • 下列的 API 請求:

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

    會成為下列的開發套件方法:

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

下列程序說明如何在 Swift 應用程式原始碼中呼叫 API 方法;例如,在 viewDidLoad() 檔案中做為 ViewController.m 委派的一部分。

透過 API Gateway 所產生的 iOS 軟體開發套件來呼叫 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 }

    其中,helper 函數 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 編碼的路徑變數。