tp5接口開發流程(思路版)


轉載自https://juejin.im/post/6844903687387611143

一、流程概要

基本是這么一個流程,略過環境搭建:

1.整理清楚有哪些接口
2.設計數據表
初步梳理是一對一,一對多,還是多對多
3.編寫驗證器
4.編寫全局異常類(AOP思想)
5.定義路由路徑
6.建立控制器類
7.建立模型類
用ORM,所以建立和數據表對應的模型類
8.控制器調用模型,模型調用數據庫,完成接口編寫

二、具體說明

梳理好有哪些接口后,就開始設計數據表:

數據表會隨着代碼的編寫做些調整和改變。
值得注意的一點,當有兩張表之間的關系是多對多時,記得設計一張中間表存放兩張表各自的id。
設計好數據表后,開始編寫一些工具類,有助於提高編寫業務代碼時的效率。
首先是驗證器(validate)。
TP5框架自帶驗證器類,我們要做的則是繼承這個驗證器類,然后根據具體的接口做擴展即可。
創建一個驗證器基類,把通用的方法放在里面:

goCheck()方法是所有具體驗證器都會調用的方法,各個具體驗證器只是會重寫一些驗證規則和驗證返回信息而已。
在goCheck()方法里,實例化了Request類。這樣做的目的是獲取API被調用時,調用方傳遞的參數。獲取到參數后,自然就是對這些參數進行驗證了。check()方法會調用各個具體驗證器里設置的驗證規則函數進行檢測。
然后是全局異常類(global exception)。
同樣的,TP5框架自帶了一個異常類,我們就創建一個異常基類繼承它。

隨后需要做的則是根據具體的接口重寫HTTP狀態碼,錯誤消息和錯誤碼即可。
至於錯誤碼的定義,則是自己設計一套規范。
搭建好驗證器和全局異常類后,我們只需要在每個接口的函數里面調用他們就行了:

好,至此一些基礎的東西就搭建好了,下面開始編寫接口代碼。
首先定義路由路徑:

在route.php里,引入Route類,定義路徑即可。路徑里的變量用:號+變量名表示,路徑里的變量由路徑末尾指定的函數接收,這個函數定義在控制器相對應的類里面。
比如id這個變量:

如上圖,在控制器里,當拿到調用方通過路由路徑傳過來的參數后,我們就調用模型,把參數傳過去,模型處理具體的數據庫調用。
這里也是一個需要注意的點,控制器盡量只做連接的事情,不做具體的操作。
然后,在建立了控制器后,順理成章,也需要建立對應的模型。
TP5同樣自帶了Model類,然后我們也定義自己的模型基類,當然也是繼承TP5的模型類:

模型基類自然也是定義較為通用的方法。比如上圖的例子里,定義了一個返回圖片前綴鏈接的方法,不同的接口但又跟圖片調用有關的話,就會用到這個方法來拼接圖片URL。
這里也有個注意的點。當我們需要創建全局的變量時,可以在application目錄下創建extra目錄文件,然后創建setting.php文件,在里面返回一個關聯數組即可:

隨后的調用如上圖模型基類里的prefixImgUrl方法里展示的一樣,config函數,參數傳入文件名加關聯數組的key值,這樣就可以獲取到了:

回到模型上來,每個接口會有自己的模型類,這個模型類對應一張數據表,比如:

Banner模型類由於是通過模型基類繼承了TP5的Model類,我們需要做的就是重寫一些屬性,來適應這個具體的接口,比如重寫$hidden屬性,定義這個接口返回的哪些字段我們是要隱藏的。
然后則是ORM的重點之一,調用數據表所對應的模型類。比如items方法里,通過hasMany()這個方法確定了Banner模型和BannerItem模型的關系。然后在getBannerById()方法里,調用了ORM用來操作數據的方法,這是對原生操作數據庫語句的封裝,然后ORM會返回模型對象,這個對象除了帶有數據庫數據外,還會帶有一些屬性和方法,用來操作數據。這是ORM對比原生SQL語句的一個優勢。
最后,控制器調用模型的getBannerById()方法,獲取到了數據,再作為接口的返回值傳遞給接口調用者。這樣就完成了一次接口的編寫。

三、總結

至此做了一個簡要的后端API開發流程記錄。其中還有很多細節沒有提到,只是簡略的描述了一個過程,不過這也不是這次記錄的主要目的。這次的目的還是對這一周多學習的一個記錄。
通過這次學習后端API開發,更加鞏固了我對面向對象編程里思想的理解和運用。
通過繼承和重寫,可以把代碼寫得更干凈簡潔。
類,實例,屬性,方法,怎么看待他們,然后操作他們,通過這次學習又加深了很多認識。

作者:BryantHe
鏈接:https://juejin.im/post/6844903687387611143
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM