「overloaded POST」 ってなんぞや?

こんにちは!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が採用されてないの?



jxck.hatenablog.com


こちらの記事によると、


まとめると、以下のような感じかと思います。

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