わかりやすく API とは
天気アプリは、今日の天気をどうやって知るのでしょうか。アプリが自分で空を見上げているわけではありません。天気のデータを持つサーバーに聞いているのです。ただし、人のようにウェブページを読むのではなく、決まった形式で必要なデータだけをすっきり受け取ります。そうしてプログラムどうしがデータをやり取りできるように約束した窓口が、APIです。
人のための画面、アプリのための窓口
前のレッスンで、ブラウザーがリクエストを送るとサーバーがレスポンスを返すことを見ました。人が受け取るレスポンスはたいていウェブページで、文字や画像やボタンが見やすく並んでいます。
人の目には便利ですが、アプリがその中から気温一つを探し出すには、画面をいちいち読み解かなければなりません。そこでプログラムどうしは、画面の代わりにすぐ使えるデータをやり取りします。そのために決めておいた窓口をAPIと呼びます。
人のための画面とアプリのための窓口を押して、比べてみましょう。アプリが使いやすいのはどちらでしょうか。
同じ情報でも、姿が違います。人には見やすく飾った画面を、アプリには余計なもののないデータを渡します。画面は人が読むために、窓口はプログラムが読むために作られたものです。
では、アプリはその窓口にどうやって話しかけるのでしょうか。実は多くのAPIは、前に学んだHTTPをそのまま使います。決まったアドレスへリクエストを送り、レスポンスを受け取るのです。ただ、リクエストに何を入れるかは、窓口ごとにあらかじめ決まっています。
決まった形式で頼む
窓口には、好きなように話しかけることはできません。あらかじめ決めた形式どおりに尋ねる必要があります。たとえば「都市はソウル、知りたいのは今日の天気」と、決まった項目を埋めて送るというぐあいです。
レストランでメニューを見て、書かれた名前どおりに注文するのに似ています。注文が約束どおりの言葉なら、厨房は迷わずすぐに料理を始めます。APIも約束どおりの形式のリクエストだけを理解し、形式に合わないリクエストには、まちがっているという答えを返します。
約束どおりのリクエストを押して、APIに送りましょう。決まった形式なので、窓口はすぐに理解します。
リクエストを送ったので、次は答えが来る番です。人に送る画面の代わりに、APIは何で答えるのでしょうか。
答えは、アプリがすぐ使えるようにきれいに整理されたデータで届きます。飾りも画像もなく必要な値だけが入っているので、サイズも小さくてすみます。そのデータがどんな形をしているか、次の段階で広げてみましょう。
画像ではなくデータで答える
APIの答えは画像ではありません。名前と値が組になって書かれたデータです。たとえば気温は23、空は晴れ、というように書きます。値ごとに名前が付いているので、その値が何なのかがはっきりします。
こうして名前と値を組にして書く形式で、いちばん広く使われているのがJSONです。人にも読めるほど単純で、プログラムにも扱いやすい形式です。アプリはこのデータから必要な値だけを選び、自分の画面に描きます。
データを押して広げてみましょう。画像ではなく、名前と値(気温23、晴れ)ですっきり答えます。
値ごとに名前が付いているので、アプリは迷いません。気温が必要なら気温を、空の様子が必要なら空の様子を取り出して使えばよいのです。もし画面から数字を探し出していたら、ページの見た目が少し変わっただけで、アプリはまちがった値を読んでいたでしょう。
ところで、こうした窓口は一つだけではありません。地図の窓口、天気の窓口、支払いの窓口のように、世の中にはたくさんのAPIが開かれています。二つ以上をいっしょに使うと、何が作れるでしょうか。
窓口を組み合わせて新しいサービスを作る
窓口の一つひとつは、一つの仕事しかしません。地図の窓口は場所と地図を、天気の窓口は天気を教えてくれます。
ところが二つを組み合わせると、地図の上にその場所の天気を表示する新しいサービスが生まれます。ブロックをはめ合わせるように、いくつもの窓口を集めてもっと大きなものを作るのです。私たちが毎日使うアプリの多くは、こうしていくつもの会社の窓口を組み合わせて作られています。
地図のAPIと天気のAPIを順に押して、組み合わせましょう。二つを合わせると、地図の上に天気が出る新しいサービスになります。
二つの窓口のデータが出会うと、一つだけではできなかったことが生まれました。地図も天気も最初から作らずに、すでにある窓口を借りて合わせただけです。
だから、新しいサービスを速く作れます。車輪を一から作り直す代わりに、よくできた部品を持ってきて使うわけです。窓口を開いた側は、だれがどれだけ使うかを知る必要があるので、多くのAPIは、鍵のように使う固有の文字列をリクエストといっしょに送るよう求めます。
まとめ
一言でまとめるとこうです。人は画面を見ますが、プログラムどうしはデータをやり取りし、そのための約束の窓口がAPIです。
決まった形式でリクエストすると、画像ではなく名前と値でできたデータで答えます。いくつもの窓口を組み合わせれば、新しいサービスになります。だから、何もかも最初から作らなくても、すでにある窓口を借りて新しいものを作れます。
要点を順に押して振り返りましょう。(アプリのための窓口 → 決まった形式でリクエスト → データで答える → 組み合わせて新しいサービス)
これで、アプリどうしがどうやってデータをやり取りしているのかがわかりました。目に見えるアプリ一つの後ろでは、たくさんの窓口が静かに働いています。次に天気アプリを開くとき、この画面はどの窓口からどんなデータを受け取ったのだろうと考えてみるのも楽しいものです。
ところで、HTTPは前のリクエストを覚えていないのでした。では、ネットショップはログインした私を、ページごとにどうやって見分けているのでしょうか。次のレッスンでは、その答えであるセッションとクッキーを取り上げます。