Restful API簡介

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的設計

  1. 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
    
  2. 無狀態

    無狀態通過將API部署到多個服務器,有助於將API擴展到數百萬併發用戶。任何服務器都可以處理任何請求,因爲沒有與會話相關的依賴。(集羣)

    無狀態使得REST API不那麼複雜 - 可以刪除所有服務器端狀態同步邏輯。(刪除session,清理多餘空間)

    無狀態API也很容易緩存。特定軟件可以通過查看該一個請求來決定是否緩存HTTP請求的結果。從先前的請求中獲得的狀態可能會影響這個請求的可緩存性,這並不存在任何不確定性。它提高了應用程序的性能。

    服務器永遠不會忘記每個客戶端身份”,因爲客戶端會在每個請求中發送所有必要的信息。(攜帶token)


接口操作

Verd 描述
HEAD(SELECT) 只獲取某個資源的頭部信息
GET(SELECT) 獲取資源
POST(CREATE) 創建資源
PATCH(UPDATE) 更新資源的部分屬性(很少用,一般用POST代替)
PUT(UPDATE) 更新資源,客戶端需要提供新建資源的所有屬性
DELETE(DELETE) 刪除資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章