Che cosa sono le API (Application Programming Interface)

September 1st, 2006 at 5:16 pm • permalink22 comments

API è l’acronimo di Application Programming Interface, nonché di Application Program Interface.

Prima di realizzare questo post ho cercato la presenza online di qualche documento che potesse riassumere brevemente ed in modo chiaro l’utilità di un’API, tuttavia non sono arrivato ad un risultato che mi soddisfacesse. Neppure Wikipedia in questo caso mi convinceva, considerando che la pagina Application programming interface è riuscita a complicarmi le idee più di quanto credessi. Poco male, ho deciso così di realizzare una breve introduzione alle API, più avanti (nei post seguenti) capirete perché.

Come parzialmente intuibile dai termini che compongono l’acronimo, le API rappresentano un’interfaccia di programmazione, resta da comprendere a cosa e utilizzabile da chi.

Un esempio di interfaccia a del.icio.us

Prendiamo l’esempio di un servizio che molti utenti conoscono ed utilizzano: del.icio.us. del.icio.us è basato su un database che ha lo scopo di salvare tutti i preferiti degli utenti. Ogni utente può, attraverso l’interfaccia di del.icio.us, inserire preferiti, aggiungere tag, modificare i propri dettagli ed eseguire azioni.

Ma se l’utente non volesse usare l’interfaccia di del.icio.us? Questo è il concetto chiave. Ad esempio il browser Mozilla Firefox dispone di due estensioni che permettono di interagire agevolmente con del.icio.us usando… le API.

Riassumento il concetto espresso con questo esempio, possiamo estremizzare che le API rappresentano un’interfaccia aperta di un software, ovvero una particolare interfaccia che librerie, software o piattaforme possono usare per interagire con un programma.

A cosa servono le API

Le API permettono di espandere le funzionalità di un programma. Per uno sviluppatore mettere a disposizione un set di API di un suo software significa dare la possibilità ad altri di interagire con la sua piattaforma e, soprattutto, estendere le funzioni e le caratteristiche della struttura base della piattaforma. In altri termini, le API sono un ottimo strumento per promuovere un programma offrendo ad altri un modo per interagirci.

Ad esempio, le API di del.icio.us consentono agli utenti di gestire i propri preferiti senza connettersi al sito centrale, le API di Technorati offrono ai programmatori un set di strumenti per eseguire ricerche tra i blog senza passare attraverso il sito ufficiale, le API di Google Maps offrono agli utenti la possibilità di inserire mappe personalizzate nei propri siti, vedi Blogitalia.

Spero che questo post abbia in qualche modo chiarito leggermente il significato e l’utilità delle API. Prossimamente pubblicherò alcune informazioni su come si presentano le API, come possono essere usate ed alcuni esempi concreti di implementazione. Se nel frattempo ci sono domande o suggerimenti, sarei interessato a conoscere eventuali concetti da trattare sull’argomento API, nonché eventuali dubbi.

