2012-11-16 3 views
3

마스터 ID를 기반으로 세부 레코드 검색을 구현하는 가장 좋은 방법을 결정하려고합니다.마스터 - 세부 컨트롤 구성 ASP.Net 웹 API

분명히 마스터와 디테일을위한 API 컨트롤러를 설정할 수 있습니다.

솔루션은 내가 생각했습니다

  • 유무의 API 소비자는 마스터 ID에 의해 필터링 모든 세부 사항을 얻기 위해 하나로, OData를 사용합니다. 이 솔루션에 문제가 없지만 API 소비자에게 내포하는 것이 좋지 않으며 API에 의해 내부적으로 처리되어야한다고 생각합니다.
  • Get/Put/메서드를 게시/삭제하고 세부 컨트롤러에서 "GetMastersDetails"작업을 만들고 라우팅을 통해 액세스 가능하게 만듭니다. 이것이 확실히 작동하는 동안, 나는 이것이 (어느 정도까지) 웹 API의 전체적인 관점에서 벗어나게된다고 생각한다.
  • 다른 가능한 반환 유형 마스터 ID를 기반으로하기 것 "MastersDetailsController"라는 이름의 3 컨트롤러를 만듭니다 다음 온 가져 오기를 호출하는 데 사용된다 세부 ID의 목록을 반환
    • 세부 정보 컨트롤러가 실제 세부 정보를 얻습니다.
    • 실제 세부 개체 목록을 반환합니다. 내가 싫어하는 부분은 컨트롤러가 기반으로하는 것과 다른 유형의 컨트롤러를 반환하는 것입니다.

답변

0

옵션 2이면 문제가 없습니다. 옵션 1은 시나리오에 따라 더 많은 위험을 초래하고 사용자가 액세스 할 수 있도록 허용하려고합니다.

ApiController에 사용자 지정 메서드를 추가하는 것은 실제로 "규칙에 위배되는"것은 아닙니다. 원하는대로 할 수 있습니다. 그렇게하고 잘못된 HTTP 메소드 (예 : 맞춤 메소드에서 항목을 삭제할 때 GET)를 사용하는 경우에만 '규칙에 위배됩니다.'

0

# 1 또는 # 2 중 하나와 함께 사용합니다.

# 1의 경우, OData 지원은 설명하는 시나리오뿐만 아니라 향후 필요할 수있는 많은 추가 기능을 제공합니다.

# 2의 경우 웹 API의 관점에서 벗어나지 않는다고 생각합니다. 진정한 RESTful 서비스의 비트 일지 모르지만 구현하기 쉽고 이해하기 쉽습니다.

관련 문제