GETとPOSTが同じURLは存在するのか

メソッドが違えば同じURLでも問題ない

フレームワークを使って開発していれば当たり前の話かもしれませんが、ハマる人間が一定数いそうなので記事にします。

GETとPOSTのようにメソッドが異なるリクエストを、同じURLに対して送信することはあります。これは特殊なケースでもなんでもありません。

Laravelの場合

例えばLaravelの場合、「Route::resource(‘/users’, UserController::class);」このようにルートを作成すると以下のような結果になります。

Method URIName
GET|HEADusersusers.index
POSTusersusers.store
GET|HEADusers/createusers.create
GET|HEADusers/{user}usaers.show
PUT|PATCHusers/{user}users.update
DELETEusers/{user}usaers.destroy
GET|HEADusers/{user}/editusers.edit

上記のように、同じ”users”というURLでも、GET/HEADの場合はusers.indexというメソッドが処理し、POSTの場合はusers.storeというメソッドが処理します。

このように、同一URLでもメソッドが異なれば処理を分けることができるため、URLが同じという点が問題になることはありません。

なぜ混乱が生じるのか

なぜ、同じURLで処理が異なることに違和感を感じるかというと、恐らく素のPHPなどの記憶が強い為だと思われます。

例えばフレームワークを使わずに、PHPでユーザの一覧表示と登録処理を書こうとすると、show-users.phpとstore-users.phpのように、ファイルを分けることが多いかと思います。

それが直接URLになるため、URLが同じということが基本的にありません。その記憶が強い為に違和感を感じるのではないかと考えます。

勿論、PHPで直接書く場合も、例えばformのactionをブランクにして自分自身にすると、GETとPOSTで同じURLが処理をすることになります。

この方法は入門用の参考書などにもよく載っている方法です。

なので、あまり難しく考えずに、同じURLでもメソッドが異なればOKくらいに記憶しておきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)