2012-11-06 3 views
0

저는 두 클래스 사이에 다 - 대 - 다 관계를 가지고 있습니다 : 공급 업체와 제품.ASP.Net 웹 API에서 관련 레코드를 가져 오는 올바른 방법은 무엇입니까?

내 웹 API에는 각 클래스에 대한 컨트롤러가 있습니다. 두 컨트롤러 모두 개체 목록을 가져오고 ID로 단일 개체 가져 오기 작업을 수행합니다.

필요한 것은 각 개체에 대해 많은 개체를 가져 오는 작업입니다. 예를 들어 VendorId를 제공하면 공급 업체가 제공하는 모든 제품을 원합니다. 마찬가지로 ProductId를 제공하면 제품을 공급하는 모든 공급 업체가 필요합니다.

1) 나는 제품 컨트롤러가 VendorID 값 소요) 공급 업체 컨트롤러의 제품 (비자 반대를 반환 조치를해야한다고 생각 :

나는 세 가지 질문이 있습니다. 이것은 "적절한"접근 방법입니까?

2) 위의 내용을 어떻게 구현합니까? 컨트롤러에 이미 해당 메서드 시그니처 (단일 항목 메서드)가있는 작업이 있으므로 이드를 사용하는 Get 액션을 추가 할 수 없습니다. 예를 들어

:

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

3) URL이 내가 특정 공급 업체의 모든 제품을 할 때 어떤 모습 하는가?

답변

1

1) 제품 컨트롤러가 VendorId를 가져와 제품 (및 공급 업체 컨트롤러의 반대)을 반환하는 작업이 있어야한다고 생각합니다. 이것은 "적절한"접근 방법입니까?

예, 가능합니다.

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

2) 어떻게 위의 구현합니까 예를 들어, 당신은 당신의 ProductController 2 개 등의 작업을 할 수 있습니까? 컨트롤러에 이미 해당 메서드 시그니처 (단일 항목 메서드)가있는 작업이 있으므로 이드를 사용하는 Get 액션을 추가 할 수 없습니다.

경로 매개 변수를 사용하여 위의 2 가지 작업을 호출하려는 경우 적합합니다. 이것을 접근하는 다른 방법이 있습니다. 한 가지 방법은 경로를 수정하는 것입니다. 또 다른 방법은 URL에 action 매개 변수를 전달하는 것입니다.

3) 특정 공급 업체의 모든 제품을 원할 때 URL이 어떻게 표시되어야합니까?

다음은 URL에 매개 변수를 전달하는 예입니다. 이 URL은 ProductController의 '가져 오기'조치를 호출합니다 :

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

ProductController의 'GetProductWithVendorId'작업을 호출합니다이 URL :

http://../api/product?vendorid=456 
관련 문제