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
Argomenti
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
-
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 fileREADME.md
e un filePodfile
. Il fileREADME.md
contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione usa CocoaPodsper 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 cartellagenerated-src
con il codice sorgente dell'SDK generato dell'API. -
Avvia Xcode e crea un nuovo progetto Objective-C per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel
Podfile
. -
Per importare AWS Mobile SDK for iOS nel progetto Xcode utilizzando CocoaPods, procedi come illustrato di seguito:
-
Installa CocoaPods eseguendo il comando seguente in una finestra del terminale:
sudo gem install cocoapods pod setup
-
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' endcon il nome di destinazione del progetto:
target '
app_objc_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endSe il progetto Xcode già contiene un file denominato
Podfile
, aggiungi la riga di codice seguente:pod 'AWSAPIGateway', '~> 2.4.7'
-
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.
-
Chiudi il progetto Xcode e apri il file
.xcworkspace
per riavviare Xcode. -
Aggiungi tutti i file
.h
e.m
dalla directorygenerated-src
estratta dell'SDK nel progetto Xcode.
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 tipoSIMPLE_CALCResult
, se il modelloResult
è stato aggiunto alla risposta del metodo. In caso contrario, è del tipoNSDictionary
. -
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
-
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 importaSIMPLE_CALCInput.h
eSIMPLE_CALCResult.h
per le due classi di modelli. -
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'oggettoAWSServiceManager
predefinito, come mostrato di seguito, prima di chiamare il metododefaultClient
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; -
Chiama il metodo
GET /?a=1&b=2&op=+
per eseguire1+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
. -
Chiama
POST /
con un payload per eseguire1-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
. -
Chiama
GET /{a}/{b}/{op}
per eseguire1/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.
Argomenti
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
-
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 fileREADME.md
e un filePodfile
. Il fileREADME.md
contiene le istruzioni per installare e usare l'SDK. Questo tutorial fornisce i dettagli relativi alle istruzioni. L'installazione usa CocoaPodsper 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 cartellagenerated-src
con il codice sorgente dell'SDK generato dell'API. -
Avvia Xcode e crea un nuovo progetto Swift per iOS. Prendi nota della destinazione del progetto. Dovrai specificare questa impostazione nel
Podfile
. -
Per importare i componenti dell'SDK AWS Mobile richiesti nel progetto Xcode utilizzando CocoaPods, procedi come illustrato di seguito:
-
Se non è installato, installa CocoaPods mediante il comando seguente in una finestra del terminale:
sudo gem install cocoapods pod setup
-
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' endcon il nome di destinazione del progetto, come mostrato
target '
app_swift_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endSe il progetto Xcode già contiene un
Podfile
con la destinazione corretta, puoi semplicemente aggiungere la riga di codice seguente al loopdo ... end
:pod 'AWSAPIGateway', '~> 2.4.7'
-
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.
-
Chiudi il progetto Xcode e apri il file
*.xcworkspace
per riavviare Xcode. -
Aggiungi tutti i file di intestazione dell'SDK (
.h
) e i file del codice di origine Swift (.swift
) dalla directorygenerated-src
estratta nel progetto Xcode. -
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:Suggerimento
È possibile digitare
bridging
nella casella di ricerca di Xcode per trovare la proprietà Objective-C Bridging Header (Intestazione bridging Objective-C). -
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):
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 tipoSIMPLE_CALCResult
, se il modelloResult
è stato aggiunto alla risposta del metodo. In caso contrario, è del tipoNSDictionary
. -
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
-
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 -
Chiama il metodo
GET /?a=1&b=2&op=+
per eseguire1+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
. -
Chiama
POST /
con un payload per eseguire1-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
. -
Chiama
GET /{a}/{b}/{op}
per eseguire1/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.