2013-08-28 9 views
7

私は、どのHttpメソッドをPUTまたはPOSTに使うべきかを決めようとしています。RESTful WebサービスでPUTメソッド等価が意味するものは何ですか?

StackOverlflowのいくつかの記事を見て、私はthisの投稿を見ることができました。ポストで回答の

一つは

PUTは冪等なので、あなたが二回オブジェクトを置けば、それは効果がありませんと言います。これは素晴らしいプロパティなので、可能な限りPUTを使用します。

ここで例を挙げて私を助けてくれる人もいます。私は、RDBMSのStudentテーブルにエントリが渡される生徒を作成しようとしているシナリオがあるとします。

ここで何度も何度もそのエントリをプットしようとすると、何の効果もありません。

答えて

7

PUTの場合、すべてにリソースの値が設定されているため、PUTが完了すると、リソースの状態が正確にわかります。 1週間待ってPUTをもう一度呼び出すと、リソースの状態が正確にわかります。

POSTは対照的にではありません。 idempotent - 値のサブセットのみをPOSTします。したがって、今日POSTを呼び出して1週間待ってから同じPOSTコールを再度実行すると、リソースの状態がわからないことがあります。POSTで設定していない値を変更した可能性があります。

偶数は、いつ、どのくらいの頻度でコールを発信しても、リソースの終了状態がまったく同じであることを意味します。

DELETEとGETも冪等元です。

+0

私が理解していないことの1つは、idem-potencyがHttpサーバーによって達成されていることですか?私はPUTとPOSTを使ってStrudentを作成しようとすることができます。したがって、Studentを作成している間は、私のサービスメソッドは、PUTまたはPOST要求がヒットした回数だけStudentを作成できます。 – Sam

+1

@Samサーバー上のコードがPUTの冪等性プロパティを強制していることを確認します。私はあなたの最後の文を理解していません。 idempotenceの詳細は次のとおりです:http://stackoverflow.com/questions/7016785/is-put-delete-idempotent-with-rest-automatic –

+1

あなたは私がidem-potencyが保証されていることを確認する必要があります。そうすれば、PUTまたはPOSTは単なる用語にすぎません。私はPUTを介して生徒を3回作り、POSTと同じように生徒を作成しようとします。だから、PUTで​​は生徒が3回生まれませんか?これが私の最後の文章の意味です。 – Sam

関連する問題