comunicazione

protocolli e formato dei dati

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 di quelli 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ù sempllice 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 tabela.
I dati presenti in una singola cella 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, erano abbastanza comuni formati come questo:

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 molto lungo non posso scriverlo.
Il primo problema è falso in realtà: il formato csv è un pochino più complesso e non ha problemi con le virgole ma il secondo problema purtroppo è un problema reale.