Uso de un SDK de iOS generado por API Gateway para una API REST en Objective-C o Swift - Amazon API Gateway

Uso de un SDK de iOS generado por API Gateway para una API REST en Objective-C o Swift

En este tutorial, le mostraremos cómo utilizar un SDK de iOS generado por API Gateway para una API REST en una aplicación Objective-C o Swift para llamar a la API subyacente. Usaremos la API SimpleCalc como ejemplo para ilustrar los siguientes temas:

  • Cómo instalar los componentes del SDK para móviles de AWS necesarios en el proyecto Xcode

  • Cómo crear el objeto de cliente API antes de llamar a los métodos de la API

  • Cómo llamar a los métodos de la API a través de los métodos del SDK correspondientes en el objeto del cliente API

  • Cómo preparar una entrada de método y analizar el resultado utilizando las clases del modelo correspondientes del SDK

Usar el SDK de iOS generado (Objective-C) para llamar a una API

Antes de comenzar el siguiente procedimiento, debe completar los pasos de Generación de un SDK para una API de REST en API Gateway para iOS en Objective-C y descargar el archivo .zip del SDK generado.

Instalar el SDK para móviles de AWS y un SDK de iOS generado por API Gateway en un proyecto Objective-C

En el procedimiento siguiente se describe cómo instalar el SDK.

Para instalar y utilizar un SDK de iOS generado por API Gateway en Objective-C
  1. Extraiga el contenido del archivo .zip generado por API Gateway que ha descargado anteriormente. Con la API SimpleCalc, puede cambiar el nombre de la carpeta del SDK descomprimido a algo similar a sdk_objc_simple_calc. En esta carpeta del SDK hay un archivo README.md y un archivo Podfile. El archivo README.md contiene las instrucciones para instalar y utilizar el SDK. Este tutorial proporciona información detallada sobre estas instrucciones. La instalación usa CocoaPods para importar las bibliotecas de API Gateway necesarias y otros componentes dependientes del SDK para móviles de AWS. Debe actualizar el archivo Podfile para importar los SDK en el proyecto Xcode de su aplicación. La carpeta del SDK descomprimida contiene también una carpeta generated-src que incluye el código fuente del SDK generado de la API.

  2. Inicie Xcode y cree un nuevo proyecto iOS Objective-C. Anote el destino del proyecto. Lo necesitará para definirlo en el archivo Podfile.

    Encuentre el objetivo en Xcode.
  3. Para importar AWS Mobile SDK for iOS en el proyecto Xcode mediante CocoaPods, haga lo siguiente:

    1. Instale CocoaPods ejecutando el siguiente comando en una ventana del terminal:

      sudo gem install cocoapods pod setup
    2. Copie el archivo Podfile de la carpeta del SDK extraído en el mismo directorio que contiene el archivo del proyecto Xcode. Sustituya el siguiente bloque:

      target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' end

      por el nombre de destino de su proyecto:

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

      Si su proyecto Xcode ya contiene un archivo denominado Podfile, añada la siguiente línea de código:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Abra una ventana del terminal y ejecute el siguiente comando:

      pod install

      Se instalará el componente de API Gateway y otros componentes del SDK para móviles de AWS dependientes.

    4. Cierre el proyecto Xcode y, a continuación, abra el archivo .xcworkspace para volver a iniciar Xcode.

    5. Añada todos los archivos .h y .m del directorio generated-src del SDK extraído al proyecto Xcode.

      Los archivos .h y .m están en generated-src

    Para importar el AWS Mobile SDK for iOS Objective-C en su proyecto descargando de forma explícita el SDK para móviles de AWS o mediante Carthage, siga las instrucciones del archivo README.md. Asegúrese de utilizar únicamente una de estas opciones para importar el SDK para móviles de AWS.

Llamar a métodos de la API mediante el SDK de iOS generado por API Gateway en un proyecto Objective-C

Cuando genera el SDK con el prefijo SIMPLE_CALC para esta API SimpleCalc con dos modelos para la entrada (Input) y la salida (Result) de los métodos, en el SDK, la clase de cliente de API resultante se convierte en SIMPLE_CALCSimpleCalcClient y las clases de datos correspondientes son SIMPLE_CALCInput y SIMPLE_CALCResult, respectivamente. Las solicitudes y respuestas de la API se asignan a los métodos del SDK de la siguiente manera:

  • La solicitud de API

    GET /?a=...&b=...&op=...

    se convierte en el método del SDK

    (AWSTask *)rootGet:(NSString *)op a:(NSString *)a b:(NSString *)b

    La propiedad AWSTask.result es del tipo SIMPLE_CALCResult si el modelo Result se añadió a la respuesta del método. De lo contrario, la propiedad es del tipo NSDictionary.

  • Esta solicitud de API

    POST / { "a": "Number", "b": "Number", "op": "String" }

    se convierte en el método del SDK

    (AWSTask *)rootPost:(SIMPLE_CALCInput *)body
  • La solicitud de API

    GET /{a}/{b}/{op}

    se convierte en el método del SDK

    (AWSTask *)aBOpGet:(NSString *)a b:(NSString *)b op:(NSString *)op