Filed in Programmazione • Tags:


  • Fabio Sutto

    Ciao Simone,

    userei questo paragone: molti come me sono ignoranti sulla meccanica e sul funzionamento interno delle automobili…eppure attraverso lo sterzo, i pedali ed il cambio quasi tutti sono perfettamente in grado di guidare l’auto e utilizzare il mezzo per lo scopo per cui è stato realizzato.
    Lo sterzo, il cambio etc.etc. rapresentano l’interfaccia pubblica della “scatola nera” auto, cioè sono l’API: non abbiamo bisogno di conoscere nient’altro per condurre il mezzo.

    Possiamo però individuare più API: c’è quella del normale utilizzatore (chi guida appunto) e quella di chi è in grado di mettere mano agli “internals” dell’auto, sostituendone le parti in base a quanto il costruttore ha predisposto, cioè può esistere anche un API per “estendere” il mezzo.

    Fuor di metafora in questo caso mi riferisco ai vari “hook” che i framework rendono disponibili per estendere le proprie funzionalità, anzichè utilizzarle semplicemente.

    Infine c’è chi applica vere e proprie modifiche alle parti dell’auto (non sostituzioni ma interventi diretti “nel codice”) ed evita di utilizzare le API (a proprio rischio e pericolo).

  • http://zizoudan.altervista.org zizoudan

    Finalmente una buona spiegazione!

    Bravo.

    Integra o sostituisci quella di Wikipedia !!

    ;)

  • hariseldon

    Ciao,
    ho letto il tuo articolo e ad un certo punto mi son venuti dei dubbi sulla gestione della memoria durante le chiamate delle API. Per capire esattamente cosa intendo per dubbi riporto un esempio che finisce dove dovrebbe partire la spiegazione. Se non è chiaro puoi tranquillamente chiedermi di spiegarmi meglio (anche se avendo confusione sull’argomento non riesco ad essere molto chiaro).
    Supponiamo di avere un programma scritto in linguaggio C che metta a disposizione di altre applicazioni il seguente prototipo di API:
    int fun (string Nome, string Cognome, int s).
    Bene.
    Adesso supponiamo che io sia un programmatore che voglia interfacciarsi con la API del precedente programma. Scriverò un programma, magari in visual basic, che richiamerà la funzione.
    Cosa succede in memoria? Comincio io in merito a quel che so poi continui tu.
    Nello stack dati del mio programma, al momento della chiamata della API, verrà generato un record di attivazione per la chiamata della funzione. In questo record sono contenuti i parametri da passare, il return pointer, il collegamento dinamico e l’eventuale zona di memoria riservata al valore di ritorno (nel caso di un procedura ovviamente non c’è valore di ritorno).
    Ora cominciano i dubbi.
    Primo dubbio. Il sistema operativo effettua un cambio di contesto? Se sì verrà creato un nuovo stack per l’esecuzione della API. Ma la API deve accedere al record di attivazione per conoscere i parametri su cui eseguire la funzione. Come può accedere ad una zona di memoria che non fa parte del suo spazio di indirizzamento?
    Supponiamo allora che venga passato anche il record di attivazione. La struttura del record di attivazione è diversa per ogni compilatore, quindi i parametri potrebbero essere inseriti in un ordine diverso da quello con cui li preleva il compilatore della API. In quel caso l’esecuzione della API darebbe un risultato non conforme ai propositi di chi ha invocato quest’ultima.
    Lo stesso problema vale per il valore di ritorno della API. Come fa a sapere in quale zona di memoria dovrà scrivere il valore di ritorno per essere sicuro che il programma chiamante lo trovi e lo utilizzi correttamente?
    Chi è che gestisce questi problemi, e come?

  • http://www.simonecarletti.it Simone Carletti

    Ciao hariseldon,
    se ho compreso bene il tuo commento presumo che tu abbia leggermente confuso il concetto base di una piattaforma di API.
    Cercherò di proporti qualche esempio vicino al tuo caso, affinché possa essere d’aiuto.

    Le API rappresentano una qualsiasi interfaccia di interazione tra due o più sistemi differenti.
    A basso livello potremmo parlare di API tra linguaggi, ad alto livello di API tra due applicazioni web che interagiscono tra di loro. Ad esempio, il mio sistema di commercio elettronico potrebbe sfruttare le API messe a disposizione da PayPal per consentire ai miei clienti di pagare con PayPal un ordine, nonostante io non sia PayPal e non abbia alcun accesso diretto al loro sistema.

    Rispetto alla programmazione a basso livello, dal tuo esempio parlerei più di funzioni che API.
    Ipotizzando che tu abbia un programma scritto in C e ti voglia interfacciare in visual basic, a meno che Visual Basic (non lo conosco) non possa importare librerie C probabilmente la soluzione più comoda sarà la seguente: il tuo programma C mette a disposizione un set di API (funzioni) richiamabili con l’eventuale passaggio di parametri e lo script Visual Basic non farà altro che invocare il programma passando i parametri necessari.

    Lo scambio dei dati avviene tipicamente con un formato comune ad entrambi, come testo o XML.

    Facciamo un esempio pratico. Prendi il binario svn di Subversion.
    Il programma mi offre una ricca dotazione di api, che contiene i comandi

    svn info
    svn commit

    Io posso invocare uno qualsiasi di quei comandi svn passando i necessari parametri ed il binario eseguirà i comandi richiesti. Il tutto senza bisogno che io prenda il codice sorgente di svn e lo integri in un mio software.
    In questo caso, potremmo definire le API come il set di funzioni che svn espone verso l’esterno.

    Prendendo questo esempio è facile comprendere chi ha in carico la gestione della memoria per ciascuna esecuzione.

  • hariseldon

    Ciao,
    al momento sono interessato al caso di API tra linguaggi (anche se poi l’appetito vien mangiando …).
    Avevo intuito che doveva esserci un formato comune tra i due linguaggi. Quello che proprio non capisco in effetti è come avvenga effettivamente il passaggio. Supponiamo che il formato ora sia stabilito in maniera univoca. Adesso scusa se parlo come un barbaro ma è l’unico modo per far emergere con chiarezza i miei dubbi. I parametri da passare, chi è che li “prende” dallo stack del programma chiamante per “portarli” allo stack dell’API chiamata?
    E poi chi è che “prende” il valore di ritorno della API per “portarlo” programma chiamante?
    O forse i due programmi si scambiano dei messaggi (InterProcess Communication)?

  • http://www.simonecarletti.it Simone Carletti

    La soluzione è molto più semplice di quanto pensi.
    In realtà, a mio avviso ti stai complicando la vita. ;)

    Le API hanno la caratteristica di rendere i due moduli che interagiscono indipendenti.
    Nessuno conosce lo status dello stack dell’altra elaborazione e, per dirla tutta… non gliene può fregar di meno al programma A della stack del programma B.

    Il programma A sa fare bene un’elaborazione e restituisce un output. Il programma B invoca A e legge l’output di B.

    Un esempio classico di API tra linguaggi è l’interfaccia object oriented.

  • hariseldon

    Mi conosco abbastanza bene da poterti dire che hai assolutamente ragione quando dici che mi sto complicando la vita. In effetti mi succede sempre di farmi domande che a volte hanno poco senso, ma riesco a capirlo solo quando sono riuscito ad acquisire quel pezzo di puzzle che non riesco a sistemare nel quadro generale :)
    Ma se l’uno non sa nulla dello stack dell’altro e non usano l’IPC allora io ancora non capisco il flusso di dati come avviene. Perchè questi parametri in qualche modo devono andare da B verso A ed il valore di ritorno deve per forza andare da A verso B.
    Per dirlo con le tue parole il programma A sa fare bene un’elaborazione, ma gli servono gli input che li riceve… come? Inoltre B legge l’output di A, ma da dove?
    Non so, probabilmente non riesco a spiegarmi con la chiarezza necessaria…
    :)

  • http://www.simonecarletti.it Simone Carletti

    A chiama B > B risponde con un dato > A legge il dato.
    Punto. Questo è il flusso di interazione.

  • Healtyerslord

    Insomma, io richiamo una api inviando i dati come con una normale funzione, visto che è il sistema stesso che mi da i permessi per inviarli, quindi, quando l’api ha l’output, semplicemente fa l’inverso, chiama il programma iniziale, gli dice che l’output è stato creato, e glielo invia, facile direi….

  • NH

    Una curiosità… ma che vantaggio ha ad esempio del.icio.us o google a fornire ai programmatori una API se questo riduce le visite al sito (e per entrambi le pubblicità sono metodi di guadagno)?

    Grazie

    NH

  • http://www.simonecarletti.it Simone Carletti

    Uno dei vantaggi principali è la fidelizzazione.
    Permettere ad utenti esterni di interagire con un’applicazione consente la creazione di applicazioni, software e librerie che interagiscono con l’applicazione stessa.
    In questo modo si crea una sorta di fidelizzazione dell’utente.

    Pensa ad esempio all’uso di programmi come GMail. Se non ci fosse l’opportunità di accedere alle email via POP3 e IMAP (che altro non sono che due protocolli che corrispondono ad un’interfaccia API), quanti utenti utilizerebbero quel client di posta?

    Passando poi a Flickr: quanti utenti usando per l’upload il programmino che automaticamente ti carica la foto e te la ritaglia?

  • violane

    Ciao, ho un dubbio…. Spero tu ci sia ancora in rete…vedo che gli altri post sono vecchi….
    Anche io ho cercato come te su internet e wiki non mi ha aiutato… il dubbio è stato sollevato dalla lettura di un articolo in cui si diceva: “L’interfaccia con cui un processo applicativo accede ai servizi di comunicazione (ossia, in ambiente
    TCP/IP, l’interfaccia con lo strato di trasporto) è detta genericamente Application Program Interface(API)”: cosa si intende per servizi di comunicazione?(termine generico di cui specifica un caso, cioè la rete).
    Grazie e scusa la domanda un pò ingenua :-)
    Violane

    • http://www.simonecarletti.it/ Simone Carletti

      Il termine API è un “concetto astratto” applicabile a più ambiti. Ogni API ha le sue caratteristiche. La tua domanda è specifica sull’argomento TCP/IP e non saprei fornirti una risposta.

  • http://www.alfystudio.it Alfy

    Anche se sono un po’ in ritardo con il mio post, ci tengo a ringraziare perchè API non è un argomento tanto chiaro in rete, l’esempio su Pay Pal mi ha chiarito in parte l’utilizzo delle API.

    Thank you

  • Marco

    Bravissimo, tutti parlano e nessuno sa di cosa… questo articolo ci voleva proprio :)

  • http://www.conceptdomotica.com Fabio

    Bravo…. spiegazione sintetica ed esaudiente

  • Lomax

    Salve. Mi chiedevo, hai più pubblicato il seguito della guida? La prima mi è parsa una spiegazione chiara e concisa. Spero esista un approfondimento.
    Ciao.

  • Andrea

    Grazie, sei stato chiaro e finalmente credo di aver capito cosa sono le Api. Effettivamente quella di Wikipedia confondeva più che chiarire.

  • steeve

    Finalmente ho capito cosa sono le API. Avevo lo stesso problema ma non riuscivo a trovare una vera spiegazione del concetto. Grazie simone

  • Lorenzo

    Ciao Simone,

    ho letto il tuo post con attenzione pur non essendo un “addetto ai lavori”..
    avrei un dubbio su queste Api e non riesco a venirne a capo.
    Nel caso in cui volessi sapere se un sito è stato programmato in Api,
    come potrei verificarlo con esattezza?

    Ti ringrazio anticipatamente,
    saluti,
    Lorenzo

  • Filippo

    Ciao Simone, ho letto il tutto….. quindi sostanzialmente le api sono delle interfacce che permettono a moduli/librerie diversi che svolgono ognuna una sua funzione di interagire all’occorrenza tra loro.
    Le librerie sono “nascoste” le api sono interfacce visibili appunto perché bisogna interagire con il modulo.

    Può andar bene anche questa come spiegazione?

  • Filippo

    Un’ultima domanda quindi se ad esempio un programmatore che scrive un programma necessità della libreria math che è presente nel sistema operativo, questa viene richiamata perché appunto ci sono le api che lo permettono?

Follow Me
    Random Quote