RESTful規范建議


RESTful概述

RESTful是目前最流行的一種互聯網軟件架構。它結構清晰、符合標准、易於理解、擴展方便,所以正得到越來越多網站的采用。

REST是Representational State Transfer的縮寫,是Roy Thomas Fielding在他2000年的博士論文中提出的。其提出的設計概念和准則為:

1. 網絡上的所有事物都可以抽象為資源

2. 每個資源都應該有唯一的標識(identifier),對資源的操作不會改變標識

3. 所有的操作都是無狀態的

4. 使用標准方法(GET、POST、PUT、PATCH、DELETE)操作資源

 

RESTful使用

HTTP方法 URI 描述 冪等 安全
 GET  /api/members  獲取成員列表  是  是
 GET  /api/members/{id}   獲取指定成員  是  是
 POST  /api/members  創建一個成員  否  否
 PUT  /api/members/{id}   更新成員所有信息  是  否
 PATCH  /api/members/{id}   更新成員部分信息  是  否
 DELETE  /api/members/{id}   刪除指定成員  是  否
HTTP方法 URI 描述 冪等 安全
 GET  /api/groups  獲取群組列表  是  是
 GET  /api/groups/{id}  獲取指定群組  是  是
 POST  /api/groups  創建一個群組  否  否
 PUT  /api/groups/{id}  更新群組所有信息  是  否
 PATCH  /api/groups/{id}  更新群組部分信息  是  否
 DELETE  /api/groups/{id}  刪除指定群組  是  否
 GET  /api/groups/{id}/members  獲取指定群組下的成員  是  是
 GET  /api/groups/{id}/members/{memberId}  獲取指定群組下的指定成員  是   是

冪等性:同一個RESTful接口的多次訪問,得到的資源狀態是相同的。

安全性:對該RESTful接口訪問,不會使服務端資源的狀態發生改變。

 

規范建議

1. API盡量采用通過安全通道的HTTPS協議(https)。

  

2. 請求體與響應體統一通過json格式來承載,json使用Camel的命名規則,媒體類型需設置為“application/json”。

示例:

Request

  Accept: application/json

  Content-Type: application/json

 

Response

  Content-Type: application/json

 

3. 請求體與響應體統一采用UTF-8編碼格式,時間統一使用UTC格式:yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z'。

 

4. URI模版:/{domain}/{service or module}/api/{version}/{resource},URI應全為小寫字母,短語單詞使用“-”分隔。

名稱 說明 示例
 domain  領域名稱,不需要區分領域時,可以不指定

 education(教育領域)

 finance(金融領域)

 game(游戲領域)

 service or module  服務或模塊名

 account(賬戶模塊)

 order(訂單服務)

 storage(庫存服務)

 version  版本號

 v1

 v2

 v3

 resource  服務或模塊內資源

 users(用戶)

 products(產品)

 members(成員)

 

5. 資源增、刪、改、查外的操作,采用模板:/{domain}/{service or module}/api/{version}/{resource}/action/{action}。

示例:/common/account/api/v1/users/action/login

 

響應消息建議

1. 獲取資源列表成功返回200,響應消息體中包含記錄總條數、當前頁碼、每頁記錄,以及對應的資源。

示例:

Response Body

{

  "total": xxx,

  "pageIndex": xxx,

  "pageSize":xxx,

  "records":[

    { "id": xxx, "name":"xxx" },

    { "id": xxx, "name":"xxx" }

  ]

}

 

2. 獲取指定資源成功返回200,響應消息體中包含該資源的信息。

 

3. 創建資源成功返回201,並在響應消息頭中包含定位該資源的地址。

示例:

Response Headers

{
  "pragma": "no-cache",
  "server": "xxx",
  "content-type": "application/json; charset=utf-8",
  "location": "https://xxx/api/users/xxx", //資源訪問地址
  "content-length": "xxx"
}

 

4. 資源更新成功返回200,並在響應消息中體返回更新后的資源內容。

 

5. 資源刪除成功返回204,響應消息體無內容。

 

6. 針對400 Bad Request客戶端錯誤,可以在響應消息體中擴展狀態碼。

示例:

Response Code

400 Bad Request

Response Body

{

  "code": 400001,

  "message": "用戶名或密碼錯誤"

}

 

----------------------------------------------------------

Response Code

400 Bad Request

Response Body

{

  "code": 400002,

  "message": "郵箱已存在"

}

 

----------------------------------------------------------

Response Code

400 Bad Request

Response Body

{

  "code": 400003,

  "message": "郵箱地址錯誤"

}

 

7. 針對5XX的服務端錯誤,只在響應消息體中提供簡單提示,不可打印錯誤日志信息。

示例:

Response Body

{

  "message": "內部錯誤,請稍后再試或聯系管理員"

}

 

7. 其他客戶端錯誤的響應碼,只在響應消息體中提供相應提示。

示例:

Response Code

401 Unauthorized

Response Body

{

  "message": "用戶未登錄"

}

 

----------------------------------------------------------

Response Code

403 Forbidden

Response Body

{

  "message": "權限不足"

}

 

----------------------------------------------------------

Response Code

404 Not Found

Response Body

{

  "message": "請求資源不存在或已被刪除"

}

 

常見響應碼

響應碼 說明
 200 OK  請求已成功
 201 Created  資源已創建
 204 No Content  請求已成功,但無返回內容
 304 Not Modified  緩存有效
 400 Bad Request  語義有誤,當前請求無法被服務器理解,請求參數錯誤
 401 Unauthorized  當前請求需要用戶認證(登錄)
 403 Forbidden  用戶已認證(登錄),但權限不足
 404 Not Found  請求源未在服務器上被發現
 405 Method Not Allowed  請求方法不能被用於請求相應的資源,如使用PUT方法訪問只接受POST方法的API
 500 Internal Server Error  服務端內部錯誤
 502 Bad Gateway  網關錯誤
 504 Gateway Timeout  網關超時


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM