PHP_TP5框架開發後端接口(代碼編寫思路)

這半個月斷斷續續在學習用PHP的ThinkPHP框架開發後端API。如今總結記錄一下開發一個接口須要作好哪些事,以此提升開發效率,而且也有不錯的擴展性。php


1、流程概要

基本是這麼一個流程,略過環境搭建:數據庫

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

2、具體說明

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

數據表會隨着代碼的編寫作些調整和改變。後端

值得注意的一點,當有兩張表之間的關係是多對多時,記得設計一張中間表存放兩張表各自的id。數組

設計好數據表後,開始編寫一些工具類,有助於提升編寫業務代碼時的效率。app

首先是驗證器(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()方法,獲取到了數據,再做爲接口的返回值傳遞給接口調用者。這樣就完成了一次接口的編寫。

3、總結

至此作了一個簡要的後端API開發流程記錄。其中還有不少細節沒有提到,只是簡略的描述了一個過程,不過這也不是此次記錄的主要目的。此次的目的仍是對這一週多學習的一個記錄。

經過此次學習後端API開發,更加鞏固了我對面向對象編程裏思想的理解和運用。

經過繼承和重寫,能夠把代碼寫得更乾淨簡潔。

類,實例,屬性,方法,怎麼看待他們,而後操做他們,經過此次學習又加深了不少認識。

相關文章
相關標籤/搜索