2012-12-02 193 views
17

我正在嘗試爲Symfony 2中的ReST客戶端建立一個最佳實踐模式,因爲這對我們公司來說是一項非常普遍的工作,我們在前端邊緣與Symfony應用程序交互,通過HTTP/ReST後端。Symfony2 ReST客戶端結構

我的想法是,這些服務填充DDD中的「存儲庫」角色。基於Doctrine指定的約定,這些將在返回Entity對象的Repository類中進行。

我認爲同樣的約定也可以在這裏工作,ReST客戶端使用像Guzzle這樣的庫實現一個Repository類,或者直接使用Curl,無所謂,然後代碼從XML或JSON進行基本轉換並返回給上游開發人員操作的實體對象。這與其他Symfony 2用例中的模式一致,從DDD的角度來看是有意義的。

有沒有人看到這個問題或更好的方法來做到這一點?

回答

1

我喜歡你所描述的方法。您可以將您的存儲庫視爲anti-corruption layer,這會將您的ReST客戶端代碼與域模型隔離。

1

如果您正確地考慮所有緩存層,以確保您的存儲庫不會緩存超出您檢索的REST對象的TTL(如通過etags或過期標頭或任何REST服務器使用的設置)。

絕對Repository是正確的層,雖然也許在Symfony中你想要更高一級並考慮它是一個實體管理器,因爲它可以讓你抽象在該級別上的操作,如持久性,刪除和刷新。

1

我想你是濫用Symfony中的存儲庫,如果你打算像那樣使用它們。 在你的倉庫中放置setter和getter並且在服務中使用guzzle/curl進行處理會更好。

控制器/命令 - >服務方法 - >庫

然後,根據你的需要,你可以寫一個命令/控制暴露在根據您的需求的服務的方法。

2

以下是應對REST API開發Symfony2中最好的文章:
http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/

FOSRestBundleNelmioApiDocBundle是快速REST API開發不錯的選擇。您可以訪問官方文檔以瞭解如何安裝,配置和使用它。

+0

問題是關於REST客戶端代碼結構,而不是API –