1. 程式人生 > >restful api 理解

restful api 理解

restful 理解 : 
REST:Representational State Transfer 的縮寫,翻譯:“具象狀態傳輸”。一般解釋為“表現層
狀態轉換”。
REST 是設計風格而不是標準。是指客戶端和伺服器的互動形式。我們需要關注的重點是如何設計
REST 風格的網路介面。
REST 的特點:
1.具象的。一般指表現層,要表現的物件就是資源。比如,客戶端訪問伺服器,獲取的資料就是資
源。比如文字、圖片、音視訊等。
2.表現:資源的表現形式。txt 格式、html 格式、json 格式、jpg 格式等。瀏覽器通過 URL 確定資
源的位置,但是需要在 HTTP 請求頭中,用 Accept 和 Content-Type 欄位指定,這兩個欄位是對資源
表現的描述。
3.狀態轉換:客戶端和伺服器互動的過程。在這個過程中,一定會有資料和狀態的轉化,這種轉化
叫做狀態轉換。其中,GET 表示獲取資源,POST 表示新建資源,PUT 表示更新資源,DELETE 表示刪
除資源。HTTP 協議中最常用的就是這四種操作方式。 
RESTful 架構:

1.每個 URL 代表一種資源;
2.客戶端和伺服器之間,傳遞這種資源的某種表現層;
3.客戶端通過四個 http 動詞,對伺服器資源進行操作,實現表現層狀態轉換。
12.1 如何設計符合 RESTful 風格的 API

一、域名:
將 api 部署在專用域名下:
http://api.example.com
或者將 api 放在主域名下:
http://www.example.com/api/

二、版本:
將 API 的版本號放在 url 中。
http://www.example.com/app/1.0/info
http://www.example.com/app/1.2/info

三、路徑:
路徑表示 API 的具體網址。每個網址代表一種資源。 資源作為網址,網址中不能有動詞只能有
名詞,一般名詞要與資料庫的表名對應。而且名詞要使用複數。
錯誤示例:

http://www.example.com/getGoods
http://www.example.com/listOrders

正確示例:
#獲取單個商品

http://www.example.com/app/goods/1
#獲取所有商品
http://www.example.com/app/goods
四、使用標準的 HTTP 方法:
對於資源的具體操作型別,由 HTTP 動詞表示。 常用的 HTTP 動詞有四個。
GET SELECT :從伺服器獲取資源。
POST CREATE :在伺服器新建資源。
PUT UPDATE :在伺服器更新資源。
DELETE DELETE :從伺服器刪除資源。

示例:
#獲取指定商品的資訊
GET http://www.example.com/goods/ID
#新建商品的資訊
POST http://www.example.com/goods
#更新指定商品的資訊
PUT http://www.example.com/goods/ID
#刪除指定商品的資訊
DELETE http://www.example.com/goods/ID

五、過濾資訊:
如果資源資料較多,伺服器不能將所有資料一次全部返回給客戶端。API 應該提供引數,過濾返
回結果。 例項:
#指定返回資料的數量

http://www.example.com/goods?limit=10
#指定返回資料的開始位置
http://www.example.com/goods?offset=10
#指定第幾頁,以及每頁資料的數量
http://www.example.com/goods?page=2&per_page=20
六、狀態碼:

伺服器向用戶返回的狀態碼和提示資訊,常用的有:
200 OK
:伺服器成功返回使用者請求的資料
201 CREATED :使用者新建或修改資料成功。
202 Accepted:表示請求已進入後臺排隊。
400 INVALID REQUEST :使用者發出的請求有錯誤。
401 Unauthorized :使用者沒有許可權。
403 Forbidden :訪問被禁止。
404 NOT FOUND :請求針對的是不存在的記錄。
406 Not Acceptable :使用者請求的的格式不正確。
500 INTERNAL SERVER ERROR :伺服器發生錯誤。

七、錯誤資訊:
一般來說,伺服器返回的錯誤資訊,以鍵值對的形式返回。
{
error: 'Invalid API KEY'
}

八、響應結果:  (web wechat 安卓...)

針對不同結果,伺服器向客戶端返回的結果應符合以下規範。
#返回商品列表

GET
http://www.example.com/goods
#返回單個商品
GET
http://www.example.com/goods/cup
#返回新生成的商品
POST
http://www.example.com/goods
#返回一個空文件
DELETE http://www.example.com/goods
九、使用連結關聯相關的資源:
在返回響應結果時提供連結其他 API 的方法,使客戶端很方便的獲取相關聯的資訊。
十、其他:
伺服器返回的資料格式,應該儘量使用 JSON,避免使用 XML。