Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift - Amazon API Gateway

Uso dell'SDK iOS generato da API Gateway per un'API REST in Objective-C o Swift

In questo tutorial mostreremo come usare un SDK iOS generato da API Gateway per un'API REST in un'app Objective-C o Swift per chiamare l'API sottostante. Useremo l'API SimpleCalc come esempio per illustrare gli argomenti seguenti:

  • Come installare i componenti dell'SDK AWS Mobile nel progetto Xcode

  • Come creare l'oggetto client dell'API prima di chiamare i metodi dell'API

  • Come chiamare i metodi API attraverso i metodi SDK corrispondenti nell'oggetto client dell'API

  • Come preparare un input di metodo e analizzare il risultato utilizzando le classi di modello corrispondenti dell'SDK

Utilizzo di un SDK iOS (Objective-C) generato per chiamare l'API

Prima di iniziare la procedura seguente, è necessario completare le fasi descritte in Generazione di SDK per REST API in Gateway API per iOS in Objective-C e scaricare il file .zip dell'SDK generato.

Installa l'SDK AWS Mobile e un SDK iOS generato da API Gateway in un progetto Objective-C

La procedura seguente descrive come installare l'SDK.

Per installare e utilizzare un SDK iOS generato da API Gateway in Objective-C
  1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente. Utilizzando l'API SimpleCalc, è possibile assegnare alla cartella SDK decompressa un nome diverso, ad esempio sdk_objc_simple_calc. In questa cartella SDK sono presenti un file README.md e un file Podfile. Il file README.md contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione usa CocoaPods per importare le librerie API Gateway richieste e altri componenti dell'SDK AWS Mobile dipendenti. Per importare gli SDK nel progetto Xcode dell'app, devi aggiornare il Podfile. La cartella SDK non archiviata contiene anche una cartella generated-src con il codice sorgente dell'SDK generato dell'API.

  2. Avvia Xcode e crea un nuovo progetto Objective-C per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel Podfile.

    Trovare la destinazione in Xcode.
  3. Per importare AWS Mobile SDK for iOS nel progetto Xcode utilizzando CocoaPods, procedi come illustrato di seguito:

    1. Installa CocoaPods eseguendo il comando seguente in una finestra del terminale:

      sudo gem install cocoapods pod setup
    2. Copia il file Podfile dalla cartella SDK estratta nella stessa directory in cui si trova il file di progetto Xcode. Sostituisci il blocco seguente:

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

      con il nome di destinazione del progetto:

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

      Se il progetto Xcode già contiene un file denominato Podfile, aggiungi la riga di codice seguente:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Apri una finestra del terminale ed esegui il comando seguente:

      pod install

      Vengono installati il componente API Gateway e altri componenti dell'SDK AWS Mobile dipendenti.

    4. Chiudi il progetto Xcode e apri il file .xcworkspace per riavviare Xcode.

    5. Aggiungi tutti i file .h e .m dalla directory generated-src estratta dell'SDK nel progetto Xcode.

      I file .h e .m si trovano nella directory generated-src

    Per importare Objective-C AWS Mobile SDK for iOS nel progetto scaricando esplicitamente l'SDK AWS Mobile o utilizzando Carthage, seguire le istruzioni nel file README.md. Usa solo una di queste opzioni per importare l'SDK AWS Mobile.

Chiamata ai metodi API mediante l'SDK iOS generato da API Gateway in un progetto Objective-C

