2017-12-17 7 views
0

私の目標は、PUT動詞として実装されたidempotent/create REST APIを作成することです。REST APIでPUT create idempotentを作成する

Idempotent RFC状態:
クライアントがサーバーの応答を読み取ることができる前に通信障害が発生した場合、要求は
を自動的に繰り返すことができるので、

べき等の方法が区別されます。たとえば、
クライアントがPUT要求を送信し、応答が受信される前に基底の接続が閉じられた場合、クライアントは新しい
接続を確立し、冪等要求を再試行できます。たとえ元の
リクエストが成功したとしても、応答は異なる可能性がありますが、 を繰り返すと、意図した同じ効果が得られることがわかります。

PUT RFC状態:

ターゲットリソースが現在の表現を持っていないと PUTが正常に作成されます場合は、オリジンサーバが(作成された201を送信することによって、
ユーザーエージェントを通知しなければなりません)応答。
リソースが現在の表現とその表現
を持っている対象が正常に囲ま 表現の状態に応じて変更された場合、その後、オリジンサーバは、200(OK)または 204(いいえコンテンツ)のいずれかを送らなければなりません応答は
リクエストの正常終了を示します。

作成したリソースをDBに格納すると仮定すると、最初の作成時に201、再試行/作成時に200を返しますか? PUT RFCに準拠するために、DB内の同じリソースを再試行/作成する必要がありますか?

+0

POSTを使用して保存し、PUTを使用して更新します。 –

+0

私の目標は、PUTを作成する/冪等を作成することです。それは再試行できることを意味します – user1264304

+0

リソースを作成するか更新するかは、どのように分かりますか? –

答えて

1

この質問は少し混乱しています。私たちがそれを解くことができるかどうかを見てみましょう。

PUT /create 

abcde 

は概ね言う:表現abcde/createの状態を置き換えます。つまり、メッセージの意味は、このメッセージを処理することは二度、一度メッセージを処理するのと同じ効果を生じ

store(key => "/create", value => "abcde") 

お知らせの線に沿って何かです。

store(key => "/create", value => "abcde") 
store(key => "/create", value => "abcde") 

ここでは、ここで使用しているキーについて具体的に説明しています。 PUTはターゲットリソースの状態に関係します。 PUT /createは、/createを変更するように要求するメッセージで、その他のリソースを作成するリクエストではありません。

/createは、作成されたリソースをDBに格納すると仮定すると、最初の作成時に201を返し、再試行/作成時に200を返しますか?

はい。

PUT RFCに準拠するために、同じリソースを再度DBに格納する必要がありますか?

リソースが既に要求された表現を持っている場合、あなたは再びそれを保管する必要はありません。

+0

ありがとう。 _リソースが既に要求された表現を持っている場合は、再度保存する必要はありません._正しいとすれば、それを達成する唯一の方法は、DBからリソースを取り出し、それを本文のリソース表現と比較することです。 – user1264304

関連する問題