延續昨天的內容,一個handler方法的回傳值需要實作IntoRepsonse
trait,但是為什麼呢?
我們先把焦點放在目前出現的三個組件服務器、路由、處理函數。
當一次HTTP請求發生的時候,服務器從路由中選出相應的處理函數來解析請求,在整個應用程式的運行週期中,服務器與路由會保持不變。在這個流程之中,為了能夠處理不同的請求,服務器需要具備一定的靈活性,這就是透過更換不同的處理函數來實現的。
要如何實現這樣的靈活性呢?我們的目的就是把處理不同請求的靈活性透過處理函數抽離出來,為此在服務器與處理函數需要具備一個溝通介面,無論handler回傳的是字串、bytes、Json資料等等,都要能轉換成標準的HTTP Response回覆給客戶端。
IntoResponse
就扮演了這個抽象的溝通介面,任何實作了這個特徵的型別就可以將自身的資料轉換成HTTP回應,從控制點的角度來看服務器這端主動調用into_response
方法,並將結果發送給客戶端,從而完成一次HTTP請求。
這樣的設計就實現了服務器與處理函數的解耦,服務器不需要關心如何完成一次的請求,只專注於通過調用IntoResponse
把處理函數的結果正確轉換成HTTP Response,而處理函數內部則專注於實現商業邏輯。
trait是rust中重要的概念,透過這個工具可以使得程式碼達到鬆散耦合,接下來的文章中我們先關注在如何使用trait,等到部落格訂閱系統告一段落再回來好好介紹,明天就來繼續推進進度吧!