Von API Gateway generiertes iOS-SDK für eine REST-API in Objective-C oder Swift verwenden - Amazon API Gateway

Von API Gateway generiertes iOS-SDK für eine REST-API in Objective-C oder Swift verwenden

In diesem Tutorial erfahren Sie, wie Sie ein iOS SDK, das von API Gateway für eine REST-API in einer Objective-C- oder Swift-App generiert wurde, zum Aufrufen der zugrunde liegenden API verwenden. Zur Veranschaulichung der folgenden Themen wird die SimpleCalc-API als Beispiel-API genutzt:

  • So installieren Sie die erforderlichen AWS Mobile SDK-Komponenten in Ihr Xcode-Projekt

  • So erstellen Sie das API-Clientobjekt vor dem Aufruf der API-Methoden

  • So rufen Sie die API-Methoden mit den entsprechenden SDK-Methoden auf dem API-Clientobjekt auf

  • So generieren Sie die Methodeneingabe und analysieren das Ergebnis mit den entsprechenden SDK-Modellklassen

Verwenden des generierten iOS-SDK (Objective-C) zum Aufrufen der API

Bevor Sie mit folgendem Verfahren beginnen, müssen Sie die Schritte in SDKs für REST-APIs in API Gateway generieren für iOS in Objective-C durchführen und die ZIP-Datei des generierten SDK herunterladen.

AWS Mobile SDK und ein mit API Gateway generiertes iOS-SDK in einem Objective-C-Projekt installieren

Im folgenden Verfahren wird beschrieben, wie Sie das SDK installieren.

So installieren und verwenden Sie ein iOS-SDK, das von API Gateway generiert wurde, in Objective-C:
  1. Extrahieren Sie den Inhalt der von API Gateway generierten ZIP-Datei, die Sie zuvor heruntergeladen haben. Wenn Sie die SimpleCalc-API, sollten Sie den nicht komprimierten SDK-Ordner in sowas wie sdk_objc_simple_calc umbenennen. In diesem SDK-Ordner sind eine README.md-Datei und eine Podfile-Datei enthalten. Die README.md-Datei enthält die Anweisungen für die Installation und Verwendung des SDK. Dieses Tutorial bietet Details zu diesen Anweisungen. Die Installation nutzt CocoaPods, um erforderliche API-Gateway-Bibliotheken und andere abhängige Komponenten des AWS SDK für Mobilgerätezu importieren. Aktualisieren Sie die Podfile, um die SDKs in das Xcode-Projekt Ihrer App zu importieren. Der nicht archivierte SDK-Ordner enthält auch einen generated-src-Ordner mit dem Quellcode des generierten SDK Ihrer API.

  2. Starten Sie Xcode und erstellen Sie ein neues iOS Objective-C-Projekt. Notieren Sie das Projektziel. Sie müssen die entsprechende Einstellung in der Podfile vornehmen.

    Das Ziel in Xcode finden.
  3. Führen Sie die folgenden Schritte aus, um die AWS Mobile SDK for iOS mithilfe von CocoaPods in das Xcode-Projekt zu importieren:

    1. Installieren Sie CocoaPods, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:

      sudo gem install cocoapods pod setup
    2. Kopieren Sie die Podfile-Datei vom extrahierten SDK-Ordner in dasselbe Verzeichnis, das Ihre Xcode Projektdatei enthält. Ersetzen Sie den folgenden Block:

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

      mit dem Zielnamen Ihres Projekts:

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

      Wenn Ihr Xcode-Projekt bereits eine Datei mit dem Namen Podfile enthält, fügen Sie die folgende Codezeile hinzu:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl aus:

      pod install

      Dadurch werden die API-Gateway-Komponente und andere abhängige AWS Mobile SDK-Komponenten installiert.

    4. Schließen Sie das Xcode-Projekt und öffnen Sie anschließend die .xcworkspace-Datei, um Xcode neu zu starten.

    5. Fügen Sie alle .h- und .m-Dateien aus dem extrahierten SDK-Verzeichnis generated-src Ihrem Xcode-Projekt hinzu.

      .h- und m-Dateien befinden sich in der generated-src

    Zum Importieren von AWS Mobile SDK for iOS Objective-C explizit in Ihr Projekt, indem Sie das AWS Mobile SDK explizit herunterladen oder Carthage verwenden, befolgen Sie die Anweisungen in der README.md-Datei. Stellen Sie sicher, dass Sie nur eine dieser Optionen zum Importieren des AWS Mobile SDK verwenden.

In einem Objective-C-Projekt API-Methoden unter Verwendung des von API Gateway generierten iOS-SDKs aufrufen

