En aquest tema, aprendrem els conceptes fonamentals de les xarxes en el context de la programació en Objective-C. Ens centrarem en com les aplicacions poden comunicar-se amb altres serveis a través de la xarxa, incloent-hi la realització de sol·licituds HTTP i la manipulació de respostes.
Objectius d'Aprenentatge
- Comprendre els conceptes bàsics de les xarxes.
- Aprendre a realitzar sol·licituds HTTP en Objective-C.
- Manipular respostes de xarxa.
- Gestionar errors de xarxa.
Conceptes Clau
- Protocols de Xarxa
Els protocols de xarxa són regles que defineixen com es comuniquen els dispositius en una xarxa. Els més comuns són:
- HTTP/HTTPS: Utilitzats per a la comunicació web.
- FTP: Utilitzat per a la transferència de fitxers.
- TCP/IP: Protocols bàsics per a la comunicació a Internet.
- Sol·licituds HTTP
Les sol·licituds HTTP són missatges enviats per un client a un servidor per obtenir recursos. Els tipus més comuns de sol·licituds són:
- GET: Per obtenir dades.
- POST: Per enviar dades al servidor.
- PUT: Per actualitzar dades.
- DELETE: Per eliminar dades.
- Respostes HTTP
Les respostes HTTP són missatges enviats per un servidor en resposta a una sol·licitud HTTP. Contenen un codi d'estat que indica el resultat de la sol·licitud (per exemple, 200 OK, 404 Not Found).
Realització de Sol·licituds HTTP en Objective-C
Exemple Pràctic: Sol·licitud GET
A continuació, veurem com realitzar una sol·licitud GET en Objective-C utilitzant la classe NSURLSession.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// URL de la sol·licitud
NSURL *url = [NSURL URLWithString:@"https://jsonplaceholder.typicode.com/posts/1"];
// Creació de la sessió
NSURLSession *session = [NSURLSession sharedSession];
// Creació de la tasca de sol·licitud
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error.localizedDescription);
return;
}
// Manipulació de la resposta
NSError *jsonError;
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (jsonError) {
NSLog(@"JSON Error: %@", jsonError.localizedDescription);
return;
}
// Impressió de la resposta
NSLog(@"Response: %@", jsonResponse);
}];
// Inici de la tasca
[dataTask resume];
// Mantenir el programa en execució per esperar la resposta
[[NSRunLoop currentRunLoop] run];
}
return 0;
}Explicació del Codi
- Creació de la URL: Es crea un objecte
NSURLamb l'URL de la sol·licitud. - Creació de la Sessió: Es crea una sessió compartida utilitzant
NSURLSession. - Creació de la Tasca de Sol·licitud: Es crea una tasca de sol·licitud amb
dataTaskWithURL:completionHandler:. ElcompletionHandlerés un bloc que s'executa quan la sol·licitud es completa. - Gestió d'Errors: Si hi ha un error, es mostra un missatge d'error.
- Manipulació de la Resposta: La resposta es deserialitza de JSON a un diccionari de Objective-C.
- Inici de la Tasca: La tasca es comença amb
resume. - Mantenir el Programa en Execució: Es manté el programa en execució per esperar la resposta de la xarxa.
Exercici Pràctic
Exercici 1: Sol·licitud POST
Crea una sol·licitud POST que enviï dades a un servidor i imprimeixi la resposta. Utilitza l'URL https://jsonplaceholder.typicode.com/posts i envia les dades següents en format JSON:
Solució
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// URL de la sol·licitud
NSURL *url = [NSURL URLWithString:@"https://jsonplaceholder.typicode.com/posts"];
// Creació de la sol·licitud
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
// Dades a enviar
NSDictionary *postData = @{@"title": @"foo", @"body": @"bar", @"userId": @1};
NSError *jsonError;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postData options:0 error:&jsonError];
if (jsonError) {
NSLog(@"JSON Error: %@", jsonError.localizedDescription);
return 1;
}
[request setHTTPBody:jsonData];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// Creació de la sessió
NSURLSession *session = [NSURLSession sharedSession];
// Creació de la tasca de sol·licitud
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error.localizedDescription);
return;
}
// Manipulació de la resposta
NSError *jsonError;
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (jsonError) {
NSLog(@"JSON Error: %@", jsonError.localizedDescription);
return;
}
// Impressió de la resposta
NSLog(@"Response: %@", jsonResponse);
}];
// Inici de la tasca
[dataTask resume];
// Mantenir el programa en execució per esperar la resposta
[[NSRunLoop currentRunLoop] run];
}
return 0;
}Resum
En aquest tema, hem après els conceptes bàsics de les xarxes i com realitzar sol·licituds HTTP en Objective-C. Hem vist com crear sol·licituds GET i POST, gestionar errors i manipular respostes. Aquests coneixements són fonamentals per desenvolupar aplicacions que necessiten comunicar-se amb serveis web.
En el següent tema, explorarem com treballar amb JSON i XML per processar dades de xarxa de manera més eficient.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari
