Restful API
定義
REST:表述(編者注:通常譯爲表徵)性狀態轉移。指的是一組架構約束條件和原則。如果一個架構符合REST的約束條件和原則,我們就稱它爲RESTful架構。
RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用於移動互聯網廠商作爲業務使能接口的場景,實現第三方OTT調用移動網絡資源的功能,動作類型爲新增、變更、刪除所調用資源。
特點
1、每一個URI代表1種資源;
2、客戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源;
3、通過操作資源的表現形式來操作資源;
4、資源的表現形式是XML或者HTML;
5、客戶端與服務端之間的交互在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的信息。
Restful api的設計
-
uri與url的區別
// 對資源的描述構成了uri // 1.使用名詞,如:user,students,emp http://api.example.com/class-management/students http://api.example.com/device-management/managed-devices/{device-id} // 2.http method對應不同的請求動作(數據庫或者業務邏輯) // 3.使用連字符( - )而不是(_)來提高URI的可讀性 http://api.example.com/inventory-management/managed-entities/{id}/install-script-location //更易讀 http://api.example.com/inventory_management/managed_entities/{id}/install_script_location //更容易出錯 // 4.使用小寫字母 http://api.example.org/my-folder/my-doc // 5.不要使用文件擴展名 文件擴展名看起來很糟糕,不會增加任何優勢。刪除它們也會減少URI的長度。沒理由保留它們。 http://api.example.com/device-management/managed-devices.xml // 不要使用它 http://api.example.com/device-management/managed-devices // 這是正確的URI // 6.使用查詢組件過濾URI集合很多時候,我們會遇到需要根據某些特定資源屬性對需要排序,過濾或限制的資源集合的要求。爲此,請不要創建新的API - 而是在資源集合API中啓用排序,過濾和分頁功能,並將輸入參數作爲查詢參數傳遞。例如: http://api.example.com/device-management/managed-devices http://api.example.com/device-management/managed-devices?region=USA http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ&sort=installation-date // 7.不要在末尾使用/ 作爲URI路徑中的最後一個字符,正斜槓(/)不會添加語義值,並可能導致混淆。最好完全放棄它們。 // 8.使用http狀態碼定義api執行結果 1xx:信息 通信傳輸協議級信息。 2xx:成功 表示客戶端的請求已成功接受。 3xx:重定向 表示客戶端必須執行一些其他操作才能完成其請求。 4xx:客戶端錯誤 此類錯誤狀態代碼指向客戶端。 5xx:服務器錯誤 服務器負責這些錯誤狀態代碼。 // 9.api版本定義 當我們需要對現有的api接口升級的時候,因爲該api接口已經投入使用,所以新添加的業務可能無法保證兼容原來的邏輯,這個時候就需要新的接口,而這個接口一般表示對原來的接口的升級(不同版本),那版本怎麼定義呢? URI版本控制(推薦) http://api.example.com/v1 http://apiv1.example.com 使用自定義請求標頭進行版本控制 Accept-version:v1 Accept-version:v2 使用Accept header 進行版本控制 Accept:application / vnd.example.v1 + json Accept:application / vnd.example + json; version = 1.0
-
無狀態
無狀態通過將API部署到多個服務器,有助於將API擴展到數百萬併發用戶。任何服務器都可以處理任何請求,因爲沒有與會話相關的依賴。(集羣)
無狀態使得REST API不那麼複雜 - 可以刪除所有服務器端狀態同步邏輯。(刪除session,清理多餘空間)
無狀態API也很容易緩存。特定軟件可以通過查看該一個請求來決定是否緩存HTTP請求的結果。從先前的請求中獲得的狀態可能會影響這個請求的可緩存性,這並不存在任何不確定性。它提高了應用程序的性能。
服務器永遠不會忘記每個客戶端身份”,因爲客戶端會在每個請求中發送所有必要的信息。(攜帶token)
接口操作
Verd | 描述 |
---|---|
HEAD(SELECT) | 只獲取某個資源的頭部信息 |
GET(SELECT) | 獲取資源 |
POST(CREATE) | 創建資源 |
PATCH(UPDATE) | 更新資源的部分屬性(很少用,一般用POST代替) |
PUT(UPDATE) | 更新資源,客戶端需要提供新建資源的所有屬性 |
DELETE(DELETE) | 刪除資源 |