結論:Web API とは「プログラム同士が HTTP を通じてやり取りするための“注文窓口”」で、REST はその窓口の並べ方・呼び方を整理した“お作法(ルール)”です。 難しい言葉が多く見えますが、正体は「どのURLに・どの動詞で・どんなデータを渡し・どんな返事が返るか」の4つだけ。読むより、実際にリクエストを投げて返事を受け取ってみるのが一番はやいです。
Web APIとは何か(注文窓口のたとえ)
API は Application Programming Interface の略で、直訳すると「アプリケーション同士をつなぐ窓口」です。そのうち Web API は、その窓口をインターネット越し(HTTP)に置いたものを指します。
レストランを想像してください。あなた(=あなたのプログラム)は厨房(=サーバーの中身)に直接入れません。代わりに「メニュー」を見て、「店員」に注文を伝え、料理を受け取ります。このとき、
- メニュー = どんな機能が呼べるかの一覧(エンドポイント)
- 注文する = リクエストを送る
- 料理が届く = レスポンスが返る
という対応になります。厨房の作り方(データベースの構造やプログラムの中身)を知らなくても、決められた注文の仕方さえ守れば料理が受け取れる。これが Web API の便利さです。天気アプリが気象データを表示できるのも、地図アプリが経路を出せるのも、裏で誰かの Web API に注文を出しているからです。
用語としての定義だけを確認したいときは、用語集の Web API と REST API も参照してください。この記事では「仕組みとつまずき」に絞って説明します。
リクエストとレスポンス ― やり取りの1往復
Web API のやり取りは、必ず「リクエスト(注文)」と「レスポンス(返事)」の1往復でできています。
- リクエスト:クライアント(ブラウザやアプリ)がサーバーに送る「これをしてほしい」という依頼。
- レスポンス:サーバーが返す「結果はこれです」という返事。
この1往復を実際に自分の手で組み立てて動かせるのが、Djangoコースです。まず読み物の WebアプリとDjango ― リクエストからレスポンスまで で全体像をつかんだあと、はじめてのビュー ― Hello, Django から先はブラウザ上でそのまま実行できます。「リクエストが来たら、こう返す」という関数を書いて、返事が変わる様子をその場で確認できます(無料・環境構築なし・登録不要)。
エンドポイントとは ― 「どこに注文するか」
エンドポイントとは、機能ごとに割り当てられた注文先の住所(URL)です。メニューの各項目に対応します。
GET /users ← 利用者の一覧をください
GET /users/42 ← 42番の利用者の情報をください
POST /users ← 新しい利用者を登録してください
同じ /users でも「一覧」と「新規登録」で意味が変わるのは、次に説明する**メソッド(動詞)**が違うからです。URL が「どこに(名詞)」を表し、メソッドが「何を(動詞)」を表す、と覚えると整理しやすくなります。
URL をどう設計し、どの関数につなぐかは URLとビューを結ぶ ― urlpatterns と path でブラウザ上で動かしながら学べます。
HTTPメソッド ― GET / POST / PUT / DELETE
リクエストの先頭には必ず「何をしたいか」を表す動詞が付きます。これが HTTPメソッドです。初心者はまずこの4つを押さえれば十分です。
- GET:取得する(読む)。「一覧をください」「詳細をください」。
- POST:新規に作る。「この内容で登録してください」。
- PUT:まるごと更新する。「この内容に置き換えてください」。
- DELETE:削除する。「これを消してください」。
この4つは、データ操作の基本である「作る・読む・更新する・消す」(CRUD)にそのまま対応しています。GET と POST の使い分けは特に重要で、GETとPOST ― HTTPメソッドで分岐する で「同じURLでもメソッドによって処理を分ける」という実際のコードをブラウザで動かせます。リクエストの中身(送られてきたデータ)をどう取り出すかは リクエストの中身 ― HttpRequest と request.GET が具体的です。
JSON ― やり取りするデータの形
Web API でデータをやり取りするとき、いちばんよく使われる形式が JSON(ジェイソン)です。人間にも読めて、プログラムでも扱いやすい「キーと値」の書き方です。
{
"id": 42,
"name": "たろう",
"tags": ["初心者", "Web"]
}
なぜ JSON かというと、どの言語からでも読み書きできる“共通語”だからです。サーバーが Python でも、受け取る側が JavaScript でも、JSON という文字列を経由すれば意味が通じます。JSON そのものを手を動かして理解するなら、JavaScriptコースの JSON ― データを文字列でやり取りする が最短です。ここも含めて JavaScriptコースは全28レッスンすべてブラウザで実行できます。
そして「実際に Web API に注文を出してJSONの返事を受け取る」体験ができるのが fetch ― サーバーからデータを取ってくる です。fetch でリクエストを送り、返ってきた JSON を取り出すまでを、模擬サーバー相手にブラウザ内でそのまま動かせます。通信は結果がすぐには返らないため非同期処理になります。この「待つ」仕組みでつまずいたら 非同期処理がわからない人向け|Promiseとasync/await を合わせて読んでください。
ステータスコード ― 返事に付く「結果の合図」
レスポンスには、うまくいったか失敗したかを表す3桁の数字(ステータスコード)が必ず付いています。番号の百の位でおおまかな意味が決まります。
- 200番台:成功(例:200 OK = 正常、201 Created = 作成できた)
- 300番台:リダイレクト(別の場所へ案内)
- 400番台:こちら(送り手)の間違い(例:404 Not Found = その住所は無い、400 Bad Request = 依頼の内容が変)
- 500番台:サーバー側の不具合
「404」を見たことがある人は多いはずです。あれは「注文先の住所が存在しない」という合図です。ステータスコードとリダイレクトの返し方は ステータスコードとリダイレクト でブラウザ上で確認できます。
REST APIとは ― 窓口を整理する“お作法”
ここまでの「URLは名詞・メソッドは動詞・JSONでやり取り・ステータスコードで結果を返す」という組み立て方を、きちんとルール化したものが REST(Representational State Transfer)です。REST に沿って作られた Web API を REST API と呼びます。
REST の考え方のうち、初心者が押さえるべきなのは次の点です。
- リソース(もの)をURLで表す:
/users/42のように「対象」を住所で示す。 - 操作はメソッドで表す:取得は GET、作成は POST……と動詞で使い分ける。
- やり取りは基本 JSON:返す形を統一しておく。
- 状態を持ち越さない(ステートレス):1回のリクエストに必要な情報を毎回すべて含める。サーバーは前回の注文を覚えていない前提で作る。
つまり REST は新しい技術ではなく、「HTTP という既存の仕組みを、素直に・一貫したルールで使おう」という取り決めです。だから REST を理解する近道は、HTTP そのものに慣れること。HTTP の用語も合わせて確認しておくと、REST の各ルールが「なぜそうなっているか」まで腑に落ちます。
つまずきやすいところ
Web API の学習でよくある詰まりどころを挙げます。
- GETとPOSTを取り違える:一覧取得なのに POST を使う、登録なのに GET を使う、というミスは典型です。「読むだけなら GET、状態を変えるなら POST」を基準にしてください。GETとPOST ― HTTPメソッドで分岐する で手を動かすと迷わなくなります。
- JSONの形が崩れている:末尾のカンマ、キーを囲むダブルクォートの抜け、などで読み込みに失敗します。エラーの見え方は言語ごとに違うので、Python で API を書いていて詰まったら Pythonのエラー逆引き でメッセージから逆引きするのが早いです。
- ステータスコードを見ていない:レスポンスの中身だけ見て「なぜか動かない」と悩むより、まず番号を見ましょう。404 なら URL、400 なら送ったデータ、500 ならサーバー側、と切り分けの起点になります。
- エラーメッセージを読まずに手を止める:Web API はどこで失敗したかが返事に書いてあることが多いです。読み方に自信がなければ エラーメッセージの読み方 を先に読んでおくと、独学の詰まりが一気に減ります。
次に読む
- Djangoコース — 「PythonでWebサイトを作る」。第2回以降のビュー・URL・リクエスト処理(django-2 〜 django-9 付近)はブラウザでそのまま実行できます。
- JavaScriptコース — 全28レッスンがブラウザ実行可能。API連携の核は JSON(javascript-27) と fetch(javascript-28)。
- フロントエンドとバックエンドの違いとは? — Web API は「フロントとバックの間の通り道」。全体像を押さえるのに。
- 非同期処理がわからない人向け|Promiseとasync/await — API通信は非同期処理。fetch とセットで理解すると強い。
- 用語だけ確認したいとき:Web API / REST API / HTTP