API REST para iphone

La disponibilidad del API está creciendo de manera exponencial. Vemos esta tendencia como un artefacto de dos pilotos principal industria, el crecimiento de las aplicaciones móviles y la apertura de SaaS y aplicaciones empresariales on-premise.

API Web proporcionan una forma fácil, independiente de la plataforma, manera de permitir que las aplicaciones móviles para consumir datos y presentarlos al usuario en un teléfono inteligente o tableta experiencia optimizada.

En este tutorial se camina por el consumo de una API REST en iOS. En este tutorial, vamos a utilizar el servicio de correo electrónico Verificación Plus Higiene de StrikeIron. Este tutorial asume que son competentes en Objective-C y ha escrito las aplicaciones básicas del iPhone. Si desea más información sobre cualquiera, Apple tiene una excelente introducción de Objective-C y una Guía de inicio de iPhone desarrollador tutorial .

1) Creación de la aplicación


Esta solicitud constará de una sola vista para que el usuario introduzca una dirección de correo electrónico y haga clic en el botón enviar. Cuando el usuario hace clic en el botón de envío, vamos a mostrar un mensaje que indica si la dirección de correo electrónico es válida o no válida. En una aplicación real, si la dirección de correo electrónico es válida, lo más probable sería proceder a la aplicación o una página de agradecimiento.
En primer lugar vamos a crear una aplicación única vista llamada WebAPITutorial. En XCode, seleccione Archivo | Nuevo | Proyecto. Seleccione "Single View Aplicación" y haga clic en Siguiente.
En el paso de opciones, introduzca la siguiente información y haga clic en Siguiente:

Nombre del producto: WebAPITutorial
Nombre de la Organización: <Su Organización>
Identificador de la empresa: Empresa <Su identifier>
Clase Prefijo: WebAPITutorial
Dispositivos: iPhone
Use Storyboards: <Checked>
Utilice automático de recuento de referencia: <Checked>
Incluya pruebas unitarias: <Unchecked>
proyecto ios
Seleccione la ruta en la que desea que su proyecto y haga clic en Crear.

2) Configuración de la interfaz del usuario y el código estructural:

