情報II / 情報システムとプログラミング 4 / 6

ネットワークとAPI・Web技術

天気アプリは気象データを自分で観測していませんし、地図アプリの地図も自作ではありません。他のサービスが公開する機能をAPIを通じて借りているのです。この講義では、Webを支えるHTTPの仕組みを深掘りし、Web APIとJSONによるサービス連携を学びます。現代の情報システム開発は「APIの組み合わせ」でできているといっても過言ではありません。

HTTP — リクエストとレスポンス

WebブラウザとWebサーバはHTTPというプロトコルで会話します。クライアントがリクエスト(要求)を送り、サーバがレスポンス(応答)を返す、この往復が基本単位です。

リクエストには「何をしたいか」を表すメソッドが含まれます。代表的なものは、データの取得を求めるGETと、フォーム送信などデータをサーバに送るPOSTです(ほかに更新のPUT、削除のDELETEなど)。

レスポンスには結果を表す3桁のステータスコードが含まれます。

・200(OK):成功
・404(Not Found):指定されたページ・資源が存在しない
・500(Internal Server Error):サーバ側の内部エラー
先頭の数字に意味があり、2xx=成功、3xx=転送(リダイレクト)、4xx=クライアント側の誤り、5xx=サーバ側の誤り、と分類されます。

Web API — プログラムのための窓口

API(Application Programming Interface)とは、あるソフトウェアの機能を外部のプログラムから利用するための「窓口(接続仕様)」です。特にHTTPを使ってインターネット越しに提供されるものをWeb APIと呼びます。人間がブラウザでWebページを見る代わりに、プログラムがURLにアクセスしてデータを受け取るのがWeb APIです。

Web APIの設計スタイルとして広く使われるのがRESTです。RESTでは「資源(リソース)をURLで表し、操作をHTTPメソッドで表す」というルールで統一します。たとえば GET /users/5 は「ID 5のユーザ情報を取得」、POST /users は「新しいユーザを登録」という意味になります。

JSON — プログラム同士の共通語

Web APIの応答データの形式として最も普及しているのがJSONです。JSONは「名前と値のペア」を波かっこで囲んだ軽量なテキスト形式で、人間にも読め、ほぼすべてのプログラミング言語で扱えます。

例 天気APIに GET https://api.example.com/weather?city=tokyo とリクエストすると、次のようなJSONが返ってくるとします。
{"city": "tokyo", "temp": 28, "weather": "晴れ", "rain_percent": 10}

この応答から、プログラムは「都市=tokyo、気温=28℃、天気=晴れ、降水確率=10%」という4つの値を取り出せます。URLの「?city=tokyo」の部分はクエリパラメータと呼ばれ、「どの都市のデータが欲しいか」という条件をサーバに伝えています。自作アプリはこの値を画面に表示するだけで、天気予報アプリが完成します。気象の観測も予測も、API提供者側がやってくれているのです。

APIを使うときのマナーと注意

多くのAPIでは、利用者を識別するAPIキーの取得が必要です。APIキーは自分専用のパスワードのようなもので、プログラムに埋め込んで公開してはいけません。また、短時間に大量のリクエストを送るとサービスに負荷をかけるため、回数制限(レート制限)が設けられているのが普通です。利用規約を読み、提供元のルールの範囲で使うことが、API利用者の基本マナーです。複数のAPIを組み合わせて新しいサービスを作ることはマッシュアップと呼ばれ、現代のWeb開発の常套手段になっています。

ポイント
  • HTTPはリクエストとレスポンスの往復。メソッドはGET(取得)とPOST(送信)が基本。
  • ステータスコードは2xx成功/4xxクライアント側の誤り(404など)/5xxサーバ側の誤り(500など)。
  • Web API=プログラムがHTTPで機能・データを利用する窓口。RESTは「URLが資源、メソッドが操作」。
  • JSONは名前と値のペアによる軽量データ形式。API応答の事実上の標準。
  • APIキーは秘密にする。レート制限と利用規約を守る。

練習問題

  1. ステータスコード404と500は、それぞれ何を意味し、クライアント側とサーバ側のどちらの問題か答えなさい。
  2. JSON {"name": "科学部", "members": 12, "active": true} から読み取れる情報を日本語で説明しなさい。
  3. 自分のアプリに他社の地図APIを組み込むことには、地図機能をすべて自作する場合と比べてどんな利点があるか、2つ挙げなさい。

解答・解説

  1. 解答:404は「指定した資源が存在しない」を意味しクライアント側の問題(4xx)。500は「サーバ内部のエラー」を意味しサーバ側の問題(5xx)。
    解説:URLの打ち間違いは404、サーバのプログラムの不具合は500になることが多い。先頭の数字で責任の所在が分かる。
  2. 解答:名前が「科学部」、部員数が12人、活動中(active が true)という3つの情報を持つデータである。
    解説:JSONは「"名前": 値」のペアの集まり。値には文字列・数値・真偽値(true/false)などが使える。
  3. 解答:(例)①地図データの整備・更新という膨大な作業を自分でやらずに済み、開発の時間と費用を大幅に減らせる。②専門企業が提供する高品質・最新の機能(経路検索など)をそのまま利用できる。
    解説:一方で、提供元の仕様変更・料金改定・サービス終了の影響を受けるという依存のリスクもある。

続きは無料アカウントで読めます

このレッスンの続きと、AIに教えて学ぶ機能が使えます。登録は無料です。

無料でアカウントを作る ログイン

このレッスンの質問と回答

読み込み中...