プログラミング

“API”をなるべく分かりやすく説明してみる

投稿日:

“API”という言葉が一般にもよく使われ始めています。
しかし、非エンジニアにとっては馴染みのない言葉で、しかも謎の英略語なので、一部の人々からは「APIがなくなった」(=API制限に引っかかった)などの誤用がすでに生じています。

これはよくない、ということで、APIについて平易な説明を試みます。

略語の意味

APIはApplication Programming Interfaceの略です。アプリケーション・プログラミング・インターフェイス、です。
アプリケーションとプログラミングは、少なくとも単語の聞き馴染みはあるかと思います。
インターフェイスというのは、ざっくり「情報をやりとりする部分」という感じの意味です。

つまり、アプリケーションと、プログラミングの間で、情報をやりとりする部分、というのが直訳です。

ざっと言ってしまうと、ある機能における「情報をやりとりする窓口」のことをAPIといいます。

例え話

ここで、アプリケーションを役所と例えます。
役所にはいろんな機能があります。

  • 異動届を出す
  • 印鑑登録をする
  • 住民票の写しをもらう
  • 戸籍謄本をもらう
  • マイナンバーカードを発行する
  • 保険料を納付する
  • 生活保護を申請する
  • 災害見舞金を受給する
  • etc…

例えばあなたが住民票の写しを手に入れたいとします。
どうすれば手に入るでしょう。
役所に行って、入り口に突っ立って大声で「住民票ほしいんですけど!!!!」と叫べば、役所の人が住民票を持ってきてくれるでしょうか。
また逆に、役所の人が使うコンピューターをあなたが直接いじって、住民票のデータをプリントするボタンを押せば良いでしょうか。
そうではありませんね。
指定の窓口に行って、手続きをする必要があります。
これこそがAPIです。役所の窓口はAPIです。
より正確に言えば、「役所にどんな窓口があって、どんなサービスを受けられるか整備してある」ということがAPIです。

これまでのことをコンピュータ的に言い換えると、「役所には市民課窓口APIがあって、市民課窓口APIに『住民票の写し』を請求すると写しがもらえる」のような言い方ができます。
他にも「保険年金課窓口APIに『国保加入申請』を提出すると国民健康保険に加入できる」や、「市民課窓口APIで手続きをしたら、印鑑登録できる」などもあります。

つまり、一つの役所には色々なAPIがあり、それぞれのAPIを介して別々のサービスを受けることができます。
一つのAPIがいろんな情報をやり取りしてくれることもあれば、一つの情報(例えば住民票の写し)をやり取りするAPIが複数ある(例えば窓口と郵送)こともあります。

APIとは、情報をやりとりする方法のことです。役所に行って直接窓口に並ぶこともAPIですし、郵便でやりとりすることもAPIです。
ただし、役所の人間はAPIとは呼びません。あくまで、情報をやりとりする部分がAPIであることに注意してください。

また、役所に提出する書類も、いろんな場所で書類の形式が変わっていたら困ってしまいますよね。
一般的に、「だいたいこういう形式の書類であるべき」というお約束があり、さらにその上で、その役所オリジナルの欄が用意されていたりします。
これは実際のAPIでも同じで、「APIはだいたいこういう形式であるべき」という共通認識があります。

APIと利用制限

さて、APIとは役所の窓口のようなものでした。
では、「APIが利用できなくなる」とはどういうことでしょうか。
答えは簡単です。APIを提供する側(たとえば役所)の都合で、営業時間が限られていたり、利用者が多すぎてお仕事が詰まってしまったり、もしくは、回数制限を付けていたりする、ということです。

APIの利用にどういう制限を付けるかは、提供者の裁量で決まります。

twitter(X)の例

では例え話は済んだので、実例としてtwitterを使った説明をしましょう。
twitterには以下のような機能があります。

  • 自分のタイムラインを見る
  • ツイートを投稿する
  • 他人のプロフィールを見る
  • 他人をフォローする
  • 他人のホームを見る
  • 他人のツイートをリツイートする
  • etc…

さて、ここまで来れば分かりますね。
これらすべてが、何らかのAPI(窓口)によって情報がやり取りされているわけです。

タイムラインを見るにはタイムライン用のAPI、投稿には投稿用のAPI…という風に、すべての機能は何らかのAPIを介して提供されます。

API制限に引っかかる、というのは、「twitterの意向によって、ある時間帯でAPIを使える回数が決まっていて、その上限に達するとAPIがお仕事を拒否するようになる」ということです。
twitterは基本的に無料サービスなので、無制限に利用されると、APIの先にあるサーバーやネットワークに大量のお仕事が生まれてしまってtwitter全体の動作に影響が出てしまうので、上限が決まっているんですね。

ちなみに、twitterのAPIはWebを介した通信によって情報をやりとりするので、これを特にWeb APIと言います。
役所にも窓口と郵送があったように、実際のAPIも必ずしもWebを使うわけではなく、プログラミング言語の関数として用意されるものもあります。

余談

「すべての機能が何らかのAPIを介して提供される」というのは、少し言い過ぎなところがあります。
役所の例に戻りますが、例えば市長さんが自分の市の人口を知りたいと思ったときに、何らかの窓口に並んで申請するでしょうか。
そんなことはせずに、担当の課の人を呼び出して、「ちょっと人口教えてくれ」と一声かければ済む話です。
これは、APIを利用しているとは言いませんね。

一般論ですが、APIとは「お客さん向けに公開されている窓口」のことで、「内部の人の連絡経路」は通常はAPIとは呼びません。
通常、内部向けには、公開されたAPIとは関係ない経路が用意されていて、また、内部向けの経路でしかやり取りできない情報があるものです。

twitterでも、一般論としては、ブラウザや公式アプリを使ってタイムラインを見たりツイートしたりするのは、一般公開されたAPIとは別経路でやり取りされていて、「公式アプリはAPI制限の対象外」となっている…はずだったんですが、今回は公式アプリすら制限されてしまいましたね。

まとめ

APIとは、「お客さん向けに用意された、情報をやり取りする窓口」のことでした。
一つの窓口が色んな情報を扱うこともあれば、同じ情報を複数の窓口でやり取りすることもあります。

-プログラミング

執筆者:

関連記事

YouTube Data APIをGoogle Apps Script(GAS)から使おう

YouTubeってAPIから色々な情報を取ることができるんですよ。 APIの情報はリファレンスにまとまってるんですが、APIキーだのOAuth2.0だの、使い始めるまでがまぁまぁ面倒なんですね。 で、 …

国土地理院の地図データをUnityで読みたい(願望)

なんかgoogleのAdSense通ったんで有益な情報載せないとなって。 国土地理院のオープンデータ 国土地理院が公開している(正確には国土地理院のデータを利用して国土交通省国土政策局国土情報課が公開 …

no image

例え話をしないC言語のポインタの説明

もくじ まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え …

no image

Unityでメッシュをさわるノウハウ

ヒマなので覚書。ウラを取っていない経験則なので話半分で読んでください。 あと、3Dの基本概念とUnity固有の話の区別が付いていないのでごめんなさい。 もくじ Meshクラスの基本 Unityでポリゴ …

GeoJSONで市町村境界をマージして都道府県境界にしたい(実践編)

前々回と前回で問題を整理して、ようやく実践編です。 まず実物のリンク貼りましょう。GitHubに上げました。 今回はGo言語で書いてますが、ポイントがいくつかあります。 ちなみに言語としてGoを選択し …