Agregue los controles para la aplicación de vista individual. En la vista del proyecto izquierdo, haga clic en el elemento MainStoryboard.storyboard.
ios10 view2
Ahora debe ver un controlador de vista en blanco en el panel central. Vamos a añadir cuatro controles de interfaz de usuario de este punto de vista: dos etiquetas, una caja de texto y un botón. En la esquina inferior derecha de XCode, haga clic en los objetos desplegable y seleccione Cocoa Touch Storyboard | Controles. (Nota: Si no ve la lista de objetos, asegúrese de que la Utilidades View se muestra al hacer clic en el botón en la esquina superior derecha de XCode que se parece a utilidades icono )
vista iOS
En la lista de los controles en la esquina inferior derecha de XCode, arrastre las dos etiquetas (una Campo de texto y un botón redondeado Rect) a la lona controlador de vista como se ve a continuación.
Nota: Asegúrese de estirar las etiquetas a lo ancho del campo de texto.
Ver iOS
A continuación, vamos a definir los atributos para cada elemento. En primer lugar, asegúrese de que la vista de atributos está abierto, haga clic en el inspector de atributos (en el menú Ver en la parte superior de XCode).
Ajuste los siguientes atributos de cada elemento:
El Top etiquetas:
Texto: Introduzca la dirección de correo electrónico
El campo de texto:
Marcador de posición: email@domain.com
Teclado: Dirección de correo electrónico
Volver Clave: Done
La etiqueta bajo el campo de texto:
Texto: (en blanco)
Alineación: Centrado
El Botón redondeado Rect: 
Texto: Enviar 
Ahora vamos a conectar los componentes de interfaz de usuario al controlador. Primero haga clic en el botón Editor de Asistencia que está en la parte superior derecha de XCode y parece icono de la asistencia (Sugerencia: Es posible que desee apagar las Utilidades ver si la ventana XCode es demasiado desordenada)
Haga clic en el botón redondeado Rect. Mientras mantiene pulsada la tecla Control, arrastrar a la línea de bajo "@ interface WebAPITutorial View Controler ..." Usted debe ahora tener un cuadro emergente. Cambie la conexión a la acción y entrar en "verifyEmail" como el nombre, como se ve a continuación. Haga clic en Conectar.
verificar de salida de correo electrónico
Cree la salida para el campo de texto mediante Control-Arrastrando el campo de texto como lo hizo anteriormente. En la ventana emergente, introduzca "emailAddress" como nombre.
toma la dirección de correo electrónico
Crear la salida para la etiqueta bajo el cuadro de texto que usaremos para mostrar el valor de retorno de la llamada a la API a la API de verificación de correo electrónico. Tenga en cuenta que hemos eliminado el texto predeterminado de la etiqueta para el control del ratón bajo el cuadro de texto para captar la etiqueta. Escriba "verificationResults" como nombre:
resultados de la verificación de salida
Por último, vamos a crear el delegado de manejar cuando el usuario pulsa el botón Listo en el teclado después de entrar en su correo electrónico. Control-arrastre desde el campo de texto al círculo amarillo bajo el lienzo de vista.Seleccione Outlets | delegado del cuadro emergente.
vista iOS
A continuación vamos a añadir el código estructural. Abra el archivo WebAPITutorialViewControl.h.
Actualización de la línea de declaración de interfaz para implementar el protocolo UITextFieldDelegate. Ahora debe decir:
1
@interface WebAPITutorialViewController : UIViewController <UITextFieldDelegate>
view rawgistfile1.m hosted with ❤ by GitHub
Crear la propiedad que contendrá la dirección de correo electrónico que el usuario introduce. Justo antes de la declaración @ end, añada la siguiente propiedad.
1
@property (copy, nonatomic) NSString *enteredEmailAddress;
view rawgistfile1.m hosted with ❤ by GitHub
Abra el archivo WebAPITutorialViewController.m y directamente debajo de la línea @ WebAPITutorialViewController aplicación, agregue lo siguiente:
1
@synthesize enteredEmailAddress = _enteredEmailAddress;
view rawgistfile1.m hosted with ❤ by GitHub
Por último, agregue el siguiente método delegado para que el teclado para despedir correctamente en el archivo WebAPITutorialViewController.m.
123456
- (BOOL)textFieldShouldReturn:(UITextField *)emailTextField {
[emailTextField resignFirstResponder];
return YES;
}
view rawgistfile1.m hosted with ❤ by GitHub
Su interfaz de usuario de aplicación y estructura ahora se llevan a cabo. Usted debe ser capaz de ejecutar la aplicación y escriba una dirección de correo electrónico, pero eso es todo. En las siguientes secciones, vamos a añadir la llamada al servicio web REST y mostrar el resultado al usuario.

3) La invocación de la API de llamada:

