3

マスターの ID に基づいて詳細レコードの取得を実装する最良の方法を決定しようとしています。

明らかに、マスターと詳細の両方に API コントローラーを設定します。

私が検討した解決策:

  • API コンシューマに OData を使用して、マスター ID でフィルタリングされたすべての詳細を取得させます。私はこのソリューションに問題はありませんが、それを API コンシューマーに置くのは少し気分が悪く、API によって内部的に処理されるべきものだと感じています。
  • Get/Put/Post/Delete メソッドのみを使用するという規則に反して、詳細コントローラーで「GetMastersDetails」のアクションを作成し、ルーティングを介してアクセスできるようにします。これは確かに機能しますが、これは Web API の要点から (ある程度) 離れているように感じます。
  • 「MastersDetailsController」という名前の 3 番目のコントローラーを作成します。このコントローラーには、さまざまな戻り値の型を持つマスター ID に基づく Get があります。
    • 詳細 ID のリストを返します。これを使用して、詳細コントローラーで Get を呼び出し、実際の詳細を取得します。
    • 実際の詳細オブジェクトのリストを返します。それについて私が気に入らないのは、コントローラーが基づいているものとは異なる型を返すことです。
4

2 に答える 2

0

私は#1か#2のどちらかで行きます。

#1の場合、ODataサポートは、説明したシナリオを有効にするだけでなく、将来必要になる可能性のある多くの追加機能を提供します。

#2については、WebAPIのポイントから離れるとは思いません。本当のRESTfulサービスから少し離れているかもしれませんが、実装と理解は簡単です。

于 2012-11-17T06:14:12.530 に答える
0

オプション 2 で問題ありません。オプション 1 では、シナリオや、ユーザーに何を許可したいかによって、さらに多くのリスクが生じます。

カスタムメソッドを ApiController に追加することは、実際には「慣習に反する」ことではありません。好きなようにできます。間違った HTTP メソッドを使用した場合 (つまり、カスタム メソッドで何かを削除するときに GET を使用した場合) は、「慣習に反する」だけです。

于 2012-11-20T16:32:19.837 に答える