2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HTTP メソッドの定義

Last updated at Posted at 2019-04-10

よくある捉え方

CRUD に合わせて以下のように考えがち。

  • Create → POST
  • Read → GET
  • Update → PUT
  • Delete → DELETE

しかーし! ここで多くの人が詰まる。この4つで足りない処理は? と。
実際にシステムを作ってみればわかるが、この4つでは足らないのが普通なのだ。
しかし、HTTP メソッドを創作するわけにはいかない。何かが間違っているのだ。

メソッド本来の意味

POST はポスティングのポストである。つまり、投函のイメージ。やった回数分だけ反映される。
GET は取得。何度取得しても、取得したことによって変化を生じさせない。
PUT は置くこと。日本語で言ってしまえば 登録。何度やっても1度やるのと変わらない。
DELETE は削除。何度やってもよい。成功すりゃ消えとるしね。

まとめると……

ここで注目したいのが、POST と PUT との違い。POST は呼ばれるたびに作用する。PUT は何度やっても同じデータを登録するだけ。つまり、データベースで ID(主キー)を持つようなデータの登録は、PUT なのだ。いくらそれが初登録で、SQL で言えば INSERT 文であろうと、それは PUT の仕事なのだ。つまり、「日本語で言ってしまえば 登録」と書いたが、UPSERT とか MERGE と言われる処理全般において、それは PUT の仕事なのだ。ただし、ID(主キー)が自動生成で、呼ばれるたびに増えていくものであれば、ID を示しているわけではなく、新しいものを生成し追加してちょ! という意味なので、それは PUT ではなく、POST ということになる。つまり、こういうことだ。

HTTP メソッド DB 操作 CRUD 説明
PUT INSERT, UPDATE C, U 登録
GET SELECT R 取得
DELETE DELETE D 削除
POST 単純ではないヤツ どれでも 指示、命令、要求など

POST だけ仲間はずれ。そう、POST は汎用的に使えるメソッドなのだ。つまり、指示書を投函(POST)するイメージ。他の3つは、リソースに対して登録・取得・削除するということ。だから、POST を使用するときは指示の内容は Body に JSON などで書くべき。URL は、その指示書を投函する窓口を指すものであるのが望ましい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?