Wenn Sie das SDK mit dem Präfix SIMPLE_CALC für diese SimpleCalc API mit zwei Modellen für die Eingabe (Input) und Ausgabe (Result) der Methoden generiert haben, wird im SDK die resultierende API-Client-Klasse zu SIMPLE_CALCSimpleCalcClient und die entsprechenden Datenklassen sind SIMPLE_CALCInput bzw. SIMPLE_CALCResult. Die API-Anfragen und-Antworten sind den SDK-Methoden wie folgt zugeordnet:

  • Die API-Anfrage

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

    wird die SDK-Methode

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

    Die Eigenschaft AWSTask.result ist vom Typ SIMPLE_CALCResult, wenn das Modell Result zur Methodenantwort hinzugefügt wurde. Andernfalls ist die Eigenschaft vom Typ NSDictionary.

  • Diese API-Anfrage

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

    wird die SDK-Methode

    (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  • Die API-Anfrage

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

    wird die SDK-Methode

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

Im folgenden Verfahren wird beschrieben, wie die API-Methoden im Objective-C-App-Quellcode aufgerufen werden, z. B. als Teil des viewDidLoad-Delegaten in einer ViewController.m-Datei.

So rufen Sie die API über das von API Gateway generierte iOS-SDK auf:
  1. Importieren Sie die Header-Datei der API-Client-Klasse, um die API-Client-Klasse in der App aufrufbar zu machen:

    #import "SIMPLE_CALCSimpleCalc.h"

    Durch die Anweisung #import werden auch SIMPLE_CALCInput.h und SIMPLE_CALCResult.h für die beiden Modellklassen importiert.

  2. Instanziieren Sie die API-Client-Klasse:

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    Um Amazon Cognito mit der API zu verwenden, legen Sie, wie im Folgenden gezeigt, Sie die defaultServiceConfiguration-Eigenschaft auf das Standard-AWSServiceManager-Objekt fest, bevor Sie die defaultClient-Methode aufrufen, um das API-Client-Objekt zu erstellen (im vorhergehenden Beispiel gezeigt):

    AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:your_cognito_pool_id]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:creds]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
  3. Rufen Sie die GET /?a=1&b=2&op=+-Methode auf, um 1+2 durchzuführen:

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

    in der die Hilfsfunktion handleApiResponse:task das Ergebnis als eine Zeichenfolge formatiert, die in einem Textfeld (_textField1) angezeigt werden soll.

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

    Die sich ergebende Anzeige ist 1 + 2 = 3.

  4. Rufen Sie den POST / mit einer Nutzlast aus, um 1-2 durchzuführen:

    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; }];

    Die sich ergebende Anzeige ist 1 - 2 = -1.

  5. Rufen Sie GET /{a}/{b}/{op} auf, um 1/2 durchzuführen:

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

    Die sich ergebende Anzeige ist 1 div 2 = 0.5. Hier wird div anstelle von / verwendet, da die einfache Lambda-Funktion im Backend keine URL-kodierten Pfadvariablen verarbeitet.

Verwenden eines generierten iOS-SDK (Swift) zum Aufrufen der API

Bevor Sie mit folgendem Verfahren beginnen, müssen Sie die Schritte in SDKs für REST-APIs in API Gateway generieren für iOS in Swift durchführen und die ZIP-Datei des generierten SDK herunterladen.

AWS Mobile SDK und ein von API Gateway generiertes SDK in einem Swift-Projekt installieren

Im folgenden Verfahren wird beschrieben, wie Sie das SDK installieren.

