2017-03-01 69 views
1

我有面向服務的體系結構和幾個服務。如何通過http從一個服務獲取排序後的數據到另一個服務

  • 產品 - 產品

    { id: number, price: number }

  • 分類商店名單 - 店鋪分類信息+產品ID列表

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

讓我們假設我有這樣的類別insta nce

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

我需要從上面的類別中獲得10個產品,按產品價格排序。

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

將不能很好地工作時,類別有:

該請求,並因爲它不知道價格什麼它發出請求到這樣的產品服務種類服務流程很多產品。

這種情況下的配方是什麼? 謝謝。

+0

爲什麼你需要得到這些ids重新排序?可能你不應該收到他們回來?但是可以通過產品服務將它們傳遞給他們,在那裏他們可以被排序並在另一個服務調用中傳回,而不是以正確的順序響應?你必須以這種或那種方式傳遞這些ID,否則你需要讓他們已經在Categories服務中排序, – cassandrad

+0

@cassandrad不,我不希望收到排序的ID。 本質上,сategory會要求對產品ID(屬於某個類別的ID)的預定義列表進行排序,並僅返回10個產品項目。而且我很擔心,例如,該類別將有1000個產品ID,它必須通過HTTP請求發送所有這些ID。 –

+0

您能否在您的問題的兩種服務中添加數據示例? – cassandrad

回答

2

我同意勝利者 - POST請求可以解決潛在問題。如果您擔心性能問題,例如,在數千個ID的情況下,您應該考慮將這些服務合併在一起。或在類別服務中重複價格數據。

由於性能原因,數據重複和合並多個服務是微服務架構中的正常情況。但是如果你的產品服務只存儲信息並且沒有任何業務邏輯,那麼我肯定會考慮合併。

此外,請考慮讓所有ID已在Categories服務中排序。對我來說,這將是這種情況下的最佳解決方案,如果產品服務不會做任何有用的業務和只有排序

1

您應該讓該端點只接收Http Post,然後您應該將所有產品ID放在請求的正文中。事情是這樣的:

{ 「IDS」:[], 「限制」(在它所有的ID的數組):10, 「sortBy」: 「價格」 }

不知道爲什麼你有「限制」字段,我認爲控制限制的是你傳遞了多少個ID。

+0

在我的情況下,類別總是必須發送所有產品id(它不知道如何對它們進行排序),並要求產品服務排序並且只返回10個產品 –

+0

沒問題。在Http Post正文中發送請求仍然可以解決您在網址中耗盡空間的問題。 – victor