備忘録です。
間違いなどございましたらご指摘ください。
##クライアントとサーバーのやりとり
Webにおいてサーバとクライアント間のやりとりは基本的にHTTPというプロトコルを用いる。
HTTPとは、WebサーバとWebクライアントの間でデータの送受信を行うために用いられるプロトコル。
Webの世界でのやりとりは基本的にリクエスト/レスポンスで成立。
- クライアントからサーバへの要求することをリクエスト
- サーバからブラウザへ応答することをレスポンス
##HTTPの仕様
HTTPにはいくつかの仕様がきめられていて
GET/POSTというのはその仕様で取り決められたHTTPの一部。
(他にもHEAD/OPTIONS/PUT/DELETEなどが定義されている。)
##GET
GETは指定したリソースの表現を転送するようにリクエストするメソッド。
(つまり、何か情報を検索したり取得するために使うためのメソッド。)
例えば、ブラウザでURLを入力し検索するとき、無意識にGETメソッドを使っている。
GETメソッドを使ってデータを送信する場合は、URLの後ろに送りたいデータを付与して送れる。
(データを取得したい時に使用、データベースの書き換えが必要ない場合。)
##POST
POSTは指定したリソースを実装した機能に従って処理をする機能
GETとは反対に冪等でないかつ安全でないと定義されている。
POSTメソッドを利用してデータを送信する場合は、HTTPリクエスト内のメッセージボディにデータを含めて送る。
リクエストとして送信されるデータはメッセージボディ部に含まれる。
(メッセージボディは、HTTPリクエストのパラメータ内容を渡す場所)
以下のようなデータを変更したい時に使用。
- HTMLのformタグに入力された内容をDBへ登録する
- ブログの記事を投稿する
- 新しいユーザを登録する
- 既存のデータに新しい情報を付加する
##リクエストパラメーターの付加の方法
GETはURLにクエリとして追加することが可能
上記で説明したとうり、GETメソッドを使ってデータを送信する場合は、URLの後ろに送りたいデータを付与して送れる。
(データを取得したい時、データベースの書き換えが必要ない場合。)
【例】
GET: /foo/bar?itemId=xxxx-xxxx
「URL?パラメータ名=値」という形式
「?」パラメータのはじまり
「&」パラメータの切れ目
「=」挟んだ左側がGETの変数名、右側が渡される値
一方、POSTはBodyをリクエストに含めることも可能。
また一般的にあまり使われないが、クエリを追加することもできる。
POST: /foo/bar?user="taro"
param:{"itemId": "xxxx-xxxx”}
##まとめ
- GETはリソースを取得するときに使うもの
- GETは情報を取得するときに使うもの
- POSTはリソースに対して特有の処理をするときに使うもの
- POSTは新しい情報の登録をするときに使うもの