protocolli e formati

protocolli e formato dei dati

La prima cosa che ci serve per poter comunicare è concordare il modo per farlo:

Un protocollo è un insieme di regole (sia di tipo sintattico che di tipo semantico) che determinano come due o più entità si scambiano informazioni tra loro.

Nel nostro contesto utilizziamo dei protocolli per scambiarci informazioni tra programmi in un ambiente di rete. Sono stati definiti tantissimi protocolli per svolgere le operazioni più diverse, ad esempio: per trasferire dei file possiamo usare SFTP, SSH per terminali remoti sicuri, HTTP per trasferire ipertesti, SMTP per inviare la posta e IMAP e POP3 per leggerla.

Nel protocollo oltre alle regole per comunicare viene specificato anche quale (o quali) formati vanno usati per rappresentare le informazioni che vogliamo scambiare. Ci occuperemo dei protocolli più diffusi che si usano in ambito informatico partendo proprio da come si identifica un formato dei dati presenti in un file (che sia un file o un pacchetto di dati inviati in rete non cambia nulla) utilizzando il suo tipo mime.

Un media type conosciuto anche come "Multipurpose Internet Mail Extensions" o "tipo mime" indica la natura e il formato di un file. Nella sua forma più semplice si scrive tipo/sottotipo.

Degli esempi chiarificano la situazione: i file che contengono pagine HTML sono di tipo text/html sarebbe a dire appartengono al gruppo "text" e in particolare sono "html", le immagini jpeg sono di tipo image/jpeg.

Torniamo però allo scambio dei dati: uno dei primi formati usati per lo scambio dei dati è il formato CSV (text/csv): questo formato è molto comodo perché è un formato di testo e è adatto a rappresentare i valori presenti in una tabella.
I dati presenti in una singola cella della tabella vengono rappresentati in formato testo, ogni cella è separata dalla successiva da una virgola e ogni riga termina con un "a capo". Questo formato è a tutt'oggi molto usato, possiamo facilmente avere un esempio per una agenda:

Nome,Cognome,Telefono
Mario,Rossi,349771188
Luigi,Bianchi,374776749

È anche possibile che un protocollo utilizzi dei file binari (application/octet-stream), formati in cui si definisce byte per byte cosa deve contere un file (o un blocco di byte più genericamente), erano abbastanza comuni formati come questo:

Vediamo ad esempio cosa conterrebbe un file in cui si vogliono registrare i dati di due dipendenti: Mario Rossi che hai il badge rosso e guadagna 1500€, Chiara Esposito che ha il badge giallo e guadagna 1792€.


byte  0-15 4d 61 72 69 6f 20 20 20  20 20 52 6f 73 73 69 20
byte 16-31 20 20 20 20 20 20 20 ff  00 00 00 00 05 dc 43 68
byte 32-47 69 61 72 61 20 20 20 20  45 73 70 6f 73 69 74 6f
byte 48-59 20 20 20 20 20 ff ff 00  00 00 07 00

Ovviamente un file di questo genere non può essere visualizzato come testo perché alcune informazioni sono in formato binario.

Per essere precisi nella specificadell'esempio sopra mancano delle informazioni: quali?

La codifica del testo potrebbe essere UTF-8 ma va specificato Quanti elementi si possono registrare non necessario, finché c'è spazio si inseriscono La codifica dei numeri ad esempio se con complemento a due o meno

Guardando questi due esempi possiamo trovare due punti deboli: nel text/csv se ho una virgola nel nome o nel cognome sono nei guai... nel application/octet-stream se ho un cognome più lungo del previsto non posso scriverlo per intero.
Il primo problema è falso in realtà: il formato csv è un pochino più complesso e non ha problemi con le virgole (ma ne ha con i dati strutturati!) ma il secondo problema purtroppo è un problema reale.