Curl の PUT と POST に関する初歩的な質問


#1

問1)
POSTとPUTの違いについて
(a)更新の場合はPOST、新規作成の場合はPUT
(b)新規作成の場合はPOST、更新の場合はPUT
の2つの説明を見かけたのですが
どちらが正しいのでしょうか。

問2)
IDを指定せずにElasticSearchにIDを決定させる時は
PUTではなくPOSTを使用しますが、
IDを新規に作成するわけだから新規作成になると
思いますが、そうするとPOSTは新規作成となるので
問1) は(b) が正しいのでしょうか。

問3)
ElasticSearchに決めさせずにユーザーがすべて指定する場合は、
新規作成も更新もどちらも、PUTでもPOSTでも可能のように
思えるのですが、これは正しいでしょうか。

問4)
問3)が正しいとするとPUTとPOSTの差異は
問2)のようなべき等でない場合のみであり、
そうすると
PUTでできることはすべてPOSTでもできるように
思えるのですが、これは正しいでしょうか。

よろしくお願いします。


(Jun Ohtani) #2

ちなみに、どちらにその記述がありましたでしょうか?
公式ドキュメントの自動ID作成の記述に関してはこちらになります。

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#_automatic_id_generation
IDなしの場合はPOSTを使用する必要があります。

Update APIに関してはPOSTのみの受付となります。
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-update.html#_updates_with_a_partial_document


#3

ちなみに、どちらにその記述がありましたでしょうか?

例えば、
(例1) http://yohei-y.blogspot.jp/2005/04/rest-5-get-post-put-delete.html
・PUT はリソースを更新するメソッド
・POST はリソースを新規作成するメソッド

(例2) 書籍「高速スケーラブル検索エンジン ElasticSearch Server」 (アスキー・メディアワークス) 初版 33ページ
・POSTはオブジェクトの状態を変更する
・PUTはオブジェクトを生成する
などです。

IDなしの場合はPOSTを使用する必要があります。
Update APIに関してはPOSTのみの受付となります。

問5) これらはPUTでは駄目でPOSTを使用しなければならないケースですが、
逆に、POSTでは駄目でPUTを使用しなければならないケースはあるのでしょうか?

問6) 問5)のようにPUTかPOSTのどちらかが駄目ではないが、
つまり、PUTもPOSTもどちらも正常に実行しているが、
PUTとPOSTで実行結果が異なるようなケースはありますか?

なお、問1)~問6)は、
ElasticSearchにRESTAPIのコマンドを送って
作成・更新・取得・削除・検索・設定などの処理を
行わせる場合に限定してもらってもいいです。

よろしくお願いします。


(system) #4