メソッドが違えば同じURLでも問題ない
フレームワークを使って開発していれば当たり前の話かもしれませんが、ハマる人間が一定数いそうなので記事にします。
GETとPOSTのようにメソッドが異なるリクエストを、同じURLに対して送信することはあります。これは特殊なケースでもなんでもありません。
Laravelの場合
例えばLaravelの場合、「Route::resource(‘/users’, UserController::class);」このようにルートを作成すると以下のような結果になります。
Method | URI | Name |
---|---|---|
GET|HEAD | users | users.index |
POST | users | users.store |
GET|HEAD | users/create | users.create |
GET|HEAD | users/{user} | usaers.show |
PUT|PATCH | users/{user} | users.update |
DELETE | users/{user} | usaers.destroy |
GET|HEAD | users/{user}/edit | users.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くらいに記憶しておきましょう。