[Day 03] 路由設定
昨天我們快速建立了我們的第一個後端 (其中包含了一支 API),現在讓我們來仔細看一下 main.py
的內容到底在做什麼。等到理解它背後的邏輯之後,就可以開始嘗試修改了~
main.py 到底設定了什麼?
先來仔細看一下這部分
1 |
|
上面這段程式翻成中文就是
當我們的 app (FastAPI 物件) 收到「HTTP 方法為 GET」且「路由為 “/“」的請求時,以異步的方式執行
root
函數,而這個root
函數會回傳內容為{"message": "Hello World"}
的回應給前端
哇!好多新名詞…
讓我們來簡單地解釋一下 (順序有稍微調整過,比較方便理解)
請求、回應
當使用者透過瀏覽器進入某個網址時,就是向網頁的伺服器發出一個「請求」(Request),伺服器收到請求後,就會回傳一個「回應」(Response)。而這個回應通常會是一個 HTML 格式的內容,瀏覽器就會把它呈現在畫面上。
若要描述精確一點的話,這邊應該是 HTTP 請求、HTTP 回應,但這邊就以最常見的 HTTP 為主,所以就把 HTTP 省略掉不寫
HTTP 方法
使用者在發送請求時,除了要指定位置 (例如:網址) 之外,也要指定他要使用哪種 HTTP 方法。如果是單純使用瀏覽器瀏覽網站的話,就會是使用 GET,通常是在想要取得某些資料時會使用它,例如:請求網頁、進行搜尋。其他方法 (例如:POST、DELETE) 則通常是有其他目的才會使用到,例如:新增資料、刪除資料。
可以參考這份官方文件,它有列出並說明各個方法的意義。
路由
在介紹路由 (Route) 之前,我們先來看一下網址下面這個網址https://ithelp.ithome.com.tw/users/20162280/ironman/6767
可以簡單地分成三個部分
- 協定:
https
- 網域:
ithelp.ithome.com.tw
- 路由:
/users/20162280/ironman/6767
簡單來說,路由就是負責區分各個功能位置,讓後端可以根據位置找到對應的程式,來進行它應該要做的事情
異步
一般程式碼在執行的時候,會一行一行的執行,一次只處理一件事情。但如果後端一次只處理一個請求,後續的請求都必須等前面的請求處理好才能開始,就會造成大塞車
就像在點餐時,櫃檯只有一個人,但排隊的隊伍大排長龍
因此,透過設定異步處理,就能讓後端同時處理多個請求,減少等待時間
就像多了好幾個點餐櫃檯
FastAPI 官網對此有很詳細的圖文介紹,我個人覺得寫得很好,歡迎大家去看看XD
回顧整個操作流程
知道 main.py
在設定了什麼後,接下來讓我們重新思考一下我們做了什麼才看到 {"message": "Hello World"}
操作流程
首先,我們打開了瀏覽器,輸入網址 http://127.0.0.1:8000
後送出,之後就看到 {"message": "Hello World"}
了
背後邏輯
當我們打開瀏覽器,輸入 http://127.0.0.1:8000
並送出後,瀏覽器向後端送出 GET 請求,後端比對後發現,有符合它的路由設定,對應的是 root
函數,而這個函數的回應是 {"message": "Hello World"}
,瀏覽器收到回應後,把它呈現在畫面上。
以上,這就是為什麼我們進到 http://127.0.0.1:8000
後,會看到 {"message": "Hello World"}
的原因了
修改 main.py 設定
走過整個基本的流程之後,再來就是看怎麼修改設定了
再看一次這段程式
1 |
|
設定 HTTP 方法
只要把 get
換成其他方法就好,例如:post
、delete
、put
1 |
|
但這邊沒辦法靠瀏覽器去觸發 GET 以外的方法,會在後續文章介紹怎麼測試上面這段程式
設定路由
把 /
換成其他路徑即可
1 |
|
此時,重新啟動程式後,並進入 http://127.0.0.1:8000/users/20162280/ironman/6767
就可以看到剛剛改動的結果
此外,也可以發現原本的網址 http://127.0.0.1:8000
的畫面則變成這樣
這是因為後端找不到這個位置對應的要執行的程式 (因為沒設定,被我們改掉了),就會回傳這個預設的錯誤訊息給前端
設定動態路由
但有的時候,我們的網址希望這個路由其中一部分不用是固定的 (例如:商品編號),但都做一樣的處理,則可以這樣設定
1 |
|
重點整理
今天就先介紹到這邊,上面我們介紹了
main.py
內的程式內容- 瀏覽器看到訊息的背後邏輯
- 如何修改路由
明天會開始介紹應該要怎麼設計路由~