この記事は GMOアドマーケティング Advent Calendar 2023 14日目の記事です。
2023/12/19: APIの種類についての記述で指摘がありましたので、修正しました。コメントありがとうございます。
お久しぶりです、GMOアドマーケティングの天河です。
今回は、非エンジニア、駆け出しエンジニア、そして特に「APIの意味を定期的に調べに来てしまう人」向けに、API について書きました。
ところでみなさん、「API」の意味 を調べるときに
「APIの意味ってなんだろう…
『あぷりけーしょんぷろぐらみんぐいんたーふぇーす』?
ソフトウェアやプログラム、Webサービスの間をつなぐインターフェースのこと…
わかったようなわからないような…」
――― 1ヶ月後 ―――
「APIの意味ってなんだったっけ?『あぷりけーsy
となった経験ありませんか? 天河がそうです。
この「API」っていう単語、頻繁に「そういやAPIってどういう意味?」となり、そのたび調べては
・アプリケーションをプログラミングするためのインターフェース
・ソフトウェアアプリケーション間での情報や機能のやり取りを可能にするインターフェース
と書いているのを見て「どういうことだってばよ!」となるわけです。
理由なんですけど、そもそもAPIという概念自体、定義一発で説明+理解することがすごく難しいんですよね。APIを取り巻く全体像をイメージしたほうがスッと理解できると思います。
今回はそのAPIについて
・APIのイメージ
・実際のAPIの例や種類
・REST API って?
の3つのポイントで解説したいと思います。
API のイメージ
まずは例え話からイメージしていきましょう。テレビの例で説明します。
みなさんはテレビを観るとき、まず電源をつけますよね。そしてそこから観たい番組のチャンネルボタンを押す。そして電源を消す。などなど。
このテレビが自分では開けることのできないショーケースの中にあります。しかしあなたは運悪くリモコンがどこかに消えてしまいました。あなたはこれでテレビを観ることはできますか?
無理ですよね。
数分間かけて部屋を探し回ったあなたは、やっと「リモコン」を見つけました。リモコンがあれば、テレビを操作することができますよね。
あなたはリモコンを持ってるので、直接触って操作できないテレビの電源をつけたり、チャンネルを変えたりすることができるようになりました。
APIも似たようなもので、このリモコンみたいに 普通は直接いじったり触ったりできないところに、できることを限定してアクセスできるように提供されているツール/手段 が API のおおざっぱな概念です。
今度は実際に使われているAPIを元に説明をします。世の中にはいろんなAPIが溢れていますが、ここでは WEB API である Twitter API を例に挙げて説明します。
Twitter APIの例
Twitter APIは、X(元Twitter)に関する情報を取得するための WEB APIです。
みなさんは X から情報を取得したい時がありますよね。他の人のプロフィール情報だったり、いいねの数だったり。
しかし、みなさんの中に悪い人がいて、Xのサーバから直接情報を取得しようと試みようとするかもしれません。それをされると、取られたくない情報も取られたりする恐れがあります。なのでサーバから第三者が直接データを取得できないようになっています。
これが先ほどの例えでテレビをショーケースに入れた理由です。サーバも悪意のある第三者から守らないといけないですからね。
では、どうやって X からデータを取得するのか。ここでやっと Twitter API が出てくるわけです。
X 側は Twitter API をユーザに提供し、API を通じて X の情報にアクセスするための手段が提供されます。例えで言う、リモコンが提供されます。
Twitter API を利用することで、ポストを検索したり、リポストしたユーザ一覧の取得ができます。
ポストの検索で例を挙げると、
1 |
https://api.twitter.com/2/tweets/1460323737035677698 |
のように、URLの一部に 1460323737035677698
とポストのIDを指定することで、ポストのデータを取得することができます。クエリパラメータを付与すれば、追加で情報を取得できます。
サンプル
1 2 3 4 5 6 7 8 9 |
{ "data": { "id": "1460323737035677698", "text": "ポストの内容だよ", "edit_history_tweet_ids": [ "1460323737035677698" ] } } |
いいね自動付与機能や、リポストしてくれたユーザの取得機能など、様々なAPIが提供されています。(詳しくは公式リファレンスを見てください。)
インターネッツにはこのTwitter API 以外にも本当にいろんなAPI で溢れています。探してみると面白いですよ。
HTTP Cats: HTTPステータスコードに合わせた猫の画像を生成するAPI
このAPI、何が嬉しいかと言うと、
使っている側はAPIの裏側で何が行われているかについて全く知らなくても、APIの使い方さえわかっていれば、好きなプログラミング言語を利用して情報を取得できる
ことです。
テレビの例に戻ると、リモコンを使う時、別にリモコン内部の構造を知らなくても、「電源ボタンを押せば電源が点く」といったふうに、基本的な使い方さえ知っていればリモコンを操作できますよね。APIもそうで、使い方さえ知っていたらURLを叩けばデータが取得できるわけです。
では最後に「どこで」このAPI を使うのでしょうか。
APIを使うのは「コードの中で」です。
APIの使用例として、PythonだったりJavaScriptでの使用例が載っているでしょう。
それは、このAPIをコード上で利用するからです。だから API = Application 「Programming」 Interface なのです(実装するのは我々ですが)。
ここまでの説明を聞いた上で、改めてAPIの意味について説明すると、
あるアプリケーションの機能や管理するデータなどを、アプリ外にあるプログラムから呼び出して利用するために提供されているツール。そこではデータ取得のためのコーディング手順や取得後のデータ形式が定められている。APIは異なるシステム間の互換性や連携を目的としている。
ということになります。
これでAPIの意味についてまた調べることは無くなったのではないでしょうか。
APIの種類
APIには、以下の種類があります。
種類 | 説明 |
Open API | 一般に公開されており、外部の開発者によるアクセスが許可されているAPI |
Partner API | 特定のビジネスパートナーに限定して提供されるAPI(LINE, Amazonで確認) |
Closed / Internal API | 外部に公開していないAPI。サービス開発では大体これを作っている(と思う) |
Composite API | 一つのAPIで複数のサービスにアクセスできるAPI |
使用目的、アクセス可能性、提供する機能によって種類が決められていますが、どれも共通するのは、異なるシステム間の互換性や連携が行われていることですね。
WEB API はどこに該当するでしょうか。もちろん、Open API です。
Open API の中にもデータの取得方法が色々ありますが、その中でも WEB API はHTTP/HTTPS リクエスト、つまり「URLを介してアプリのデータにアクセスできる」 API です。API と聞いて URL を思い浮かべる方も多いではないでしょうか。
URLということで curl で呼び出せます!だから好きなプログラミング言語上で WEB API を呼び出すことができます。Twitter API の例でも、複数のプログラミング言語での実装例が掲載されています。
ちなみに「APIとは?」で検索すると出てくる、APIの種類として挙げられる「Java API」はAPIでしょうか?
名前に API という単語が含まれていますが、実際にはライブラリの一種です。
ライブラリとは、プログラム内で直接呼び出して使用するコードの集合体であり、APIの用件である「異なるシステム間の互換性や連携」の観点で考えると違いますね。
(@a-kuma3、ご指摘ありがとうございました!)
RESTful API とは?
WEB APIの「設計思想」です。たまに WEB API と RESTful API を混同されている方が見受けられますが、WEB API はインターフェースなのに対して、REST はアーキテクチャ(=設計思想)です。RESTful API はその REST を満たしている WEB API のことです。
RESTとは「Representational State Transfer」の略であり、よいWEBサービスを作るための設計思想です。
言葉そのものの意味を理解するより、「RESTであるとは何か」を確認しましょう。
RESTの条件 | 意味 |
インターフェースが統一されている | データの操作は 「URIとHTTPメソッド(GET, POST, PUT, DELETE)」 という同じインターフェースを使用する |
ステートレスである | リクエストに必要な情報を毎回全て送る |
リソース指向である | URI を見ればどの情報(=リソース)にアクセスできるかわかるようになっている |
キャッシュ可能である | レスポンスに含まれるデータのキャッシュ可否をクライアントに伝えられる |
クライアント / サーバが分離している | クライアントは サーバに対してURI でリクエストを送る事のみで関与し、サーバはクラアントに対してレスポンスを返す事のみで関与する |
階層型のシステムになっている | クライアントとサーバの2層に加えて、その2層の間にロードバランサやプロキシなどの層を挟んで設計する |
その他にも、
- リソースの表現にハイパーメディア(JSON, HTML, XML, バイナリなど)を使用する
- サーバから配布されたプログラムをクライアントで実行する
などがありますが、上記の表の6つのREST条件を満たしていると「RESTfulである」と言います。
WEB API をどう設計するかの思想の一つが、REST(Representational State Transfer)で、そのREST を満たしている WEB API のことを RESTful API ( ≒ REST API)と呼ぶだけです。
おわりに
「API」と一口に言っても、使われる文脈によってAPIの意味は変わります。専門用語を見たら「この言葉/単語 はどの意味で使われているんだろう」と意識することは心がけましょう。
ここまで読んだあなたは、APIについて完全に自信ニキとなり、もう二度とAPIの意味について調べることがなくなったことでしょう。
お役に立てれば幸いです。よかったらはてブください(おねだり)
↓ APIについてもっと知りたい方
クライアントサイド Web API: mdn web docs
明日はT.Nさんによる「Java 21のSequenced Collectionsのreversedの実装について」です。
引き続き、GMOアドマーケティング Advent Calendar 2023 をお楽しみください!
■エンジニア採用ページはこちら!
https://recruit.gmo-ap.jp/
■GMOアドパートナーズ 公式noteはこちら!
https://note.gmo-ap.jp/