APIとは

APIとは

ラス APIの頭字語は、ソフトウェアに関する記事を読んだときにXNUMX回以上見たことがあるでしょう。。 しかし、APIが実際に何であるかを誰もが知っているわけではありません。 そのため、この記事でそれを明確にします。 最初に言うことは、それらはApplication Programming Interfaceの頭字語、つまりスペイン語でApplication ProgrammingInterfaceであるということです。 そして、プログラミングについて何か知っている人の間でさえ、多くの場合、それは混乱を引き起こします。

たとえば、Arduinoには独自のプログラミングAPIがあり、Arduino IDEまたはその他の環境で使用して、マイクロコントローラーをプログラムしてプロジェクトを作成できるようにするための多数の関数を提供します。 でも...教えてくれませんか プログラミングライブラリとAPIの違い? フレームワークとAPIに違いはありますか?APIはABIと同じですか? おそらく混乱を引き起こし続けていること、そして私たちが今明らかにしようとしていることには多くの疑問があります。

あなたがそれを知っているかどうかはわかりません 低水準言語、アセンブラやASMのように、それらはハードウェアアーキテクチャに直接依存し、高レベルのものはプログラマのタスクを容易にするためにハードウェアから抽象化しますが、オペレーティングシステム(システムコール)や特定のAPIなどに依存します。 これがすべてあなたにとって中国語のように聞こえないように、それが何であるかを見てみましょう...

APIとは何ですか?

A APIは、開発者に提供されるツールです。 そのため、既存のライブラリを介して使用できるOOPの一連の関数、サブルーチン、プロシージャ、またはメソッドを自由に使用できます。 APIが提供するものの中には、単純なアプリを作成する関数、AIに関連する関数、グラフィックの生成、ハードウェアリソースの管理などがあります。

たとえば、よく知られているAPIは、Linuxがglibcライブラリを介して提供しているもののように聞こえるか、グラフィックスのように聞こえると思います。 OpenGLとVulkan、またはOpenCLのような他のもの ヘテロジニアスコンピューティング用、仮想現実および拡張現実用のOpenXRなど。 他のオペレーティングシステムやソフトウェアにも独自のAPIが含まれているため、他のプログラマーはそのシステム用のアドオン、プラグイン、モジュールなどを作成できます。

Arduinoの例

バッジをお持ちの場合 ArduinoとあなたはArduinoIDEを頻繁に使用しますが、 またはArduinoの他の開発環境では、コードを作成するときに、複数のオプションを使用してマイクロコントローラーに一連のアクションを実行するように指示することがわかります。 たとえば、pinMode()はArduinoピンを構成するための典型的な関数ですよね?

あなたが書くとき pinMode(9、INPUT)たとえば、Arduinoボードのピン9が入力として機能する必要があることを示しています。つまり、マイクロコントローラーは、情報がそのピンから入力されて読み取られ、アクションを実行するのを待機します。 しかし、彼がそのコマンドをどのように理解できるのか疑問に思ったことはありますか?

さて、Arduinoには 私たちが利用できるようになった開発API。 このブログの多くの例で見たように、サードパーティのライブラリをこのAPIに追加できます。 特定のセンサーなどのSparkFunのように。 これらすべてで、関数はArduino IDEに入力でき、コードを適切に変換してマイクロコントローラーのメモリにロードし、処理できるようにします。

このAPIがない場合は、Arduino用のこれらのプログラムをこのような簡単な方法で作成することはできません。ATMega328Pマイクロコントローラーのアセンブリコードで作成する必要があるためです。 AVRアーキテクチャ用のASM。 そして、このISAで利用可能な命令を直接使用する必要があるため、これははるかに複雑になります。 その場合、そのISAのレパートリーだけでなく、登録数などの他の側面も十分に知っている必要があります。 つまり、作業しているハードウェアについての低レベルの知識が必要です。

POR 例、ASMコード LEDがループで点滅するために生成する必要があるものは次のとおりです。

<br data-mce-bogus="1">

