簡體   English   中英

symfony2:從命令訪問REST api

[英]symfony2: accessing REST api from command

我有一個基於symfony2的應用程序,該應用程序基本上公開了REST API。 該應用程序沒有任何UI。

在同一應用程序中,創建了一些操作資源的命令。 類似於創建用戶,重置用戶密碼,刪除用戶,將用戶分配到特定組等。

現在,我希望命令類使用REST API(除了控制器操作,它們什么都沒有)執行實際操作,因為這些REST API已經配備了驗證邏輯或所需的其他業務邏輯等。

問題:使用Command類中的REST API(即控制器動作)的最佳選擇是什么? 我可以想到以下兩種方法。

  1. 在命令類中創建Request對象。 設置適當的請求內容,標頭等。包括控制器類,並使用創建的請求對象靜態調用控制器操作。

  2. 使用curl使帶有適當內容和標題的http調用。

在上述兩種方法中,第一種對我來說似乎比較聰明,但是感覺應該有更優雅的方法來實現。 有什么建議嗎?

curl方法允許您完全將api應用程序與命令斷開連接。 您甚至可以讓開發服務器上的命令命中您的生產應用程序。 這實際上是一種非常干凈的方法,可以間接地幫助測試您的api。 順便說一句,如果您最終使用了curl方法,那么諸如guzzle之類的3rd party庫可以使生活更加輕松。

直接調用控制器操作可能很麻煩。 如您所指出的,您將需要偽造一個請求對象,從命令行參數填充(假定)它,實例化一個控制器,調用該動作並獲得一個響應,然后解壓縮響應以查看發生了什么。 要做很多“事情”。 當然,它可以將您的命令代碼與控制器框架代碼“牢固地”結合在一起。

我想做的是將實際的“業務”代碼移至其自己的服務,然后將服務注入控制器。 控制器的動作將變得非常稀薄。 該操作從請求中解壓縮參數,調用服務,然后將結果打包到響應中。

同樣,服務也注入到命令對象中。 然后,該命令解壓縮其參數,調用服務,然后對結果進行任何處理。

對我而言,至少這可以使設計更簡潔。 這些服務更易於測試,當然也很容易在控制器和命令之間共享功能。

當然,您的控制器動作中可能已經有很多代碼,而大規模重構是不切實際的。 在這種情況下,請使用偽造的請求路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM