Application programming interface: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Tank00 (discussione | contributi)
mNessun oggetto della modifica
m Annullata la modifica di 93.65.240.87 (discussione), riportata alla versione precedente di 93.151.246.49
Etichetta: Rollback
 
(156 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{C|Rivedere la relazione tra api e librerie|informatica|febbraio 2024}}
Le '''''Application Programming Interface''''' '''API''' (''Interfaccia di Programmazione di un'Applicazione''), sono ogni insieme di procedure disponibili al [[programmatore]], di solito raggruppate a formare un set di strumenti specifici per un determinato compito. È un metodo per ottenere un'[[astrazione (informatica)|astrazione]], di solito tra l'[[hardware]] e il programmatore, o tra [[software]] a basso ed alto livello. Le API permettono di evitare ai programmatori di scrivere tutte le funzioni dal nulla. Le API stesse sono un'astrazione: il ''software'' che fornisce una certa API è detto ''implementazione dell'API''.
{{F|informatica|febbraio 2024}}
[[File:Database management system diagram from 1978 workshop.png|thumb|alt=Application programming interface|Application programming interface]]
 
In un [[programma (informatica)|programma informatico]], con '''application programming interface''' ('''API''')<ref>In inglese "ei-pi-ai", scandite essendo un acronimo.</ref>, in italiano "[[Interfaccia (informatica) |interfaccia]] di programmazione dell'applicazione", si indica un insieme di [[funzione (informatica)|procedure]] (in genere raggruppate per strumenti specifici) atte a consentire la comunicazione tra diversi computer o tra diversi software o tra diversi componenti di software<ref>{{Cita libro|nome=Martin|cognome=Reddy|titolo=API design for C++|url=https://www.worldcat.org/oclc/704559821|accesso=2022-05-16|data=2011|editore=Morgan Kaufmann|OCLC=704559821|ISBN=978-0-12-385004-1}}</ref>; spesso tale termine designa le [[Libreria (software)|librerie software]] di un [[linguaggio di programmazione]]<ref>{{cita web|https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/com-interop/walkthrough-calling-windows-apis|titolo=Walkthrough: Calling Windows API (Visual Basic)|sito=Docs.Microsoft.com|lingua=en|data=20 luglio 2015|accesso=13 febbraio 2019}}</ref>, sebbene più propriamente le API siano il metodo con cui le librerie vengono usate per sopperire ad uno specifico problema di scambio di informazioni<ref>{{Cita web|url=https://rapidapi.com/blog/api-vs-library/|titolo=API vs Library (What's the Difference?)}}</ref>.
Per esempio, si può pensare ad un'applicazione che scriva le parole "[[Hello world|Hello World]]" su uno schermo con vari livelli di astrazione:
 
== Caratteristiche ==
Esistono vari design model per le API. Le interfacce intese per la massima velocità di esecuzione spesso consistono in una serie di [[Subroutine|funzioni]], [[Funzione (informatica)|procedure]], [[variabile (informatica)|variabili]] e [[struttura dati|strutture dati]]. Esistono anche altri modelli come gli [[Interprete (informatica)|interpreti]] usati per valutare le espressioni come con [[ECMAScript]]/[[JavaScript]]. Una buona API fornisce una "scatola nera", cioè un livello di astrazione che permette al programmatore di evitare di conoscere il funzionamento delle API ad un livello più basso. Questo permette di riprogettare o migliorare le funzioni all'interno dell'API senza cambiare il codice che si affida ad essa.
 
Esistono due linee di condotta per quanto riguarda la pubblicazione delle API:
# Alcune compagnie conservano gelosamente le loro API. Per esempio, [[Microsoft]] fornisce API ufficiali solamente agli sviluppatori [[Xbox]] registrati, allo scopo di restringere il numero di persone che possono scrivere [[gioco|giochi]] per la [[Console (sistema per videogiochi)|console]] e limitare la pirateria.
# Altre compagnie distribuiscono le API pubblicamente. Per esempio, la stessa [[Microsoft]] fornisce al pubblico informazioni sulle sue [[Windows API]], tra cui le [[Microsoft Foundation Classes]] (MFC), per consentire di scrivere software per la piattaforma [[Microsoft Windows|Windows]].
 
Alcune API, come quelle standard di un sistema operativo, sono implementate come una libreria separata e distribuite con il sistema operativo. Altre API richiedono a chi pubblica il software di integrare l'API direttamente nell'applicazione e spesso richiedono l'utilizzo di [[API key|chiavi API]] per l'autenticazione e il controllo degli accessi. Questo costituisce un'ulteriore distinzione nell'esempio precedente.
 
Le API di Microsoft Windows sono fornite con il sistema operativo e chiunque può utilizzarle. Il software per i [[sistema embedded|sistemi embedded]] come le console per videogiochi generalmente ricadono nella categoria in cui le API sono integrate con l'applicazione. Anche se la documentazione ufficiale dell'API della Playstation può essere una lettura interessante, è quasi inutile senza la corrispondente implementazione sotto forma di una libreria separata o di un kit per sviluppatori.
 
Una API che non richiede il pagamento di diritti per il suo accesso ed utilizzo è detta "aperta". Le API fornite dal [[software libero]], come software distribuito sotto licenza [[GNU General Public License|GPL]], sono aperte per definizione, dal momento che si può accedere al [[Codice sorgente|sorgente]] del software e capire come funziona. Anche se esiste una "[[implementazione di riferimento]]" per una API (come quella di [[Microsoft Windows]] per la [[Windows API]]), non c'è nulla che impedisce la creazione di un'implementazione alternativa. Per esempio, la maggior parte della API di Windows può essere fornita in un sistema [[Unix]] da un software chiamato [[Wine]].
 
In generale l'analisi dell'implementazione di una API per produrne una compatibile costituisce una violazione alla legge. Questa tecnica è chiamata [[reverse engineering|ingegneria inversa]]. La situazione legale in questi casi presenta ambiguità quindi conviene affrontare il problema prima che l'attività di ingegneria inversa sia iniziata. Per esempio, una API può contenere a sua volta un [[brevetto]].
 
== Finalità ==
La finalità è ottenere un'[[astrazione (informatica)|astrazione]] a più alto livello, di solito tra l'[[hardware]] e il programmatore o tra [[software]] a basso e quello ad alto livello semplificando così il lavoro di [[programmazione (informatica)|programmazione]]. Le API permettono infatti di evitare ai [[programmatore|programmatori]] di riscrivere ogni volta tutte le [[funzione (informatica)|funzioni]] necessarie al programma dal nulla, ovvero dal basso livello, rientrando quindi nel più vasto concetto di [[riuso di codice]]. Le API stesse rappresentano quindi un livello di astrazione intermedio: il software che fornisce una certa API è detto implementazione dell'API.
 
== Posix ==
Poiché esistono molte varianti di API, nel 1985 è stato creato un progetto finalizzato alla creazione di uno standard. La famiglia che racchiude questi standard prende il nome di [[POSIX]] (acronimo di "Portable Operating System Interface for Unix"), il cui nome è stato ideato da [[Richard Stallman]] dopo la richiesta da parte dell'IEEE di un nome di facile memorizzazione.
 
== Esempio di utilizzo ==
Si può pensare a un'applicazione che scriva le parole "[[Hello world]]" su uno schermo con vari livelli di astrazione:
# Scrivere tutto da soli:
## Disegnare su un foglio le forme delle lettere H, e, l, l, o, W, o, r, l, d.
Riga 9 ⟶ 34:
## Predisporre la scheda video per generare il segnale corretto a partire dal contenuto ''frame buffer''.
# Utilizzare un [[sistema operativo]] per effettuare parte del compito:
## Caricare in memoria una struttura dati chiamata "font" fornita dal sistema operativo.
## Far visualizzare al sistema operativo una finestra vuota.
## Far disegnare al sistema operativo il testo "Hello World" sulla finestra utilizzando il font caricato.
Riga 16 ⟶ 41:
## Aprire il documento con un [[web browser]].
 
Ovviamente, lL'approccio del primo livello richiede molti passaggi ede ognuno di questi è molto più complesso di quelli dei livelli successivi. Altro svantaggio del primo approccio è che è poco pratico utilizzarlo nel caso in cui sia necessario visualizzare una certa quantità di informazioni sullo schermo; col secondo approccio l'operazione è molto più semplice, e nel terzo è sufficiente scrivere "Hello World". In genere utilizzare API di livello più alto di solito comporta una certa perdita di flessibilità; per esempio, potrebbe essere molto difficile a livello di web browser ruotare attorno ada un punto un testo con i bordi lampeggianti, mentre questo compito potrebbe essere svolto in modo semplice ada un livello più basso. Questa differenza è un tipico esempio di compromesso che si può incontrare utilizzando un'API.
 
== Web API ==
Le API sono essenziali per i computer come gli standard elettrici lo sono per una [[casa]]. Chiunque può inserire la spina del tostapane nella presa a muro della sua casa o dal vicino perché entrambe le case sono conformi ad uno standard. Se non ci fosse una interfaccia standard, occorrerebbe avere una centrale elettrica per fare un ''toast''. Niente vieta che esistano più tipi di interfacce diverse, per esempio un tostapane europeo non può funzionare negli Stati Uniti senza un [[trasformatore]]; in modo simile, un programma scritto per [[Microsoft Windows]] non può essere eseguito direttamente su un [[Unix|sistema UNIX]] senza un ''[[API adapter]]'' come [[WINE]].
Una '''web API''' è un'API sviluppata in uno dei linguaggi specifici per realizzare [[web app]] ovvero, in parole povere, applicazioni che l'utente usa attraverso un comune [[browser]]<ref>{{Cita web|url=https://www.unilab.eu/it/articoli/coffee-break-it/web-api/|titolo=API e WEB API cosa sono?|sito=UNILAB - Heat Transfer Software|data=2018-09-17|lingua=it-IT|accesso=2024-06-16}}</ref>. Rappresenta una categoria di procedure (erogate attraverso interfacce visuali consistenti in librerie di strumenti spesso open source) molto diffuse a causa del massiccio impiego di sistemi di tipo [[Software as a service|SaaS]]; possono però essere sviluppate affinché interagiscano con applicazioni tradizionali.
 
Esse sono delle interfacce per sviluppatori o per utenti che necessitano di servizi aggiuntivi o specifici rispetto al sistema base. Sono pure gli stessi produttori di software (oltre che al mondo open source) che mettono a disposizione set già compilati di web API, non solo per integrare funzioni ma anche per facilitare l'operatività dell'utente o del reparto IT aziendale in caso di sistemi informatici sempre più complessi (si pensi alle soluzioni di tipo business).
Esistono vari [[design model]] per le API. Le interfacce intese per la massima velocità di esecuzione spesso consistono in una serie di [[Subroutine|funzioni]], [[procedura|procedure]], [[variabile|variabili]] e [[struttura dati|strutture dati]]. Esistono anche altri modelli come gli [[interprete (software)|interpreti]] usati per valutare le espressioni come con [[ECMAScript]]/[[Javascript]]. Una buona API fornisce una "scatola nera", cioè un livello di astrazione che evita al programmatore di sapere come funzionano le API ad un livello più basso. Questo permette di riprogettare o migliorare le funzioni all'interno dell'API senza cambiare il codice che si affida ad essa.
 
== Esempi di API e web API ==
Esistono due linee di condotta per quanto riguarda la pubblicazione delle API:
* L'[[interfaccia (informatica)|interfaccia]] di chiamate al [[BIOS]] del PC
 
# Alcune compagnie conservano gelosamente le loro API. Per esempio, la [[Sony]] e la [[Microsoft]] forniscono le API ufficiali solamente agli sviluppatori per rispettivamente [[PlayStation]] e [[xbox|X-Box]] registrati. Questo perché ambedue intendono restringere il numero di persone che possono scrivere [[gioco|giochi]] per le rispettive [[Console (sistema per videogiochi)|console]] in modo da ricavare il più possibile. Questo atteggiamento è tipico delle compagnie che non traggono profitto dalla vendita dell'implementazione delle API.
# Altre compagnie distribuiscono le API pubblicamente. Per esempio la stessa [[Microsoft]] fornisce al pubblico informazioni sulle sue [[Windows API]], tra cui le [[Microsoft Foundation Classes]] (MFC), per scrivere ''software'' per la piattaforma [[Windows]]. La vendita di applicazioni di terze parti fa vendere copie di Windows. Questo è tipico di compagnie che traggono profitto dalla vendita dell'implementazione delle API.
 
Alcune API, come quelle standard di un [[sistema operativo]], sono implementate come una [[Libreria software|libreria]] separata e distribuite con il sistema operativo.
Altre richiedono a chi pubblica il software di integrare l'API direttamente nell'applicazione. Questo costituisce un'ulteriore distinzione nell'esempio precedente. Le API di Microsoft Windows sono fornite con il sistema operativo e chiunque può utilizzarle. Il ''software'' per i [[sistema embedded|sistemi embedded]] come le console per videogiochi generalmente ricadono nella categoria in cui le API sono integrate con l'applicazione. Anche se la documentazione ufficiale dell'API della Playstation può essere una lettura interessante, è quasi inutile senza la corrispondente implementazione sotto forma di una libreria separata o di un ''kit'' per sviluppatori.
 
Una API che non richiede il pagamento di diritti per il suo accesso ed utilizzo è detta "aperta". Le API fornite dal [[Free software]], come ''software'' distribuito sotto licenza [[GNU General Public License|GPL]], sono aperte per definizione, dal momento che si può accedere al [[Codice sorgente|sorgente]] del ''software'' e capire come funziona. Anche se esiste una "[[implementazione di riferimento]]" per una API (come quella di [[Microsoft Windows]] per la [[Windows API]]), non c'è nulla che impedisce la creazione di un'implementazione alternativa. Per esempio, la maggior parte della API di Windows può essere fornita in un sistema [[UNIX]] da un ''software'' chiamato [[WINE]].
 
In generale l'analisi dell'implementazione di una API per produrne una compatibile costituisce una violazione alla legge. Questa tecnica è chiamata ''[[reverse engineering]]''. La situazione legale in questi casi presenta ambiguità quindi conviene affrontare il problema prima che l'attività di ''reverse engineering'' sia iniziata. Per esempio, una API può contenere a sua volta un brevetto.
 
== Esempi di API ==
 
* L'[[interfaccia]] di chiamate al [[BIOS]] del PC
* I [[Document Object Model]] di varie applicazioni come l'[[HTML]]
* La [[Single UNIX Specification]]
* La [[Windows API]] di [[Microsoft]]
* L'API Java 2 Enterprise Edition [[Java EE]]
* L'[[interfaccia]] [[ASPI]] per i dispositivi [[Small Computer System Interface|SCSI]]
* Le API [[Carbon (API)|Carbon]] e [[Cocoa (software)|Cocoa]] per il [[Apple Macintosh|Macintosh]] [[MacmacOS OS X|OSServer]]
* API e Web service
* API e Web Services, il [http://segnalazionit.blogspot.com/2008/11/una-nuova-frontiera-nella-diffusione.html il caso Istat]
* ''Common Object Request Broker Architecture'' ([[Common Object Request Broker Architecture|CORBA]])
* ''Java APIs for Integrated Networks'' ([[JAIN]])
* ''Simple Network Management Protocol'' ([[Simple Network Management Protocol|SNMP]])
* ''Universal Plug and Play'' ([[UPnP]])
* [[Mantle]], API di basso livello sviluppate da [[AMD]] come alternativa a [[DirectX]] e [[OpenGL]]
* ''[[Java Telephony API]]'', API di Java per la gestione di [[call center]] distribuiti
* ''Amazon Product Advertising API''
* ''Bing API''
* ''Envato Marketplace API''
* ''Facebook API''
* ''Google Chart Tools and API''
* ''Google Feed API''
* ''All Google APIs and Tools'' (''Google APIs by Google Inc.'')
* ''LinkedIn API''
* ''StackExchange API''
* ''Twitter API''
* ''YouTube API''
* ''YUI Charts''
* ''Google Maps API Family''
* ''Google Libraries API''
* ''Google+ Platform API''
 
== Note ==
{{portale|informatica}}
<references/>
 
== Voci correlate ==
[[Categoria:Librerie software]]
* [[Libreria (software)]]
* [[Linguaggio di programmazione]]
* [[Application binary interface]]
* [[API key]]
 
== Altri progetti ==
[[ar:واجهة برمجة التطبيقات]]
{{interprogetto|preposizione=sull'|wikt=API|wikt_etichetta=API}}
[[bg:Приложно-програмен интерфейс]]
 
[[bn:অ্যাপলিকেশন প্রোগ্রামিং ইন্টারফেস]]
== Collegamenti esterni ==
[[bs:Application Programming Interface]]
* {{Collegamenti esterni}}
[[ca:API]]
* {{FOLDOC|Application Program Interface|Application Program Interface}}
[[cs:API]]
* {{Garzanti|API}}
[[da:Application programming interface]]
 
[[de:Programmierschnittstelle]]
{{Componenti di Windows}}
[[el:Διεπαφή προγραμματισμού εφαρμογών]]
{{Controllo di autorità}}
[[en:Application programming interface]]
{{Portale|informatica|Microsoft}}
[[es:Interfaz de programación de aplicaciones]]
 
[[et:Rakendusliides]]
[[Categoria:Librerie software]]
[[eu:Application Programming Interface]]
[[fa:رابط برنامه‌نویسی نرم‌افزار]]
[[fi:Ohjelmointirajapinta]]
[[fr:Interface de programmation]]
[[gl:API]]
[[he:ממשק תכנות יישומים]]
[[hu:Alkalmazásprogramozási felület]]
[[id:Antarmuka pemrograman aplikasi]]
[[ja:Application Programming Interface]]
[[ko:API]]
[[lt:Aplikacijų programavimo sąsaja]]
[[nl:Application programming interface]]
[[no:API (programmering)]]
[[pl:API (informatyka)]]
[[pms:API]]
[[pt:API]]
[[ro:API]]
[[ru:Интерфейс программирования приложений]]
[[sh:API]]
[[simple:Application programming interface]]
[[sk:Application programming interface]]
[[sq:Interfejsi për programimin e aplikacioneve]]
[[sr:Апликациони програмски интерфејс]]
[[sv:Application Programming Interface]]
[[ta:பயன்பாட்டு நிரலாக்க இடைமுகம்]]
[[th:เอพีไอ]]
[[tr:Uygulama programlama arayüzü]]
[[uk:Прикладний програмний інтерфейс]]
[[vi:Giao diện lập trình ứng dụng]]
[[zh:应用程序接口]]