2017-02-20 82 views
0

我目前一直堅持以一種方式設計我的端點,以便它們符合REST原則,同時確保底層數據的完整性。以RESTful方式轉換資源

我有兩個資源,ShadowUserRealUser,而第一個只有名字,姓氏和電子郵件。 第二個用戶擁有更多的屬性,例如Id,在該Id下可以在系統中的其他位置尋址真實用戶。

我用例是具體ShadowUser秒值進行轉換成真正的用戶。

在我腦海中的流動似乎很簡單:

  • 得到影子用戶/ GET API/ShadowUsers somePropery = someValue中
  • 創造新的真正的用戶與數據獲取/ POST API/RealUsers
  • 刪除陰影用戶/ DELETE API/ShadowUSers?somePropery = someValue中

但會發生什麼時,有創造新的用戶和那些陰影的缺失之間的問題?數據現在不一致。 當只有一個用戶時,該示例更加容易,但問題保持不變,因爲步驟2和3之間可能存在某些問題,導致用戶以陰影和真實形式存在。

所以現在的問題是,如何能在「交易」的方式,其中,任何事情都有進行,並堅持還是出事了,沒有什麼已經在底層數據存儲改變了嗎?

是否有任何可以使用的「最佳實踐」或「設計模式」?

回答

-1

也許REST的API獲取和批量POST操作這些真實用戶的角色(我問了一個問題,幾個星期前,瞭解相關問題:Updating RESTful resources against aggregate roots only)。

在API側,貼使用者不會直接處理,但它們將在一個可靠的消息隊列(例如RabbitMQ)入隊。後臺進程將訂閱整個隊列,它將分別處理真實和影子用戶的創建和刪除。

使用可靠的消息傳遞系統的一點是,您可以實施重試策略。如果操作在完成工作中途中斷,您可以重試它,並檢測哪些更改仍在等待完成任務。

總之,使用這種方法可以以事務方式實現該操作。