Java | Web 基礎・HTTP・REST:HTTP 基礎 - HTTP メソッド一覧

Java Java
スポンサーリンク

HTTP メソッドを一言でいうと

HTTP メソッドは
「この URL に対して、サーバーに何をしてほしいのか」を表す“動詞”です。

同じ /users という URL でも、
GET なら「取得したい」、
POST なら「新しく作りたい」、
DELETE なら「消したい」、
というように、メソッドによって意味が変わります。

Java(特に Spring)では、この HTTP メソッドとアノテーション(@GetMapping など)が 1 対 1 で対応していて、
ここをきちんと理解しておくと、REST API の設計が一気にスッキリします。


GET:データを「読む」ためのメソッド

GET は「取得したい」「読みたい」という意味のメソッドです。
一番よく使われます。

ユーザー一覧を取得する
ユーザー詳細を表示する
検索結果を取得する

といった「サーバー側の状態を変えない読み取り専用の操作」に使います。

例えば、ユーザー一覧 API はこんな感じです。

GET /api/users HTTP/1.1
Host: example.com
HTTP

Java(Spring)では、こう書きます。

@GetMapping("/api/users")
public List<UserResponse> list() {
    return userService.findAll();
}
Java

重要なのは、
GET では「サーバー側のデータを変更しない」ことが前提だという点です。
「GET を叩いたらデータが消える」「GET を叩いたら登録される」といった設計は、
HTTP 的にも、他の開発者の感覚的にも“気持ち悪い”ものになります。


POST:新しいデータを「作る」ためのメソッド

POST は「新しく作りたい」「何かを送って処理してほしい」という意味のメソッドです。

ユーザー登録
注文の作成
問い合わせ送信

など、「サーバー側の状態が変わる操作」に使います。

例えば、ユーザー登録 API はこんなリクエストになります。

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{"name":"Alice","email":"alice@example.com"}
HTTP

Java(Spring)では、こう書きます。

@PostMapping("/api/users")
public UserResponse create(@RequestBody UserRequest request) {
    var user = userService.register(request);
    return UserResponse.from(user);
}
Java

ここで大事なのは、
「新規作成は基本 POST」という感覚を持つことです。
更新や削除を POST でやることも技術的には可能ですが、
REST 的には PUT や PATCH、DELETE を使う方が自然です。


PUT:既存データを「丸ごと更新」するメソッド

PUT は「この URL のリソースを、この内容で置き換えてほしい」という意味のメソッドです。

例えば、ユーザー情報を丸ごと更新する API はこんなイメージです。

PUT /api/users/1 HTTP/1.1
Content-Type: application/json

{"id":1,"name":"Alice","email":"alice@example.com"}
HTTP

「ID 1 のユーザーを、この JSON の内容で上書きして」というニュアンスです。

Java(Spring)では、こう書きます。

@PutMapping("/api/users/{id}")
public UserResponse update(
        @PathVariable Long id,
        @RequestBody UserUpdateRequest request
) {
    var user = userService.update(id, request);
    return UserResponse.from(user);
}
Java

PUT のポイントは「全体を置き換える」という考え方です。
一部だけ変えたいときは、後で出てくる PATCH の方が意味としては近いです。


PATCH:既存データを「部分的に更新」するメソッド

PATCH は「このリソースの一部だけを変えたい」というときに使うメソッドです。

例えば、「ユーザーの名前だけ変えたい」場合はこんなリクエストになります。

PATCH /api/users/1 HTTP/1.1
Content-Type: application/json

{"name":"Bob"}
HTTP

「ID 1 のユーザーの name だけ Bob に変えて。他はそのまま」というニュアンスです。

Java(Spring)では、こう書けます。

@PatchMapping("/api/users/{id}")
public UserResponse patch(
        @PathVariable Long id,
        @RequestBody UserPatchRequest request
) {
    var user = userService.patch(id, request);
    return UserResponse.from(user);
}
Java

実務では、
PUT と PATCH を厳密に使い分けないプロジェクトもありますが、
「PUT は全体更新、PATCH は部分更新」という意味を知っておくと、
他人の API を読むときにも理解しやすくなります。


DELETE:データを「削除」するメソッド

