Problemi nella concettualizzazione delle API

2

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?

    
posta Simon 02.08.2016 - 09:03
fonte

2 risposte

4

La wikipage su Interfaccia di programmazione dell'applicazione spiega abbastanza bene quali sono le API.

Spesso le API sono un insieme di dichiarazioni (di funzioni, tipi, variabili o "nomi") fornite da alcune librerie, con la conoscenza documentata su come usarle (compresi alcuni dei loro invarianti e pre e post- condizioni).

Nei contesti web, l'API potrebbe essere un insieme di specifiche richieste HTTP (poiché una richiesta Web HTTP è quasi vista come una procedura remota chiama ), anche con la conoscenza documentata su come usarli.

Si noti che alcune lingue (es. Ocaml) formalizzano una nozione di modulo (e tipo di modulo) dando un po 'di "forma" "dell'insieme di dichiarazioni visibili da loro (e relativi tipi o proprietà di digitazione); ma in genere è ancora necessario documentare (ad es. nei commenti almeno) come utilizzarli. Per alcune considerazioni a riguardo, leggi i Tipi e linguaggi di programmazione di Pierce . Per una panoramica interessante di diversi linguaggi di programmazione, leggi la Pragmatica dei linguaggi di programmazione di Scott

.

Per C e C ++, un'API fornisce anche (in pratica) alcuni set di file di intestazione (che vorresti #include dal tuo codice) dichiarandolo. Probabilmente hai bisogno di capire che cosa fa il linker (ad es. Leggendo Linkers & Loaders ) e quali chiamate alle convenzioni e amp ; ABI s sono. Leggi anche ulteriori informazioni sui sistemi operativi, ad es. Sistemi operativi: tre pezzi facili .

how different programming languages can interact....

Sono le implementazioni del linguaggio di programmazione che interagiscono (dal momento che un linguaggio di programmazione non è un software, ma una specifica scritta in alcuni report, spesso in inglese con formalizzazioni aggiuntive). Leggi informazioni su interfaccia delle funzioni estranee . Un punto praticamente importante è l'interazione tra il garbage collector utilizzato in alcune implementazioni linguistiche (ad es. Python, Ocaml, Schema) e codice C.

Someone wants to use ComplexApplication and either doesn't have access or can't be bothered learning the source code... and they want to use Python to build "PythonApplication".

Quindi qualcuno deve ottenere (o scrivere) il codice colla tra Python e amp; C. Leggi i capitoli su estensione e amp; incorporare l'interprete Python & su Manuale di riferimento di Python C / API .

Un libro di testo del compilatore come il viola Dragon Book potrebbe anche aiutarti a capire in che modo diversi linguaggi di programmazione le implementazioni possono interagire.

PS. Non sono sicuro che le API siano concettualmente importanti, anche se sono tremendamente utili. Sono più una cosa di ingegneria che scientifica.

    
risposta data 02.08.2016 - 09:19
fonte
1

Se si desidera creare un'API multilingue, è probabile che l'approccio più semplice sia quello di scriverlo inizialmente in una lingua, probabilmente C, e quindi scrivere una serie di wrapper sottili per le altre lingue. I wrapper espongono lo stesso insieme di funzioni, solo in una lingua diversa.

C è la scelta più ovvia per l'API di base in quanto molti altri linguaggi hanno i metodi per interfacciarsi ad esso.

    
risposta data 02.08.2016 - 09:36
fonte

Leggi altre domande sui tag