2017-03-01 8 views
1

몇 가지 서비스가있는 서비스 지향 아키텍처가 있습니다.http를 통해 한 서비스에서 다른 서비스로 정렬 된 데이터를 얻는 방법

  • 제품 - 제품

    { id: number, price: number }

  • 카테고리의 저장 목록 - 스토어 카테고리 정보 + 제품 ID 목록은

    { id: number, parentCategory: number, productIds: number[] }

그 I 가정하자 그런 분류를 가지고있다. nce

{ 
    id: 1, 
    parentCategory: null, 
    productIds: [1, 3, 4, 5, ....] 
} 

위의 카테고리에서 10 개 제품을 제품 가격별로 정렬해야합니다. 범주가있을 때 잘 작동하지 않습니다

/api/products? 
    ids=<list of all product ids> 
    limit=10 
    sortBy=price 

: 요청하고 그 가격에 대해 아무것도 알지 못하기 때문에 그런 제품 서비스에 대한 요청을하는

종류의 서비스 프로세스 많은 제품.

그런 경우 조리법은 무엇입니까? 감사합니다. .

+0

왜 이러한 ID를 다시 정렬해야합니까? 아마 그들을 돌려받지 말아야할까요? 그러나 제품 서비스를 통해 전달하여 다른 서비스 호출로 정렬하고 다시 전달할 수 있으며 올바른 순서로 응답하지는 못합니다. 이러한 ID를 다른 방법으로 전달해야합니다. 그렇지 않으면 범주 서비스에서 이미 정렬해야합니다. – cassandrad

+0

@cassandrad 아니요, 정렬 된 ID를받을 것으로 기대하지 않습니다. 기본적으로 сategory는 미리 정의 된 제품 ID 목록 (특정 범주에 속하는 ID)을 정렬하고 10 개의 제품 항목 만 반환하도록 요청합니다. 예를 들어 카테고리에 1000 개의 제품 ID가 있으면 HTTP 요청을 통해 모든 제품을 보내야 할 때 걱정됩니다. –

+0

질문에 두 서비스의 데이터가 포함 된 예제를 추가 할 수 있습니까? – cassandrad

답변

2

나는 빅터에 동의 - POST 요청은 잠재적 인 문제를 해결할 수 있습니다. 예를 들어, 수천 개의 ID가있는 경우와 같이 성능에 대해 우려하는 경우 이러한 서비스를 함께 병합하는 것이 좋습니다. 또는 카테고리 서비스의 가격 데이터를 중복하십시오.

성능상의 이유로 데이터 중복 및 여러 서비스를 하나로 통합하는 것은 마이크로 서비스 아키텍처의 일반적인 상황입니다. 그러나 귀하의 제품 서비스가 정보만을 저장하고 비즈니스 로직을 갖고 있지 않다면, 나는 확실히 합병을 고려할 것입니다.

또한 카테고리 서비스에서 이미 모든 ID를 정렬하도록 고려하십시오. 제품 서비스가 유용하고 오직 정렬 만하는 것이 아니라면이 경우 최상의 솔루션이 될 것입니다

1

엔드 포인트 만 Http Post를 수신하도록 설정해야하며 모든 제품 ID를 요청 본문에 넣어야합니다. 이런 식으로 뭔가 :

{ "IDS": [], "제한"(그것은 귀하의 모든 ID를 가진 배열) : 10, "sortBy": "가격" }

확실하지 왜 "제한"필드를 가지고 있는지, 나는 제한을 제어하는 ​​것은 당신이 얼마나 많은 ID를 전달하는지 생각할 것입니다.

+0

카테고리는 항상 모든 제품 ID (분류 방법을 알지 못함)를 보내야하며 제품 서비스 정렬을 요청하고 다시 10 개 제품 만 반환합니다. –

+0

괜찮습니다. Http Post의 본문에서 요청을 보내면 URL의 공간이 부족한 문제를 해결해야합니다. – victor