El siguiente procedimiento describe cómo llamar a los métodos de la API en el código fuente de la aplicación Objective-C, por ejemplo, como parte del delegado viewDidLoad en un archivo ViewController.m.

Para llamar a la API a través del SDK de iOS generado por API Gateway
  1. Importe el archivo de encabezados de clase del cliente API para que la clase del cliente API se pueda llamar en la aplicación:

    #import "SIMPLE_CALCSimpleCalc.h"

    La instrucción #import también importa SIMPLE_CALCInput.h y SIMPLE_CALCResult.h para las dos clases de modelo.

  2. Cree una instancia de la clase del cliente de API:

    SIMPLE_CALCSimpleCalcClient *apiInstance = [SIMPLE_CALCSimpleCalcClient defaultClient];

    Para utilizar Amazon Cognito con la API, establezca la propiedad defaultServiceConfiguration en el objeto AWSServiceManager predeterminado, tal y como se muestra a continuación, antes de llamar al método defaultClient para crear el objeto del cliente API (mostrado en el ejemplo 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. Llame al método GET /?a=1&b=2&op=+ para ejecutar 1+2:

    [[apiInstance rootGet: @"+" a:@"1" b:@"2"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField1.text = [self handleApiResponse:task]; return nil; }];

    donde la función auxiliar handleApiResponse:task formatea el resultado como una cadena que se muestra en un 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; }

    El resultado que se muestra es 1 + 2 = 3.

  4. Llame al método POST / con una carga para ejecutar 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; }];

    El resultado que se muestra es 1 - 2 = -1.

  5. Llame al método GET /{a}/{b}/{op} para ejecutar 1/2:

    [[apiInstance aBOpGet:@"1" b:@"2" op:@"div"] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { _textField3.text = [self handleApiResponse:task]; return nil; }];

    El resultado que se muestra es 1 div 2 = 0.5. Aquí se usa div en lugar de / porque la función de Lambda simple del backend no administra variables de ruta codificadas como URL.

Usar un SDK de iOS generado (Swift) para llamar a la API

Antes de comenzar el siguiente procedimiento, debe completar los pasos de Generación de un SDK para una API de REST en API Gateway para iOS en Swift y descargar el archivo .zip del SDK generado.

Instalar el SDK para móviles de AWS y el SDK generado por API Gateway en un proyecto Swift

En el procedimiento siguiente se describe cómo instalar el SDK.

Para instalar y utilizar un SDK de iOS generado por API Gateway en Swift
  1. Extraiga el contenido del archivo .zip generado por API Gateway que ha descargado anteriormente. Con la API SimpleCalc, puede cambiar el nombre de la carpeta del SDK descomprimido a algo similar a sdk_swift_simple_calc. En esta carpeta del SDK hay un archivo README.md y un archivo Podfile. El archivo README.md contiene las instrucciones para instalar y utilizar el SDK. Este tutorial proporciona información detallada sobre estas instrucciones. La instalación utiliza CocoaPods para importar los componentes del SDK para móviles de AWS necesarios. Debe actualizar el archivo Podfile para importar los SDK en el proyecto Xcode de su aplicación Swift. La carpeta del SDK descomprimida contiene también una carpeta generated-src que incluye el código fuente del SDK generado de la API.

  2. Inicie Xcode y cree un nuevo proyecto de iOS Swift. Anote el destino del proyecto. Lo necesitará para definirlo en el archivo Podfile.

    Encuentre el objetivo en Xcode.
  3. Para importar los componentes del SDK para móviles de AWS necesarios en el proyecto Xcode mediante CocoaPods, haga lo siguiente:

    1. Si no está instalado, instale CocoaPods ejecutando el siguiente comando en una ventana del terminal:

      sudo gem install cocoapods pod setup
    2. Copie el archivo Podfile de la carpeta del SDK extraído en el mismo directorio que contiene el archivo del proyecto Xcode. Sustituya el siguiente bloque:

      target '<YourXcodeTarget>' do pod 'AWSAPIGateway', '~> 2.4.7' end

      por el nombre de destino de su proyecto, tal y como se muestra a continuación:

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

      Si su proyecto Xcode ya contiene un archivo Podfile con el destino correcto, solo tiene que añadir la siguiente línea de código al bucle do ... end:

      pod 'AWSAPIGateway', '~> 2.4.7'
    3. Abra una ventana del terminal y ejecute el siguiente comando en el directorio de la aplicación:

      pod install

      Se instalará el componente de API Gateway y todos los componentes del SDK para móviles de AWS dependientes en el proyecto de la aplicación.

    4. Cierre el proyecto Xcode y, a continuación, abra el archivo *.xcworkspace para volver a iniciar Xcode.

    5. Añada todos los archivos de encabezado del SDK (.h) y los archivos de código fuente de Swift (.swift) del directorio generated-src extraído a su proyecto Xcode.

      Los archivos .h y .swift están en generated-src
    6. Para habilitar las llamadas a las bibliotecas de Objective-C del SDK para móviles de AWS de su proyecto de código Swift, defina la ruta del archivo Bridging_Header.h en la propiedad Objective-C Bridging Header (Encabezado Bridging de Objective-C) en la opción Swift Compiler - General (Compilador de Swift: general) de la configuración de su proyecto Xcode:

      Establezca la ruta del archivo Bridging_Header.h en el compilador de Swift: General.
      sugerencia

      Puede escribir bridging en el cuadro de búsqueda de Xcode para encontrar la propiedad Objective-C Bridging Header (Encabezado Bridging de Objective-C).

    7. Compile el proyecto Xcode para verificar que está configurado correctamente antes de continuar. Si su Xcode utiliza una versión más reciente de Swift que la admitida por el SDK para móviles de AWS, recibirá errores del compilador de Swift. En este caso, establezca la propiedad Use Legacy Swift Language Version (Usar versión del lenguaje Swift antigua) en Yes (Sí) en la opción Swift Compiler - Version (Compilador de Swift: versión):

      Establezca la propiedad de versión del lenguaje Swift antigua en Sí.

    Para importar el SDK para móviles para iOS de AWS en Swift en su proyecto descargando explícitamente el SDK para móviles de AWS o utilizando Carthage, siga las instrucciones del archivo README.md incluido con el paquete del SDK. Asegúrese de utilizar únicamente una de estas opciones para importar el SDK para móviles de AWS.

