グループと呼ぶリソースを管理する REST API があるシナリオがあります。グループにはメンバーが含まれており、グループ リソースは動的です。それを取得するたびに、最新のデータを取得します (したがって、グループ内のメンバーの数を更新するには、サーバー側でクエリを実行する必要があります。つまり、要求の結果はクエリの実行結果が保存されるため、データを変更できません)。
*group_id* を指定すると、次のような最小限の情報が返されます。
{
group_id: "5t7yu8i9io0op",
group_name: "That's my name",
size: 34
}
したがって、このリソースへの GET はリソースを変更します。これは、後続の GET が「サイズ」の新しい値を返す可能性があるためです。これは、べき等ではないことを示しているため、POST を使用してこのリソースを取得する必要があります。この結論で正しいですか?
私が正しければ、グループに現在保存されているデータのみを返す GET メソッドも提供することをお勧めします (たとえば、サイズが古くなっている可能性があり、名前も古くなっている可能性があります)。この場合、最終更新日をフィールドの 1 つとして返す必要があると思います。これにより、ユーザーはリソースが最新であることを知り、POST メソッドの使用を選択できるようになります...しかし、疑問が残りますなぜ誰もがそれを行うので、POST メソッドのみを提供し、GET を忘れないのはなぜですか?
私は混乱しています!
前もって感謝します。
[編集]
@Satish は、HTTP 仕様への回答にリンクを投稿しました。セクション 9.1.1。次の文で終わります。
当然のことながら、サーバーが GET 要求を実行した結果として副作用を生成しないことを保証することはできません。実際、一部の動的リソースはそれを機能と見なしています。ここでの重要な違いは、ユーザーが副作用を要求したわけではないため、副作用について責任を負うことはできないということです。
したがって、私のシナリオでは、リクエスターは、リクエストを行った直接の結果として「サイズ」の値が再計算されるという副作用をあまり気にしません。彼らはグループ情報を必要としており、たまたま正確で最新のグループ データを提供するために、その値を更新するためにサイズ クエリを実行する必要があります。リクエストを行うとデータが変更されることは、これが POST であることを意味しますが、ユーザーはその副作用をリクエストしなかったため、GET リクエストは受け入れられ、より直感的ではないでしょうか? したがって、この文に従って、まだ安らかに過ごしてください。
[2回目の編集]
@Satish はコメントで非常に重要な質問をします。したがって、これを読んだ他の人のために、この問題についてさらに説明します。
通常、REST 要求からグループ クエリを実行してそのサイズを更新することはありません。メンバーがグループに追加またはグループから削除されると、そのグループの計算されたサイズを更新して保存すると、単純な GET 要求で常に正しいサイズが返されます。ただし、グループはクエリ定義として ElasticSearch (RDBMS のビューのようなもの) としてのみ格納されるという点で、私たちの状況はより複雑です。メンバーはグループに追加/グループから削除されません。それらは、はるかに大きなデータ セット (MongoDB のコレクション) に追加されます。何百、場合によっては何千もの異なる「グループ定義」があるため、コレクションが変更されたときにすべてのグループのサイズを再計算するのは現実的ではありません。どのグループがサイズを変更する可能性があるコレクションにアイテムが追加/コレクションから削除されるかを知ることはできません.グループ定義を実行することによってのみ、そのグループに誰がいて、サイズが何であるかを知ることができます. これで問題が解決することを願っています。:)