後端框架與API 開發(四) – 路由設定與管理

更新於 發佈於 閱讀時間約 4 分鐘

※ 什麼是路由?

當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。

  1. 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包能夠按照最佳路徑傳輸。
  2. 路由 (Routing):這是一個過程,路由器在這個過程中為每個資料封包選擇最佳的傳輸路徑。這個選擇路徑的過程就被稱為「路由」。
  3. 路徑 (Route):這是路由器為資料封包選擇的實際傳輸路徑。每個資料封包都會按照這個路徑從源頭傳送到目的地。

簡單來說,路由就像是一個指路人。當資料(像是一個旅行者)需要從網路的一個地方傳送到另一個地方時,路由器(指路人)會告訴資料應該走哪條路(路徑)。這個過程就像是你打電話給客服,語音總機告訴你應該按哪個號碼來找到你需要的服務。希望這個解釋能讓你更容易理解!

※ Server 端建立路由的主要用意:

在 Web 開發中,「建立路由」是一種方式,讓伺服器能夠根據客戶端的請求(例如 URL 和 HTTP 方法)來提供正確的回應和資源。這個過程涉及到在伺服器端設定一組規則,這些規則就像是一個地圖,指導伺服器如何根據客戶端的請求來找到並提供正確的資源。這就是「建立路由」的主要目的和功能。

下圖是一個「待辦事項清單 (To-do List)」的路由設計示意圖:

raw-image

※ 路由的使用情境描述:

  1. 資源類別:根據客戶端請求的是靜態資源(如 HTML、CSS、JavaScript 檔案)還是動態資源(如從資料庫獲取的資料),路由可以提供不同的回應。
  2. 資料的存取狀態:路由也可以根據 CRUD(創建、讀取、更新、刪除)操作來回應客戶端的請求。例如,客戶端可能會發送 POST 請求來創建資料,或者發送 GET 請求來讀取資料。
  3. 請求類型:根據客戶端的請求是同步還是非同步,路由也可能需要提供不同的回應。例如,對於 AJAX 的非同步請求,伺服器可能需要回傳 JSON 格式的資料。

※ 如何設計路由?

在 Web 開發中,我們通常會採用一種名為 REST(Representational State Transfer,可譯為「表現層狀態轉換」)的架構風格來設計路由。

REST 是一種軟體架構的設計風格,而不是一種標準或規格。它提供了一些原則和概念,幫助我們在設計軟體架構時能有一個明確的方向。就像我們在寫程式時,每個人都有自己的風格一樣,設計軟體架構也有許多不同的設計風格。符合 REST 原則的軟體架構,我們通常會稱之為 RESTful。

在設計路由時,我們會根據 REST 的原則來操作。例如,我們可能會為每種資源設計一個獨立的路由,並使用 HTTP 的動詞(如 GET、POST、PUT、DELETE 等)來表示對資源的不同操作。這樣,當客戶端發送請求時,伺服器就可以根據請求的 URL 和 HTTP 動詞來決定應該如何回應。

總之,路由設計的主要目的是讓伺服器能夠根據客戶端的請求來提供正確的回應和資源,而 REST 提供了一種有效的方法來達成這個目的。

RESTful 的設計以「資源」為中心,再搭配 HTTP method 的動詞,以及 CRUD 等資料操作:

raw-image

※ RESTful API 特點:

  1. URI (統一資源識別碼):這是一種標識網路上資源的方式,例如 http://example.com/resources
  2. 對資源的操作:這是通過 HTTP 的請求方法來實現的,例如 POSTGETPUT 或 DELETE
  3. 傳輸的資源:這是 Web 服務的網際網路媒體類型,例如 JSONHTMLXMLYAML 等。

※ Express 中設定路由的方式:

raw-image

把 app.js 打開,其中有一段是:

// setting the route and corresponding response
app.get('/', (req, res) => {
res.send('This is my first Express Web App')
})

app.get('/') 是用來設定路由的。其中第一個參數,要放的就是路由,也是我們預期的網址。第二個參數放的則是一個函式,告訴它要回應的內容:

raw-image


全端網頁開發專業知識分享
留言
avatar-img
留言分享你的想法!

































































※ 什麼是 Helper? Helper 通常指的是樣板引擎裡的邏輯工具。當我們想做的事情超越內建功能時,就可以自訂 helper。 ※ Handlebar helper的用處 說明:Handlebars helper 是一種自定義函數,可以在 Handlebars 模板中執行邏輯操作。這些函
※ 用 faker 套件產生假資料步驟 安裝 faker套件:快速生成假資料(人名、地名、時間)。 npm install faker@5.5.3 引入 faker 套件: const faker = require('faker') 建立data資料夾來生成假資料。創建一個名為 gene
使用靜態檔案下載 Bootstrap 的原因主要有以下幾點: 客製化:當你下載了 Bootstrap 的靜態檔案,你可以根據自己的需求來修改這些檔案。例如,你可以改變預設的顏色、字型大小、間距等,使其更符合你的網站風格。這是直接使用 CDN 所無法做到的。 效能優化:如果你的網站只使用 Boot
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
※ 什麼是 Helper? Helper 通常指的是樣板引擎裡的邏輯工具。當我們想做的事情超越內建功能時,就可以自訂 helper。 ※ Handlebar helper的用處 說明:Handlebars helper 是一種自定義函數,可以在 Handlebars 模板中執行邏輯操作。這些函
※ 用 faker 套件產生假資料步驟 安裝 faker套件:快速生成假資料(人名、地名、時間)。 npm install faker@5.5.3 引入 faker 套件: const faker = require('faker') 建立data資料夾來生成假資料。創建一個名為 gene
使用靜態檔案下載 Bootstrap 的原因主要有以下幾點: 客製化:當你下載了 Bootstrap 的靜態檔案,你可以根據自己的需求來修改這些檔案。例如,你可以改變預設的顏色、字型大小、間距等,使其更符合你的網站風格。這是直接使用 CDN 所無法做到的。 效能優化:如果你的網站只使用 Boot
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
可能包含敏感內容
想學流量怎麼蹭嗎?讓我這位前任競選總幹事告訴你,不過要先修課程唷,我會給素材,你們要交作業,否則紙上談兵都無用,我有一些業配的業務可以讓各位練習,如何蹭流量還有管理經營。 流量密碼研究所 3000,每個月 https://vocus.cc/pay/salon/monthly/645345c1
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
可能包含敏感內容
想學流量怎麼蹭嗎?讓我這位前任競選總幹事告訴你,不過要先修課程唷,我會給素材,你們要交作業,否則紙上談兵都無用,我有一些業配的業務可以讓各位練習,如何蹭流量還有管理經營。 流量密碼研究所 3000,每個月 https://vocus.cc/pay/salon/monthly/645345c1
Thumbnail
這篇文章介紹了路由器 (Router) 在網絡硬體中的功能與運作概念,包括路由器的工作原理、運作流程和與其他硬體設備的區別。文章也提及了路由器運作的基本概念,例如路由表的建立方式和路由協定的基礎知識。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(