POSTリクエストとは
サーバーに「データを送って処理してね」とお願いするHTTPリクエストの種類
GETリクエストとの違い
| 項目 | GET | POST |
|---|---|---|
| 目的 | データを取りに行く | データを送って何か処理してもらう |
| データ送信方法 | URLの末尾にパラメータ (?a=3&b=5) |
リクエストボディにJSONやフォームデータを入れる |
| セキュリティ | URLに見えるので注意 | URLに出ないので安全(少なくとも見えない) |
| 副作用 | 基本的に何も変えない | サーバー側の状態が変わる(DBに登録など) |
具体例
GETの場合
http://localhost:8080/sum?a=3&b=5
POSTの場合
POST http://localhost:8080/sum
Body(JSON):
{
"a": 3,
"b": 5
}
URLにはデータを書かず、ボディにデータを入れて送信
サーバーは受け取ったデータを計算したりDBに保存したりする
POSTリクエストの特徴
データを安全に送れる
URLに表示されないので、パスワードや個人情報も送れる
サーバーの状態を変えられる
DBにユーザーを登録したり、注文を追加したりできる
JSONで複雑なデータを送れる
1つのオブジェクトに複数の値をまとめて送信可能
DTOとは
Data Transfer Object の略で、「データの受け渡し専用のクラス」です。
例
たとえば、
「アプリにユーザー登録する」って操作をする。
名前(name)
メールアドレス(email)
パスワード(password)
をアプリに送るよね。
そのとき、アプリの中では
「これらの情報をまとめて受け取るための入れ物」が必要になる。
その“入れ物”が DTO(データ転送オブジェクト)。
package org.example.dto;
public class UserDto {
private String name;
private String email;
private String password;
// getter と setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
なんでフィールドを書くのか?
それは、「箱の中にどんなデータを入れるか」を決めるため。
private String name;
private String email;
private String password;
これで「このDTOは名前・メール・パスワードを運ぶよ」という意味になる。
getter/setter は何?
箱の中のデータを「取り出したり」「入れたり」するための“手段”。
UserDto dto = new UserDto();
dto.setName("けい"); // ← データを入れる
System.out.println(dto.getName()); // ← データを取り出す
Controller Service Repository DTO Entityの役割
| 層 | 役割 |
|---|---|
| Controller | フロントからのリクエストを受け取る/レスポンスを返す |
| Service | 処理の中身(ビジネスロジック)を書く |
| Repository | DBにアクセスする |
| DTO | Controller と Service の間でデータを「安全に運ぶ箱」 |
| Entity | DBのテーブルと対応するクラス |