こんにちは!kossyです!
めっきりアウトプットが減ってしまいました、、、
Ruby sliverの取得・基本情報技術者の取得・オリアプの開発など、
やりたいこと、やるべきことが湯水の如く湧いて出てくるので、
やらないことを決めることが困難な状況であります。
今日は久しぶりにブログを描きたくなったので、
「overloaded POST」について、ブログに残してみたいと思います。
HTML5ではPUT/DELETEメソッドが採用されてない
HTML5(正確には旧バージョンでも採用されていないが)ではformでHTTPメソッドである
PUTとDELETEメソッドを採用していません。
HTTPメソッドってなんぞや?という人は、
こちらを参考にしてみてください。
https://wa3.i-3-i.info/word11405.html
平たく言うと、インターネットでWebページを見るときのお願いの仕方のことですね。
そのお願いの仕方の中に、値を更新するような処理をするPUTメソッドと、
値を削除する処理をするDELETEメソッドが採用されていないと言う訳です。
「え、削除も更新もできないってやばくね?」
って思われる方がいらっしゃるかもしれませんが、
先人達の知恵は素晴らしく、PUTやDELETEが無くとも更新や削除の挙動を実現しているのです。
その一つが、「overloaded POST」と言う手法です。
「overloaded POST」って?
webアプリケーションフレームワークの一つであるRuby On Railsでは、PUTやDELETEの挙動を、
_methodというパラメータにHTTPメソッド名(PUTとかDELETEとか)を埋め込んでPOSTリクエストをすることで、
実現しています。この手法を「overloaded POST」と呼ぶそうです。
なので、RailsでDELETEの挙動を実現させるためには、
= link_to "削除", "/reviews/#{@review.id}", method: :delete
という風に、method: :deleteと明示的に記述する必要があります。
なんでHTML5にPUTとDELETEが採用されてないの?
こちらの記事によると、
まとめると、以下のような感じかと思います。HTML4.x 以前: 需要があまりなく、積極的に仕様に追加する人もおらず、 HTTP3.2 からの仕様を引き継いでいた。
XForms: 仕様には取り込んだが、それを含む予定だった XHTML2.0 の策定が終了し、普及しなかった。
HTML5: 議論は何度かあり、現在 Cameron 氏のドラフトあたりが有力で、これはそのうち ML に投げられる模様。
HTML5.1?: Cameron 氏のドラフトが議論され、承認されればこの辺で入るかもしれない。入らない可能性は大いにあると思われる。
とのことで、需要がないから採用されていない、という要因が大きそうです。
参考にさせていただいた記事
なぜ html の form は PUT / DELETE をサポートしないのか? - Block Rockin’ Codes
https://wa3.i-3-i.info/word11405.html
https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88-Ruby-Rails-%E3%81%99%E3%81%8C%E3%82%8F%E3%82%89-%E3%81%BE%E3%81%95%E3%81%AE%E3%82%8A/dp/4774165166