如何設計統一 RESTful 風格的數據接口
- 1.版本控制
- 1.1 通過 URL
- 1.2 通過自定義請求頭
- 1.3 通過 Accept 標頭
- 2.過濾信息
- 3.確定 HTTP 的方法
- 4.確定 HTTP 的返回狀態
- 5.定義統一返回的格式
近年來,隨著移動互聯網的發展,各種類型的客戶端層出不窮。如果不統一數據接口,則會造成冗余編碼,增加成本。RESTful 風格的 API 正適合通過一套統一的接口為 PC、手機 APP 等設備提供數據服務。
1.版本控制
隨著業務需求的變更、功能的選代,API 的更改是不可避免的。當一個 API 修改時,就會出現很多問題,比如,可能會在 API 中新增參數、修改返回的數據類型。這就要考慮根據原先版本 API 編寫的客戶端如何保留或順利過渡。所以,需要進行版本控制。
REST 不提供版本控制指南,常用的方法可以分為 3 種。
1.1 通過 URL
通過 URL 是最直接的方法,盡管它違背了 URI 應該引用唯一資源的原則。當版本更新時,還可以保障客戶端不會受到影響,如下面使用不同 URL 來確定不同版本。
二級目錄 的方式:
- API 版本 V1:
http://eg.com/api/v1
。 - API 版本 V2:
http://eg.com/api/v2
。
二級域名 的方式:
- API 版本 V1:
http://v1.eg.com
。 - API 版本 V2:
http://v2.eg.com
。
還可以包括日期、項目名稱或其他標識符。這些標識符對于開發 API 的團隊來說足夠有意義并且隨著版本的變化也足夠靈活。
1.2 通過自定義請求頭
自定義頭(例如,Accept-version)允許在版本之間保留 URL。
1.3 通過 Accept 標頭
客戶端在請求資源之前,必須要指定特定頭,然后 API 接口負責確定要發送哪個版本的資源。
2.過濾信息
如果記錄數量很多,則服務器不可能一次都將它們返回給用戶。API 應該提供參數,實現分頁返回結果。下面是一些常用的參數。
?limit=10
:指定返回記錄的數量。?page=5&size=10
:指定第幾頁,以及每頁的記錄數。?search_type=1
:指定篩選條件。
3.確定 HTTP 的方法
在 RESTful 中,HTTP 的方法有以下幾種。
GET
:代表 請求資源。POST
:代表 添加資源。PUT
:代表 修改資源。PUT 是進行全部的修改,大家在編寫修改功能時可能會遇到這樣的情況:只修改了一個字段,但提交之后導致其他字段為空。這是因為,其他字段的值沒有一起提交,數據庫默認為空值。如果只修改一個或幾個字段,則可以使用 PATCH 方法。DELETE
:代表 刪除資源。HEAD
:代表發送 HTTP 頭消息,GET 中其實也帶了 HTTP 頭消息。PATCH
:PUT 與 PATCH 方法比較相似,但它們的用法卻完全不同,PUT 用于替換資源,而 PATCH 用于 更新部分資源。OPTIONS
:用于獲取 URI 所支持的方法。返回的響應消息會在 HTTP 頭中包含Allow
的信息,其值是所支持的方法,如 GET。
4.確定 HTTP 的返回狀態
HTTP 的返回狀態一般有以下幾種。
- 200 200 200:成功。
- 400 400 400:錯誤請求。
- 404 404 404:沒找到資源。
- 403 403 403:禁止。
- 406 406 406:不能使用請求內容特性來響應請求資源,比如請求的是 HTML 文件,但是消費者的 HTTP 頭包含了 JSON 要求。
- 500 500 500:服務器內部錯誤。
5.定義統一返回的格式
為了保障前后端的數據交互的順暢,建議規范數據的返回,并采用固定的數據格式封裝。如:
異常信息:
{"code": 10001, "msg": "異常信息", "data": null
}
成功信息:
{"code": 200, "msg": "成功", "data": {"id": 1,"name": "pipi", "age": 26}
}