iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
Modern Web

每天一點 API:打造我的生活小工具系列 第 4

Day04 — HTTP 怎麼運作?搞懂 API 傳資料的秘密

  • 分享至 

  • xImage
  •  

昨天已經學會第一次呼叫 API,今天的目標是搞懂 API 背後怎麼傳資料。

1. HTTP 是什麼?它解決什麼問題?

HTTP(超文本傳輸協定)是一種用於網際網路上,讓客戶端(Client)和伺服器(Server)能夠用請求和回應方式互相溝通的協定。它讓瀏覽器可以向網站伺服器「問問題」,伺服器則「回答」並傳送網頁、圖片等資料給瀏覽器用戶。HTTP 解決了資料在網路上有效傳輸和交換的問題。

2. Client 到 Server 的流程

(1)解析網址 → DNS 取得伺服器 IP

當在瀏覽器輸入一個網址(例如www.google.com),其實是在告訴電腦:「我要去看這個網站!」
但電腦不知道網站具體在哪,於是先問 DNS:「這個網站的 IP 是多少?」DNS 會告訴你真實的伺服器地址。

  • DNS 就像電話簿:輸入「Google」名字,查到它的電話號碼(IP)。

(2)建立連線:TCP(三向交握)

找到 IP 之後,電腦要跟伺服器建立連線,就像你打一通電話,確保彼此能聽到對方。這時會做一個叫做 TCP 三向交握的過程,確保雙方準備好溝通。

  • TCP 三向交握就像打電話:

    -你說「喂,聽得到嗎?」
    -對方回「有,聽得到。」
    -你再說「好,那開始講。」

    完成後,才算建立好可靠的連線。

(3)若是 https:再進行 TLS/SSL 加密握手

如果網址是 https://,瀏覽器和伺服器會先交換秘密暗號(TLS/SSL 加密),確保聊天內容不會被竊聽。

  • 就像是朋友說祕密之前,先約定一套暗號或密碼本,之後聊天內容就算被偷聽也看不懂。

(4)客戶端送出 HTTP 請求

連線建立後,瀏覽器會用 HTTP 的方法(像 GET)發出請求,告訴伺服器你想要哪個網頁或資料。

一個 HTTP 請求包含:

  • 方法(GET/POST/PUT/DELETE)→ 要做什麼事
  • URL → 要找哪個資料
  • Headers → 附帶說明(像信封上的標籤,格式、語言、憑證…)
  • Body(可選)→ 要交給伺服器的資料(例如表單、JSON)

(5)伺服器處理並回傳 HTTP 回應

伺服器收到你的請求後,會去資料庫查資料或執行動作,再把結果回傳給你。

HTTP 回應包含:

  • 狀態碼(200 成功、404 找不到、500 伺服器壞掉…)
  • Headers → 回應格式、時間、伺服器資訊等
  • Body → 主要資料(常見是 JSON 或 HTML)

(6)客戶端依據 Content-Type 解析

伺服器會告訴你「這份資料的格式」:

  • application/json → 你要用 JSON 解析
  • text/html → 網頁內容
  • image/png → 圖片

就像在超市買東西時,包裝上會貼標籤「需冷藏」、「常溫保存」,我們就知道要怎麼處理它。

(7)若狀態碼為 4xx/5xx → 錯誤處理

如果伺服器回「找不到 (404)」或「伺服器壞掉 (500)」,程式就要判斷怎麼辦:

  • 重試?
  • 顯示錯誤訊息給使用者?
  • 或寫進 log 留作紀錄?

3. 一個完整的 HTTP「請求」長什麼樣?

起始行:包含 HTTP 方法(GET、POST 等)、目標 URL 路徑和協定版本,例如 GET /index.html HTTP/1.1

Headers(請求標頭):描述請求的附加資訊,如類型、語言、驗證等。

Body(請求主體):可選,常在 POST、PUT 等方法中用於傳送資料。

Query(查詢字串):附加在 URL 後的參數,如 /search?q=apple

4. 一個完整的 HTTP「回應」長什麼樣?

狀態行:包括 HTTP 協定版本、狀態碼(如 200、404 等)和狀態描述。

Headers(回應標頭):描述回應的額外資訊,如資料格式、長度等。

Body(回應主體):伺服器回傳的實際資料,例如網頁內容、JSON。

5. 四種常見 HTTP 方法是哪些?各自的功能是什麼?

GET:(讀取資料)

  • 功能:向伺服器取得資料,不會改變伺服器上的狀態。
    (就像去圖書館借書,你只是在「拿資料」來看,並不會改變裡面的內容。)

  • 特性:安全(不會改變資料)且冪等(同一請求執行一次或多次結果相同)。

  • 用途範例:瀏覽網頁、查詢商品列表。

POST:(新增資料)

  • 功能:向伺服器送出新資料或觸發動作。
    (像是填一張表單交給櫃檯,請對方「新增一份新資料」。)

  • 特性:非冪等(同一請求執行多次可能造成多份新增資料)。

  • 用途範例:用戶註冊、發佈新文章。

PUT:(更新資料)

  • 功能:完整更新或覆蓋指定資源。
    (像是整份表單已經存在,你再交一份完整的新版本,要求「整份換掉」。)

  • 特性:冪等(同一請求執行多次結果相同)。

  • 用途範例:修改使用者資料(以完整資料覆蓋原資料)。

DELETE:(刪除資料)

  • 功能:刪除指定資源。
    (直接跟櫃檯說「把這份資料刪掉」。)

  • 特性:冪等(多次刪除結果相同,刪除不存在資源不會錯誤)。

  • 用途範例:刪除帳號、移除購物車商品。

6. 安全與冪等是什麼?哪些方法符合?

  • 安全(safe):指該方法不會改變伺服器資料,例如 GET。

  • 冪等(idempotent):同一操作執行一次或多次,伺服器狀態不變,例如 GET、PUT、DELETE。

(POST 非冪等也非安全。)

7. 常見狀態碼解讀

成功:200(成功)、201(已建立)、204(無內容)、304(未修改)

客戶端錯誤:400(錯誤請求)、401(未授權)、403(禁止)、404(找不到)、409(衝突)、422(無法處理的實體)、429(太多請求)

伺服器錯誤:5xx(伺服器錯誤)

8. 常見設計/使用細節

Query vs Body:查詢字串常用於 GET,Body 用於 POST、PUT 傳送資料。

Content-Type vs Accept:Content-Type 指示請求/回應的資料格式,Accept 指示希望接收的格式。

Authorization/basic token:用於身份驗證,確保請求者有權限。

分頁/過濾:用於大量資料的管理,分批回傳或只回傳符合條件的資料。


9. 今日總結

  • 學會了從「 DNS → TCP → 請求與回應 → 解析 → 錯誤處理 」的完整流程。

  • 了解四種常見方法與安全與冪等的概念。

  • 能分辨常見狀態碼


上一篇
Day03 — 從 API 抓資料到 Python,完成第一次呼叫API
系列文
每天一點 API:打造我的生活小工具4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言