はじめに
API(Application Programming Interface)という言葉はソフトウェア開発の世界でよく耳にする用語であり、さまざまなドキュメントや書籍で頻繁に登場します。
最近では API という言葉はソフトウェア開発者だけでなく、一般のアプリケーション利用者にも浸透しつつあります。
例えば、X(旧 Twitter)を利用している方あれば API 呼び出しの回数制限を超えました
というエラーメッセージを目にしたことがあるかもしれません。「API 制限」という言葉がソフトウェア開発に直接関わっていない人々の間でも使われるようになっています。
API という言葉が広く使われるようになった一方で、その具体的な意味や用途については十分に理解されていないことも多いです。
本記事では、API の基本的な概念から具体的な例までを解説し、API に対する理解を深めていきます。
API とは
API(Application Programming Interface)とは、その名の通り、インタフェースに一種で、広義には「あるソフトウェアが提供する機能を別のソフトウェアが利用する際の、ソースコードレベルの取り決め」を意味します。
さきほど、API はインタフェースの一種と説明しました。インタフェースとは異なる何かと何かを繋げる役割を持つものを意味します。
API ではその何かはソフトウェアです。API は、ソフトウェア同士がやり取りを行う際のルールであり、ソフトウェアを繋げる役割を果たします。
「ソフトウェア同士を繋げる」と一口に言っても様々な段階での連携があります。API はその中でも、ソースコードレベルでソフトウェア同士を結びつける役割を果たします。
以下では、ソースコードレベルの意味について説明し、API の意味をより詳しく掘り下げていきます。
ソフトウェアとは、コンピュータが特定の処理を実行するために必要なプログラムや外部データ、設定などが組み合わさったものです。特にプログラムはソフトウェアの中核となる部分で、コンピュータに対する命令の集まりです。
ソフトウェアの中核を担うプログラムには、ソースコードレベルとバイナリレベルのものがあります。
ソースコードとは C 言語や Rust などのプログラミング言語で記述されたテキスト形式のプログラムファイルです。一方、バイナリコードとは 0 と 1 のビット列で構成され、CPU が直接実行できる形式のプログラムファイルです。
現代のソフトウェア開発では、バイナリコードを直接作成するのではなく、コンパイラを利用してソースコードからバイナリコードを生成する場合が多いです。
API は、バイナリレベルではなく、コンパイル前のソースコードレベル(つまり、プログラミング言語でソースコードを記述する段階)の取り決めです。
以下は TypeScript
で記述されたソースコードです。
このコード内で markdown_to_html
という外部ソフトウェア(ライブラリ)が提供する機能(parser
関数など)を利用する際に従う必要がある取り決め(関数の引数の型や返り値の型など)が API です。
// 外部のソフトウェア(ライブラリ)
import { parser } from 'markdown_to_html';
// function parser(text: string): string{
// let html: string;
// // 中略
// return html;
// }
// 自分のソフトウェア
const text: string = "# What is an **API**?";
//
const html: string = parser(text); // <h1>What is an <strong>API</strong>?</h1>
一方、バイナリレベルでのソフトウェア間の取り決めは ABI (Application Binary Interface) と呼ばれています。
改めて API とは、
- 外部のソフトウェアが提供する機能を
- ソースコード内で利用する際の
- 取り決め
を意味します。
以下では、より具体的なイメージを掴むために API の具体例をいくつか紹介します
API の具体例
ライブラリやフレームワークの API
ライブラリやフレームワークのドキュメントを読んでいても API という言葉はたびたび登場します。
具体的には、jQuery や NumPy などのライブラリのドキュメント、Laravel や FastAPI などのフレームワークのドキュメントで登場します。
API のドキュメントには、ライブラリやフレームワークが提供する関数やメソッド、クラスなどを利用する際の取り決めが記述されています。
重要な点として、API はライブラリ(やフレームワーク)そのものではないということに注意する必要があります。
API はあくまでライブラリを利用する際に従うべき取り決めです。ライブラリの具体的な内部実装の詳細を必要としません。
例えば、NumPy
ライブラリの asarray
メソッドや where
メソッドは、これらのメソッドの中で何が行われているかを理解する必要がなく、メソッドの引数と返り値の型が何なのかの取り決め(つまり、ライブラリの API)を知るだけで利用できます。
import numpy as np
arr = np.asarray([0,1,2])
result = np.where(arr>=2)
この特性により、ソフトウェア間の連携を容易にし、内部の実装が変更されても、API が変更されない限り、既存のコードを修正する必要がなくなるという利点があります。
ブラウザ API
ブラウザ API は、ブラウザが提供する様々な機能を利用するための API です。DOM API や フェッチ API などがその例です。
以下は、JavaScript のソースコード上で DOM の機能を利用する例です。ブラウザ内部の実装を理解しなくても、簡単に HTML と CSS を操作することがきます。
const id = "element_id";
const element = document.getElementById(id);
参考: Web API の紹介 - ウェブ開発を学ぶ | MDN
Web API
今まで紹介した API は、連携するソフトウェアが同じコンピュータ上にあるという前提でした。
一方、Web APIはインターネットを介して、異なるコンピュータ間でソフトウェアを繋ぐことができる API です。
Web API は、インターネットを通じて、外部のソフトウェアの機能を利用する際のルールを意味しますが、その機能を提供するサーバ自体も Web API と呼ばれることがあります。
翻訳機能や決算機能などさまざまな機能を、容易に自分が開発するソフトウェアに組み込むことができます。
おわりに
API は、異なるソフトウェアが連携して動作するための重要な仕組みであり、現代のソフトウェア開発において不可欠な要素です。
本記事で紹介した基本概念と具体例を通じて、API の理解が深まったことを願っています。