Vamos a llamar a la operación VerifyEmail en el correo electrónico de verificación Plus Higiene API Web . La llamada REST tiene el siguiente aspecto:
ID> & LicenseInfo.RegisteredUser.Password = <StrikeIron Password> y VerifyEmail.Email = <email direcciones Para Verify> y VerifyEmail.Timeout = <Tiempo <Salida y VerifyEmail.OptionalSourceId = <optional etiqueta de identificación que se pasa through>
Vamos a hacer la llamada a la API de forma asincrónica, lo cual es siempre una buena práctica, ya que la interfaz de usuario no se bloqueará mientras se realiza la llamada. Esto es especialmente importante en los dispositivos móviles que puedan soltar las conexiones de red. Vamos a implementar el protocolo delegado para la clase NSURLConnection.
Queremos añadir una variable de la propiedad y la instancia a la definición WebAPITutorialViewController, así como la declaración NSURLConnectionDelegate. Abra el archivo WebAPITutorialViewController.h y agregue el NSURLConnectionDelegate a la declaración de interfaz y la propiedad apiReturnXMLData:
12345678910
@interface WebAPITutorialViewController : UIViewController; UITextFieldDelegate, NSURLConnectionDelegate
{
NSURLConnection *currentConnection;
}
- (IBAction)verifyEmail:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *emailAddress;
@property (weak, nonatomic) IBOutlet UILabel *verificationResults;
@property (copy, nonatomic) NSString *enteredEmailAddress;
@property (retain, nonatomic) NSMutableData *apiReturnXMLData;
@end
view rawgistfile1.m hosted with ❤ by GitHub
Abra el archivo WebAPITutorialViewController.m y vaya al método verifyEmail (recuerde, este método se llama cuando el usuario toca el botón Enviar).
En primer lugar, vamos a almacenar la dirección de correo electrónico que el usuario ha introducido con la siguiente línea
12
// store the value of the email address Text Field
self.enteredEmailAddress = self.emailAddress.text;
view rawgistfile1.m hosted with ❤ by GitHub
A continuación, asegúrese de que la etiqueta que se mostrará el resultado de la llamada a la API está en blanco con la siguiente línea:
12
// Clear out the return message label
self.verifcationResults.text = @"";
view rawgistfile1.m hosted with ❤ by GitHub
Vamos a declarar una variable con la llamada a la API REST, pero en primer lugar, usted tendrá que declarar dos constantes en la parte superior del archivo justo por encima de los "WebAPITutorialViewControllers @ interface" para su StrikeIron ID de Usuario y Contraseña (si usted no tiene uno , firmar para arriba para un ensayo de verificación de correo electrónico gratuito ).
12
#define kStrikeIronUserID @"yourstrikeironuserid@youremail.com"
#define kStrikeIronPassword @"yourstrikeironpassword"
view rawgistfile1.m hosted with ❤ by GitHub
Ahora, de vuelta en el método verifyEmail, añada la siguiente línea para crear una cadena con la petición de la API REST incluyendo la ID de usuario, contraseña y dirección de correo electrónico para comprobar llenado pulg
12
// Create the REST call string.
NSString *restCallString = [NSString stringWithFormat:@"http://ws.strikeiron.com/StrikeIron/EMV6Hygiene/VerifyEmail?LicenseInfo.RegisteredUser.UserID=%@;LicenseInfo.RegisteredUser.Password=%@;VerifyEmail.Email=%@;VerifyEmail.Timeout=30", kStrikeIronUserID, kStrikeIronPassword, self.enteredEmailAddress ];
view rawgistfile1.m hosted with ❤ by GitHub
Crear e inicializar los objetos NSURL y NSURLRequest que se requieren para ensamblar la llamada a la API.
123
// Create the URL to make the rest call.
NSURL *restURL = [NSURL URLWithString:restCallString];
NSURLRequest *restRequest = [NSURLRequest requestWithURL:restURL];
view rawgistfile1.m hosted with ❤ by GitHub
Ya que vamos a llamar a la API REST de forma asíncrona, es necesario asegurarse de que si ya tenemos una llamada a la API excepcional, nos cancelarla. Esto ocurrirá si el usuario pulsa el botón Enviar varias veces en una fila antes de que la API ha regresado. La conexión se almacena en la variable "currentConnection."
1234567
// we will want to cancel any current connections
if( currentConnection)
{
[currentConnection cancel];
currentConnection = nil;
self.apiReturnXMLData = nil;
}
view rawgistfile1.m hosted with ❤ by GitHub
Ahora estamos listos para iniciar la llamada a la API mediante la creación de un objeto NSURLConnection e inicializar con la llamada a la API REST. También inicializamos el apiReturnXMLData para recibir los datos que devuelve la llamada a la API.
1234
currentConnection = [[NSURLConnection alloc] initWithRequest:restRequest delegate:self];
// If the connection was successful, create the XML that will be returned.
self.apiReturnXMLData = [NSMutableData data];
view rawgistfile1.m hosted with ❤ by GitHub
Su método verifyEmail ahora debería tener este aspecto:
123456789101112131415161718192021222324252627
- (IBAction)verifyEmail:(id)sender {
// store the value of the email address Text Field
self.enteredEmailAddress = self.emailAddress.text;
// Clear out the return message label
self.verifcationResults.text = @"";
// Create the REST call string.
NSString *restCallString = [NSString stringWithFormat:@"http://ws.strikeiron.com/StrikeIron/EMV6Hygiene/VerifyEmail?LicenseInfo.RegisteredUser.UserID=%@&LicenseInfo.RegisteredUser.Password=%@&VerifyEmail.Email=%@&VerifyEmail.Timeout=30", kStrikeIronUserID, kStrikeIronPassword, self.enteredEmailAddress ];
// Create the URL to make the rest call.
NSURL *restURL = [NSURL URLWithString:restCallString];
NSURLRequest *restRequest = [NSURLRequest requestWithURL:restURL];
// we will want to cancel any current connections
if( currentConnection)
{
[currentConnection cancel];
currentConnection = nil;
self.apiReturnXMLData = nil;
}
currentConnection = [[NSURLConnection alloc] initWithRequest:restRequest delegate:self];
// If the connection was successful, create the XML that will be returned.
self.apiReturnXMLData = [NSMutableData data];
}
view rawgistfile1.m hosted with ❤ by GitHub
Aviso establecemos la clase WebAPITutorialViewController como delegado para el objeto NSURLConnection.Estaremos necesitamos implementar cuatro métodos delegados, didReceiveResponse, didReceiveData, didFailWithError y connectionDidFinishLoading.
didReceiveResponse se llama cuando hay datos de retorno. Se le puede llamar varias veces para una conexión y se debe restablecer los datos en caso de que lo es.
123
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response {
[self.apiReturnXMLData setLength:0];
}
view rawgistfile1.m hosted with ❤ by GitHub
didReceiveData se llama cuando algunos o todos los datos de la llamada a la API se devuelve. Vamos a añadir los datos a la variable de instancia apiReturnXMLData.
123
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {
[self.apiReturnXMLData appendData:data];
}
view rawgistfile1.m hosted with ❤ by GitHub
didFailWithError se llama cuando hay un error de terminal. No habrá otras llamadas a métodos en esta conexión si se recibe. En este caso, nos vamos a registrar el error.
1234
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
NSLog(@"URL Connection Failed!");
currentConnection = nil;
}
view rawgistfile1.m hosted with ❤ by GitHub
Finalmente, el método connectionDidFinishLoading se llama cuando la llamada se ha completado y todos los datos se ha recibido. Vamos a analizar los datos devueltos por este método. Por ahora, basta con crear el método vacío.
123
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
currentConnection = nil;
}
view rawgistfile1.m hosted with ❤ by GitHub
Hemos completado la llamada a la API y la respuesta. Como se puede ver, es muy sencillo de hacer llamadas a la API de iOS. En la siguiente sección, vamos a analizar y mostrar los resultados.

