Cosa sono le api?

di il
12 risposte

Cosa sono le api?

Ciao a tutti sono nuovo qui e come potete leggere dalla domanda sto studiando le basi della programmazione.

Vorrei chiedervi cosa sono le api? Magari con qualche esempio

Leggendo su wikipedia ho capito (ma non ne sono convinto ecco perchè sono qui), che sono un insieme di procedure messe a disposizione da software house come microsoft, che servono a seplificare la vita dei programmatori qualora vogliano che il loro programma svolga una determinata azione appunto richiamando una dll di windows senza dover riscrivere il codice, oppure il framework dot.net che è una piattaforma che include già tutte una serie di procedure.

Ecco adesso da quanto scritto magari potrete capire che sono un neofita o peggio al momento .... spero qualcuno mi risponda correggendo quanto scritto e con qualche esempio.
Ringrazio in anticipo chi interviene

12 Risposte

  • Re: Cosa sono le api?

    Api: plurale di ape, insetto che produce il miele

    Dai che erano tutti li a pensare: Lo scrivo? Non lo scrivo?

    Piu' seriamete: Application Program Interface

    Il concetto e' semplice:

    Tu scrivi un programma. Ovviamente questo programma fara' qualcosa: fara' qualche calcolo che serve a te.
    Pero' questo programma dovra' fare anche altre cose: leggere un file, scrivere un testo, avere un'interfaccia grafica, suonare della musica, ecc.

    E' evidente che non e' pensabile che ogni programmatore debba implementare quello che serve per leggere da file, disegnare sullo schermo, ecc..

    Qualcun altro lo ha gia fatto ed ha nascosto tutta la complessita' dell'operazione in una serie di funzionalita' base utili nel 99.9 % dei casi.

    Ad esempio: per scrivere su file ti servono concettualmente solo tre operazioni:

    1) apri il file in lettura dato una stringa che rappresenta la posizione del file nel filesystem (nota che ho scritto filesystem e non disco!)
    2) scrivi N byte (o se vuoi N caratteri)
    3) chiudi il file

    Ora, il file puo' stare sul tuo disco locale, su una chiavetta USB (pendrive), su un DVD-R/W, su un computer dall'altra parte del mondo. Ogn'uno di questi posti ha sicuramente un modo diverso di essere contattato. Ma a te non interessa: ti bastano quelle tre API!

    Ecco anche del perche' dell'operazione di apertura e chiusura.

    Teoricamente tali operazioni non servirebbero, cioe' l'API minima sarebbe:

    voglio scrivere qualcosa a questo indirizzo

    Ma l'operazione di accedere a quel file potrebbe essere molto onerosa in termini di tempo (secondi se il computer e' dall'altra parte del mondo, o magari richiede una password). Se la si dovesse fare per ogni scrittura, il tuo programma non sarebbe lento, ma mortalmente lento.

    Invece, utilizzando un passo in piu', cioe' l'apertura del file (un po' come l'apertura di una scatola) e mantenendo il file aperto mentre si scrive, si puo' ridurre drasticamente i tempi di attesa.

    Ovviamente una volta aperto, il file va anche chiuso (un po' come la scatola, una volta aperta, va chiusa), perche' e' neccessario avvertire la controparte che si ha tarminato di utilizzare quella risorsa, e quindi quella risorsa puo' essere utilizzata da qualcun altro.

    Ovviamente questo e' un esempio semplice. Di API ce ne sono miliardi. Non si devono studiare tutte (e' umanamente impossibile) ma quelle che servono per risolvere il tuo problema.

    Con qualunque linguaggio di programmazione c'e' associata quella chie viene generalmente chiamata libreria standard. Questa libreria mette a disposizione una serie di API per fare le cose piu' comuni: accedere al disco, ad internet, allo schermo, stampare, suonare un file audio, ... ecc.

    Linguaggi diversi (C++/Java/Python/Lisp/Prolog/...) hanno ovviamente librerie diverse, ma in un modo o nell'altro, tutti mettono a disposizione fondamentalmente le stesse cose.

    Le API non le inventa solo qualcun altro: le puoi inventare anche tu.
    Anzi, in generale e quello che fa un bravo programmatore che lavora da molto tempo nello stesso settore: si costruisce una sua libreria personale con risolti i problemmi che si trova ad affontare piu' di frequente, e poi la riusa ogni volta che deve risolvere lo stesso problema.

    Non e' detto che siano problemoni, possono essere anche problemini semplici semplici.

    Altro esempio su cui sto lavorando:

    hai P1 e P2 due punti sul piano, e D1,D2 due direzioni (una assciata a P1 ed una associata a P2).
    La coppia (P1,D1) e (P2,D2) identificano univocamente due rette.
    Ok: voglio conoscere il punto di intersezione di queste due rette.

    Ho implementato la libreria che fa questo calcolo (ed un sacco di altre cose).

    A questo punto ogni volta che ho la necessita di trovare il punto di intersezione di due rette, non m serve reinventare la ruota, l'ho gia' fatto. Devo solo utilizzare la mia libreria e chiamare la mia API a cui passo i due punti e le due direzioni e lui mi rotorna il punto di intersezione.

    Et voila'..

    Che dici: si e' accesa la lampadina?
  • Re: Cosa sono le api?

    Ok migliorabile diciamo chiaro al 90 % volevo chiederti due cose e perdonami sesparo c... quindi una libreria e' da considerarsi una api? Ed una domanda ad esempio perche' netbios e' considerata api? Se la sai ovviamente dopo di questi due dubbi tolgo il disturbo prometto
  • Re: Cosa sono le api?

    API e libreria sono per lo iu' sinonimi.

    Oltre a NETBIOS avrai sentito parlare anche delle API WIN32 che non sono altro che la libreria che Micro$oft mette a disposizione per poter programmare sotto Windows.

    A voler essere pignoli, ma e' puramente una questione di semantica, diciamo di sega mentale, con il termine API ci si riferisce alle funzionalita' messe a disposizione dal sistema operativo, o da particolari servizi relativamente a basso livello (NETBIOS appunto). E queste funzionalita' generalmente sono scritte in C. Quindi, per tutti i linguaggio NON C e' necessario un qualche tipo di adattamento.

    I vari linguaggi quasi sempre mettono a disposizione meccanismi (creati specificatamente) per poter convertire le funzioni C nell'equivalente per quel particolare linguaggio.

    Ma, ripeto, non e' il vangelo. Si parla di API anche in Java, dove in questo caso le API sono scritte anche loro in Java.

    La distinzione non c'e' o al limite e mooooooolto sfumata.
  • Re: Cosa sono le api?

    Solo una correzione ... la società si chiama Microsoft non Miro$oft
  • Re: Cosa sono le api?

    oregon ha scritto:


    Solo una correzione ... la società si chiama Microsoft non Miro$oft
    Cioe' vuoi dire Micro$oft

    Con quello che guadagnano, giustamente i (c)entesimi non servono, bastano solo i ($)ani dollaroni
  • Re: Cosa sono le api?

    Eri tu ad aver scritto Miro$oft e poi hai corretto ... (Ultima modifica di migliorabile il 08 mar 2014, 22:00, modificato 1 volta in totale.)

    Ti volevo solo far notare che tutte le grandi società, Oracle, Apple, IBM, HP e via dicendo, fanno i dollaroni alla faccia mia e tua; finanche il cosiddetto "Open Source" garantisce bei dollaroni a tante società con pochi scrupoli o quanti le più famose. Non vedo perché storpiare il nome della Microsoft solo per questo ...

    A mio parere è solo un modo per "uniformarsi" ad un pensiero "poco intelligente" (per non dire altro) che non fa onore a chi lo adotta ...

    Microsoft mi ha permesso di lavorare come tante altre società di cui ho usato i prodotti. Non è peggio di altre.
  • Re: Cosa sono le api?

    Sbaglio o qualcosa ti ha infastidito?

    A parte l'aver scritto "Miro$oft" e' stato: 1) la mancanza dell "c" un errore, 2) l'uso del simbolo '$" a posto della "s" uno dei tanti modi per sdramatizzare, cosi' come quando si scrive "Winzoz" invece di "Windows". Non ci crederai, ma che anche qualcuno a cui Microsoft/Windows sta sulle ...

    Io sono fondamentalmente contro l'Open Source per uso professionale: sono rari con tendenza al molto rari, i prodotti Open Source qualitativamente decenti.

    Non che non ci siano, ma spesso la soluzione commerciale e' decisamente meglio.
    Un esempio per tutti: IDE per Java. Netbeans, Eclipse sono dei buoni prodotti, ma IntelliJ Idea e' infinitamente meglio. IDE per Python: mai provato PyCharm?

    Database: qui' mysql (e al limite postgresql) sono effettivamente dei buoni prodotti, migliori in certi contesti, di SQLServer, Oracle o DB2. Ma solo in certi contesti. Te la vedi una banca basare il suo intero database su Mysql?

    Un caso che mi ha fatto odiare l'OpenSouce e' stato Python quando sono passati dalla versione 2 alla 3: le incompatibilita' tra le due versioni le ho trovate assurde! Ovviamente non e' l'unico caso.
    Altro esempio e' il dover partire dai sorgenti per poter installare un programma, con i relativi infiniti casini tra versioni di librerie installate, librerie mancanti, librerie mancanti e per cui manca anche la versione usata dal programma, incompatibilita', conflitti tra versioni, ... infiniti tricks per ovviare ala rogna A che pero' se in presenza della rogna B genera anche la rogna C, per cui esiste un'altro trick!

    Con un prodotto commerciale, se qualcosa non funziona, hai qualcuno a cui rivolgerti. Con gli Open Source, hai la Comunity, che non vuol dire nulla, perche' non e' detto che ci sia qualcuno con adeguate competenze in grado di risponderti, ma sopprattutto a tempi stretti.

    A Milano dicono: pago, quindi pretendo!!!

    Personalmente tra Windows e Linux preferisco decisamente Windows. A parte la scemenza di Windows 8, non cambierei con Linux nemmeno se mi pagassero. Questo non vuol dire che non lavoro con Linux. Attualmente sviluppo su e per cluster Beowulf: tutte piattaforme basate su Linux (CentOS e Suse). Oltre che per altre piattaforme di per il supercalcolo, tutte basate sun una qualche variante di Linux

    Toh, altro prodotto Open Source che trovo meglio di un prodotto commerciale: LibreOffice, decisamente meglio di Office, anche se potrebbero migliorarlo in termini di interfaccia.

    Quindi, ritornado all'ovile, era solo una battuta!
    Che te la prendi a fare?

    E giusto per concludere: Open Source non vuol dire gratis, come invece viene interpretato da quelli che si vantano di utilizzare prodotti Open Source. Dovrebbero avere l'onesta' di dare un ragionevole contributo. Immaginarsi ...
  • Re: Cosa sono le api?

    In effetti mi sfugge perchè molti si debbano sempre schierare verso l'open source o verso i prodotti commerciali... e chi è da una parte disprezza l'altra.
    Io lavoro preferibilmente in ambiente Microsoft e ritendo che Visual Studio sia un IDE eccellente.
    Detto questo, non sento ribrezzo ad aprire Eclipse e lavorare con PHP.
    Certo se metto a confronto i meccanismi di ricerca full text di MySQL rispetto a SQL Server mi viene da ridere. Se però ho necessità di tenere conto del rapporto performance/risorse hardware consumate apprezzo sicuramente MySQL.

    A proposito, giusto per metterci una ciliegina sulla torta.
    Avete notato che IProgrammatori.it è realizzato in tecnologia Microsoft .Net tranne il forum che è in PHP?

    E perchè? semplicemente perchè il progetto PHPBB (e viene qui la community open source) è uno tra i migliori sistemi di forum attualmente esistenti, quindi ho reputato giusto utilizzarlo.
  • Re: Cosa sono le api?

    Ovvio: e' come la religione! Assolutismo.

    Windows o Mac (ed il terzo incomodo Linux)?
    iPhone o Android (ed il terzo incomodo Windows Mobile 8 o come si chiama adesso)?
    C++ o Java?

    Per esempio mi e' capitato di parlare con un ragazzo riguardo alle strategie di allocazione della memoria: io sono a favore del GC, ovviamente dove serve. Lui no: assolutamente gestione manuale (siamo in ambiente C++). Il GC? Bruuuuuutta cosa. Il Diavolo!!!!!!!

    Ovviamente non e' vero per certe tipologie di applicazioni, che allocano miliardi di piccoli oggettini, o dove le strutture dati sono pesantemente interconnesse tra di loro. L'esempio che mi viene sempre in testa ono i CAS (Computer Algebra System) oppure il LISP (da dove nasce il GC tra l'altro). Gestire puntualmente le allocazioni sarebbe un suicidio. E visto che la maggior parte dei linguaggi di ultima generazione (Java, C#, Python, PHP, Ruby, Perl, ...) sono basati su GC non fa rifflettere?

    Ovvio che nell'implementazione di un driver di rete un GC non ha senso. Ma questo non implica che il GC non abbia senso sempre!

    Come al solito: per poter apprezzare o disprezzare una tecnologia o una qualunque cose, si dovrebbe avere almeno una qualche esperienza su quella cosa. E solo poi se ne puo' apprezzare i pregi e disprezzare di difetti.

    Io ho avuto delle pessime esperienze con l'OpenSource. Non mi piace. Ma non vuol dire che non comprenda le ragioni o non conosca anche dei pregi.
  • Re: Cosa sono le api?

    No, non me la sono presa, non ho l'età per prendermela per così poco ...

    E' solo una questione di principio. Si leggono troppo spesso su internet stupidaggini su Microsoft (come Winzozz ad esempio) solo perché sono ritenute "battute fighe" da ragazzetti imberbi che non sanno neanche cosa sia un bit. E sinceramente un po' stanca leggere sempre del fatto che Microsoft faccia soldi e che quindi sia il male assoluto.

    Può sembrare una stupidaggine ma non è educativo, soprattutto in forum frequentati da novellini.
    Ma anche in altri ambienti, ambienti influenti, che dovrebbero "indirizzare", la faccenda assume contorni preoccupanti. Si preferiscono tecnologie "nascenti", "traballanti" a Microsoft solo perché si ritiene che Microsoft "costi" ($$$) e il resto no. Ovviamente si finisce per spendere di più e avere soluzioni inefficienti e poco assistite.

    Ci vorrebbe una campagna "educativa" su internet per insegnare a "scegliere la migliore soluzione" non quella "in cui non c'è Microsoft". E secondo me, gli esperti che girano sui forum dovrebbero fare la loro parte.
  • Re: Cosa sono le api?

    Ci vorrebbe una campagna "educativa"
    e QUOTO!
    Un caso che mi ha fatto odiare l'OpenSouce e' stato Python quando sono passati dalla versione 2 alla 3: le incompatibilita' tra le due versioni le ho trovate assurde! Ovviamente non e' l'unico caso.
    Altro esempio e' il dover partire dai sorgenti per poter installare un programma, con i relativi infiniti casini tra versioni di librerie installate, librerie mancanti, librerie mancanti e per cui manca anche la versione usata dal programma, incompatibilita', conflitti tra versioni, ... infiniti tricks per ovviare ala rogna A che pero' se in presenza della rogna B genera anche la rogna C, per cui esiste un'altro trick!

    Con un prodotto commerciale, se qualcosa non funziona, hai qualcuno a cui rivolgerti. Con gli Open Source, hai la Comunity, che non vuol dire nulla, perche' non e' detto che ci sia qualcuno con adeguate competenze in grado di risponderti, ma sopprattutto a tempi stretti.
    Ma miglio questa è la programmazione! oggi hai A e domani hai B a prescindere dall'open o dal commerciale(che a volte quasi non si capisce).
    Scusami ma io che ho dovuto fare del porting di vb6? cavolo è commercialmente abbandonato!
    Xp?
    Ma lo stesso vale per l'open.Non per questo bisogna crocefiggere nessuno!
    Con un prodotto commerciale, se qualcosa non funziona, hai qualcuno a cui rivolgerti. Con gli Open Source, hai la Comunity, che non vuol dire nulla, perche' non e' detto che ci sia qualcuno con adeguate competenze in grado di risponderti,
    Questo la torno a quotare perchè è piu facile trovare un'anima pia che rimane sveglio con te tutta la notte per risolvere un tuo bug prima che la qualsiasi dir si voglia software house risponda ad una per cosi dire "sua stupida domanda",che alla fine anche con loro ti ritrovi con la "loro" comunità! ! !

    Da quando mi trovo a lavorare "seriamente" con linux,mi vien da piangere dover tornare a casa M{casa M è supportato come Mamma Microsoft,dato che non storpia ma in qualche remoto luogo la valorizza.}

    Dato che si è messo Linux tra parentesi vorrei dire una cosa a riguardo,Linux da uno smanettone va alla grande,micidiale,Windows solo se lo "Scracchi" capisci che sei su un enorme "errore sconosciuto in sconosciuto".Ma ognuno ha i suoi punti forza e mentre casa M riesce a districarsi dalle schermate blu nascondendole all'utente e riuscendo in qualche modo a proseguire Linux diventa la morte bianca/nera a seconda della fortuna.La mela? fai solo ciò che vuole lei perciò come fai a sbagliare???(non sottoscrivo perchè l'ho usato veramente poco).

    Denigrare questo o quel prodotto quindi è una brutta pratica.




    Tornando alle api,,,quando penso a loro oltre alla battuta che anche a me è venuta in mente,mi vien da pensare sempre e solo al set di funzioni che Windows mette a disposizione dei linguaggi di programmazione.
    E non intendo il framework .Net ma le chiamete "dirette" alle librerie del sistema operativo.
    Cosa che su Linux viene chiamata una System Call.
    Per distinguere le due reali differenze vorrei OSARE nel semplificare le due cose:
    1)Windows lo paragonerei ad un microprocessore cisc,ovvero un set di comandi che permette di fare tutto
    2)Linux ad un risc ovvero hai poche funzioni che ti fanno interaggire al sistema.
    Questo comporta che se su Windows ho l'api che mi fa connettere ad un server e invia le richieste html su linux ho un complesso set di istruzioni chemi permette di farlo ma alla fine avrò una libreria(open source) quale libcurl che mi permette di eseguire le medesime funzioni,interfacciandosi al sistema in maniera corretta e semplificandomi la vita.

    Tuttavia le api rimangono un set di funzioni che un "applicativo" rilascia per essere sfruttato al meglio.
    O al massimo un ricordo di qualche puntura dolorosa.
  • Re: Cosa sono le api?

    Sinceramente ho sempre usato Windows e prodotti Microsoft. Da 3 anni a questa parte ho abbandonato completamente i prodotti MS e quando mi capita di usare il pc di mia mamma (Windows 7) per più di 10 minuti, puntualmente mi innervosisco per qualche motivo.

    In quanto alla domanda iniziale:
    "http://2.228.158.60/perdasdefogu/images/11151761-ape-con-un-cucchiaio-di-miele.jpg"

    Ora mi sento fiero

    Per la risposta seria consultare il "Migliorabile 2.0"
Devi accedere o registrarti per scrivere nel forum
12 risposte