具体例で学ぶ、API(Web API)の利用目的と仕組み

Web制作やシステム開発をするにあたり、APIが重要な役割を担うことも多くなってきました。 
しかしこれまでAPIを必要としてこなかった人にとっては、APIがいつどんな風に使われているか、なかなか理解しづらいです。

今回はAPIの利用目的と、どのようにして使うのか、ほんの一例ではありますがご紹介します。

なぜAPIを使うのか

当記事では、API(Web API)を利用する具体的なシーンをひとつ挙げて解説を進めてみます。

あなたは「愛知県のWi-fiが使えるカフェ」の情報に特化したWebサイトを作りたいとします。 
それには条件にあった店舗の情報が必要ですが、どのように情報を集めましょうか? 
ネットで情報を探してみたり、あるいは自分でカフェ巡りをしてみたり…?いずれにせよ全て自力で用意しようと思うと、目的のWebサイト制作までの道のりはとても遠いものです。

そこで登場するのがAPI(Web API)

例えば日本で大手のグルメ情報サイトといえば、ぐるなびやホットペッパーグルメなどがありますが、これらのサービスもAPI(Web API)を提供しています。 
彼らが持っている膨大な店舗データをAPI(Web API)を通して取得し、私たちのWebサイト上にも掲載することができるのです。

このように、APIの提供者が公開している情報や機能を二次利用することによって、利用者自身のサービス開発効率をあげることが、API(Web API)を利用する主な目的です。

少し寄り道:APIとWeb APIはどう違うの?

ここまで「API(Web API)」とカッコ書きでわざわざ書き分けましたが、これは「API」とは元々Webの世界だけで使われる言葉ではなく他にも様々な種類があり、そのうちの一種として「Web API」があるためです。

例えば、WindowsOS用のアプリケーション開発において使われるCreateDialog関数は、Windowsが提供している「Windows API」の機能のひとつです。 
また、HTML5から登場したブラウザにデータを保存できるWeb Storageは「HTML5 API」の機能のひとつです。 
特に後者のWeb Storageなんかは、Webと書いてあるんだからWeb APIじゃないの?!と思ってしまいますよね。

このあと解説していく「Web APIはどんな仕組みで動いているか」を知ることは、「どんなAPIならばWeb APIと呼べるのか」を理解するための第一歩にもなるかもしれません。

APIの仕組みとは

Web APIの特徴

それでは、先述の「どんなAPIならばWeb APIと呼べるのか」という疑問の答えを先にお見せしましょう。 
Web APIは、大まかに下記のような特徴をもっています。

  • HTTP(HTTPS)通信を利用している
  • 通信は「リクエスト」と「レスポンス」で成り立つ
  • 「リクエスト」は、API提供者の決め事に沿って送る必要がある
  • 「レスポンス」も、API提供者によって決められたフォーマットや内容で返ってくる

HTTP(HTTPS)通信とは、インターネット上でWebサーバとクライアント(ブラウザ)が情報をやりとりするための仕組みのこと。

私たちがWebサイト上のリンクをクリックするたび、Webブラウザを通して「このWebページを見せてください!」という「リクエスト」が毎回ひそかに送られています。 
Webサーバはこのリクエストに応え、HTMLを始めとしたWebページのコンテンツデータをクライアントに返す = つまり「レスポンス」をしています。

HTTP(HTTPS)通信のリクエストとレスポンス

あなたが今こうして記事を読んでいるのも、すべてHTTP(HTTPS)通信の「リクエスト」と「レスポンス」の上で成り立っているのです。そしてWeb APIの仕組みは、このWebサイトを閲覧するまでの一連の流れと似ています。

「リクエスト」「レスポンス」の一例を具体的に学ぼう

では、Web APIにおける「リクエスト」と「レスポンス」とはどんなものなのでしょうか。

冒頭で出したシーン、「愛知県のWi-fiが使えるカフェの情報を、グルメ情報サイトのAPIを使って取得する」場合のリクエスト&レスポンス例を具体的に見ていきましょう。

なお、ここでは架空のグルメ情報サイト「バンクグルメ」が提供している「バンクグルメAPI」という名称で説明を進めます。まずはバンクグルメAPIのリクエストはどのように送ればいいのか、リファレンスをチェックしてみました。

リクエスト
バンクグルメAPIのベースURL

バンクグルメAPIは、URLによってリクエストを送ることができるタイプのAPIのようです。 
しかし、提示されたURLをそのままブラウザで表示しても具体的な店舗情報は返ってきませんでした。

パラメータ表

リファレンスを詳しく見てみると…バンクグルメが持っている情報は膨大なので、「どの地域の店舗情報が欲しいのか?」「レストランなのか?居酒屋なのか?」など、欲しい情報に合わせた条件をパラメータでもっと細かく指定する必要があることがわかりました。

 

このリファレンスに沿ってパラメータをつけてみたものがこちら。「愛知県」の「Wi-fiが使える」「カフェ」の情報をください!というリクエストの完成です。

バンクグルメAPIのベースURL+リクエストパラメータ

項目によって指定できる値に選択肢が定められていることもあり、これはいわば注文票にマルをつけていくようなイメージ。確かにどの都道府県の店舗?という質問に対してお肉が食べられる店舗がいいです!なんて奔放なリクエストをされては困ってしまいますよね。

このように、欲しい情報を得るために正しい条件を設定することが、APIリクエストの特徴である「提供者の決め事に沿ってリクエストを送る」ということです。 
決め事が何か?はAPIによって大きく異なりますが、上記の例でいうとURLそのものやパラメータの項目名、パラメータの値が該当すると言えるでしょう。

レスポンス

では、完成したリクエストでどんなレスポンスが返ってきたか見てみましょう。

JSON形式のレスポンス

バンクグルメAPIでは、JSON形式でレスポンスを返してくれるようです。 
指定された条件に合うお店に絞り込んで、お店の名前や住所、その他いろいろな情報が表示されています。

このレスポンスのフォーマットや内容も、すべてAPI提供者によって定められたものです。 
もし欲しい情報が返ってこなかった場合は、リクエストが間違っているか、その情報はAPIの仕様上レスポンスの対象に含められていない、ということになります。

リクエスト~レスポンスまでの動き

バンクグルメAPIのリクエスト&レスポンスの形式がわかったところで、全体の動きを前項のHTTP(HTTPS)通信の図に当てはめて見てみます。WebブラウジングとWeb APIの通信の仕組みが似ている点に納得がいくのではないでしょうか。

バンクグルメAPIのリクエストとレスポンス

先ほどはURLにアクセスしブラウザ上でレスポンスをチェックしていただけでしたが、実際にはこのようにJavaScriptやPHPなどのプログラムを通してリクエストを実行し、返ってきたレスポンスを処理していくことではじめて自分のWebサイト上に情報を掲載することが可能になります。

まとめ

ここまでの内容をもう一度振り返ります。

APIの利用目的は、公開されている情報や機能を二次利用することで利用者自身のサービス開発効率をあげることです。

APIの中でもWeb APIは、HTTP(HTTPS)通信を使った「リクエスト」と「レスポンス」によるデータのやり取りが大きな特徴です。
ただしリクエストやレスポンスの内容はAPIの提供者によって異なる決め事が設定されており、一概に「こういう形式だ」と言いきることはできません。

APIを利用する際はそれぞれのリファレンスをよく読み、「このAPIが返してくれるレスポンスには自分が欲しい情報が入っているか?」「その情報を得るにはどんなリクエストが必要なのか?」を把握しましょう。