기존 제품 데이터베이스의 꼭대기에 (읽기 전용) REST 서비스를 배치해야합니다. "실제로이 서비스의 호출자가 아니라 같은 (상점의 ID와 특정 프로세스의 기반으로 자신의 관련 제품을 얻을해야합니다, 지금REST API 디자인 : 하위 리소스가 될 수있는 리소스를 처리하는 방법
/api/products/
: 쉬운 부분처럼, 최상위 제품 리소스를 가지고있다 소매 "). 이러한 두 가지 값을 조합하면 구성 요소의 하위 집합이 생성됩니다. 이것은 발신자에게 투명해야하며 "제품 포트폴리오"에 대해 알 필요가 없습니다.
그래서 나는 1234가을 StoreID이고 소매는 과정이고,이 같은 URI를 설계에 대해 생각 :/api/stores/1234/retail/products
여기 온다 내가 여기 또는 URI에 대한 모든 제품을 반환해야하는 경우입니다 첫 번째 질문 .../api/products/...에있는 개별 리소스는 호출자가/api/products에서 각 개별 제품을 검색 할 필요가 없다는 것을 분명히 알 수 있습니다./api/products에 캐싱 두통을 일으킬 수 있습니다. 상점/1234/retail/products URI.
물건을 복잡하게하는 것은 당연히 그 제품에도 가격이 있습니다. 여기에도 제품에는 하나의 가격이 없지만 다른 요인 외에 StoreID 및 프로세스에도 종속 된 여러 제품이 있습니다. 실제로, 가격 때문에, 제품의 직접 자녀 :
/api/stores/1234/retail/products/ABCD/prices
:을 StoreID 및 프로세스와 관련된으로
/api/products/ABCD/prices
다시 확실한 선택,하지만 것처럼, URI에이 가격을 사전 필터링
이 더 적절할 것입니다.
동시에 제품 세부 정보와 같이이 URI에 속하지 않는 다른 하위 제품이 있습니다. 그것들은 저장소 나 프로세스에 의존하지 않으므로 분명히/api/products/ABCD/details 아래에서만 의미가 있습니다.
그러나 이것은 어쩐지 나에게 지저분 해 보입니다. 그러나 동시에 만 queryparam 필터가 직접 제품 리소스에 그것을 해결함으로써이 문제를 해결, 훨씬 좋네요하지 않고 모두를 제공하기 위해 발신자를 적용하지 않습니다, STOREID 및 프로세스 : 더욱
/api/products?store=1234&process=retail
/api/products/ABCD/prices?store=1234&process=retail
, 프로세스 또는 storeid는 제품과 관련이 없으므로 직접 제품에 대해 질의하는 것이 이상하게 보입니다. 가격을 생각하면 이해할 수 있습니다.
제 질문은 : 제가보기에는이 문제를 해결할 수있는 좋은 방법이 있습니까? 그리고 : 하위 제품 일 때 전체 제품을 반환하는 것이 좋습니다. 그렇게 할 때 캐싱 (HTTP) 캐싱에 대해 어떻게 생각합니까? [...] 사기꾼이 될 것이 이 원인이 것이 내가/API/제품 /에 개별 자원에 여기에 제품이나 URI를 전체 반환해야하는 경우 여기에 오는
'store'와'process'가'products' 리소스의 매개 변수라면, 하위 리소스를 가져 오더라도 거기에 보관하는 것이 더 깔끔한 것 같습니다. 구조를위한 행렬 매개 변수 -'/ api/products; store = 1234; process = retail/ABCD/prices'. 일반적으로 말하자면, 좋은 URI 디자인은 클라이언트를 어쨌든 서버 응답에서 필요한 모든 것을 배우게 될 것이기 때문에보다 복잡한 RESTful 서비스를 만드는 것은 아닙니다. 진정한 RESTful 환경입니다. 대부분의 REST 서비스는 스스로를 RESTful하게 호출해서는 안되며 HTTP 또는 ASOTOH의 최상위에있는 API 서비스 –
절대적으로 의미가 있지만,/api/products URI를 통해 직접 노출하는 것과 관련된 한 가지 문제점은 저장소와 프로세스의 조합이 실제로 특별한 의미를 가지며 내가 선택한 데이터 집합을 줄입니다. 예를 들어 저장소 ID 만 전달하면 모든 제품에서 계속 선택되지만 두 제품 모두 전달하면 구성된 하위 집합에서만 선택됩니다. 그래서 특별한 시나리오를 쿼리 할 때 특수한 URI를 사용하는 것이 저장소와 프로세스가 제품과 직접적으로 관련이 없으므로 더욱 의미가 있다고 생각했습니다. – CodingByLuck