「アプリケーションプログラミングインタフェース」の版間の差分
Marine-Blue (会話 | 投稿記録) m Mozillaのリンク先をFirefoxに変更、Firefoxのほうが普及しているため |
m →APIの例 |
||
39行目: | 39行目: | ||
==APIの例== |
==APIの例== |
||
*[[パーソナルコンピュータ|パソコン]]の[[Basic Input/Output System|BIOS]]コールインターフェイス |
*[[パーソナルコンピュータ|パソコン]]の[[Basic Input/Output System|BIOS]]コールインターフェイス |
||
*さまざまな[[アプリケーションソフトウェア]]の[[Document Object Model]](例えば[[ |
*さまざまな[[アプリケーションソフトウェア]]の[[Document Object Model]](例えば[[HyperText Markup Language|HTML]]) |
||
*The Single UNIX Specification |
*The Single UNIX Specification |
||
*[[POSIX]] |
*[[POSIX]] |
2007年2月1日 (木) 08:55時点における版
API(アプリケーション・プログラミング・インターフェイス、Application Programming Interface)とは、アプリケーションから利用できる、オペレーティングシステムやプログラミング言語で用意されたライブラリなどの機能の入り口となるものである。主に、ファイル制御、ウインドウ制御、画像処理、文字制御などのための関数として提供されることが多い。
APIの利用
APIを使うことでコンピュータソフトウェアが他のソフトウェアと広義の意味で通信しあうことができる。また低レベルな(機械寄りのプログラム言語を使う)ソフトウェアと高レベルな(人間寄りのプログラム言語を使う)ソフトウェアの間の関係をより抽象化するための方法である。APIの目的の一つは、ウィンドウやアイコンを描画するというような共通して使える機能(関数)を提供することである。そのような機能を使えば、プログラマーが一から百まで全部コーディングしなくても済むようになる。API自身は抽象的なものだが、APIを提供しているソフトウェアはそのAPIの実装と呼ばれる。
例えば画面に「Hello World」と表示させる仕事を考えると:
- 全部自分でやろうとすると
- 画用紙に「Hello World」という文字を書く。
- それを白と黒の四角いマスで表現したデータを作る。
- CPUがそのデータをディスプレイアダプターのフレームバッファに格納するプログラムを作成する。
- グラフィックカードを設定して、フレームバッファから正しく信号が生成されるようにする。
- オペレーティングシステム(OS)を使うと
- OSの機能を使うアプリケーションを使うと
- 「Hello World」と書いたHTMLドキュメントを作成し、Mozilla FirefoxやInternet Explorerなどのウェブブラウザに表示させる。
明らかに最初のやり方は手間がかかり、加えて相当な量の情報を渡さなくてはならないため実用的ではない。下に行くほどより簡単になっており、3つ目のやり方になると、「Hello World」とタイプすればいいぐらいの手間になる。
しかし高レベルなAPIには柔軟性がないことがある。例えばウェブブラウザで文字を点滅させながら円を描くように回転させることは難しいが、低レベルなAPIを使えばもっと簡単に実現できる。APIの簡潔さをとるか柔軟性をとるかは十分にトレードオフを考慮する必要がある。
APIの概念
APIは家の電気と同じようにコンピュータにとって非常に重要である。自分の家だろうが、友人の家だろうが、パンを焼きたい時にはトースターをコンセントにつなぐ。これはどちらの家でもコンセントという標準化されたAPIを備えているからである。もしコンセントがなければ、人は発電所までトーストを焼きにいかなくてはならなくなる。ヨーロッパのトースターは変圧器がなければ、アメリカでは動かないのと同じように、Windows用に書かれたプログラムは、WineなどのUNIXとの仲立ちをしてくれるAPIアダプターがなければUNIX上では動かないし、同様にUNIX用に書かれたプログラムはCygwinなどのソフトウェアを用いないとWindows上では動作しない。
APIにはさまざまな設計モデルがある。実行速度を考慮したインタフェースは通常、関数、プロシージャ、変数やデータ構造から構成される。また例えばECMAScriptの構文を解析するためのインタープリタであることもある。良いAPIはブラックボックスであり、良い抽象化層であると言える。すなわちプログラマーはそのAPIの機能がより低レベルのAPIとどんな関係をもっているのかを知る必要がないのである。それはまた、そのAPIを使用しているコードを壊すことなく、APIの機能を再設計したり、改良したりすることを可能にしている。
APIの公開に関しては2つの一般的な方針がある。
- 自社のAPIを厳重に秘匿する。
- 自社のAPIを広く普及させる。
使用料などを求められないAPIを「オープン」なAPIと言う。フリーソフトウェアで提供されるAPIはオープンなので、誰でもソフトウェアのソースを見たり、APIの実装を理解することができる。普通は、信頼ある組織からAPIの「リファレンス実装」が提供される(例えばWindowsのWindows API)。それに新たな機能を追加することもできる。例えば、Windows APIのほとんどはWineというソフトウェアとしてUNIXシステムに提供されている。
互換性のためのAPIを作成するためにそのAPIの実装を解析することは一般的に合法である。この手法は相互運用性のためのリバースエンジニアリングと呼ばれる。しかし法律的な面ではあいまいな部分があるので、リバースエンジニアリングする前に十分注意して法的な検討もする必要がある。例えば、使おうとしているAPIに、特許保持者の許可がなければ使えない特許技術が許可なく含れていたら、それは違法になってしまう。
APIの例
- パソコンのBIOSコールインターフェイス
- さまざまなアプリケーションソフトウェアのDocument Object Model(例えばHTML)
- The Single UNIX Specification
- POSIX
- Iconv
- マイクロソフトの Windows API
- サン・マイクロシステムズのJava 2 Platform, Enterprise Edition
- SCSI用の共通プログラミングインターフェイスASPI
- Mac OSおよびMac OS Xの Carbon と Cocoa API
- SNMP(ネットワーク管理プロトコル)
- UPNP(ユニバーサルプラグアンドプレイ)
- CORBA
- Video for Windows