1. 程式人生 > >如何理解RESTful API

如何理解RESTful API

REST的英文全稱

Representation State Transfer : 直譯為表現層狀態轉移.

是通過HTTP協議來描述Web API的約定風格.

什麼是服務?

任何業務服務都可以抽象為物件的狀態維護,基本操作就増刪查改四種.

例如:

  1. 訪問文章的,很明顯就是對文章及其列表的增刪查改,文章是被做操的物件,通過增刪查改修改文章的狀態.
  2. 銀行轉賬,好像是有邏輯行為,但實際上每個轉賬事務,可以理解為對一個賬單物件的狀態操作,這個賬單又關聯了多個賬戶的狀態.
  3. 現實生活中一個人走路,是一個明顯的物件行為,也可以表示為人這個物件從位置A經過時間T後變為位置B的狀態更新操作.

服務端無論使用何種架構,加入快取,佇列,資料庫,最終的目標就是維護資源的狀態.

從客戶端的視角來看,服務端API描述的內容就是其維護的物件的瞬時狀態的表現.

為什麼是RESTful

服務端面向Web的API需要通過HTTP協議來表達.瞭解一下REST的起源可以知道其作者是HTTP協議的制定者,所以HTTP協議的語義元素天然符合REST的約束要求.

但RESTful並不是強制的,Web API不必遵循RESTful,但是遵循RESTful可以令API表達的語義更簡單清晰統一,在語義全部抽象為轉檯轉移後,分散式系統的架構關注點(維護狀態一致)也會更明確.

RESTful的初級內容

  1. 使用METHOD (POST,DELETE,GET,PUT) 等動詞表示増刪查改四種操作.
  2. 使用URI(通常是其子集URL)來表示物件或資源.
  3. 使用queryString表示查詢輸入
  4. 使用body表示更新和儲存的狀態輸入
  5. 使用HEAD進行擴充套件

例如:

  1. 查詢名為REST的文章 -> GET http://host:port/article/REST
  2. 從賬戶A轉賬50元到轉戶B -> POST http://host:port/transaction body: {"from":"A","to":"B","amount":50}
  3. 讓一個名為Mike的人步行一分鐘 -> PUT http://host:port/human/mike
    body: {"time":1,"unit":"minite"}

補充閱讀

阮一峰寫的這篇文章詳盡易懂,請讀者一定要閱讀,本文不想重複其內容所 以僅僅作為理解嚮導存在.