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
Temas
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 SDK para las 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
-
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 archivoREADME.md
y un archivoPodfile
. El archivoREADME.md
contiene las instrucciones para instalar y utilizar el SDK. Este tutorial proporciona información detallada sobre estas instrucciones. La instalación usa CocoaPodspara 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 carpetagenerated-src
que incluye el código fuente del SDK generado de la API. -
Inicie Xcode y cree un nuevo proyecto iOS Objective-C. Anote el destino del proyecto. Lo necesitará para definirlo en el archivo
Podfile
. -
Para importar AWS Mobile SDK for iOS en el proyecto Xcode mediante CocoaPods, haga lo siguiente:
-
Instale CocoaPods ejecutando el siguiente comando en una ventana del terminal:
sudo gem install cocoapods pod setup
-
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' endpor el nombre de destino de su proyecto:
target '
app_objc_simple_calc
' do pod 'AWSAPIGateway', '~> 2.4.7' endSi su proyecto Xcode ya contiene un archivo denominado
Podfile
, añada la siguiente línea de código:pod 'AWSAPIGateway', '~> 2.4.7'
-
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.
-
Cierre el proyecto Xcode y, a continuación, abra el archivo
.xcworkspace
para volver a iniciar Xcode. -
Añada todos los archivos
.h
y.m
del directoriogenerated-src
del SDK extraído al proyecto Xcode.
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 tipoSIMPLE_CALCResult
si el modeloResult
se añadió a la respuesta del método. De lo contrario, la propiedad es del tipoNSDictionary
. -
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
-
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 importaSIMPLE_CALCInput.h
ySIMPLE_CALCResult.h
para las dos clases de modelo. -
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 objetoAWSServiceManager
predeterminado, tal y como se muestra a continuación, antes de llamar al métododefaultClient
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; -
Llame al método
GET /?a=1&b=2&op=+
para ejecutar1+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
. -
Llame al método
POST /
con una carga para ejecutar1-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
. -
Llame al método
GET /{a}/{b}/{op}
para ejecutar1/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 usadiv
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 SDK para las API de REST en API Gateway para iOS en Swift y descargar el archivo .zip del SDK generado.
Temas
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
-
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 archivoREADME.md
y un archivoPodfile
. El archivoREADME.md
contiene las instrucciones para instalar y utilizar el SDK. Este tutorial proporciona información detallada sobre estas instrucciones. La instalación utiliza CocoaPodspara 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 carpetagenerated-src
que incluye el código fuente del SDK generado de la API. -
Inicie Xcode y cree un nuevo proyecto de iOS Swift. Anote el destino del proyecto. Lo necesitará para definirlo en el archivo
Podfile
. -
Para importar los componentes del SDK para móviles de AWS necesarios en el proyecto Xcode mediante CocoaPods, haga lo siguiente:
-
Si no está instalado, instale CocoaPods ejecutando el siguiente comando en una ventana del terminal:
sudo gem install cocoapods pod setup
-
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' endpor 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' endSi 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 bucledo ... end
:pod 'AWSAPIGateway', '~> 2.4.7'
-
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.
-
Cierre el proyecto Xcode y, a continuación, abra el archivo
*.xcworkspace
para volver a iniciar Xcode. -
Añada todos los archivos de encabezado del SDK (
.h
) y los archivos de código fuente de Swift (.swift
) del directoriogenerated-src
extraído a su proyecto Xcode. -
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: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). -
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):
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 tipoSIMPLE_CALCResult
si el modeloResult
se añadió a la respuesta del método. De lo contrario, es del tipoNSDictionary
. -
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
-
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 -
Llame al método
GET /?a=1&b=2&op=+
para ejecutar1+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
. -
Llame al método
POST /
con una carga para ejecutar1-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
. -
Llame al método
GET /{a}/{b}/{op}
para ejecutar1/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 usadiv
en lugar de/
porque la función de Lambda simple del backend no administra variables de ruta codificadas como URL.