Cos'è un'API? Spiegazione delle interfacce di programmazione dell'applicazione

API è l'acronimo di Application Programming Interface, un concetto che si applica ovunque, dagli strumenti della riga di comando al codice Java aziendale alle app Web Ruby on Rails. Un'API è un modo per interagire a livello di codice con una risorsa o un componente software separato.

A meno che tu non scriva ogni singola riga di codice da zero, interagirai con componenti software esterni, ciascuno con la propria API. Anche se scrivi qualcosa interamente da zero, un'applicazione software ben progettata avrà API interne per aiutare a organizzare il codice e rendere i componenti più riutilizzabili. E ci sono numerose API pubbliche che ti consentono di attingere a funzionalità sviluppate altrove sul Web.

Cos'è un'API?

Un'API è definita come una specifica delle possibili interazioni con un componente software. Cosa significa esattamente? Bene, immagina che un'auto fosse un componente software. La sua API includerebbe informazioni su ciò che può fare: accelerare, frenare, accendere la radio, ecc. Includerebbe anche informazioni su come potresti fargli fare quelle cose. Ad esempio, per accelerare, metti il ​​piede sull'acceleratore e spingi.

L'API non deve spiegare cosa succede all'interno del motore quando si mette il piede sull'acceleratore. Ecco perché, se hai imparato a guidare un'auto con un motore a combustione interna, puoi metterti al volante di un'auto elettrica senza dover apprendere una serie completamente nuova di abilità. Le informazioni su cosa e come si uniscono nella definizione API , che è astratta e separata dall'auto stessa.

Una cosa da tenere a mente è che il nome di alcune API viene spesso utilizzato per fare riferimento sia alla specifica delle interazioni che al componente software effettivo con cui interagisci. La frase "Twitter API", ad esempio, non si riferisce solo alla serie di regole per l'interazione programmatica con Twitter, ma è generalmente intesa come la cosa con cui interagisci, come in "Stiamo facendo analisi sui tweet che abbiamo ricevuto da l'API di Twitter ".

API come livello di astrazione

Quando si tratta di software, le API sono letteralmente ovunque. Le API vanno di pari passo con uno dei concetti fondamentali dell'informatica: l'astrazione. L'astrazione è solo un modo per organizzare la complessità di un sistema in modo che le azioni complicate possano essere gestite in modo semplice. Pensa a questa astrazione come quei pulsanti Amazon Dash, i circuiti stampati a batteria che puoi utilizzare per ordinare punti metallici da Amazon. Questo è quello che sembrano:

Ordini un Dash Button da Amazon e utilizzi un'app sul tuo smartphone per associarlo alla tua rete Wi-Fi, al tuo account Amazon e a un prodotto, ad esempio, la tua marca preferita di asciugamani di carta. Quindi, ogni volta che vuoi ordinare più tovaglioli di carta, premi semplicemente il pulsante. Il Dash Button si connette a Internet e invia un messaggio per effettuare un ordine sul tuo account. Pochi giorni dopo, i tovaglioli di carta arrivano a portata di mano.

Come un'API, il Dash Button è un'interfaccia straordinariamente semplice che nasconde tutti i tipi di complessità dietro le quinte. L'ID del prodotto che hai ordinato deve essere recuperato da alcuni database. Il tuo indirizzo di consegna deve essere estratto dal tuo account. Deve essere determinato il centro logistico più vicino che immagazzina i tuoi asciugamani di carta, quindi notificato di rimuovere un articolo dallo stock disponibile e imballarlo. Infine, il pacco deve essere instradato attraverso una combinazione di aeroplani, camion e furgoni insieme ad altri pacchi in modo da garantire che tutti i pacchi raggiungano le loro destinazioni in modo efficiente.

Ora immagina di dover coordinare tutte queste cose come cliente. Non ordineresti mai asciugamani di carta perché è troppo complicato e richiede tempo e hai cose migliori da fare. Fortunatamente, l'intero calvario è astratto lontano da te. C'è una lunga catena interconnessa di sistemi informatici e processi umani che fanno apparire quei tovaglioli di carta davanti alla tua porta, ma tutto ciò a cui devi pensare è premere un pulsante.

Ecco come sono le API per i programmatori. Prendono un'enorme quantità di complessità e definiscono un insieme relativamente semplice di interazioni che puoi utilizzare invece di fare tutto da solo. In qualsiasi progetto software, probabilmente stai utilizzando decine se non centinaia di API direttamente e ciascuna di queste API si basa su altre API e così via.

API pubbliche e integrazione API

