(これは Rails に固有のものではありませんが、Rails 構成を使用して質問します)。
TL;DR
ユーザーが URI をアドレス バーに入力すると、実際には GET ではなく PUT 操作になるのでしょうか?
詳細
最近読み取った値のコピーを (効率のために) データベースに保持する Web 対応の Gauge があるとしますが、ユーザーはキャッシュされた値を更新する更新を要求できます。したがって、ルートは次のようになります。
VERB | URI Pattern | Effect
-----+-------------------+------------------------------------
GET | /gauge/:id | show the cached state of gauge #id
PUT | /gauge/:id/update | update the cached state of gauge #id
ゲージのキャッシュ状態を表示することにしました。これGET
は、GET を何回実行しても結果が変わらないためです。http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.htmlの用語では、GET 操作はべき等です。したがってGET /gauge/33
、ゲージ #33 のキャッシュされた値をフェッチします。
私がRFC2616を理解している限り、状態は呼び出しごとに変化する可能性がPUT
あるため、aを使用してローカル状態を更新する必要があります。これはべき等ではありません。別の言い方をすると、データベースに副作用が生じます。PUT /gauge/33/update
今: 私が RCF2616 を誤解している場合は、ここで止めてください。
質問
私の質問は非常に単純です。ユーザー/gauge/33/update
がブラウザのアドレス バーに入力するとどうなるでしょうか? サーバーには として表示されますがGET /gauge/33/update
、それに一致するルートはありません。
同じ URI パターンに対して GET と PUT の両方を含むルートを設定するのは一般的な方法ですか? つまり、ルーティング テーブルを次のように設定できます。
VERB | URI Pattern | Effect
-----+-------------------+------------------------------------
GET | /gauge/:id | show the cached state of gauge #id
PUT | /gauge/:id/update | update the cached state of gauge #id
GET | /gauge/:id/update | perhaps the same as PUT (but see below)
このアプローチに関する私の懸念は、ユーザーがGET /gauge/33/update
連続して 2 回 (またはそれ以上) 呼び出した場合、サーバーは、GET がべき等操作を通知するため、実際には更新を実行する必要がないと判断する可能性があることです。
私はただ衒学的ですか?または、RFC2616 を誤解していますか?