3秒でわかる
APIの機能ごとに割り当てられたアクセス先のURL。どのパスにどのメソッドで送れば何が返るかを決める、通信の窓口にあたります。
もう少し詳しく
どういうものか
エンドポイントは、APIが公開している機能ひとつひとつに割り当てられたアクセス先のURLです。https://api.example.com/v1/users/42 のようなパスと、GET・POST・PUT・DELETE といったHTTPメソッドの組み合わせでひとつのエンドポイントが決まります。同じ /users/42 でも、GETなら1件取得、DELETEなら削除と、まったく別の処理になります。
なぜ必要か
クライアントとサーバーは別々のプログラムです。どこへ何を送れば何が返るのかを先に決めておかないと、通信そのものが成立しません。エンドポイントはその取り決めを外から見える形にしたものです。窓口が定まっていれば、フロントエンドの担当者はサーバーの内部実装を知らなくても、パスとメソッドとレスポンスの形だけを見て画面を作れます。
具体例
// ユーザー1件を取得する
const res = await <a href="/glossary/fetch-api" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">fetch</a>("https://api.example.com/v1/users/42");
if (!res.ok) throw new Error(`status ${res.status}`);
const user = await res.json();
// 同じパスへPOSTするとコメント投稿になる、という設計もできる
await fetch("https://api.example.com/v1/users/42/comments", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: "はじめまして" }),
});パスは名詞、操作はメソッドで表すのがRESTの基本形です。/getUser のようにパスへ動詞を入れると、あとから更新や削除を足すときに命名が破綻します。
つまずきやすいところ
一番多いのは末尾スラッシュとバージョンの取り違えです。/v1/users と /v1/users/ を別物として扱うサーバーがあり、301リダイレクトが挟まるとPOSTのボディが落ちることがあります。もうひとつは、404が返ったときにサーバー障害だと思い込む誤解です。エンドポイントの綴りが違うだけでも404になるので、まずURLを1文字ずつ確認します。
似た用語との違い
| 語 | 指すもの |
|---|---|
| エンドポイント | 1つの機能に対応するURLとメソッドの組 |
| API | エンドポイントをまとめた全体の仕様 |
| ルーティング | 受け取ったURLを処理関数へ割り振るサーバー側の仕組み |