Usar o SDK iOS gerado pelo API Gateway para uma API REST em Objective-C ou Swift - Amazon API Gateway

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

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
  1. 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 arquivo README.md file e um arquivo Podfile. O arquivo README.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 CocoaPods para 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 pasta generated-src, que contém o código-fonte do SDK gerado da sua API.

  2. Inicie o Xcode e crie um novo projeto Objective-C do iOS. Anote o destino do projeto. Você precisará defini-lo no Podfile.

    Encontre o destino no Xcode.
  3. Para importar o AWS Mobile SDK for iOS no projeto Xcode usando o CocoaPods, faça o seguinte:

    1. Instale o CocoaPods executando o seguinte comando em uma janela de terminal:

      sudo gem install cocoapods pod setup
    2. 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' end

      com o nome de destino do seu projeto:

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

      Se o seu projeto Xcode já contive um arquivo chamado Podfile, adicione a seguinte linha de código a ele:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. 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.

    4. Feche o projeto Xcode e abra o arquivo .xcworkspace para reiniciar o Xcode.

    5. Adicione todos os arquivos .h e .m do diretório generated-src do SDK extraído ao seu projeto Xcode.

      Os arquivos .h e .m estão na pasta generated-src

    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 tipo SIMPLE_CALCResult, se o modelo Result foi adicionado à resposta do método. Caso contrário, a propriedade será do tipo NSDictionary.

  • 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
  1. 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 importa SIMPLE_CALCInput.h e SIMPLE_CALCResult.h para as duas classes de modelo.

  2. 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 objeto AWSServiceManager padrão, conforme mostrado a seguir, antes de chamar o método defaultClient 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;
  3. Chame o método GET /?a=1&b=2&op=+ para realizar 1+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.

  4. Chame a carga POST / para realizar 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; }];

    A exibição resultante é 1 - 2 = -1.

  5. ChameGET /{a}/{b}/{op} para realizar 1/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.

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
  1. 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 arquivo README.md file e um arquivo Podfile. O arquivo README.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 CocoaPods para 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 pasta generated-src, que contém o código-fonte do SDK gerado da sua API.

  2. Inicie o Xcode e crie um novo projeto Swift do iOS. Anote o destino do projeto. Você precisará defini-lo no Podfile.

    Encontre o destino no Xcode.
  3. Para importar os componentes necessários do SDK Móvel da AWS no projeto Xcode usando o CocoaPods, faça o seguinte:

    1. Se o CocoaPods não estiver instalado, instale-o executando o seguinte comando em uma janela de terminal:

      sudo gem install cocoapods pod setup
    2. 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' end

      pelo nome de destino do seu projeto, conforme mostrado:

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

      Se o seu projeto Xcode já contiver um Podfile com o destino correto, basta adicionar a seguinte linha de código ao loop do ... end:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. 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.

    4. Feche o projeto Xcode e abra o arquivo *.xcworkspace para reiniciar o Xcode.

    5. Adicione todos os arquivos de cabeçalho do SDK (.h) e arquivos de código-fonte Swift (.swift) do diretório extraído generated-src para seu projeto Xcode.

      Os arquivos .h e .swift estão na pasta generated-src
    6. 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:

      Defina o caminho do arquivo Bridging_header.h na configuração Swift Compiler - General.
      dica

      Você pode digitar bridging na caixa de pesquisa do Xcode para localizar a propriedade Objective-C Bridging Header (Cabeçalho ponte Objective-C).

    7. 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):

      Defina a propriedade Legacy Swift Language Version como Yes.

    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 tipo SIMPLE_CALCResult, se o modelo Result foi adicionado à resposta do método. Caso contrário, ela será do tipo NSDictionary.

  • 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
  1. 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
  2. Chame o método GET /?a=1&b=2&op=+ para realizar 1+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.

  3. Chame a carga POST / para realizar 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 }

    A exibição resultante é 1 - 2 = -1.

  4. ChameGET /{a}/{b}/{op} para realizar 1/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.