So installieren und verwenden Sie von API Gateway generiertes iOS-SDK in Swift:
  1. Extrahieren Sie den Inhalt der von API Gateway generierten ZIP-Datei, die Sie zuvor heruntergeladen haben. Wenn Sie die SimpleCalc-API, sollten Sie den nicht komprimierten SDK-Ordner in sowas wie sdk_swift_simple_calc umbenennen. In diesem SDK-Ordner sind eine README.md-Datei und eine Podfile-Datei enthalten. Die README.md-Datei enthält die Anweisungen für die Installation und Verwendung des SDK. Dieses Tutorial bietet Details zu diesen Anweisungen. Die Installation nutzt CocoaPods zum Importieren der erforderlichen AWS-Mobile SDK-Komponenten. Aktualisieren Sie die Podfile, um die SDKs in das Xcode-Projekt Ihrer Swift-App zu importieren. Der nicht archivierte SDK-Ordner enthält auch einen generated-src-Ordner mit dem Quellcode des generierten SDK Ihrer API.

  2. Starten Sie Xcode und erstellen Sie ein neues iOS Swift-Projekt. Notieren Sie das Projektziel. Sie müssen die entsprechende Einstellung in der Podfile vornehmen.

    Das Ziel in Xcode finden.
  3. Gehen Sie wie folgt vor, um die erforderlichen AWS-Mobile SDK-Komponenten mithilfe von CocoaPods in das Xcode-Projekt zu importieren:

    1. Wenn es nicht installiert ist, installieren Sie CocoaPods, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:

      sudo gem install cocoapods pod setup
    2. Kopieren Sie die Podfile-Datei vom extrahierten SDK-Ordner in dasselbe Verzeichnis, das Ihre Xcode Projektdatei enthält. Ersetzen Sie den folgenden Block:

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

      mit dem Zielnamen Ihres Projekts wie dargestellt:

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

      Wenn Ihr Xcode-Projekt bereits eine Podfile mit dem korrekten Ziel enthält, können Sie einfach die folgende Codezeile zur do ... end-Schleife hinzufügen:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl im App-Verzeichnis aus:

      pod install

      Dadurch werden die API-Gateway-Komponente und alle abhängigen AWS Mobile SDK-Komponenten im Projekt der App installiert.

    4. Schließen Sie das Xcode-Projekt und öffnen Sie anschließend die *.xcworkspace-Datei, um Xcode neu zu starten.

    5. Fügen Sie alle SDK-Header-Dateien (.h) und Swift-Quellcodedateien (.swift) aus dem extrahierten generated-src-Verzeichnis zu Ihrem Xcode-Projekt hinzu.

      .h- und .swift-Dateien befinden sich im generated-src
    6. Um das Aufrufen der Objective-C-Bibliotheken des AWS-Mobile SDK aus Ihrem SWIFT-Code-Projekt zu aktivieren, legen Sie den Dateipfad Bridging_Header.h auf der Eigenschaft Objective-C Bridging Header unter der Einstellung Swift Compiler - General Ihrer Xcode-Projektkonfiguration fest:

      Legen Sie den Dateipfad „Bridging_Header.h“ unter Swift Compiler - General fest.
      Tipp

      Sie können im Suchfeld von Xcode bridging eingeben, um die Eigenschaft Objective-C Bridging Header zu suchen.

    7. Erstellen Sie das Xcode-Projekt, um zu überprüfen, dass es ordnungsgemäß konfiguriert wurde, bevor Sie fortfahren. Wenn Ihr Xcode eine neuere Version von Swift als die für das AWS Mobile SDK unterstützte verwendet, erhalten Sie Swift-Compiler-Fehler. Setzen Sie in diesem Fall die Eigenschaft Use Legacy Swift Language Version auf Yes in der Einstellung Swift Compiler- Version:

      Setzen Sie die Eigenschaft „Legacy Swift Language Version“ auf „Ja“.

    Zum Importieren des AWS Mobile SDK for iOS in Swift in Ihr Projekt, indem Sie das AWS Mobile SDK explizit herunterladen oder Carthage verwenden, befolgen Sie die Anweisungen in der README.md-Datei, die im SDK-Paket enthalten ist. Stellen Sie sicher, dass Sie nur eine dieser Optionen zum Importieren des AWS Mobile SDK verwenden.

API-Methoden über das von API Gateway generierte iOS-SDK in einem Swift-Projekt aufrufen

Wenn Sie das SDK mit dem Präfix SIMPLE_CALC für diese SimpleCalc API mit zwei Modellen zur Beschreibung der Eingabe (Input) und Ausgabe (Result) der API-Anforderungen und -Antworten generiert haben, wird im SDK die resultierende API-Client-Klasse zu SIMPLE_CALCSimpleCalcClient und die entsprechenden Datenklassen sind SIMPLE_CALCInput bzw. SIMPLE_CALCResult. Die API-Anfragen und-Antworten sind den SDK-Methoden wie folgt zugeordnet:

  • Die API-Anfrage

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

    wird die SDK-Methode

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

    Die Eigenschaft AWSTask.result ist vom Typ SIMPLE_CALCResult, wenn das Modell Result zur Methodenantwort hinzugefügt wurde. Andernfalls ist sie vom Typ NSDictionary.

  • Diese API-Anfrage

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

    wird die SDK-Methode

    public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  • Die API-Anfrage

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

    wird die SDK-Methode

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

Im folgenden Verfahren wird beschrieben, wie die API-Methoden im Swift-App-Quellcode aufgerufen werden, z. B. als Teil des viewDidLoad()-Delegaten in einer ViewController.m-Datei.

So rufen Sie die API über das von API Gateway generierte iOS-SDK auf:
  1. Instanziieren Sie die API-Client-Klasse:

    let client = SIMPLE_CALCSimpleCalcClient.default()

    Um Amazon Cognito mit der API zu verwenden, legen Sie eine Standard-AWS-Service-Konfiguration fest (siehe unten), bevor Sie die default-Methode (siehe oben) aufrufen:

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "my_pool_id") let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
  2. Rufen Sie die GET /?a=1&b=2&op=+-Methode auf, um 1+2 durchzuführen:

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

    in der die Hilfsfunktion self.showResult(task) das Ergebnis oder den Fehler auf die Konsole druckt, z. B.:

    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)") } } }

    In einer Produktion-App können Sie das Ergebnis oder den Fehler in einem Textfeld anzeigen. Die sich ergebende Anzeige ist 1 + 2 = 3.

  3. Rufen Sie den POST / mit einer Nutzlast aus, um 1-2 durchzuführen:

    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 }

    Die resultierende Anzeige ist 1 - 2 = -1.

  4. Rufen Sie GET /{a}/{b}/{op} auf, um 1/2 durchzuführen:

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

    Die sich ergebende Anzeige ist 1 div 2 = 0.5. Hier wird div anstelle von / verwendet, da die einfache Lambda-Funktion im Backend keine URL-kodierten Pfadvariablen verarbeitet.