昨天已經學會第一次呼叫 API,今天的目標是搞懂 API 背後怎麼傳資料。
HTTP(超文本傳輸協定)是一種用於網際網路上,讓客戶端(Client)和伺服器(Server)能夠用請求和回應方式互相溝通的協定。它讓瀏覽器可以向網站伺服器「問問題」,伺服器則「回答」並傳送網頁、圖片等資料給瀏覽器用戶。HTTP 解決了資料在網路上有效傳輸和交換的問題。
當在瀏覽器輸入一個網址(例如www.google.com
),其實是在告訴電腦:「我要去看這個網站!」
但電腦不知道網站具體在哪,於是先問 DNS:「這個網站的 IP 是多少?」DNS 會告訴你真實的伺服器地址。
找到 IP 之後,電腦要跟伺服器建立連線,就像你打一通電話,確保彼此能聽到對方。這時會做一個叫做 TCP 三向交握的過程,確保雙方準備好溝通。
TCP 三向交握就像打電話:
-你說「喂,聽得到嗎?」
-對方回「有,聽得到。」
-你再說「好,那開始講。」
完成後,才算建立好可靠的連線。
如果網址是 https://
,瀏覽器和伺服器會先交換秘密暗號(TLS/SSL 加密),確保聊天內容不會被竊聽。
連線建立後,瀏覽器會用 HTTP 的方法(像 GET)發出請求,告訴伺服器你想要哪個網頁或資料。
一個 HTTP 請求包含:
伺服器收到你的請求後,會去資料庫查資料或執行動作,再把結果回傳給你。
HTTP 回應包含:
Content-Type
解析伺服器會告訴你「這份資料的格式」:
application/json
→ 你要用 JSON 解析text/html
→ 網頁內容image/png
→ 圖片就像在超市買東西時,包裝上會貼標籤「需冷藏」、「常溫保存」,我們就知道要怎麼處理它。
如果伺服器回「找不到 (404)」或「伺服器壞掉 (500)」,程式就要判斷怎麼辦:
起始行:包含 HTTP 方法(GET、POST 等)、目標 URL 路徑和協定版本,例如 GET /index.html HTTP/1.1
Headers(請求標頭):描述請求的附加資訊,如類型、語言、驗證等。
Body(請求主體):可選,常在 POST、PUT 等方法中用於傳送資料。
Query(查詢字串):附加在 URL 後的參數,如 /search?q=apple
。
狀態行:包括 HTTP 協定版本、狀態碼(如 200、404 等)和狀態描述。
Headers(回應標頭):描述回應的額外資訊,如資料格式、長度等。
Body(回應主體):伺服器回傳的實際資料,例如網頁內容、JSON。
功能:向伺服器取得資料,不會改變伺服器上的狀態。
(就像去圖書館借書,你只是在「拿資料」來看,並不會改變裡面的內容。)
特性:安全(不會改變資料)且冪等(同一請求執行一次或多次結果相同)。
用途範例:瀏覽網頁、查詢商品列表。
功能:向伺服器送出新資料或觸發動作。
(像是填一張表單交給櫃檯,請對方「新增一份新資料」。)
特性:非冪等(同一請求執行多次可能造成多份新增資料)。
用途範例:用戶註冊、發佈新文章。
功能:完整更新或覆蓋指定資源。
(像是整份表單已經存在,你再交一份完整的新版本,要求「整份換掉」。)
特性:冪等(同一請求執行多次結果相同)。
用途範例:修改使用者資料(以完整資料覆蓋原資料)。
功能:刪除指定資源。
(直接跟櫃檯說「把這份資料刪掉」。)
特性:冪等(多次刪除結果相同,刪除不存在資源不會錯誤)。
用途範例:刪除帳號、移除購物車商品。
安全(safe):指該方法不會改變伺服器資料,例如 GET。
冪等(idempotent):同一操作執行一次或多次,伺服器狀態不變,例如 GET、PUT、DELETE。
(POST 非冪等也非安全。)
成功:200(成功)、201(已建立)、204(無內容)、304(未修改)
客戶端錯誤:400(錯誤請求)、401(未授權)、403(禁止)、404(找不到)、409(衝突)、422(無法處理的實體)、429(太多請求)
伺服器錯誤:5xx(伺服器錯誤)
Query vs Body:查詢字串常用於 GET,Body 用於 POST、PUT 傳送資料。
Content-Type vs Accept:Content-Type 指示請求/回應的資料格式,Accept 指示希望接收的格式。
Authorization/basic token:用於身份驗證,確保請求者有權限。
分頁/過濾:用於大量資料的管理,分批回傳或只回傳符合條件的資料。
學會了從「 DNS → TCP → 請求與回應 → 解析 → 錯誤處理 」的完整流程。
了解四種常見方法與安全與冪等的概念。
能分辨常見狀態碼