プログラミング

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

-プログラミング

執筆者:

関連記事

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …

no image

ランダムな日本人データを生成するツールをつくった

前置き ダミーの名簿データが作りたい、という需要は稀にあるものです。 住所とか、年齢とか、職業とか、いい感じにランダムなデータが欲しいことがありますよね。 しかし、適当にデータを作ってしまうと、「東京 …

GeoJSONで市町村境界をマージして都道府県境界にしたい(その1)

前回の続きで、国土地理院の「国土数値情報」っていうオープンデータで遊んでいます。独立した記事なので前回のは読まなくても良いです。 やりたいこと 国土数値情報で提供されている「行政区域データ」は、市町村 …

no image

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

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

no image

Google Apps Script (GAS)でBlueskyのbotを作る

Blueskyで何かやりたくなったので、PRTimesのプレスリリースを自動投稿するbotを作ってみました。 Google Apps Scriptを使うと、無料でbotが作れるので便利です。 せっかく …