Ho letto numerosi articoli su "che cos'è un'API", ma per me sono di livello troppo alto o due di basso livello ... Non riesco a capire abbastanza l'intero concetto, o ho quella sensazione furtiva che mi "mi manca qualcosa di grande"
Capisco che una API esponga funzioni che aiutano a "parlare" con un backend più complesso ... cioè l'API di Google ti consente di creare mappe di Google sul tuo sito web, oppure API OpenGL ti aiuta a disegnare la grafica senza dover parlare direttamente al tuo video driver della scheda.
E capisco (penso) il concetto di una "API astratta" che fornisce una sorta di guida per gli sviluppatori per creare software, ad es. un RobotAPI potrebbe avere funzioni per MoveForward (Velocità), TurnLeft (Gradi) ecc. e una comunità di costruttori di robot potrebbe tutti voler utilizzare quel RobotAPI.
Ma quello che non capisco è l'implementazione ... Diciamo che c'è un'applicazione chiamata "ComplexApplication" ed è scritta in C
Qualcuno vuole usare ComplexApplication e non ha accesso o non può essere disturbato a imparare il codice sorgente ... e vogliono usare Python per costruire "PythonApplication". Poi qualcun altro ha lo stesso problema ma vogliono usare Java per creare "JavaApplication"
Capisco (penso) che un'API possa funzionare come una "via di mezzo", ma mi sembra che ci debbano essere due API: una per lo sviluppatore Python da usare e una per lo sviluppatore Java usare. Sembrerebbe che l'API venga fornita come modulo Python o come modulo Java, quindi ciascun programmatore può utilizzare l'API inviando / ricevendo dati ai metodi / membri definiti da tale API. Entrambe le implementazioni Python e Java dell'API condivideranno la stessa definizione dell'API astratta ... stesse funzioni ecc ... ma il codice sarebbe diverso: è corretto? Quindi, tuttavia, ciascuna funzione parla con ComplexApplication, non è importante ... cioè scatola nera, progettata da ComplexApplication folk
Suppongo anche che in alcuni casi (come le mappe di Google) l'API possa essere flessibile ... sembra che alcune API siano solo formati di dati XML o JSON, e si prevede che tu possa inviare / ricevere dati usando protocolli comuni come HTTP etc?
Sono sulla strada giusta qui? Sembra che nell'implementazione di un'API, dovresti a) creare un'API separata per ogni lingua con (idealmente) esattamente la stessa funzionalità oppure b) utilizzare un comune protocollo "go between" che tutte le lingue hanno un'implementazione esistente per
Da quanto so di OpenGL (non molto), si tratta di un'implementazione dell'AP specifica per C: esistono implementazioni Java ma credo che si limitino a "avvolgere" la stessa API C piuttosto che essere qualcosa che faciliti effettivamente le chiamate da Java direttamente al scheda video?
Ho solo la sensazione che ci sia qualcosa su come possono interagire linguaggi di programmazione diversi che rimuovono la necessità di API specifiche per la lingua?