0

RESTful Web サービスに Openrasta を使用していますが、メソッドのパラメーターと URI に関して少し疑問があります。

例: ユーザー エンティティのセットアップに従っています。

構成:

 ResourceSpace.Has.ResourcesOfType<User>()
          .AtUri("/user")
          .And.AtUri("/user/{userId}")
          .HandledBy<UserHandler>()
          .AsJsonDataContract()
          .And.AsXmlDataContract();

PUT のハンドラ メソッド:

public OperationResult Put(long userId, User user){}

同じ URI はhttp://localhost/User/1になります

リクエストの本文には、次のような JSON が含まれます。

{
  "userId":1,
  "userName":"FirstName"
}

ここで、私の質問は次のとおりです。2 つのパラメーターを使用して PUT メソッドを定義することは正しいですか? それが正しい方法であれば、PUT メソッドの userId パラメータには、User エンティティ プロパティの UserId と同じ値が含まれます。

そして、PUT メソッドでは、これら 2 つの値が同じかどうかを確認する必要があり、同じでない場合は、URI が要求で提供されたエンティティと一致しないことを示す BadRequest を返します。リクエストの処理中に処理できず、PUT メソッドに User エンティティのみをパラメータとして持たせることができないのはなぜですか? 何か大幅に欠けているのでしょうか、それともこの設計についての私の理解は完全に間違っていますか? ご意見やご感想をお願いします。

4

1 に答える 1

1

それにはいくつかの理由があります。

1 つ目は、URI パラメーターを処理し、一度に 1 つの変数を入力に一致させる方法の技術的な制限です。同じことがキー/値コーデックにも適用されるため、1 つの User オブジェクトを持つことができます。しかし、json コーデックを使用すると、完全なオブジェクトが返されるため、User をすべてオーバーライドしてしまいます。

2 つ目は、私がその問題を解決しようとしなかったことです。主な理由は、URI パラメーターと応答本文を組み合わせると、おそらく避けたいと思われる多くの隠れたセキュリティ問題が発生するためです。

最後に重要なことですが、モデリングの観点から、ReST API は外部キーの代わりに識別子とリンクとして URI を使用する必要があるため、既に識別子 (URI) を持っている場合、それをエンティティ本体でモデル化する理由はほとんどありません。

于 2011-09-20T12:13:25.213 に答える