Skip to content

RESTful API是什麼?HTTP方法、狀態碼與驗收重點

Posted in :

jc-seo

RESTful API 是什麼?RESTful API 是依照 REST(Representational State Transfer)架構原則設計的 API:系統裡的資料被看成一個個有網址的「資源」,用戶端透過 GET、POST、PUT、PATCH、DELETE 等 HTTP 方法讀取或修改它們,而且每個請求都帶齊伺服器理解它所需的資訊。MDN 也說明,以 HTTP 提供的 API 有時會被通稱為 RESTful API,即使不一定符合全部限制。外包系統時常聽到這個詞,是因為網站、App 與第三方系統都能用通用的 HTTP 工具照同一份規格溝通;驗收時要看的,是端點、參數、錯誤碼、驗證方式與版本規則有沒有寫清楚。

REST 的核心概念:資源、網址與無狀態

REST API 是什麼,要從 REST 本身談起。MDN 的定義是:REST 是一組軟體架構的設計限制,目的是讓分散式系統有效率、可靠且容易擴充。這些限制出自 Roy Fielding 的博士論文,可以整理成五點加一個選用項:

  • 用戶端與伺服器分離:畫面與資料處理各自負責,可以分開開發。
  • 無狀態:每個請求都要包含理解它所需的全部資訊,伺服器不靠前一次請求記住你是誰。
  • 可快取:回應要標示能不能被快取,減少重複請求。
  • 統一介面:用一致的方式識別與操作資源。
  • 分層系統:中間可以有代理或閘道,各層只看得到相鄰的一層。
  • 隨選程式碼:伺服器可傳送程式碼擴充用戶端功能,論文中屬於選用限制。

論文也說明,任何可以被命名的資訊都可以是資源。以訂單系統為例,「訂單」是一組資源,網址可能是 /orders,單筆訂單再加上訂單編號;要做什麼事,則由 HTTP 方法表達。

HTTP 方法:讀取、建立、更新與刪除

方法 MDN 的說明 常見用途 重送是否冪等
GET 取得指定資源的表示 查詢訂單、會員資料 是
POST 送出實體,常造成伺服器狀態改變 建立新訂單 不一定
PUT 以請求內容取代目標資源的全部表示 整筆更新 是
PATCH 對資源做部分修改 只改收件地址 不一定
DELETE 刪除指定資源 取消或刪除資料 是

「冪等」指同樣的請求送一次或送多次,對伺服器的預期效果相同;回應可以不同,例如 DELETE 初次可能回 200,之後再送可能回 404。這和實務很有關係:網路逾時重送 GET、PUT 比較單純,重送 POST 則可能建立兩筆訂單,規格裡要寫明怎麼避免重複,例如由用戶端帶入不重複的交易編號。

狀態碼怎麼看:成功、用戶端錯誤與伺服器錯誤

MDN 把回應狀態碼分成資訊、成功、重新導向、用戶端錯誤與伺服器錯誤五類。串接時常見的如下:

狀態碼 意思 串接時怎麼處理
200 請求成功,意義依方法而定 讀取回應內容
201 成功並建立了新資源,常見於 POST 記下新資源的編號
204 成功但沒有回應內容 不要等待回應本文
400 伺服器認為是用戶端錯誤,例如請求格式錯誤 檢查欄位與格式,修正後再送
401 需要先通過身分驗證 檢查金鑰或權杖是否正確、過期
403 伺服器理解請求但拒絕處理,重新驗證也沒有差別 確認帳號權限,不要原樣重送
404 找不到資源;在 API 中也可能是端點正確但該筆資料不存在 確認路徑與資料編號
500 伺服器遇到無法處理的狀況 記錄後通知對方,稍後再試

MDN 也提醒,伺服器可能用 404 代替 403,以免讓未授權的用戶端知道資源存在。所以判斷錯誤時,要對照對方文件,不要只看狀態碼的名稱。

JSON:請求與回應的資料格式

REST 本身沒有規定資料格式,JSON 是可用的格式之一。MDN 說明 JSON 是一種資料交換格式,可以表示數字、布林值、字串、null、陣列與物件,許多程式語言都支援。規格書裡關於資料格式,至少要寫清楚:

  • 欄位名稱與型別,哪些必填、哪些可省略。
  • 日期時間的格式與時區,金額的單位與小數位數。
  • 沒有值時是回傳 null、空字串,還是不出現這個欄位。
  • 清單資料怎麼分頁,一次回傳幾筆、怎麼取得下一頁。

