Utilisation d’un kit SDK iOS généré par API Gateway pour une API REST dans Objective-C ou Swift
Dans ce didacticiel, nous vous expliquons comment utiliser un kit SDK iOS généré à l’aide d’API Gateway pour une API REST dans une application Objective-C ou Swift pour appeler l’API sous-jacente. Nous utilisons l’API SimpleCalc comme exemple pour illustrer les rubriques suivantes :
-
Installation des composants AWS Mobile SDK requis dans votre projet Xcode
-
Création de l’objet de client d’API avant d’appeler les méthodes de l’API
-
Appel des méthodes d’API via les méthodes de kit SDK correspondantes sur l’objet de client d’API
-
Préparation d’une entrée de méthode et analyse de son résultat à l’aide des classes de modèle correspondantes du kit SDK
Rubriques
Utilisation d’un kit SDK iOS généré (Objective-C) pour appeler une API
Avant de commencer la procédure suivante, vous devez suivre la procédure décrite dans Génération de kits SDK pour les API REST dans API Gateway pour iOS dans Objective-C et télécharger le fichier .zip du kit SDK généré.
Installation d’AWS mobile SDK et un SDK iOS généré par API Gateway dans un projet Objective-C
La procédure suivante décrit comment installer le kit SDK.
Pour installer et utiliser un kit SDK iOS généré par API Gateway dans Objective-C
-
Extrayez le contenu du fichier .zip généré par API Gateway que vous avez précédemment téléchargé. A l’aide de l’API SimpleCalc, vous pouvez renommer le dossier du kit SDK décompressé sous la forme
sdk_objc_simple_calc
. Dans ce dossier de kit SDK se trouvent un fichierREADME.md
et un fichierPodfile
. Le fichierREADME.md
contient les instructions pour installer et utiliser le kit SDK. Ce didacticiel fournit les détails de ces instructions. L’installation tire parti de CocoaPodspour importer les bibliothèques API Gateway requises et d’autres composants du Kit SDK AWS Mobile dépendants. Vous devez mettre à jour le fichier Podfile
pour importer les kits SDK dans le projet Xcode de votre application. Le dossier de kit SDK décompressé contient également un dossiergenerated-src
qui contient le code source du kit SDK généré de votre API. -
Lancez Xcode et créez un projet iOS Objective-C. Notez la cible du projet. Vous en avez besoin pour la définir dans le fichier
Podfile
. -
Pour importer le AWS Mobile SDK for iOS dans le projet Xcode à l’aide de CocoaPods, procédez comme suit :
-
Installez CocoaPods en exécutant la commande suivante dans une fenêtre de terminal :
sudo gem install cocoapods pod setup
-
Copiez le fichier
Podfile
à partir du dossier de kit SDK extrait dans le même répertoire contenant votre fichier de projet Xcode. Remplacez le bloc suivant :target '
<YourXcodeTarget>
' do pod 'AWSAPIGateway', '~> 2.4.7' endavec le nom cible de votre projet :
target '
app_objc_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endSi votre projet Xcode contient déjà un fichier nommé
Podfile
, ajoutez-lui la ligne de code suivante :pod 'AWSAPIGateway', '~> 2.4.7'
-
Ouvrez une fenêtre de terminal et exécutez la commande suivante :
pod install
Cette opération installe le composant API Gateway et d’autres composants dépendants d’AWS Mobile SDK.
-
Fermez le projet Xcode et ouvrez le fichier
.xcworkspace
pour relancer Xcode. -
Ajoutez tous les fichiers
.h
et.m
du répertoiregenerated-src
du kit SDK extrait dans votre projet Xcode.
Pour importer le AWS Mobile SDK for iOS Objective-C dans votre projet en téléchargeant explicitement le kit SDK AWS Mobile ou en utilisant Carthage
, suivez les instructions du fichier README.md. Veillez à utiliser une seule de ces options pour importer l’AWS Mobile SDK. -
Appel des méthodes d’API à l’aide du kit SDK iOS généré par API Gateway dans un projet Objective-C
Lorsque vous générez le kit SDK avec le préfixe SIMPLE_CALC
pour cette API SimpleCalc avec deux modèles pour l’entrée (Input
) et la sortie (Result
) des méthodes, dans le kit SDK, la classe de client d’API qui en résulte devient SIMPLE_CALCSimpleCalcClient
et les classes de données correspondantes sont SIMPLE_CALCInput
et SIMPLE_CALCResult
, respectivement. Les demandes et réponses d’API sont mappées aux méthodes de kit SDK comme suit :
-
La demande d’API
GET /?a=...&b=...&op=...
devient la méthode du kit SDK
(AWSTask *)rootGet:(NSString *)op a:(NSString *)a b:(NSString *)b
La propriété
AWSTask.result
est de typeSIMPLE_CALCResult
si le modèleResult
a été ajouté à la réponse de méthode. Sinon, la propriété est de typeNSDictionary
. -
Cette demande d’API
POST / { "a": "Number", "b": "Number", "op": "String" }
devient la méthode du kit SDK
(AWSTask *)rootPost:(SIMPLE_CALCInput *)body
-
La demande d’API
GET /{a}/{b}/{op}
devient la méthode du kit SDK
(AWSTask *)aBOpGet:(NSString *)a b:(NSString *)b op:(NSString *)op
La procédure suivante décrit comment appeler les méthodes d’API dans le code source de l’application Objective-C, par exemple, comme faisant partie du délégué viewDidLoad
dans un fichier ViewController.m
.
Pour appeler l’API via le kit SDK iOS généré par API Gateway
-
Importez le fichier d’en-tête de la classe de client d’API pour que la classe de client d’API puisse être appelée dans l’application :
#import "SIMPLE_CALCSimpleCalc.h"
La déclaration
#import
importe égalementSIMPLE_CALCInput.h
etSIMPLE_CALCResult.h
pour les deux classes de modèle. -
Instanciez la classe de client d’API :
SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];
Pour utiliser Amazon Cognito avec l’API, définissez la propriété
defaultServiceConfiguration
sur l’objetAWSServiceManager
par défaut, comme illustré ci-après, avant d’appeler la méthodedefaultClient
pour créer l’objet de client d’API (comme illustré dans l’exemple précédent) :AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:
AWSRegionUSEast1
identityPoolId:your_cognito_pool_id
]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
credentialsProvider:creds]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; -
Appelez la méthode
GET /?a=1&b=2&op=+
pour exécuter1+2
:[[apiInstance rootGet: @"+" a:@"1" b:@"2"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField1.text = [self handleApiResponse:task]; return nil; }];
où
handleApiResponse:task
de la fonction d’assistant formate le résultat sous forme de chaîne pour l’afficher dans un champ de texte (_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; }
Le résultat qui s’affiche est
1 + 2 = 3
. -
Appelez la méthode
POST /
avec une charge utile pour exécuter1-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; }];
Le résultat qui s’affiche est
1 - 2 = -1
. -
Appelez la méthode
GET /{a}/{b}/{op}
pour exécuter1/2
:[[apiInstance aBOpGet:@"1" b:@"2" op:@"div"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField3.text = [self handleApiResponse:task]; return nil; }];
Le résultat qui s’affiche est
1 div 2 = 0.5
. Ici,div
est utilisé à la place de/
, car la fonction Lambda simple du backend ne gère pas les variables de chemin d’URL codée.
Utilisation d’un kit SDK iOS généré (Swift) pour appeler une API
Avant de commencer la procédure suivante, vous devez suivre les étapes décrites dans Génération de kits SDK pour les API REST dans API Gateway pour iOS dans Swift et téléchargez le fichier .zip du kit SDK généré.
Rubriques
Installation d’AWS Mobile SDK et de kit SDK généré par API Gateway dans un projet Swift
La procédure suivante décrit comment installer le kit SDK.
Pour installer et utiliser un kit SDK iOS généré par API Gateway dans Swift
-
Extrayez le contenu du fichier .zip généré par API Gateway que vous avez précédemment téléchargé. A l’aide de l’API SimpleCalc, vous pouvez renommer le dossier du kit SDK décompressé sous la forme
sdk_swift_simple_calc
. Dans ce dossier de kit SDK se trouvent un fichierREADME.md
et un fichierPodfile
. Le fichierREADME.md
contient les instructions pour installer et utiliser le kit SDK. Ce didacticiel fournit les détails de ces instructions. L’installation tire parti de CocoaPodspour importer les composants requis du kit SDK AWS Mobile. Vous devez mettre à jour le fichier Podfile
pour importer les kits SDK dans le projet Xcode de votre application Swift. Le dossier de kit SDK décompressé contient également un dossiergenerated-src
qui contient le code source du kit SDK généré de votre API. -
Lancez Xcode et créez un projet iOS Swift. Notez la cible du projet. Vous en avez besoin pour la définir dans le fichier
Podfile
. -
Pour importer les composants AWS Mobile SDK requis dans le projet Xcode à l’aide de CocoaPods, procédez comme suit :
-
Si CocoaPods n’est pas installé, installez-le en exécutant la commande suivante dans une fenêtre de terminal :
sudo gem install cocoapods pod setup
-
Copiez le fichier
Podfile
à partir du dossier de kit SDK extrait dans le même répertoire contenant votre fichier de projet Xcode. Remplacez le bloc suivant :target '
<YourXcodeTarget>
' do pod 'AWSAPIGateway', '~> 2.4.7' endavec le nom cible de votre projet comme indiqué :
target '
app_swift_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endSi votre fichier de projet Xcode contient un fichier nommé
Podfile
avec la cible correcte, vous pouvez simplement ajouter la ligne de code suivante à la boucledo ... end
:pod 'AWSAPIGateway', '~> 2.4.7'
-
Ouvrez une fenêtre de terminal et exécutez la commande suivante dans le répertoire de l’application :
pod install
Cette opération installe le composant API Gateway et les autres composants AWS Mobile SDK dépendants dans le projet de l’application.
-
Fermez le projet Xcode et ouvrez le fichier
*.xcworkspace
pour relancer Xcode. -
Ajoutez tous les fichiers d’en-tête du kit SDK (
.h
) et les fichiers de code source Swift (.swift
) du répertoiregenerated-src
extrait à votre projet Xcode. -
Pour activer l’appel des bibliothèques Objective-C du kit SDK AWS Mobile à partir de votre projet de code Swift, définissez le chemin d’accès
Bridging_Header.h
sur la propriété Objective-C Bridging Header (En-tête de transition Objective-C) sous le paramètre Swift Compiler - General (Compilateur Swift - Général) de votre configuration de projet Xcode :Astuce
Vous pouvez saisir
bridging
dans la zone de recherche de Xcode pour localiser la propriété Objective-C Bridging Header (En-tête de transition Objective-C). -
Créez le projet Xcode pour vérifier qu’il est correctement configuré avant de continuer. Si votre environnement Xcode utilise une version plus récente de Swift que celle prise en charge par l’AWS Mobile SDK, vous obtiendrez des erreurs du compilateur Swift. Dans ce cas, définissez la propriété Use Legacy Swift Language Version sur Yes sous le paramètre Swift Compiler - Version :
Pour importer Mobile SDK for iOS AWS dans Swift dans votre projet en téléchargeant explicitement Mobile SDK AWS ou en utilisant Carthage
, suivez les instructions du fichier README.md
inclus dans le package du kit SDK. Veillez à utiliser une seule de ces options pour importer l’AWS Mobile SDK. -
Appel des méthodes d’API via le kit SDK iOS généré par API Gateway dans un projet Swift
Lorsque vous générez le kit SDK avec le préfixe SIMPLE_CALC
pour cette API SimpleCalc avec deux modèles afin de décrire l’entrée (Input
) et la sortie (Result
) des demandes et des réponses de l’API, dans le kit SDK, la classe de client d’API qui en résulte devient SIMPLE_CALCSimpleCalcClient
et les classes de données correspondantes sont SIMPLE_CALCInput
et SIMPLE_CALCResult
, respectivement. Les demandes et réponses d’API sont mappées aux méthodes de kit SDK comme suit :
-
La demande d’API
GET /?a=...&b=...&op=...
devient la méthode du kit SDK
public func rootGet(op: String?, a: String?, b: String?) -> AWSTask
La propriété
AWSTask.result
est de typeSIMPLE_CALCResult
si le modèleResult
a été ajouté à la réponse de méthode. Sinon, elle est de typeNSDictionary
. -
Cette demande d’API
POST / { "a": "Number", "b": "Number", "op": "String" }
devient la méthode du kit SDK
public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
-
La demande d’API
GET /{a}/{b}/{op}
devient la méthode du kit SDK
public func aBOpGet(a: String, b: String, op: String) -> AWSTask
La procédure suivante décrit comment appeler les méthodes d’API dans le code source de l’application Swift, par exemple, comme faisant partie du délégué viewDidLoad()
dans un fichier ViewController.m
.
Pour appeler l’API via le kit SDK iOS généré par API Gateway
-
Instanciez la classe de client d’API :
let client = SIMPLE_CALCSimpleCalcClient.default()
Pour utiliser Amazon Cognito avec l’API, définissez une configuration de service AWS par défaut (illustrée ci-dessous) avant d’obtenir la méthode
default
(illustrée précédemment) :let credentialsProvider = AWSCognitoCredentialsProvider(regionType:
AWSRegionType.USEast1
, identityPoolId: "my_pool_id
") let configuration = AWSServiceConfiguration(region:AWSRegionType.USEast1
, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration -
Appelez la méthode
GET /?a=1&b=2&op=+
pour exécuter1+2
:client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }
où
self.showResult(task)
de la fonction d’assistant imprime le résultat ou l’erreur vers la console ; par exemple :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)") } } }
Dans une application de production, vous pouvez afficher le résultat ou l’erreur dans un champ de texte. Le résultat qui s’affiche est
1 + 2 = 3
. -
Appelez la méthode
POST /
avec une charge utile pour exécuter1-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 }
Le résultat qui s’affiche est
1 - 2 = -1
. -
Appelez la méthode
GET /{a}/{b}/{op}
pour exécuter1/2
:client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }
Le résultat qui s’affiche est
1 div 2 = 0.5
. Ici,div
est utilisé à la place de/
, car la fonction Lambda simple du backend ne gère pas les variables de chemin d’URL codée.