4) Análisis de los resultados:

Ahora que hemos completado la llamada a la API y tener la respuesta almacenada en una variable de instancia, podemos analizar los resultados. Afortunadamente, el SDK de iOS incluye varias opciones para analizar XML. El analizador que se utilizará es NSXMLParser.
Al igual que con la llamada a la API y el regreso, debemos poner en práctica varios métodos de delegado. Abra el archivo WebAPITutorialViewController.h. Agregue el siguiente NSXMLParserDelegate a la declaración de interfaz:
1
@interface WebAPITutorialViewController : UIViewController <NSURLConnectionDelegate,UITextFieldDelegate, NSXMLParserDelegate>
view rawgistfile1.m hosted with ❤ by GitHub
También vamos a declarar las variables de instancia para el analizador XML y los valores de retorno que vamos a utilizar para contener la información que se va a analizar. La declaración de clase debe ahora parece.
123456789101112131415
@interface WebAPITutorialViewController : UIViewController <NSURLConnectionDelegate,UITextFieldDelegate, NSXMLParserDelegate>
{
NSURLConnection *currentConnection;
NSXMLParser *xmlParser;
}
- (IBAction)verifyEmail:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *emailAddress;
@property (weak, nonatomic) IBOutlet UILabel *verifcationResults;
@property (copy, nonatomic) NSString *enteredEmailAddress;
@property (retain, nonatomic) NSMutableData *apiReturnXMLData;
@property (nonatomic) NSInteger statusNbr;
@property (copy, nonatomic) NSString *hygieneResult;
@property (copy, nonatomic) NSString *currentElement;
@end
view rawgistfile1.m hosted with ❤ by GitHub
A continuación vamos a aplicar cuatro métodos delegados para el analizador. didStartElement se llama cada vez que se encuentra una etiqueta de elemento. Una vez en un elemento, los charaters se pasan al método foundCharaters.didEndElement se llama cuando el código de elemento está cerrado. Por último vamos a implementar el parserDidEndDocument que se llama cuando se haya completado el análisis del documento.
Para didStartElement, primero comprobar y ver si hay un error. Si es así, nos limitaremos a imprimir un mensaje y dejar que el usuario continúe con el proceso. A continuación, se comprueba si el elemento es StatusNbr o HygieneResult. Si es así, vamos a establecer una variable de instancia para mantener el estado entre los métodos de llamadas. Se indicará al método foundCharacters que elemento estamos actualmente pulg
La fuente método es a continuación.
123456789101112131415
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary *)attributeDict {
// Log the error - in this case we are going to let the user pass but log the message
if( [elementName isEqualToString:@"Error"])
{
NSLog(@"Web API Error!");
}
// Pull out the elements we care about.
if( [elementName isEqualToString:@"StatusNbr"] ||
[elementName isEqualToString:@"HygieneResult"])
{
self.currentElement = [[NSString alloc] initWithString:elementName];
}
}
view rawgistfile1.m hosted with ❤ by GitHub
A continuación vamos a implementar el método foundCharacters. Veremos si estamos dentro de los dos elementos que nos interesan. Si es así, vamos a establecer la variable de instancia apropiada y restablezca la variable de instancia currentElement.
12345678910111213
- (void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string {
if([self.currentElement isEqualToString:@"StatusNbr"])
{
self.statusNbr = [string intValue];
self.currentElement = nil;
}
else if([self.currentElement isEqualToString:@"HygieneResult"])
{
self.hygieneResult = [[NSString alloc] initWithString:string];
self.currentElement = nil;
}
}
view rawgistfile1.m hosted with ❤ by GitHub
En este caso, nosotros no vamos a utilizar la didEndElement en este caso, a fin de mantener este método vacío.
123
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
}
view rawgistfile1.m hosted with ❤ by GitHub
Implemente el método parserDidEndDocument. Aquí vamos a añadir la lógica para determinar si el correo electrónico es válida, no válida, o una trampa. A continuación vamos a mostrar los resultados en la etiqueta que está en blanco.
123456789101112131415161718
-(void)parserDidEndDocument:(NSXMLParser *)parser {
// Determine what we are going to display in the label
if([self.hygieneResult isEqualToString:@"Spam Trap"])
{
self.verificationResults.text = @"Dangerous email, please correct";
}
else if(self.statusNbr >= 300)
{
self.verificationResults.text = @"Invalid email, please re-enter";
}
else
{
self.verificationResults.text = @"Thank you for your submission";
}
self.apiReturnXMLData = nil;
}
view rawgistfile1.m hosted with ❤ by GitHub
Por último, vamos agregar el código para crear una instancia del parser, cargarlo con el XML que se devuelve desde la llamada a la API, establezca el delegado, y ponerlo en marcha. Regresa hasta el método connectionDidFinishLoading en blanco y agregue el siguiente código.
12345678910111213
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
// create our XML parser with the return data from the connection
xmlParser = [[NSXMLParser alloc] initWithData:self.apiReturnXMLData];
// setup the delgate (see methods below)
[xmlParser setDelegate:self];
// start parsing. The delgate methods will be called as it is iterating through the file.
[xmlParser parse];
currentConnection = nil;
}
view rawgistfile1.m hosted with ❤ by GitHub

This entry was posted in . Bookmark the permalink.

Leave a Reply