httpメソッドの違いについて(個人的考察)

httpメソッドの違いについて(個人的考察)

httpメソッドの get post delete put とかって未だに用途やメリットを理解しきれず使っていたけど、きちんと調べなおしてみた。
結局httpにおける通信仕様・それからお約束みたいなものと理解。
https://qiita.com/kanataxa/items/522efb74421255f0e0a1

きっかけ

ふとログイン機能などをajaxで実装しているときに、get?post?で悩んだことから。

自分なりの理解をまとめる

REST ful設計を通して理解したつもりでいたけど、振り返ってみると根底からきちんと理解できていなかった。
そもそもPOSTは視覚的に視認しづらいから安全だと思っていたけど、通信盗聴などの問題からいうとどれも大差ないと。
つまり安全性という観点でhttpメソッドは考えない方がよさそう。

get

get通信は取得系として利用するために使われるべきである。
URLにパラメータを乗せる特性があるのもそのためであり、ブラウザを利用する点においてのブックマークや検索ページの共有をできる利点がある。

post

post通信は登録系で利用する。
データをbody部に乗せて送るもの、getより大量のデータを通信することができる(php,webサーバの設定により限界値はあるが)。
ただ、通信時のbody部にデータを含めるため、getと違い実利用として結果の共有などはそもそもできない = 登録系として使う思想が故の仕様なのだろう。

put, delete, patch はpostに近い話になってくるので割愛。

さらにまとめ

現実的な話をすれば、別にpostで全部できちゃうのである。
結局バックエンドでどう処理するかは、バックエンドのプログラムに依存するわけで
それをhttpメソッドが制御することなんてできない。
ただ、実際に通信をハンドリングするときや、apiとして設計するとき、などはこのhttpメソッド情報が重要になってきて
きちんと思想に基づいて設計されていれば、get=取得系処理を行っている、post=登録系処理を行っている、という情報がデータとしても抽出しやすいし視認性も高い。
apiを利用する側だってわかりやすいはずだ。
またget通信を正しく実装できていれば、ユーザには検索結果の共有ができるなどのメリットも生まれてくる。
本来の使い方・思想を理解して実装していれば、ルールの統一も認識の統一もしやすくなるはず。
REST fulはそのhttp仕様に厳密に則った思想であり、現に著名api(twitterなど)はREST fulを採用している。
ただ、現実的な仕事での現場や実装の手軽さ、といったところから深い設計がされずget,postが雑に使われているシステムも多く存在する。
だから宗教戦争だなんだの言われるようになったんじゃないだろうか...。

結論

httpメソッドは実装上の縛りはない、だけどちゃんと用途別に実装した方がみんなハッピーになれるよ。
せめて自分は正しく理解して使って、後世にも正しい知識を伝えていこうと思う。

END

Close