這些細節沒寫清楚,系統串起來後就可能出現資料對不上的情況。

REST 和其他 API 風格差在哪

風格 溝通方式 適合情境
REST 每種資源有自己的網址,用 HTTP 方法操作 網站、App 與後台之間的一般資料存取
GraphQL 單一端點,通常是 /graphql,用戶端在查詢中指定要哪些欄位 畫面需要的資料組合多變,想只取需要的欄位
SOAP 以 XML 定義訊息框架的協定,可透過多種底層協定傳送 對方系統只提供 SOAP 介面時
Webhook 事件發生時由對方主動通知你的伺服器 付款完成、訂單狀態改變等即時通知

Webhook 和 REST 可以搭配使用:對方用 Webhook 通知「有新事件」,你的系統再用 REST API 查詢完整資料。API 的基本觀念可參考API是什麼與企業系統的用途。

外包系統時為什麼常提到 RESTful API

MDN 說明,入門時可以把 REST API 理解成能用標準網頁函式庫與工具呼叫的 HTTP 服務。這讓它在外包專案中有幾個好處:

  • 前後端可以分開開發:網站、App 與後台共用同一組 API,各自由不同團隊負責。
  • 日後串接其他系統較容易:金流、物流或客戶管理系統若也提供 HTTP API,串接方式相近。
  • 規格可以寫成機器可讀的文件:OpenAPI 規格是與程式語言無關的 HTTP API 描述標準,可用 JSON 或 YAML 撰寫,並供文件產生、程式碼產生與測試工具使用。

和外部系統串接時的盤點與時程,可參考API串接的流程與規格確認。

驗收時要看的 API 規格清單

  • 端點與方法:每個網址支援哪些方法,對應的業務動作是什麼。
  • 參數與欄位:必填與選填、型別、長度限制與範例。
  • 錯誤處理:每個端點可能回傳的狀態碼,以及錯誤訊息的格式。
  • 驗證與權限:用金鑰還是權杖、怎麼取得與更新、不同角色能存取哪些資源,可參考API Key 和 Token 的差別。
  • 版本規則:版本怎麼標示,改版時舊版保留多久、怎麼通知。
  • 文件與測試環境:是否交付 OpenAPI 等格式的文件與測試帳號,原始碼與文件的權利歸屬寫進合約。

常見問題

RESTful API 和 REST API 一樣嗎?

口語上常混用。嚴格來說,RESTful 指符合 REST 限制的設計,但 MDN 也說明,以 HTTP 提供的 API 有時會被通稱為 RESTful,即使不完全符合;驗收時以實際規格為準。

RESTful API 一定要用 JSON 嗎?

不一定。REST 是架構原則,沒有規定資料格式,也可以使用 XML 等格式。用哪一種、編碼與欄位規則如何,要在雙方的規格書中寫清楚。

PUT 和 PATCH 差在哪?

PUT 是用請求內容取代整筆資源,沒送的欄位可能被清空;PATCH 只修改送出的部分。PUT 是冪等的,PATCH 則不一定,重送前要確認對方的處理方式。

收到 401 和 403 要怎麼判斷?

401 表示需要先通過身分驗證,通常要檢查金鑰或權杖;403 表示伺服器拒絕處理,重新驗證也不會改變,要確認帳號是否有這項權限。

沒有 API 文件的系統可以串接嗎?

風險很高。欄位意義、錯誤處理與權限都只能猜測,對方改版時也可能沒有通知。建議先請廠商補文件與測試環境,或改用檔案匯出等其他交換方式。

本文由京采數位科技整理。我們自 2005 年起提供官網設計、系統開發與 Google SEO 服務,實際案例可見成果與案例。

想直接討論你自己的網站狀況,或需要一份初步的搜尋機會評估?

相關主題

下一步

外包系統前,建議先列出要和哪些系統交換資料、哪些畫面需要 API,並要求廠商交付可測試的 API 文件。京采的網頁設計服務可以協助需求釐清、撰寫與審閱 API 規格,並開發官網、後台與既有系統之間的 API 串接,歡迎與我們聯繫討論。