はじめに
このシリーズでは、文系出身未経験入社の開発エンジニア2年目の自分が、
なんとなく分からずにモヤモヤしていた知識や疑問をざっくりと解説していきます。
ざっくりとなので、多少正確性を欠くことがありますが、もし誤った記載がありましたらご指摘いただけますと幸いです。
HTTPメソッド-GET,POST,PUT,DELETE-
HTTPリクエストとは何かを知る上で、先にHTTPメソッドについて理解をしておくとよいです。
HTTPメソッドとは
HTTPメソッドとは、HTTPリクエストが 「どんなタイプのお願いなのか」 を示すものです。
HTTPメソッドの種類は以下の4つです。
GET:情報の取得
POST:新規情報の送信
PUT:既存情報の上書き
DELETE:情報の削除
特によく使うのはGETとPOSTです。
例えば、ユーザーがURLをブラウザに打ち込んでサイトAが表示されたら、
「ユーザーはサイトAのサーバーに対してGETリクエストを送信した」
ということになります。
PUTとDELETEは行う前に再認証(パスワード入れたりメール確認したり)をすることが多いです。
身近な例だと、SNSのプロフィール情報の更新(PUT)や、アカウントの削除(DELETE)が挙げられます。
この4つの種類のリクエストを理解した上で、HTTPリクエストとは何かを見ていきましょう。
HTTPリクエストとは
先に例を載せると、HTTPリクエストの実体は以下のような文字列です。
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>
{
"name": "John",
"age": 30
}
パッと見だと「なんのこっちゃ?」という印象だと思うので、
整理して見てみましょう。
HTTPリクエストは、ざっくり分けると以下の3つのパーツで構成されています。
①リクエストライン
②ヘッダー
③ボディ(リクエストボディ)
リクエストライン
POST /api/users HTTP/1.1
リクエストの最初の行。
以下のような情報がここに書かれます。
HTTPメソッドの種類
URL(アクセスしたいリソースの指定)
HTTPバージョン
ヘッダー
Host: example.com
Content-Type: application/json
Authorization: Bearer <token>
リクエストの詳細情報。
以下のような情報がここに書かれます。
リクエスト先のホスト名
リクエストボディのデータ形式(例:application/json)
認証情報
ボディ(リクエストボディ)
{
"name": "John",
"age": 30
}
クライアントから送信するデータ。
必ずあるとは限らず、HTTPメソッドの種類によってあったりなかったりします。
GETメソッドではクライアントからデータを送る必要がないので、ボディなしである場合が大半です。
補足:HTTPとは?なぜ必要?
HTTP = Hypertext Transfer Protocol の略です。
クライアントとサーバーが通信をする上で、
共通の決まり(プロトコル)がないと不便なので導入されました。
使い古された喩え話ですが、
共通のプロトコルがない通信=言語が通じない人同士の会話
のようなものです。
私たち日本人は、「日本語」という共通のプロトコルがあるからこそ、会話が成立します。
例:プロトコルがない場合
クライアント「こういう情報が欲しいです!」(リクエスト)
サーバー「umm... is it Japanese? Chinese? I don't understand!!!」(レスポンス不可)
クライアント「あれ?レスポンスが返ってこないなぁ」
→クライアントは日本語、サーバーは英語を使っているため、共通の言語(プロトコル)がない
→通信ができない!
例:プロトコルが同じ場合
クライアント「こういう情報が欲しいです!」(リクエスト)
サーバー「おお、日本語でリクエストが来たよ!じゃあ、この情報を渡そう!」(レスポンス)
→クライアントもサーバーも、日本語という共通の言語(プロトコル)を使っている
→通信ができる!
「サーバーにリクエストを送るときは、HTTPという規格に沿った形式にしてね」
「クライアントにレスポンスを返すときは、HTTPという規格に沿った形式にしてね]
と決めておくことで、クライアントとサーバーの通信が簡単になります。