Quando hai generato l'SDK con il prefisso SIMPLE_CALC per questa API SimpleCalc con due modelli per l'input (Input) e l'output (Result) dei metodi, nell'SDK la classe client dell'API risultante diventa SIMPLE_CALCSimpleCalcClient e le classi di dati corrispondenti sono rispettivamente SIMPLE_CALCInput e SIMPLE_CALCResult. Le richieste e le risposte API sono mappate ai metodi SDK come segue:

  • La richiesta API di

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

    diventa il metodo SDK di

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

    La proprietà AWSTask.result è del tipo SIMPLE_CALCResult, se il modello Result è stato aggiunto alla risposta del metodo. In caso contrario, è del tipo NSDictionary.

  • Questa richiesta API di

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

    diventa il metodo SDK di

    (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  • La richiesta API di

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

    diventa il metodo SDK di

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

La procedura seguente descrive come chiamare i metodi API nel codice di origine delle app Objective-C, ad esempio nell'ambito del delegato viewDidLoad in un file ViewController.m.

Per chiamare l'API mediante l'SDK iOS generato da API Gateway
  1. Importa il file di intestazione della classe client dell'API per rendere tale classe chiamabile nell'app:

    #import "SIMPLE_CALCSimpleCalc.h"

    L'istruzione #import inoltre importa SIMPLE_CALCInput.h e SIMPLE_CALCResult.h per le due classi di modelli.

  2. Crea un'istanza della classe client dell'API:

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    Per utilizzare Amazon Cognito con l'API, impostare la proprietà defaultServiceConfiguration sull'oggetto AWSServiceManager predefinito, come mostrato di seguito, prima di chiamare il metodo defaultClient per creare l'oggetto client dell'API (mostrato nell'esempio precedente):

    AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:your_cognito_pool_id]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:creds]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
  3. Chiama il metodo GET /?a=1&b=2&op=+ per eseguire 1+2:

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

    dove la funzione dell'helper handleApiResponse:task formatta il risultato come stringa da visualizzare in un campo di testo (_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; }

    Il risultato visualizzato è 1 + 2 = 3.

  4. Chiama POST / con un payload per eseguire 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; }];

    Il risultato visualizzato è 1 - 2 = -1.

  5. Chiama GET /{a}/{b}/{op} per eseguire 1/2:

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

    Il risultato visualizzato è 1 div 2 = 0.5. Nell'esempio, div viene usato al posto di / perché la funzione Lambda semplice nel back-end non gestisce le variabili di percorso con codifica URL.

Utilizzo di un SDK iOS (Swift) generato per chiamare l'API

Prima di iniziare la procedura seguente, devi completare le fasi descritte in Generazione di SDK per REST API in Gateway API per iOS in Swift e scaricare il file .zip dell'SDK generato.

Installazione dell'SDK AWS Mobile e di un SDK generato da API Gateway in un progetto Swift

La procedura seguente descrive come installare l'SDK.

Per installare e utilizzare un SDK iOS generato da API Gateway in Swift
  1. Estrai il contenuto del file .zip generato da API Gateway scaricato precedentemente. Utilizzando l'API SimpleCalc, è possibile assegnare alla cartella SDK decompressa un nome diverso, ad esempio sdk_swift_simple_calc. In questa cartella SDK sono presenti un file README.md e un file Podfile. Il file README.md contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione usa CocoaPods per importare i componenti dell'SDK AWS Mobile richiesti. Per importare gli SDK nel progetto Xcode dell'app Swift, devi aggiornare il Podfile. La cartella SDK non archiviata contiene anche una cartella generated-src con il codice sorgente dell'SDK generato dell'API.

  2. Avvia Xcode e crea un nuovo progetto Swift per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel Podfile.

    Trovare la destinazione in Xcode.
  3. Per importare i componenti dell'SDK AWS Mobile richiesti nel progetto Xcode utilizzando CocoaPods, procedi come illustrato di seguito:

    1. Se non è installato, installa CocoaPods mediante il comando seguente in una finestra del terminale:

      sudo gem install cocoapods pod setup
    2. Copia il file Podfile dalla cartella SDK estratta nella stessa directory in cui si trova il file di progetto Xcode. Sostituisci il blocco seguente:

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

      con il nome di destinazione del progetto, come mostrato

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

      Se il progetto Xcode già contiene un Podfile con la destinazione corretta, puoi semplicemente aggiungere la riga di codice seguente al loop do ... end:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Apri una finestra del terminale ed esegui il comando seguente nella directory dell'app:

      pod install

      Vengono installati il componente API Gateway e tutti i componenti dell'SDK AWS Mobile dipendenti nel progetto dell'app.

    4. Chiudi il progetto Xcode e apri il file *.xcworkspace per riavviare Xcode.

    5. Aggiungi tutti i file di intestazione dell'SDK (.h) e i file del codice di origine Swift (.swift) dalla directory generated-src estratta nel progetto Xcode.

      I file .h e .swift si trovano nella directory generated-src
    6. Per abilitare la chiamata alle librerie Objective-C dell'SDK AWS Mobile dal progetto del codice Swift, impostare il percorso del file Bridging_Header.h sulla proprietà Objective-C Bridging Header (Intestazione bridging Objective-C) nell'impostazione Swift Compiler - General (Compilatore Swift - Generale) della configurazione del progetto Xcode:

      Impostare il percorso del file Bridging_Header.h in Compilatore Swift - Generale.
      Suggerimento

      È possibile digitare bridging nella casella di ricerca di Xcode per trovare la proprietà Objective-C Bridging Header (Intestazione bridging Objective-C).

    7. Prima di procedere, crea il progetto Xcode per verificare che sia configurato correttamente. Se il progetto Xcode usa una versione di Swift più recente rispetto a quella supportata per l'SDK AWS Mobile, verranno visualizzati errori del compilatore Swift. In questo caso, impostare la proprietà Use Legacy Swift Language Version (Usa versione linguaggio Swift legacy) su Yes (Sì) in Swift Compiler - Version (Compilatore Swift - Versione):

      Impostare la proprietà Versione linguaggio Swift legacy su Sì.

    Per importare l'SDK AWS Mobile for iOS in Swift nel progetto scaricando esplicitamente l'SDK AWS Mobile o utilizzando Carthage, seguire le istruzioni nel file README.md fornito con il pacchetto SDK. Usa solo una di queste opzioni per importare l'SDK AWS Mobile.

