2016-04-21 42 views
2

我有一個需要調用REST API的MVC PHP Web應用程序。我不清楚應該從我的控制器還是從模型調用API?看着各種資源,我得到了混合信息。我認爲它應該來自模型,因爲我所做的就是處理數據並將其傳遞給控制器​​正確?從MVC Web應用程序調用REST API

一些更詳細的說明。我確實完全控制了正在構建過程中的REST API,並且也使用了PHP。然而,API也會被我的團隊構建的iOS和Android伴侶應用程序以及運行在專有設備上的一些其他應用程序所利用。

最初的計劃是,網絡應用程序不會利用API,只是直接去數據庫,以削減任何開銷,但後來幾次辯論,我傾向於使用API​​。

+1

真正的問題是:我應該在我的應用程序還是單獨的代碼庫? (在我看來) –

+2

我真的認爲你應該使用'服務'(處理業務邏輯的類)。該服務應該處理對api-s的調用或查詢數據庫,等等...... –

回答

0

您應該從控制器調用Web API。 型號是數據如何從控制器傳遞到查看型號應該只有數據和沒有業務邏輯。

當你從Web API的響應,該數據應被放入模式,並傳遞給查看

模式,則查看控制器彌補MVC模式。 Controller負責將數據放入Model中,並傳遞給View。視圖採用模型並顯示數據,正如它所告知的那樣。模型或視圖中沒有業務邏輯。

理想情況下,您可以將API代碼放入控制器使用的類庫中。這使您可以將業務邏輯從網站中分離出來並分解成單獨的組件。

1

如果REST資源是模型的表示,或者如果您打算跨多個控制器需要此功能,我會從模型調用。

來自控制器的調用,如果它不是100%特定於模型表示,或者只對您使用的控制器/視圖很重要。

+0

模型應該包含數據,而不是邏輯。 Web API代碼可以放入類庫中,然後在整個應用程序的控制器中重用。 –

+1

我同意。這個問題太模糊了,我不確定他/她是否指的是模型的人口。我還假設他/她沒有直接訪問該API,或者它是用不同的語言編寫的,等等。不要將方法'populateModelById'放在控制器上,否則你必須全部重複它們這個地方。 *理想情況下,他們不應該在模型或控制器*中,但可以考慮超出這個問題的範圍。 –

+0

我在我的問題中增加了一些細節。我確實可以控制API。將它分解成它自己的類庫的擔憂是應用程序如何利用這些類。 – Runicode

相關問題