前号: No 245 / 次号: No 247 / 一覧に戻る

メールマガジン「がんばりすぎないセキュリティ」No246 (22/02/14)

No246 APIとは何ぞや?


プログラマの世界では、API(エーピーアイ)という言葉が頻繁に使われます。

プログラムが既存のパーツやツールを呼び出すときのルールのことを言います。

最近では、これをインターネット上に広げたWebAPI(ウェブ=エーピーアイ)を使う頻度が上がっています。これも意味合いは同じで、自分のプログラムから他のパーツを使う時のルールです。

ですが、プログラマでもない普通の人にはあまり縁のない世界ですので、イメージが浮かばない方も多いと思います。

今回はこのAPIについて解説します。


1. Application Program Interface

APIというのは、Application Program Interfaceの略で、「アプリケーションプログラム用の呼び出しルール」という意味になります。 その語源はよくわかりませんが、もともとはMicrosoft社(Windowsの開発元)が1990年頃に使い始めたもののようです。 現在はAPIという用語が一般化しましたが、それ以前はシステムコールやファンクションコールなどと異なる呼び方を使って今した。 ですが「呼び出しルール」って何のことでしょうか? 一体プログラムの中から「呼び出す」って何を? 今回はこのあたりの事情を解説します。

2. OS(オーエス)というもの

コンピュータの中ではいろんなプログラムが動いています。 そのベースには「基本プログラム」があります。これは少々古い言い回しで今ならOS(オーエス)というのが一般的です。 そう、WindowsやMacOSといったやつですね。サーバでよく使われるUNIX(Linuxなど)もOSの一つです。 このWindowsやMacOSの中身というのは、一つの大きなプログラムではなく、小さな内部プログラム(コンポーネント)の塊です。そういった内部プログラムの規模はまちまちですが、各機能の専用プログラムです。 その代表的なものとしては、画面上のウィンドウを管理するコンポーネント、有線LAN接続や無線LAN用のネットワーク機能コンポーネント、USB、Bluetoothといった周辺機器用のコンポーネント、日本語入力のコンポーネントなどがあります。 また、メモリ、拡張スロット、ハードディスクといった外からは見えない内部パーツ用のコンポーネントもあります。 皆さんが日常的に使っているExcelやChromeといったプログラムでも、OSが提供する様々なコンポーネントを使って動いているのです。 コンピュータの中にはこのように大小とり混ぜて何百ものコンポーネントが同居し、各プログラムは必要に応じてこれらのコンポーネントを自由に使えるのです。

3. だからAPIが必要になった

各プログラムからコンポーネントを使うとなると、やってほしいことをお願いするための仕組みなりルールなりが必要です。 このルールのことをAPIと呼ぶのです。 呼び出し方法といっても、プログラムを作ったことのない方にはイメージがわきづらいと思います。 例えとしては少々ムリがありますが、公共設備の利用申請などに似ています。 書類の場合は、役所などで必要事項を穴埋めして提出すれば利用権が得られます。 APIの場合は、コンポーネントの利用したい機能を指定して、必要事項(そのAPIで実行してほしい内容や条件。パラメタ)を指定してそのコンポーネントに依頼をします。 役所などでは部署や用途によってまったく違う書式の書類であったり、そもそも書類以外の方法での提出が必要だったり、添付書類が必要だったりと非常に複雑ですが、APIの場合は呼び出し方法はかなり統一が取れています。 これはOSの内部にはAPIの取りまとめをするコンポーネントがあり、そこが一手に引き受けているためです。 また、APIの場合、役所の書類以上に条件指定が大切です。 例えばWindowsでは(画面に)ウィンドウを作るAPI(CreatWindowW)があります。 このAPIでは、表示位置、ウィンドウサイズ、親ウィンドウの有無、メニューの有無、ウィンドウのタイトル、スタイル(サイズ変更できるか?重なり具合はどうするか?など)、などの多数のパラメタが必要となります。 こういった情報を正しく与えることで、ウィンドウ管理コンポーネントはウィンドウを作るというわけです。

4. ではWebAPIは?

このようにコンポーネントに何かをお願いすることをAPIと呼ぶようになったのですが、それのインターネット版といえるのがWebAPIです。 これは、インターネット上のサーバに何かをお願いすることを目的とした呼び出し方法のことを言います。 例えば、鉄道の経路検索で有名な「駅すぱあと」ではWebAPIが提供されています。 もちろん、ヒトが使うのであれば、駅すぱあとのサイトをそのまま使えばよいのですが、結果を別画面に表示したり、その情報をメールで送ったりしたいとなると、いきなり難しくなります。 というのは、プログラムから見ると、通常のWebページには余計な情報が多すぎるためです。目的の情報(例えば出発時刻)を得るには、広告や装飾情報をすべて除外し、目的の情報を抜き出すためのプログラムが必要です。 しかも、サイトがリニューアルされると、抜き出すべき場所が変わりますからプログラムの改修が必要です。 一方、WebAPIの場合、帰ってくる情報は最初から必要最小限なものに絞られており、非常に簡単に検索できるような構造になっています。 また、サイトの改修を行った場合でも、追加になった付加情報は既存の記述ルールに影響しないようにしておくことで、既存のプログラムは何もしなくても続けて利用できます。 WebAPIの場合は、依頼をする時は通常のWebページにアクセスするのと同じようにURLと必要なパラメタを指定します。 依頼を受け取ったサーバは処理結果をプログラムで解析しやすい形(JSONやXMLといった形式)で返します。 こうしておくことで、受信した結果を処理するプログラムも容易に作成できるようになります。 「これって数回前に書いてあったAJAXの話みたいだなぁ」と思われた方、大正解です。 まさにAJAXではこのWebAPIという技法を使って画面の一部書き換えを実現する手法のことを示しているのです。

5. まとめ

APIという用語はかなり古くから使われているもので、WindowsなどのOSの機能(コンポーネント)を利用するために今も広く使われています。 プログラマにとっては、WindowsやMacOSが提供してくる機能を使わなくては、アイコンひとつ表示することすらできません。 しかも、Windows、MacOS、UNIXとOSによってAPIの呼び出し方はまったく違うため、いろんな環境で動作するプログラムを作るのはかなり大変な作業です。 他方、WebAPIという呼び方が最近は多くなってきています。 こちらは名前の通り、インターネット上で何らかのサーバの機能を呼び出すことを言います。 一見は、通常のURL(https:...で始まるアレ)と何も変わりませんが、帰ってくる答えはキレイなWebページではなく、XMLやJSONといった文字だけのデータであることが通常です。 最近はWebAPIで、いろんな情報を取得できるサービスが提供されています。 ショッピングサイトの商品検索、乗り換えなどの経路探索、書籍検索などが代表的なものですが、システムに固有のものや非公開のものもたくさんあります。 今回はAPIとWebAPIについて解説しました。 次回もお楽しみに。 (本稿は 2022年2月に作成しました)

前号: No 245 / 次号: No 247 / 一覧に戻る