DELETE は、その名の通り「削除したい」という意味のメソッドです。

ユーザー削除
商品削除
お気に入り解除

など、「そのリソースを消す」操作に使います。

例えば、ユーザー削除 API はこうです。

DELETE /api/users/1 HTTP/1.1
Host: example.com
HTTP

Java(Spring)では、こう書きます。

@DeleteMapping("/api/users/{id}")
public void delete(@PathVariable Long id) {
    userService.delete(id);
}
Java

レスポンスとしては、
204 No Content(ボディなしで成功)を返すことが多いです。

重要なのは、
「削除なのに POST /deleteUser みたいなエンドポイントを作らない方がよい」
ということです。
REST では、
「何をするか」はメソッドで、
「何に対してか」は URL で表現する、
という考え方が基本です。


HEAD:ヘッダだけ欲しいときのメソッド

HEAD は、GET とほぼ同じですが「ボディはいらない、ヘッダだけ返して」というメソッドです。

例えば、
「このファイルが存在するかだけ知りたい」
「サイズだけ知りたい」
といったときに使われます。

レスポンスは、ステータスコードやヘッダは GET と同じですが、ボディが空になります。

Java の日常開発では、
自分で HEAD を実装する機会はあまり多くありませんが、
「そういうメソッドがある」くらいは知っておくとよいです。


OPTIONS:この URL で「何が許されているか」を知るメソッド

OPTIONS は、「この URL に対して、どんなメソッドが使えるのか」を問い合わせるメソッドです。

例えば、ブラウザが CORS(オリジンをまたぐリクエスト)の事前確認として OPTIONS を送ることがあります。

レスポンスには、Allow ヘッダで「許可されているメソッド」が返ってきます。

HTTP/1.1 204 No Content
Allow: GET, POST, OPTIONS
HTTP

これも、普段 Java コードで直接書くことは少ないですが、
「ブラウザが裏で OPTIONS を飛ばしていることがある」
というのを知っておくと、CORS 周りのトラブルシュートが少し楽になります。


設計で一番大事なのは「メソッドの意味を裏切らないこと」

HTTP メソッドは、
単なる技術仕様ではなく「約束された意味」を持っています。

GET は読むだけ
POST は新しく作る
PUT は全体を更新する
PATCH は一部を更新する
DELETE は削除する

この意味を守って API を設計すると、
初めてその API を触る人でも、
「URL とメソッドを見ただけで、だいたい何をするのか」が想像できます。

逆に、
「削除なのに GET」
「更新なのに POST /updateUser」
のように、メソッドの意味を無視した設計をすると、
コードは動いても、長期的には必ず混乱を生みます。

REST っぽさ、というのは、
難しい理論の前にまず
「HTTP メソッドの意味を素直に使う」
ところから始まります。


Spring での対応関係を頭に刻んでおく

Java(Spring)を書くときは、
HTTP メソッドとアノテーションの対応を、反射的に出てくるレベルまで覚えてしまうのがおすすめです。

GET → @GetMapping
POST → @PostMapping
PUT → @PutMapping
PATCH → @PatchMapping
DELETE → @DeleteMapping

これが自然に出てくるようになると、
「この処理は何メソッドがふさわしいか?」
を考える癖がつきます。


初心者向けまとめ:自分の言葉で説明できるようにする

あなたの言葉で整理すると、こうなります。

HTTP メソッドは、
「この URL に対してサーバーに何をしてほしいか」を表す動詞で、
GET は取得、POST は新規作成、PUT は全体更新、PATCH は部分更新、DELETE は削除。

Java(Spring)では、
それぞれ @GetMapping@PostMapping@PutMapping@PatchMapping@DeleteMapping に対応していて、
メソッドの意味を守って API を設計することで、
読みやすく、予想しやすく、長く保守しやすい Web アプリになる。

もしよければ、
「ユーザー管理 API」を題材にして、
一覧取得・詳細取得・登録・更新・削除を
どの URL とどのメソッドで設計するか、一緒に書き出してみよう。
そこを自分で設計できるようになると、もう HTTP メソッドは“暗記科目”ではなく、“使いこなす道具”になるから。

タイトルとURLをコピーしました