①GETはなにかを取得するときに使うべきもの。
POSTはなにかを新しく登録するときに使うもの。
と聞いたのですが
私はgetはurlの後ろにパラメータを付与してhttprequestをする。postはパラメータをbodyに含めてhttprequestをする。と認識しています。すると、①の説明が意味がわかりません。
なにか私は勘違いをしているのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
URIとは何か HTTPメソッドとは何か というところを理解する必要があります。
URI(URL)とは世界中のリソースを特定するための識別子です。
Uniform Resource Identifierの略です。URLのLはLocatorです。
http://www.piyo.com というサイト(サーバー)があったとしてユーザ情報を管理するURLが
http://www.piyo.com/users
だったとします。
ここでusersリソースを管理するには
・新規でIdを発行したいのか(登録)
・Idが1のユーザ情報を取得したいのか(取得)
・Idが1のユーザを更新(置換え)したいのか(更新)
・Idが1のユーザを削除したいのか(削除)
という操作を行う必要があります。この操作をCRUD(Create,Read,Update,Delete)といいます。
つまりURLに対してどの操作をするのか ということをHTTPメソッドPOST,GET,PUT,DELETEで行うのです。
・新規でユーザIdを発行(*注1)する場合
POST /users
・Id=1のユーザを取得する場合
GET /users/1 または GET /users?id=1
・Id=1のユーザを更新(*注2)する場合
PUT /users/1 または PUT /users?id=1
・Id=1のユーザを削除する場合
DELETE /users/1 または DELETE /users?id=1
となるのです。
お気づきでしょうか? GET,PUT,DELETEの場合のURLは同じなのです。
これが本来のURLの考え方なのです。
/users/1 というId=1のユーザに対して、どういうアクション(取得、更新、削除)するかというそれだけなのです。
*注1 ここでPOSTの意味をもう少し詳しく説明します。
新規登録ということはまだユーザIdは発行されていません。つまり今登録しようとしているユーザを表すURLは存在していません。
なのでユーザ全体を表す /users というリソースに対して、新規発行(POST)を行い、
新しいURLを生成することがPOSTの本来のあるべき姿です
URLはリソースを表すので、これから登録するデータをURLに含めることはできません(本来のURLの使い方ではありません)
たとえばname=hanako&birthday=1900-01-01 といった情報をURLに含めて情報を登録するのは使い方としては間違っています。くどいようですがURLはリソースを表すのです。
ですので bodyにデータを入れて 登録したいリソースの集合を表すURLにPOSTするのです。
*注2
更新はPUTを使うのですがPUTの役割は更新だけではありません。実は登録または更新なのです。
POSTの登録とどう違うのか、というところですが
POSTの場合idの生成をサーバーが行うのでPOSTをすることで初めて新しいURLが生成されます。
ですがURLを叩く側が独自にURLを指定できる場合、新規登録でもPUTを使うのです。
たとえばお使いのコンピュータのファイルシステムの特定のフォルダにファイルを新規作成した場合
C:¥Users¥piyo¥Documents¥新しいファイル.txt
これはURIを指定してファイルを新規作成しているのでPUTなのです。
更新にはPUTだけではなくPATCH(一部データの書き換え)というメソッドも存在します。
PUTはファイル全体を上書きするイメージ(同じファイル名で上書き)
PATCHはファイルを開いてテキストを修正して保存するイメージです。
まとめ
URLのQueryString ?param=value はGETでしか使えない(使わない)というのは間違いです。
データをサーバーに送る(登録、更新、削除)ものをすべてPOSTというのは誤用です。
投稿2017/08/10 16:55
編集2017/08/11 02:48総合スコア1408
0
GET はサーバから取得するデータを絞り込む為にパラメータを付与します。POST はサーバにデータを送り込みます。
また GET で送り込めるのはクエリ(URLの後ろのパラメータ)だけですが、POST はクエリ形式に限定されているわけではありません。
どちらも結果を取得する事にはなるのですが、サーバは POST で送り込まれた内容を解析してデータベースに登録するなどを行います。
なぜそれを GET でやならいのかと思われるかもしれません。もちろん GET でもデータ登録をやろうと思えばできます。ただ GET は例えば URL が書かれた文書をクリックしブラウザが起動しただけでデータが登録されてしまいます。POST はそういった事がありません。
単なるクライアントとサーバとの間の取り決め(HTTPプロトコル)です。
投稿2017/08/10 16:17
総合スコア5030
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
むかしむかしのHTMLしかない時代は GET でHTMLページを取得してました ・・・ ①
そのうちデータ登録したいな!ファイルのアップもしたいな!ということから
フォーム概念が生まれてデータを送信する機能が追加されました ・・・ ②
と、私は理解しています。
① でもデータを送り込むことはできますし、②でもページは取得できます。
なので、panjaA さんの解釈は間違っていません。
ただ ① でデータを送り込むと
・環境変数にセットされるので格納文字数に制限がある(大量データの送り込みに難あり)
・格納したいデータが外部にさらされる(ブックマークとかログにデータが落ちる)
といった制約があるので危険なデータは①であえて送信させません。
→ 情報漏洩リスクが無い機能 かつ データの意味が変わらない
(検索の絞り込みとか)で利用します
お聞きになられた①の説明では「ページの取得」という意味にも取れますので
双方あってるかと。
認識は間違ってないので気にしなくても良いかと思います。
投稿2017/08/10 20:03
総合スコア780
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/11 01:21