iT邦幫忙

2023 iThome 鐵人賽

DAY 15
1
自我挑戰組

富士大顆系列 第 15

vol. 15 Rails 的導航員:routes.rb 「請往這邊走哦!」(上)

  • 分享至 

  • xImage
  •  

你好,我是富士大顆 Aiko
今天假日來談談比較輕鬆的話題 config/routes.rb
內容會帶到:

  • http/https
  • resourceresources 的差別
  • 巢狀式
  • member & collection
  • 面試題
    所以看完這兩篇,你就有能力看懂 config/routes.rb. 裡的 code 了(應該)

routes 在幹嘛?

我們先看這張圖:

(resource from CodeCademy

  1. 使用者開啟他們的瀏覽器,輸入一個 URL,然後按下 Enter 鍵。當使用者按下 Enter 鍵後,瀏覽器會對該 URL 發出一個請求。
  2. 該請求會打(hits) Rails 的(config/routes.rb)。
  3. routes 會將 URL map 到正確的 controller 和 action 來處理請求。
  4. 該 action 會接收請求,並要求 model 從資料庫中取得資料。
  5. model 會回傳資料給 controller 的 action。
  6. controller 的 action 會將資料傳遞給 view。
  7. view 將頁面渲染為 HTML。
  8. controller 將 HTML 發送回瀏覽器。瀏覽器就會載入(load),完成後,使用者就能看到它。

URL 是什麼?請求是什麼?有哪些?

URL 用於特定請求的目標,跟 HTTP 方法(method)一起構成 HTTP 請求(request)
URL 是請求的目標,指示伺服器「哪個資源」應該被操作。
HTTP 方法 則指示「如何」操作那個資源。
總之,URL 和 HTTP 方法共同構成一個完整的 HTTP 請求。
URL 指定了我們想要操作哪個資源,而 HTTP 方法則定義了我們對該資源想進行何種操作。所以它們是相關聯但又分開的概念。

URL(Uniform Resource Locator)

URL 是一種用於讓瀏覽器辨別某個資源位置的字串。
一個 URL 通常包含以下部分:

  • 協定(Protocol): 決定資料交換的規則,如何安全和有效地傳輸。例如:http、https。
    http(HyperText Transfer Protocol);HTTPS (多的 S 就是 Secure)是經過加密的,對於需要高度安全的網站(例如銀行或電商網站)非常重要。

  • 主機名稱(Domain Name): 是網際網路上各個伺服器的「地址」,例如 google.comwikipedia.org,瀏覽器會使用 DNS(Domain Name System)將人看得懂的主機名稱解析為電腦才看得懂的 IP 地址(Internet Protocol Address)。

  • 路徑(Path): 資源在伺服器上的實際路徑。如果沒有指定任何路徑,如果輸入 http://example.com,瀏覽器通常會自動導到主頁,也就是 http://example.com/

  • 查詢參數(Query Parameters): 提供額外的輸入或篩選資源。以 ? 開始,主要用於 GET 請求,用於指定要傳遞給伺服器的參數。常見於搜尋引擎查詢、分頁等。

  • 片段(Fragment): 也被稱為錨點(Anchor),定位網頁的某一部分。這以 # 開始,主要用於指定網頁中應該焦點定位的某個部分。例如 http://example.com/page#section1。瀏覽器會自動滾動到該網頁中與片段對應的部分。這對於長網頁的 UX 很有幫助,因為 user 可以直接跳到他們感興趣的特定區塊,而無需手動滾動。

  • 端口(Port): 不是必要,指定某個網路服務的端口,區分同一台機器上運行的不同服務。這通常是一個數字,例如 HTTP 的預設端口是 80,而 HTTPS 的預設端口是 443。不過這部分在很多情況下都是可以省略的,因為瀏覽器會自動補齊。

HTTP

HTTP 方法用於指定請求的類型。跟請求是兩件事喔

請求(Request)

一個「HTTP 請求」是一個完整的訊息包,通常由客戶端(Client)發送給伺服器,目的是要取得或修改資源。
一個請求通常包括:

  • HTTP 方法(GET、POST、PUT、DELETE 等)
  • 目標 URL
  • 頭部資訊(Headers)伺服器的機制,讓進一步處理主體(Body)內容之前,對請求或回應進行初步的設定和協商。
    例如:驗證(Authorization)、身份資訊(User-Agent,讓伺服器知道誰發出了這個請求。)、設定快取行為(Cache-Control)等。
  • 請求主體(Body,通常用於 POST 或 PUT 方法)
方法(HTTP Method)
  • GET:請求讀取一個資源。不應該用來產生「副作用」(新增、修改或刪除一個資料紀錄)。
  • POST:提交資料,通常會改變伺服器的狀態或資料。
  • PUT:更新資源。
  • DELETE:刪除資源。
  • PATCH:進行局部更新。
  • HEAD:與 GET 相同,但只請求頭部資訊。
    例如:假設你想檢查一個大檔案(body 很大)是否存在,而不想下載它,可以發送一個 HEAD 請求。
  • OPTIONS:這主要用在 CORS(跨來源資源共享)機制中,允許伺服器描述哪些來源(origin)或 HTTP 頭部(header)是被允許的。
    例如:前端想確認是否可以對一個 API 發送 PUT 請求,它首先會發送一個 OPTIONS 請求到該 API。伺服器會返回哪些方法是被允許的(如 GET, POST, PUT, DELETE 等)。
  • CONNECT:用於建立網路連接,通常用於 SSL 安全通訊端層(Secure Sockets Layer Tunnel),只在特定的網路設定中使用。
    例如:當一個用戶想要到一個 HTTPS 網站,但他們的網路環境需要透過一個代理伺服器(proxy server,例如: cloudflare)時,CONNECT 方法會用於先與代理伺服器建立一個 SSL 安全通訊端層。

總之,「方法」是描述「請求」類型或動作的一個元素,而「請求」則是包含了方法、URL、頭部資訊等多個元素的完整訊息。所以方法是請求的一部分,但兩者不是同一件事。
請求 = 方法 + URL + header + (body),讓 Client 和伺服器能夠溝通和交換資訊。


有了初步的網路概念,終於可以進入主題了(汗)


上一篇
vol. 14 Rails Super DRY :程式界的 YOLO 態度、OAOO(到底多愛縮寫這群人!)
下一篇
vol. 16 Rails 的導航員:routes.rb 「請往這邊走哦!」(下)
系列文
富士大顆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言