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(詳情可見參考)
URL是URI的一部份,它指示一個網路資源,並指定對其進行操作或取得該資源的方法。
-
URL:代表一個頁面"地址"
-
URI:更進一步代表一個地址裡可提供的服務
以分解以下URI請求為例
http://localhost:5109/Products/1558
主要分成三個部分
-
http://localhost:5109/ :指出這個API的服務位址
-
Products:這個服務位址提供Products這個資源可進行操作
-
1556:與資源互動過程,傳遞一個參數與資源互動
好了,現在我們有三樣事情已經說明完成
-
REST是一個基於HTTP協定上的設計風格
-
採用HTTP動詞的方式與伺服器互動
-
使用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/
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。