Chiamata ai metodi API mediante l'SDK iOS generato da API Gateway in un progetto Swift

Quando hai generato l'SDK con il prefisso SIMPLE_CALC per questa API SimpleCalc con due modelli per descrivere l'input (Input) e l'output (Result) delle richieste e delle risposte dell'API, nell'SDK la classe client dell'API risultante diventa SIMPLE_CALCSimpleCalcClient e le classi di dati corrispondenti sono rispettivamente SIMPLE_CALCInput e SIMPLE_CALCResult. Le richieste e le risposte API sono mappate ai metodi SDK come segue:

  • La richiesta API di

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

    diventa il metodo SDK di

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

    La proprietà AWSTask.result è del tipo SIMPLE_CALCResult, se il modello Result è stato aggiunto alla risposta del metodo. In caso contrario, è del tipo NSDictionary.

  • Questa richiesta API di

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

    diventa il metodo SDK di

    public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  • La richiesta API di

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

    diventa il metodo SDK di

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

La procedura seguente descrive come chiamare i metodi API nel codice di origine delle app Swift, ad esempio nell'ambito del delegato viewDidLoad() in un file ViewController.m.

Per chiamare l'API mediante l'SDK iOS generato da API Gateway
  1. Crea un'istanza della classe client dell'API:

    let client = SIMPLE_CALCSimpleCalcClient.default()

    Per usare Amazon Cognito con l'API, imposta una configurazione predefinita del servizio AWS (mostrata di seguito) prima di ottenere il metodo default (mostrato precedentemente):

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "my_pool_id") let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
  2. Chiama il metodo GET /?a=1&b=2&op=+ per eseguire 1+2:

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

    dove la funzione dell'helper self.showResult(task) stampa il risultato o l'errore nella console, ad esempio:

    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 un'app di produzione puoi visualizzare il risultato o l'errore in un campo di testo. Il risultato visualizzato è 1 + 2 = 3.

  3. Chiama POST / con un payload per eseguire 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 }

    Il risultato visualizzato è 1 - 2 = -1.

  4. Chiama GET /{a}/{b}/{op} per eseguire 1/2:

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

    Il risultato visualizzato è 1 div 2 = 0.5. Nell'esempio, div viene usato al posto di / perché la funzione Lambda semplice nel back-end non gestisce le variabili di percorso con codifica URL.