Le API sono un concetto di vecchia data nella programmazione di computer e fanno parte dei set di strumenti degli sviluppatori da anni. Tradizionalmente, le API venivano utilizzate per connettere i componenti di codice in esecuzione sulla stessa macchina. Con l'avvento delle reti onnipresenti , sono diventate disponibili sempre più API pubbliche, a volte chiamate API aperte . Le API pubbliche sono rivolte verso l'esterno e accessibili su Internet, consentendo di scrivere codice che interagisce con il codice di altri fornitori online; questo processo è noto come integrazione API.

Questi tipi di mashup di codice consentono agli utenti di combinare e abbinare funzionalità di diversi fornitori sui propri sistemi. Ad esempio, se utilizzi il software di automazione del marketing Marketo, puoi sincronizzare i tuoi dati lì con la funzionalità CRM di Salesforce.

"Aperto" o "pubblico" non dovrebbe essere interpretato nel senso di "gratuito" in questo contesto. È comunque necessario essere un cliente Marketo e Salesforce affinché funzioni. Ma la disponibilità di queste API rende l'integrazione un processo molto più semplice di quanto sarebbe altrimenti. ( ha un ottimo elenco di API pubbliche che dovresti conoscere.)

Servizi Web e API

Potresti ricordare il termine servizi web dei primi anni 2000 e pensare che l'idea di un'API aperta suona abbastanza simile. In effetti, un servizio Web è un tipo specifico di API aperta, che soddisfa un insieme di specifiche abbastanza rigido, incluso il fatto che siano specificate in WSDL (Web Services Description Language), una variante XML.

I servizi Web dovevano essere utilizzati come parte di un'architettura orientata ai servizi (SOA). Come spiega il blog sulle API nordiche, ciò ha dato ai servizi Web una pessima reputazione, poiché le SOA non sono mai state all'altezza del loro potenziale. I progressi nelle tecniche utilizzate per le comunicazioni da servizio a servizio, in particolare REST più leggero e flessibile, hanno anche lasciato i servizi Web un po 'indietro nel mondo delle API pubbliche.

API REST

I servizi Web sono stati originariamente progettati per comunicare utilizzando SOAP (Simple Object Access Protocol), un protocollo di messaggistica che invia documenti XML su HTTP. Oggi, tuttavia, la maggior parte delle API basate sul Web utilizza REST (Representational State Transfer) come stile architettonico.

REST è stato formalmente introdotto da Roy Fielding nella sua tesi di dottorato nel 2000. È un insieme di componenti architettoniche, principi di progettazione e interazioni utilizzati per la costruzione di sistemi distribuiti che coinvolgono media di qualsiasi tipo (testo, video, ecc.). Fondamentalmente, REST è uno stile di sistemi di costruzione che consente la comunicazione flessibile e la visualizzazione delle informazioni attraverso il web fornendo la struttura necessaria per costruire facilmente componenti per scopi generali.

In un'API REST, una risorsa potrebbe essere praticamente qualsiasi cosa, ma gli esempi includono un utente, un elenco di tweet e i risultati correnti di una ricerca di tweet. Ciascuna di queste risorse è indirizzabile a un identificatore di risorsa , che nel caso delle API REST basate sul Web è solitamente un URL, come //api.twitter.com/1.1/users/show?screen_name=twitterdev. Quando un'applicazione richiede una risorsa utilizzando l'identificatore, l'API fornisce la rappresentazione corrente di quella risorsa all'applicazione in un formato che l'applicazione può utilizzare, come un'immagine JPEG, una pagina HTML o JSON.

Uno dei principali fattori di differenziazione di REST è che implica l'invio di dati all'applicazione richiedente. Sebbene ciò offra una grande flessibilità, consentendo all'applicazione di fare tutto ciò che vuole con i dati, va a scapito dell'efficienza. L'invio di dati sul Web per l'elaborazione è piuttosto lento rispetto all'elaborazione in cui risiedono i dati e quindi all'invio dei risultati.

Ovviamente, il problema con l'approccio "efficiente" è che i sistemi che ospitano i dati dovrebbero sapere in anticipo cosa vogliono farne le applicazioni. Pertanto, per creare un'API che abbia usabilità e flessibilità per scopi generali, REST è la strada da percorrere.

Esempi di API

