Usar o SDK iOS gerado pelo API Gateway para uma API REST em Objective-C ou Swift
Neste tutorial, mostraremos como usar um SDK do iOS gerado pelo API Gateway para uma API REST em um aplicativo Objective-C ou Swift para chamar a API subjacente. Usaremos a API SimpleCalc como exemplo para ilustrar os tópicos a seguir:
-
Como instalar os componentes necessários do SDK Móvel da AWS no seu projeto Xcode
-
Como criar o objeto de cliente da API antes de chamar os métodos da API
-
Como chamar os métodos de API por meio dos métodos do SDK correspondentes no objeto de cliente da API
-
Como preparar uma entrada de método e analisar seu resultado usando as classes de modelo correspondentes do SDK
Tópicos
Usar o SDK do iOS (Objective-C) gerado para chamar a API
Antes de iniciar o procedimento a seguir, você deve concluir as etapas em Gerar SDKs para APIs REST no API Gateway para o iOS no Objective-C e fazer download do arquivo .zip do SDK gerado.
Instalar o SDK Móvel da AWS e um SDK do iOS gerado pelo API Gateway em um projeto Objective-C
O procedimento a seguir descreve como instalar o SDK.
Para instalar e usar um SDK do iOS gerado pelo API Gateway no Objective-C
-
Extraia o conteúdo do arquivo .zip gerado pelo API Gateway que você baixou anteriormente. Usando a API SimpleCalc, você pode querer renomear a pasta do SDK descompactada para algo como
sdk_objc_simple_calc. Nesta pasta do SDK, há um arquivoREADME.mdfile e um arquivoPodfile. O arquivoREADME.mdcontém as instruções para instalar e usar o SDK. Este tutorial fornece detalhes sobre essas instruções. A instalação utiliza o CocoaPodspara importar as bibliotecas necessárias do API Gateway e outros componentes dependentes do SDK móvel da AWS. Você deve atualizar o Podfilepara importar os SDKs para o projeto Xcode rápida do seu aplicativo. A pasta do SDK não arquivada também contém uma pastagenerated-src, que contém o código-fonte do SDK gerado da sua API. -
Inicie o Xcode e crie um novo projeto Objective-C do iOS. Anote o destino do projeto. Você precisará defini-lo no
Podfile.
-
Para importar o AWS Mobile SDK for iOS no projeto Xcode usando o CocoaPods, faça o seguinte:
-
Instale o CocoaPods executando o seguinte comando em uma janela de terminal:
sudo gem install cocoapods pod setup -
Copie o arquivo
Podfileda pasta do SDK extraído no mesmo diretório que contém seu arquivo de projeto Xcode. Substitua o seguinte bloco:target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' endcom o nome de destino do seu projeto:
target 'app_objc_simple_calc' do pod 'AWSAPIGateway', '~> 2.4.7' endSe o seu projeto Xcode já contive um arquivo chamado
Podfile, adicione a seguinte linha de código a ele:pod 'AWSAPIGateway', '~> 2.4.7' -
Abra uma janela de terminal e execute o seguinte comando:
pod installIsso instala o componente do API Gateway e outros componentes dependentes do SDK Móvel da AWS.
-
Feche o projeto Xcode e abra o arquivo
.xcworkspacepara reiniciar o Xcode. -
Adicione todos os arquivos
.he.mdo diretóriogenerated-srcdo SDK extraído ao seu projeto Xcode.
Para importar o AWS Mobile SDK for iOS Objective-C no seu projeto, fazendo download explicitamente do SDK Móvel da AWS ou usando o Carthage
, siga as instruções no arquivo README.md. Certifique-se de usar apenas uma dessas opções para importar o SDK Móvel da AWS. -
Chamar métodos de API usando o SDK do iOS gerado pelo API Gateway em um projeto Objective-C
Quando você gerou o SDK com o prefixo de SIMPLE_CALC para essa API SimpleCalc com dois modelos para a entrada (Input) e a saída (Result) dos métodos, no SDK, a classe de cliente de API resultante torna-se SIMPLE_CALCSimpleCalcClient e as classes de dados correspondentes são SIMPLE_CALCInput e SIMPLE_CALCResult, respectivamente. As solicitações e respostas da API são mapeadas para os métodos do SDK, da seguinte maneira:
-
A solicitação de API de
GET /?a=...&b=...&op=...torna-se o método SDK de
(AWSTask *)rootGet:(NSString *)op a:(NSString *)a b:(NSString *)bA propriedade
AWSTask.resulté do tipoSIMPLE_CALCResult, se o modeloResultfoi adicionado à resposta do método. Caso contrário, a propriedade será do tipoNSDictionary. -
Essa solicitação de API de
POST / { "a": "Number", "b": "Number", "op": "String" }torna-se o método SDK de
(AWSTask *)rootPost:(SIMPLE_CALCInput *)body -
A solicitação de API de
GET /{a}/{b}/{op}torna-se o método SDK de
(AWSTask *)aBOpGet:(NSString *)a b:(NSString *)b op:(NSString *)op
O procedimento a seguir descreve como chamar os métodos de API no código-fonte do aplicativo Objective-C; por exemplo, como parte do viewDidLoad delegado em um arquivo ViewController.m.
Como chamar a API por meio do SDK do iOS gerado pelo API Gateway
-
Importe o arquivo de cabeçalho da classe de cliente da API para tornar essa classe chamável no aplicativo:
#import "SIMPLE_CALCSimpleCalc.h"A instrução
#importtambém importaSIMPLE_CALCInput.heSIMPLE_CALCResult.hpara as duas classes de modelo. -
Instancie a classe de cliente da API:
SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];Para usar o Amazon Cognito com a API, defina a propriedade
defaultServiceConfigurationno objetoAWSServiceManagerpadrão, conforme mostrado a seguir, antes de chamar o métododefaultClientpara criar o objeto de cliente da API (mostrado no exemplo anterior):AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1identityPoolId:your_cognito_pool_id]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1credentialsProvider:creds]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; -
Chame o método
GET /?a=1&b=2&op=+para realizar1+2:[[apiInstance rootGet: @"+" a:@"1" b:@"2"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField1.text = [self handleApiResponse:task]; return nil; }];em que a função auxiliar
handleApiResponse:taskformata o resultado como uma string a ser exibida em um campo de texto (_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; }A exibição resultante é
1 + 2 = 3. -
Chame a carga
POST /para realizar1-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; }];A exibição resultante é
1 - 2 = -1. -
Chame
GET /{a}/{b}/{op}para realizar1/2:[[apiInstance aBOpGet:@"1" b:@"2" op:@"div"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField3.text = [self handleApiResponse:task]; return nil; }];A exibição resultante é
1 div 2 = 0.5. Aqui,divé usado no lugar de/porque a função do Lambda simples no backend não manuseia variáveis de caminho codificadas por URL.
Usar o SDK do iOS (Swift) gerado para chamar a API
Antes de iniciar o procedimento a seguir, você deve concluir as etapas em Gerar SDKs para APIs REST no API Gateway para o iOS no Swift e fazer download do arquivo .zip do SDK gerado.
Tópicos
Instalar o SDK móvel da AWS e o SDK gerado pelo API Gateway em um projeto Swift
O procedimento a seguir descreve como instalar o SDK.
Para instalar e usar um SDK do iOS gerado pelo API Gateway no Swift
-
Extraia o conteúdo do arquivo .zip gerado pelo API Gateway que você baixou anteriormente. Usando a API SimpleCalc, você pode querer renomear a pasta do SDK descompactada para algo como
sdk_swift_simple_calc. Nesta pasta do SDK, há um arquivoREADME.mdfile e um arquivoPodfile. O arquivoREADME.mdcontém as instruções para instalar e usar o SDK. Este tutorial fornece detalhes sobre essas instruções. A instalação utiliza o CocoaPodspara importar os componentes necessários do SDK Móvel da AWS. Você deve atualizar o Podfilepara importar os SDKs para o projeto Xcode rápida do seu aplicativo Swift. A pasta do SDK não arquivada também contém uma pastagenerated-src, que contém o código-fonte do SDK gerado da sua API. -
Inicie o Xcode e crie um novo projeto Swift do iOS. Anote o destino do projeto. Você precisará defini-lo no
Podfile.
-
Para importar os componentes necessários do SDK Móvel da AWS no projeto Xcode usando o CocoaPods, faça o seguinte:
-
Se o CocoaPods não estiver instalado, instale-o executando o seguinte comando em uma janela de terminal:
sudo gem install cocoapods pod setup -
Copie o arquivo
Podfileda pasta do SDK extraído no mesmo diretório que contém seu arquivo de projeto Xcode. Substitua o seguinte bloco:target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' endpelo nome de destino do seu projeto, conforme mostrado:
target 'app_swift_simple_calc' do pod 'AWSAPIGateway', '~> 2.4.7' endSe o seu projeto Xcode já contiver um
Podfilecom o destino correto, basta adicionar a seguinte linha de código ao loopdo ... end:pod 'AWSAPIGateway', '~> 2.4.7' -
Abra uma janela de terminal e execute o seguinte comando no diretório do aplicativo:
pod installIsso instala o componente do API Gateway e quaisquer componentes dependentes do SDK Móvel da AWS no projeto do aplicativo.
-
Feche o projeto Xcode e abra o arquivo
*.xcworkspacepara reiniciar o Xcode. -
Adicione todos os arquivos de cabeçalho do SDK (
.h) e arquivos de código-fonte Swift (.swift) do diretório extraídogenerated-srcpara seu projeto Xcode.
-
Para permitir a chamada de bibliotecas Objective-C do SDK Móvel da AWS a partir do seu projeto de código Swift, defina o caminho do arquivo
Bridging_Header.hna propriedade Objective-C Bridging Header (Cabeçalho ponte Objective-C), na definição Swift Compiler - General (Compilador Swift - Geral) da configuração do projeto Xcode:
dica
Você pode digitar
bridgingna caixa de pesquisa do Xcode para localizar a propriedade Objective-C Bridging Header (Cabeçalho ponte Objective-C). -
Construa o projeto Xcode para verificar se ele está corretamente configurado antes de prosseguir. Se o seu Xcode usar uma versão mais recente do Swift do que a versão com suporte para o SDK Móvel da AWS, você receberá erros do compilador Swift. Nesse caso, defina a propriedade Use Legacy Swift Language Version (Usar versão de linguagem do Swift legado) para Yes (Sim), na configuração Swift Compiler - Version (Compilador Swift - Versão):
Para importar o AWS Mobile SDK for iOS em Swift no seu projeto fazendo download explicitamente do AWS Mobile SDK ou usando o Carthage
, siga as instruções no arquivo README.mdque acompanha o pacote do SDK. Certifique-se de usar apenas uma dessas opções para importar o SDK Móvel da AWS. -
Chamar métodos de API por meio do SDK do iOS gerado pelo API Gateway em um projeto Swift
Quando você gerou o SDK com o prefixo de SIMPLE_CALC para essa API SimpleCalc com dois modelos para descrever a entrada (Input) e a saída (Result) das solicitações e respostas da API, no SDK, a classe de cliente de API resultante torna-se SIMPLE_CALCSimpleCalcClient e as classes de dados correspondentes são SIMPLE_CALCInput e SIMPLE_CALCResult, respectivamente. As solicitações e respostas da API são mapeadas para os métodos do SDK, da seguinte maneira:
-
A solicitação de API de
GET /?a=...&b=...&op=...torna-se o método SDK de
public func rootGet(op: String?, a: String?, b: String?) -> AWSTaskA propriedade
AWSTask.resulté do tipoSIMPLE_CALCResult, se o modeloResultfoi adicionado à resposta do método. Caso contrário, ela será do tipoNSDictionary. -
Essa solicitação de API de
POST / { "a": "Number", "b": "Number", "op": "String" }torna-se o método SDK de
public func rootPost(body: SIMPLE_CALCInput) -> AWSTask -
A solicitação de API de
GET /{a}/{b}/{op}torna-se o método SDK de
public func aBOpGet(a: String, b: String, op: String) -> AWSTask
O procedimento a seguir descreve como chamar os métodos de API no código-fonte do aplicativo Swift; por exemplo, como parte do viewDidLoad() delegado em um arquivo ViewController.m.
Como chamar a API por meio do SDK do iOS gerado pelo API Gateway
-
Instancie a classe de cliente da API:
let client = SIMPLE_CALCSimpleCalcClient.default()Para usar o Amazon Cognito com a API, defina uma configuração de serviço da AWS padrão (mostrada a seguir) antes de obter o método
default(mostrado anteriormente):let credentialsProvider = AWSCognitoCredentialsProvider(regionType:AWSRegionType.USEast1, identityPoolId: "my_pool_id") let configuration = AWSServiceConfiguration(region:AWSRegionType.USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration -
Chame o método
GET /?a=1&b=2&op=+para realizar1+2:client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }em que a função auxiliar
self.showResult(task)imprime o resultado ou o erro no console; por exemplo: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)") } } }Em um aplicativo de produção, você pode exibir o resultado ou erro em um campo de texto. A exibição resultante é
1 + 2 = 3. -
Chame a carga
POST /para realizar1-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 }A exibição resultante é
1 - 2 = -1. -
Chame
GET /{a}/{b}/{op}para realizar1/2:client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }A exibição resultante é
1 div 2 = 0.5. Aqui,divé usado no lugar de/porque a função do Lambda simples no backend não manuseia variáveis de caminho codificadas por URL.