Llamar a métodos de API a través del SDK de iOS generado por API Gateway en un proyecto Swift

Cuando genera el SDK con el prefijo SIMPLE_CALC para esta API SimpleCalc con dos modelos para describir la entrada (Input) y la salida (Result) de las solicitudes y las respuestas de la API, en el SDK, la clase de cliente de API resultante se convierte en SIMPLE_CALCSimpleCalcClient y las clases de datos correspondientes son SIMPLE_CALCInput y SIMPLE_CALCResult, respectivamente. Las solicitudes y respuestas de la API se asignan a los métodos del SDK de la siguiente manera:

  • La solicitud de API

    GET /?a=...&b=...&op=...

    se convierte en el método del SDK

    public func rootGet(op: String?, a: String?, b: String?) -> AWSTask

    La propiedad AWSTask.result es del tipo SIMPLE_CALCResult si el modelo Result se añadió a la respuesta del método. De lo contrario, es del tipo NSDictionary.

  • Esta solicitud de API

    POST / { "a": "Number", "b": "Number", "op": "String" }

    se convierte en el método del SDK

    public func rootPost(body: SIMPLE_CALCInput) -> AWSTask
  • La solicitud de API

    GET /{a}/{b}/{op}

    se convierte en el método del SDK

    public func aBOpGet(a: String, b: String, op: String) -> AWSTask

El siguiente procedimiento describe cómo llamar a los métodos de la API en el código fuente de la aplicación Swift, por ejemplo, como parte del delegado viewDidLoad() en un archivo ViewController.m.

Para llamar a la API a través del SDK de iOS generado por API Gateway
  1. Cree una instancia de la clase del cliente de API:

    let client = SIMPLE_CALCSimpleCalcClient.default()

    Para utilizar Amazon Cognito con la API, establezca la configuración del servicio de AWS predeterminada (que se muestra a continuación) antes de obtener el 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. Llame al método GET /?a=1&b=2&op=+ para ejecutar 1+2:

    client.rootGet("+", a: "1", b:"2").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }

    donde la función auxiliar self.showResult(task) imprime el resultado o el error en la consola; por ejemplo:

    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)") } } }

    En una aplicación de producción, puede mostrar el resultado o el error en un campo de texto. El resultado que se muestra es 1 + 2 = 3.

  3. Llame al método POST / con una carga para ejecutar 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 }

    El resultado que se muestra es 1 - 2 = -1.

  4. Llame al método GET /{a}/{b}/{op} para ejecutar 1/2:

    client.aBOpGet("1", b:"2", op:"div").continueWithBlock {(task: AWSTask) -> AnyObject? in self.showResult(task) return nil }

    El resultado que se muestra es 1 div 2 = 0.5. Aquí se usa div en lugar de / porque la función de Lambda simple del backend no administra variables de ruta codificadas como URL.