Esistono molte API pubbliche con cui interagire, molte di colossi del settore. La capacità di accedere al codice di alcune società di piattaforme in modo programmatico tramite un'API è ciò che le rende una piattaforma, in sostanza. Alcuni esempi di API importanti includono:

  • API di Google , che ti consentono di connettere il tuo codice a tutta la gamma di servizi Google, da Maps a Translate. Le API sono così importanti per Google che hanno acquisito Apigee, una delle principali piattaforme di gestione delle API.
  • API di Facebook , che ti consentono di accedere in modo programmatico al grafico sociale e agli strumenti di marketing di Facebook. (La società ha limitato i dati degli utenti a cui è possibile accedere tramite queste API in seguito a Cambridge Analytica e altri scandali.)

Per avere davvero un'idea di come funzionano le API, analizziamone due: l'API Java, che gli sviluppatori Java utilizzano per interagire con la piattaforma Java, e l'API Twitter, un'API pubblica che useresti per interagire con i social servizio di rete.

L'API Java

L'API Java è una libreria di componenti software disponibile "out of the box" per chiunque abbia installato Java Development Kit. Questi componenti implementano attività comuni e generalmente aumentano la produttività perché i programmatori non devono ricominciare da capo ogni volta. Uno dei componenti di base utilizzati nel software è qualcosa chiamato Elenco, che, come ci si potrebbe aspettare, tiene traccia di un elenco di elementi. L'API Java definisce cosa è possibile fare con un elenco: aggiungere elementi, ordinare l'elenco, determinare se un elemento è nell'elenco, ecc. Specifica anche come eseguire tali azioni. Per ordinare l'elenco, è necessario specificare come si desidera ordinare l'elenco: in ordine alfabetico, numericamente decrescente, dal colore più luminoso al più opaco, ecc.

L'API di Twitter

L'API di Twitter è un'API JSON basata sul Web che consente agli sviluppatori di interagire in modo programmatico con i dati di Twitter. A differenza dell'API Java, inclusa nel Java Development Kit, l'API Twitter è un'API basata sul web. È necessario accedervi effettuando richieste tramite Internet ai servizi ospitati da Twitter.

Con un'API basata sul web come quella di Twitter, la tua applicazione invia una richiesta HTTP, proprio come fa un browser web. Ma invece della risposta fornita come pagina web, per la comprensione umana, viene restituita in un formato che le applicazioni possono facilmente analizzare. Esistono vari formati per questo scopo e Twitter utilizza un formato popolare e facile da usare chiamato JSON. (Se non hai familiarità con JSON, potresti dedicare qualche minuto a leggerlo qui.)

Uno degli elementi di base di Twitter è un tweet. L'API di Twitter ti dice cosa puoi fare con i tweet: cerca tweet, crea un tweet, aggiungi un tweet ai preferiti. Ti dice anche come eseguire queste azioni. Per cercare i tweet, è necessario specificare i criteri di ricerca: termini o hashtag da cercare, geolocalizzazione, lingua, ecc.

Progettazione API

La progettazione dell'API è il processo mediante il quale vengono formulati il ​​"cosa" e il "come" di un'API. Come per qualsiasi altra cosa che può essere creata, diversi livelli di pensiero e cura vengono messi nella progettazione delle API, con conseguenti livelli variabili di qualità delle API. Le API ben progettate hanno un comportamento coerente, tengono conto del loro contesto e tengono presenti le esigenze dei propri utenti.

Un comportamento coerente all'interno di un'API influisce notevolmente sulla velocità con cui può essere appresa e sulla probabilità che i programmatori commettano errori durante l'utilizzo. In genere, le API che eseguono azioni simili dovrebbero comportarsi in modo simile, indipendentemente dalle differenze tecniche. Per un esempio di un'API incoerente, esaminiamo i due modi per aggiungere un elemento a un elenco in Java:

Anche se i due metodi di aggiunta di elementi a un elenco fanno la stessa cosa, i loro tipi di ritorno (booleano e void) sono diversi. Gli sviluppatori che utilizzano questa API ora devono tenere traccia di quale metodo restituisce quale tipo, rendendo l'API più difficile da apprendere e il suo utilizzo più soggetto a errori. Significa anche che il codice che usa questi metodi diventa meno flessibile, perché deve cambiare se vuoi cambiare il modo in cui stai aggiungendo gli elementi.

Prendere in considerazione il contesto è un'altra forma di coerenza, sebbene abbia a che fare con fattori esterni all'API. Un ottimo esempio non software di questo è il modo in cui la regola della strada, circolazione a destra o circolazione a sinistra, influenza la progettazione delle auto per diversi paesi. I progettisti di automobili tengono conto di questo fattore ambientale quando posizionano il sedile del conducente sul lato destro o sinistro dell'auto.