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

  1. 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.

  1. 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.

  1. 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

  1. Creació de la URL: Es crea un objecte NSURL amb l'URL de la sol·licitud.
  2. Creació de la Sessió: Es crea una sessió compartida utilitzant NSURLSession.
  3. Creació de la Tasca de Sol·licitud: Es crea una tasca de sol·licitud amb dataTaskWithURL:completionHandler:. El completionHandler és un bloc que s'executa quan la sol·licitud es completa.
  4. Gestió d'Errors: Si hi ha un error, es mostra un missatge d'error.
  5. Manipulació de la Resposta: La resposta es deserialitza de JSON a un diccionari de Objective-C.
  6. Inici de la Tasca: La tasca es comença amb resume.
  7. 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:

{
  "title": "foo",
  "body": "bar",
  "userId": 1
}

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.

© Copyright 2024. Tots els drets reservats