What is REST

REST

REST

REST他本身是一種設計風格而不是標準或協定,REST使用是建立在HTTP協定上與server做溝通,來取代更複雜的CORBA、RPC、SOAP等等。  意旨用戶端的訊息會建立在HTTP通訊協定上描述這些訊息。

使用HTTP協定意旨REST是一個單純的request/response 的機制。  每一個request 隨後會回傳一個response,如下圖:

這張圖使用某一個叫做 http 動詞是post的動作,post的動詞則記錄在headers裡面,body內容是Hello World,表示要傳遞過去的訊息。

在Http/1.1協定共定義了8個HTTP動詞:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE,其中常用的四個動詞

GET : 接受資源

POST : 建立資源

PUT : 更新資源

DELETE :刪除資源

。 HTTP動詞是用戶端向伺服器端說明,現在想要對資源進行何種動作。

 

什麼是資源(Resource)?

在學術上有區分URI、URL、URN(詳情可見參考)

uri-url-urn-relationship-venn-diagram

URL是URI的一部份,它指示一個網路資源,並指定對其進行操作或取得該資源的方法。

  • URL:代表一個頁面"地址"

  • URI:更進一步代表一個地址裡可提供的服務

以分解以下URI請求為例

http://localhost:5109/Products/1558

主要分成三個部分

  1. http://localhost:5109/ :指出這個API的服務位址

  2. Products:這個服務位址提供Products這個資源可進行操作

  3. 1556:與資源互動過程,傳遞一個參數與資源互動

 

好了,現在我們有三樣事情已經說明完成

  1. REST是一個基於HTTP協定上的設計風格

  2. 採用HTTP動詞的方式與伺服器互動

  3. 使用URI定位要互動的資源

接下來就是使用這三樣東西,構成一筆完整的HTTP請求(HTTP Request),而HTTP請求最少還需要指定兩個成員,一個是HTTP動詞與HTTP協定版本。

 

取得資源範例(GET)

1.使用GET動詞取得URI資源,且按HTTP/1.1規定,送出request的格式

GET http://localhost:5109/Api/Products/1558 HTTP/1.1
Host: localhost:5109
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 7bb47ba4-14e9-0e8b-61e4-34c63a669f2b

2.取得回應

HTTP/1.1 200 OK
Content-Length : 100
Content-Type : application/json; charset=utf-8

{
  "OrderLine": [],
  "ProductId": 1558,
  "ProductName": "Miles",
  "Price": 200,
  "Active": true,
  "Stock": 2
}

 

建立資源範例(POST)

1.使用POST動詞建立一個資源,且按HTTP/1.1規定,送出request的格式

POST http://localhost:5109/Api/Products HTTP/1.1
Host: localhost:5109
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 981d7506-e4d1-7269-d20c-6bd869675abb

{
  "ProductName": "Miles2",
  "Price": 100,
  "Active": true,
  "Stock": 1210.2
}

2.取得回應

HTTP/1.1 201 Created
Content-Length : 99
Content-Type : application/json; charset=utf-8
Location : http://localhost:5109/api/Products/1565

{
  "ProductId": 1565,
  "ProductName": "Miles2",
  "Price": 100,
  "Active": true,
  "Stock": 1210.2,
  "OrderLine": []
}

以上範例使用POSTMAN做測試。

簡單的說REST就是把HTTP協定發揮到極致的一種設計風格,透過動詞來決定對資源進行何種操作。   如果設計的Web API 應用程式能符合REST原則(REST principles),符合REST原則的REST服務可稱為 "RESTful Web Service"也稱 "RESTful Web API"。"-ful" 字尾是強調設計完全符合REST建議內容。

 

參考

http://searchsoa.techtarget.com/definition/REST

http://www.books.com.tw/products/0010647207

http://blog.pluralsight.com/representational-state-transfer-tips

http://prateekvjoshi.com/2014/02/22/url-vs-uri-vs-urn/

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。