クライアントとは何か
クライアント(client)は、別のコンピューターやソフトウェアが提供する機能を利用するために、要求を送る側です。Webではブラウザが代表例ですが、スマートフォンアプリ、CLI、別のサーバーもクライアントになれます。
「利用者の端末」と「要求を送るソフトウェア」を、文脈に応じて区別することが大切です。
一文でいうと
クライアントとは、サーバーへ処理やデータを求め、その応答を利用する側の役割です。
MDNはWebのクライアントを、利用者のネット接続端末と、その上でWebへアクセスするブラウザなどのソフトウェアとして説明しています。クライアントとサーバーは、固定された製品分類ではなく、一回のやり取りにおける役割です。
個人開発のどこで登場するか
Webアプリでは、ブラウザ内のプログラムがAPIへHTTPリクエストを送り、返されたデータを画面へ表示します。外部のメールAPIをサーバーから呼ぶ場合は、自分のサーバーがそのAPIに対するクライアントになります。
クライアント側で扱うものには次があります。
利用者の入力
画面の一時的な状態
サーバーへ送る要求
受け取った応答の表示
通信中や失敗時の案内
ネットワークは失敗するため、待機中、再試行、重複送信への対応も必要です。
ブラウザからデータを取得する例
読書記録の一覧を開く流れを考えます。
ブラウザ上のクライアントプログラムが一覧を要求する
URL、HTTPメソッド、認証情報などを付けてサーバーへ送る
サーバーが認証と権限を確認する
データベースから対象の記録を取得する
HTTPレスポンスとしてクライアントへ返す
クライアントが成功、空の状態、失敗を画面へ反映する
画面に何も出ないときは、要求が送られたか、応答のステータスと内容は何か、表示処理で失敗していないかを順に確認します。
ブラウザ、端末、フロントエンドと区別する
端末:利用者が使うパソコンやスマートフォン
ブラウザ:Webページを取得し、解釈して表示するソフトウェア
クライアント:要求を送って機能を利用する役割
フロントエンド:主に利用者が触れる画面と、その近くで動く実装領域
サーバー:要求を受けて処理し、応答する役割
ブラウザは複数のサーバーへアクセスでき、一つのサーバーが別サービスのクライアントになることもあります。
クライアントを信用の境界にしない
利用者はブラウザの表示や送信内容を変更できます。クライアント側の入力検証は操作を分かりやすくしますが、サーバー側の検証と認可を置き換えません。
金額や権限をクライアントから受け取った値だけで決めない
APIキーなどのシークレットを配信コードへ埋め込まない
エラーメッセージへ内部情報を出しすぎない
古いクライアントからの要求も想定する
応答に不要な個人情報を含めない
クライアントへ渡したデータやコードは、利用者から見られる前提で設計します。
次に読む記事
代表的なクライアントはブラウザとは何か、応答する側はサーバーとは何かへ進みます。交換の約束はHTTPとは何か、機能の窓口はAPIとは何かで確認できます。