1

User'sを含むUsersコレクションがあります。ユーザー-ID、FName、LName。

挿入には、Id、FName、LNameを使用してUserインスタンスを渡します。ユーザーが存在しない場合、サービスはユーザーを挿入します。

更新のために、すべてのパラメーターを使用してUserインスタンスを再度渡します。このサービスは、指定されたIDでユーザーのFNameとLNameを更新します。

サービスの2つの別々のメソッドとして挿入と更新が必要です。

両方のメソッドに同じURIを設定することはできません。以下のようなもの:

    [WebInvoke(UriTemplate = "Users", Method = "PUT")]
    void  UpdateUser(User instance);

    [WebInvoke(UriTemplate = "Users", Method = "PUT")]
    void  AddUser(User instance);

これを達成するための最良の方法はどれですか?

URIを更新して次のようなものにするという1つの投稿に同意しません:

    [WebInvoke(UriTemplate = "Users/{userId}", Method = "PUT")]
    void  UpdateUser(string userId, User instance);

なぜなら、ユーザーIDはすでにUserinstanceに存在しているからです。

PUTメソッドが挿入と更新を実行できることに同意しますが。どういうわけか私はそれらを別々に保つ必要があります。

4

2 に答える 2

3

べき等操作であるPUTは、PUTするURLに新しいリソースを作成するか、既存のリソースを完全に置き換える必要があります(このリソースをここにPUTします)。同じURLに対して同じPUTを複数回実行すると、同じリソースになります。

既存のリソースを変更しているため、POSTは必ずしもべき等ではありません。POSTが注文にアイテムを追加するようなことをしていて、同じデータを同じURLに複数回POSTすると、同じアイテムの複数を含む注文になる可能性があります。

簡単に言えば、PUT操作を挿入し、POSTを更新します。

このSOアンサーはそれを説明するのに本当に良い仕事をしていると思います。

于 2011-02-03T13:32:15.657 に答える
1

あなたはそれをいくつかの方法で見ることができます

  • PUT-更新用ですが、提供されたIDが存在しない場合は、挿入します
  • POST-作成の場合、IDを無視するため、同じデータを複数回渡す場合でも、好きなだけ挿入します

だから私は言うだろう:

  • ユーザーを追加します:/ POSTを使用するユーザー(ただし、理論的には代わりにPUTを使用してこれを行うことができます)。
  • ユーザーを更新:/ Users / {userId} with PUT

次に、GET...を使用してユーザー情報/Users / {userId}を取得するか、Deleteを使用してユーザー/ Users/{userId}を削除します。

これが役立つかどうかわからない場合は、私に知らせてください。もう一度やり直します:-)

于 2011-02-03T13:29:46.783 に答える