.ORG 0x0000
; the next instruction has to be written to
; address 0x0000
rjmp START
; the reset vector: jump to "main"
START:
ldi r16, low(RAMEND) ; set up the stack
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, 0xFF
; load register 16 with 0xFF (all bits 1)
out DDRB, r16
; write the value in r16 (0xFF) to Data
; Direction Register B
LOOP:
sbi PortB, 5
; switch off the LED
rcall delay_05
cbi PortB, 5
; wait for half a second
; switch it on
rcall delay_05 ; wait for half a secon
rjmp LOOP ; jump to loop
DELAY_05:
; the subroutine:
ldi r16, 31
; load r16 with 31
OUTER_LOOP:
; outer loop label
ldi r24, low(1021) ; load registers r24:r25 with 1021, our new
; init value
ldi r25, high(1021) ; the loop label
DELAY_LOOP:
; "add immediate to word": r24:r25 are
; incremented
adiw r24, 1
; if no overflow ("branch if not equal"), go
; back to "delay_loop"
brne DELAY_LOOP
dec r16
; decrement r16
brne OUTER_LOOP
ret
; and loop if outer loop not finished
; return from subroutine

つつ APIのおかげで、設備は完全です、 次の同等のコードを高レベルで記述します(はるかに短く、より直感的です)。

<br data-mce-bogus="1">

int ledPin = 13; 		// LED que se encuentra en el pin 13
   void setup(){ 
   pinMode(ledPin, OUTPUT);	// El p1n 13 será una salida digital 
} 
void loop(){ 
   digitalWrite(ledPin, HIGH);	// Enciende el LED
   delay(1000); 				// Pausa de 1 segundo 
   digitalWrite(ledPin, LOW); 	// Apaga el LED 
   delay(1000);				// Pausa de 1 segundo 

ABIとの違い

APIとLinuxABI

ABIはあまり知られていない用語であり、 アプリケーションバイナリインターフェイス、または英語のアプリケーションバイナリインターフェイス。 この場合、これはプログラムのモジュール間のインターフェイスであり、通常は、SPARC、AMD64、ARM、PPC、RISC-Vなどのアーキテクチャのライブラリまたは機械語オペレーティングシステム間のインターフェイスです。

ABIのおかげで、関数を呼び出す方法が決定されます。 バイナリ形式 コンパイルするマシンやシステムコール、例外の処理方法、データの受け渡し方法などを理解できます。

フレームワークとの違い

Un フレームワークまたはフレームワークは、より多くのツールのセットです 特定のプロジェクトの開発を支援するために自由に使用できます。 名声は通常、いくつかのコーディング標準を設定し、便利なコンポーネントなどを提供します。 たとえば、JUnitはJavaのフレームワーク、またはPHPのSymfony / Cakeなどです。

SDKおよびNDKとの違い

SDKはソフトウェア開発キットですつまり、ソフトウェア開発キットです。 フレームワークやAPIを超えています。 例としては、AndroidStudioやiOSxCodeなどがあります。 たとえば、最初のものには、Android API自体に加えて、プログラミングとコンパイルのためのIDEまたは統合開発環境、ライブラリ、ツールなども含まれています。

さらに、 NDK(ネイティブ開発キット) それは補足です。 たとえば、Android NDKを使用すると、開発者はC / C ++コードをJNI(Java Native Interface)を介してアプリケーションに導入することで再利用できます...

ライブラリとの違い

Glibc図ウィキペディア

最後に、 ライブラリは再利用可能なソースコードのコレクションです これにより、プログラマーの生活が楽になります。 たとえば、Cライブラリstdio.h内には、画面にテキストを印刷するためのprintf関数があります。 これを可能にするには、オペレーティングシステムにこのタスクを実行させるソースコードが必要です。 しかし、これは頻繁に使用される非常に頻繁なものであるため、そのライブラリを呼び出すだけで、すべてのコードを最初から作成しなくてもprintfを利用できます。 言い換えれば、それらはプレキャストブロックとして見ることができます。

実際、ライブラリとAPIは簡単に混同される可能性があります。 ライブラリはAPI内にラップされています。 例 glibcの...

この後あなたがアイデアを持っていることを願っています API、ABI、フレームワーク、SDK、およびライブラリが何であるかについてより明確になり、今後それらを区別できるようになります。


コメントを最初に

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。