2015-11-16 65 views
0

我有一個基於symfony2的應用程序,基本上公開了REST API。該應用程序沒有任何用戶界面。symfony2:從命令訪問REST api

在同一個應用程序中,有一些命令是爲了操縱資源而創建的。如創建用戶,重置用戶密碼,刪除用戶,將用戶分配給特定組等。

現在我想讓命令類使用REST API(它們只是控制器操作)來執行實際因爲這些REST API已經配備了驗證邏輯或需要其他業務邏輯等。

問題:從Command類使用REST API(也稱爲控制器操作)的最佳選擇是什麼?我可以想到以下兩種方法。

  1. 在命令類中創建請求對象。設置正確的請求內容,頭文件等。包含控制器類並使用創建的請求對象靜態調用控制器操作。

  2. 使用curl使正確的內容和標題進行http調用。

在以上兩種方法中,第一種方法對我來說似乎更爲貼心,但感覺應該有更優雅的方式來實現這一點。任何建議?

回答

1

捲曲方法允許您完全斷開您的API應用程序與您的命令。您甚至可以將開發服務器上的命令發送到生產應用程序。這實際上相當乾淨,並間接幫助測試你的API。順便說一句,如果你最終以捲曲方式結束,那麼第三方庫如guzzle可以使生活變得更容易。

直接調用控制器操作可能會很棘手。正如你所指出的那樣,你將需要僞造一個請求對象,從命令行參數中填充它(假設),實例化一個控制器,調用該動作並獲得響應,然後解壓縮響應以查看發生了什麼。只是要做很多「事情」。當然,它可以將你的命令代碼與控制器框架代碼進行很強的「結合」。

我喜歡做的是將實際的「業務」代碼移到他們自己的服務中,然後將這些服務注入到控制器中。控制器動作變得非常薄。該操作從請求中解壓參數,調用服務,然後將結果打包到響應中。

同樣,服務也被注入命令對象。然後該命令解壓它的參數,調用服務然後對結果進行任何操作。

對我來說,至少這會產生更清潔的設計。這些服務更容易測試,當然在控制器和命令之間共享功能也很容易。

當然,你可能已經有一堆代碼在你的控制器動作和大規模重構是不實際的。在這種情況下,請使用假請求路線。

+0

感謝您使用服務模塊的想法。我基本上是爲了學習目的而做的,所以我可以在任何需要的範圍內重構它。我會回到我的調查結果。 – Samiron