Rest/RestFul API
RESTful API是一種設計風格,這種風格使API設計具有整體一致性,易於維護、擴展,並且充份利用HTTP協定的特點。
REST架構風格最重要的架構約束有6個:
客戶-伺服器(Client-Server) 通信只能由客戶端單方面發起,表現為請求-響應的形式。
無狀態(Stateless) 通信的會話狀態(Session State)應該全部由客戶端負責維護。
緩存(Cache) 響應內容可以在通信鏈的某處被緩存,以改善網絡效率。
統一接口(Uniform Interface) 通信鏈的組件之間通過統一的接口相互通信,以提高交互的可見性。
分層系統(Layered System) 通過限制組件的行為(即,每個組件只能「看到」與其交互的緊鄰層),將架構分解為若干等級的層。
按需代碼(Code-On-Demand,可選) 支持通過下載並執行一些代碼(例如Java Applet、Flash或JavaScript),對客戶端的功能進行擴展。
Http常用名詞
- GET: 讀取資源 (safe & idempotent)
- PUT: 替換資源 (idempotent)
- DELETE: 刪除資源 (idempotent)
- POST: 新增資源;也作為萬用動詞,處理其它要求
- PATCH: 更新資源部份內容
- HEAD: 類似GET,但只回傳HTTP header (safe & idempotent)
Http回傳
- 2xx: 成功
200 OK: 通用狀態碼 201 Created: 資源新增成功 202 Accepted: 請求已接受,但尚在處理中 204 No Content: 請求成功,但未回傳任何內容
- 3xx: 重新導向
301 Moved Permanently: 資源已移至它處 303 See Other: 回傳的內容可在它處取得(例如在用戶端發送了一個POST請求之後) 304 Not Modified: 請求的資源並未修改(通常是用戶端發送了帶有If-Modified-Since或If-None-Match表頭的請求)
- 4xx: 用戶端錯誤(用戶端不應retry原始請求)
400 Bad Request: 通用狀態碼 401 Unauthorized: 用戶端尚未驗證* 403 Forbidden: 用戶端被禁止此請求* 404 Not Found: 請求的資源不存在 405 Method Not Allowed: 不支援請求的HTTP方法 406 Not Acceptable: 不支援請求所要求的內容類型*(Accept表頭) 415 Unsupported Media Type: 不支援請求所用的內容類型*(Content-Type表頭)
- 5xx: 伺服器錯誤(用戶端可合理retry)
500 Internal Server Error: 工程師要找bug了 501 Not Implemented: 用戶端的請求目前未支援(也就是將來有可能支援) 502 Bad Gateway: 上游的伺服器未回傳正確結果,一般是gateway或proxy server才會回傳此狀態碼 503 Service Unavailable: 暫停服務(也就是過不久就會恢復服務──如果一切順利的話) 504 Gateway Timeout: 上游的伺服器逾時,一般是gateway或proxy server才會回傳此狀態碼