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.md
file e um arquivoPodfile
. O arquivoREADME.md
conté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 Podfile
para 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
Podfile
da 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 install
Isso instala o componente do API Gateway e outros componentes dependentes do SDK Móvel da AWS.
-
Feche o projeto Xcode e abra o arquivo
.xcworkspace
para reiniciar o Xcode. -
Adicione todos os arquivos
.h
e.m
do diretóriogenerated-src
do 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 *)b
A propriedade
AWSTask.result
é do tipoSIMPLE_CALCResult
, se o modeloResult
foi 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
#import
também importaSIMPLE_CALCInput.h
eSIMPLE_CALCResult.h
para 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
defaultServiceConfiguration
no objetoAWSServiceManager
padrão, conforme mostrado a seguir, antes de chamar o métododefaultClient
para criar o objeto de cliente da API (mostrado no exemplo anterior):AWSCognitoCredentialsProvider *creds = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:
AWSRegionUSEast1
identityPoolId:your_cognito_pool_id
]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
credentialsProvider: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:task
formata 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.md
file e um arquivoPodfile
. O arquivoREADME.md
conté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 Podfile
para 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
Podfile
da 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
Podfile
com 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 install
Isso 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
*.xcworkspace
para 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-src
para 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.h
na 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
bridging
na 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.md
que 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?) -> AWSTask
A propriedade
AWSTask.result
é do tipoSIMPLE_CALCResult
, se o modeloResult
foi 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.