0

私は、ベンダーと製品という2つのクラスの間に多対多の関係を持っています。

私のWebAPIには、クラスごとにコントローラーがあります。両方のコントローラーには、オブジェクトのリストを取得し、IDごとに単一のオブジェクトを取得するという明らかなアクションがあります。

必要なのは、オブジェクトごとに多くのオブジェクトを取得するアクションです。たとえば、VendorIdを提供する場合、Vendorが提供するすべての製品が必要です。同様に、ProductIdを提供する場合、製品を提供するすべてのベンダーが必要です。

私は3つの質問があります:

1)Productコントローラーには、VendorIdを取得してProductsを返すアクション(およびVendorコントローラーの場合はその逆)が必要だと思います。これは「適切な」アプローチですか?

2)上記をどのように実装しますか?コントローラーにはすでにそのメソッドシグネチャ(単一アイテムメソッド)を持つアクションがあるため、IDを取得する別のGetアクションを追加することはできません。

例えば:

http://localhost:53962/api/product/1         // grabs product with Id = 1.
http://localhost:53962/api/product/vendor/1  // causes 404

3)特定のベンダーのすべての製品が必要な場合、URLはどのようになりますか?

4

1 に答える 1

1

1)Productコントローラーには、VendorIdを取得してProductsを返すアクション(およびVendorコントローラーの場合はその逆)が必要だと思います。これは「適切な」アプローチですか?

はい、これで動作します。たとえば、ProductControllerでこのようなアクションを2つ持つことができます。

    public Product Get(int id) {...}
    public Product GetProductWithVendorId(int vendorId) {...}

2)上記をどのように実装しますか?コントローラーにはすでにそのメソッドシグネチャ(単一アイテムメソッド)を持つアクションがあるため、IDを取得する別のGetアクションを追加することはできません。

ルートパラメータを使用して上記の2つのアクションを呼び出したい場合は、これが正しいです。これにアプローチするさまざまな方法があります。1つの方法は、ルートを変更することです。もう1つの方法は、URLでアクションパラメータを渡すことです。

3)特定のベンダーのすべての製品が必要な場合、URLはどのようになりますか?

URLでパラメータを渡す例を次に示します。このURLは、ProductControllerの「Get」アクションを呼び出します。

http://../api/product/123

このURLは、ProductControllerの「GetProductWithVendorId」アクションを呼び出します。

http://../api/product?vendorid=456
于 2012-11-06T19:33:40.993 に答える