REST接口

1.是什麼?

Rest,Representational State Transfer的縮寫,資源(數據)的表示(json、xml)+狀態轉化(http verb動作)

使用URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。

用來規範客戶端如何在HTTP 層與 API 提供方進行數據交互 。

2. 爲什麼?

“古代”網頁是前端後端融在一起的,比如之前的PHP,JSP等。近年來移動互聯網的發展,各種類型的Client層出不窮,RESTful可以通過一套統一的接口爲Web,iOS和Android提供服務。

另外對於廣大平臺來說,比如Facebook platform,微博開放平臺,微信公共平臺等,它們不需要有顯式的前端,只需要一套提供服務的接口,於是RESTful更是它們最好的選擇。在RESTful架構下:


3. 怎麼做?

3.1資源指定

URL中只使用名詞(一般用複數)來指定資源,原則上不使用動詞。“資源”是REST架構或者說整個網絡處理的核心。比如:

http://api.qc.com/v1/newsfeed: 獲取某人的新鮮;

http://api.qc.com/v1/friends: 獲取某人的好友列表;

http://api.qc.com/v1/profile: 獲取某人的詳細信息;

3.2URL嵌套

按照資源的邏輯層級,對 URL 進行嵌套,比如一個用戶屬於某個團隊,而這個團隊也是衆多團隊之一;那麼獲取這個用戶的接口可能是這樣:

GET /api/teams/123/members/234 表示獲取 id 爲123 的小組下,id 爲234 的成員信息。

/api/teams (對應團隊列表)

/api/teams/123 (對應 ID 爲 123 的團隊)

/api/teams/123/members (對應 ID 爲123 的團隊下的成員列表)

/api/teams/123/members/456 (對應 ID 爲123 的團隊下 ID 爲 456 的成員)

3.3Verb

用HTTP協議裏的動詞來實現資源的添加,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉:

GET:用來獲取資源

POST:用來新建資源(也可以用於更新資源)

PUT:用來新建或更新資源,將某個東西放到服務器上,全部更新

DELETE:http://api.qc.com/v1/friends:用來刪除資源

POST:http://api.qc.com/v1/friends: 添加好友

3.4狀態碼

服務器向用戶返回的狀態碼和提示信息,常見的有以下一些(方括號中是該狀態碼對應的HTTP動詞)。

200 OK - [GET]:服務器成功返回用戶請求的數據,該操作是冪等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。

202 Accepted - [*]:表示一個請求已經進入後臺排隊(異步任務)

204 NO CONTENT - [DELETE]:用戶刪除數據成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作,該操作是冪等的。

401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。

403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。

404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。

406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是隻有XML格式)。

410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。

422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。

500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷髮出的請求是否成功。

3.5錯誤處理

如果狀態碼是4xx,就應該向用戶返回出錯信息。一般來說,返回的信息中將error作爲鍵名,出錯信息作爲鍵值即可。

{

    error:"Invalid API key"

}

3.6HypermediaAPI

返回結果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步應該做什麼。Github的API就是這種設計,訪問api.github.com會得到一個所有可用API的網址列表。

{

 "current_user_url": "https://api.github.com/user",

 "authorizations_url":"https://api.github.com/authorizations",

  // ...

}

從上面可以看到,如果想獲取當前用戶的信息,應該去訪問api.github.com/user,然後就得到了下面結果。

{

 "message": "Requires authentication",

 "documentation_url":"https://developer.github.com/v3"

}

4. RAML

致力於Restful接口完整生命週期管理的開源框架,簡化接口設計、構建、測試、文檔化、分享等工作。


功能:

1.設計API。你可以快速的構造你的API,並以人類友好的格式將它呈現出來。它涵蓋了一些重要設計的最佳實踐,如建模、模式、模板以及代碼重用。

2.構建API。一旦設計好你的API,你就可以藉助一些開發工具,將設計好的靜態API文檔,變成一個服務器端來提供服務。

3.測試API。引入單元測試可以有效地保證API實現的正確性,你可以通過運行一些腳本來測試你服務端是否涵蓋了你設計好的API。

4.文檔化API。Raml可以幫助你脫離同步維護一份額外文檔的痛苦。RAML是一門API描述語言,所以你的API一旦被描述,它就是一份現成的API文檔。你可以藉助一些工具將它生成可視化的文檔。

5.分享以及維護你的API。你可以藉助一個基本的JavaScript來生成一些交互式工具(API Consoles或API Nodebooks),這樣其他開發者可以使用標準格式與你的維護團隊進行交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章