iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1
Software Development

Rust Web API 從零開始系列 第 5

Day05 - 從Server到Handler

  • 分享至 

  • xImage
  •  

延續昨天的內容,一個handler方法的回傳值需要實作IntoRepsonse trait,但是為什麼呢?

Axum的架構

我們先把焦點放在目前出現的三個組件服務器路由處理函數

https://ithelp.ithome.com.tw/upload/images/20230904/20148594UyT9gIG8sD.png

當一次HTTP請求發生的時候,服務器從路由中選出相應的處理函數來解析請求,在整個應用程式的運行週期中,服務器與路由會保持不變。在這個流程之中,為了能夠處理不同的請求,服務器需要具備一定的靈活性,這就是透過更換不同的處理函數來實現的。

要如何實現這樣的靈活性呢?我們的目的就是把處理不同請求的靈活性透過處理函數抽離出來,為此在服務器與處理函數需要具備一個溝通介面,無論handler回傳的是字串、bytes、Json資料等等,都要能轉換成標準的HTTP Response回覆給客戶端。

IntoResponse trait

IntoResponse就扮演了這個抽象的溝通介面,任何實作了這個特徵的型別就可以將自身的資料轉換成HTTP回應,從控制點的角度來看服務器這端主動調用into_response方法,並將結果發送給客戶端,從而完成一次HTTP請求。

這樣的設計就實現了服務器與處理函數的解耦,服務器不需要關心如何完成一次的請求,只專注於通過調用IntoResponse把處理函數的結果正確轉換成HTTP Response,而處理函數內部則專注於實現商業邏輯。

小結

trait是rust中重要的概念,透過這個工具可以使得程式碼達到鬆散耦合,接下來的文章中我們先關注在如何使用trait,等到部落格訂閱系統告一段落再回來好好介紹,明天就來繼續推進進度吧!


上一篇
Day04 - 先做一個health check吧
下一篇
Day06 - 實做訂閱API
系列文
Rust Web API 從零開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言