您好,登錄后才能下訂單哦!
這篇文章主要介紹“RESTful API設計怎么理解”,在日常操作中,相信很多人在RESTful API設計怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”RESTful API設計怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在完全深入RESTful API設計之前,詳細了解RESTful API設計者的工作細節很重要。
APIs之間不是孤立的,對于API中已經存在的應用或者服務的API,新的API要和它們在功能上獨立開來。在我看來,API設計者的職責是雙重的:
足夠理解新建API在應用中的重要細節,這樣你就能決定哪些功能需要暴露、如何暴露,以及哪些功能可以排除。
對API中的功能建模,要能解決出現的所有使用場景,同時盡可能遵守RESTful原則。
RESTful API設計中涉及到3個不同的組件:應用、API代碼和客戶端。下圖描述了組件間的相互關系:
應用和為它提供的API之間要相互獨立。也許應用是GUI程序,你需要為它提供可編程接口。也許應用只能通過你設計的API訪問。
和其它任何應用一樣,需要設計API的應用也有它自己的狀態。“狀態”是動態的,執行很多操作后狀態會改變。狀態和狀態上的操作,應該被建模并暴露到API中。
理解應用狀態的最簡單方法是把它描述成應用數據模型(application data model),可以表示成實體-關系圖(ER圖)。實體-關系圖能列出應用狀態中實體的細節,以及它們間的關系。
一些情景中,很容易創建實體-關系圖。假設一個web應用把所有狀態存在數據庫中,我們很容易從數據的schema中得到關系圖。其它一些沒有嚴格定義的情景下,API設計者的工作會難一些。這時,為應用創建ER圖就真的很有用。對你來說這是難得的鍛煉機會,它幫助你更好地理解應用。更重要的是,它會幫你設計出更好的RESTful API。我們一會詳細討論這個。以后的例子中,我都假設我們已經有了實體-關系圖(ER diagram)。
除了理解應用的狀態和狀態上的操作外,你還需要應用程序的入口(entry point
),它讓你能獲取和更改應用狀態。這個“入口”完全由應用決定,可以有多種形式。我們把這個入口稱為應用程序接口( application interface),它的正式稱呼是API。不同的是接口不用于外部消費甚至完全沒有文檔記錄(譯者注:正規軟件開發中代碼規范也是要求寫API文檔的
)。為了不產生疑惑,我們不會把接口稱為API,API這個術語保留給我們將要設計的RESTful API。
API代碼的任務是通過應用接口獲取應用的狀態,同時提供狀態上的操作,把應用接口暴露成RESTful API。在應用程序接口和RESTful API之間有一個轉換步驟:適配應用數據模型,并且符合RESTful風格。
轉換的結果是形成RESTful風格的資源、資源上的操作以及資源之間的關系。(譯者注:API中只有狀態
的概念,RESTful后形成資源
的概念)我們把這些稱為RESTful資源模型(RESTful resource model)。
資源是任何RESTful API的基礎,我們會在resources中詳細介紹。現在,我們只需要把資源理解成ER圖中的實體(這也是為什么應用中沒有實體時我建議你畫ER圖)。
資源間的關系通過超鏈接表示。這一點也是設計RESTful API的基本原則(fundamental principles)。資源通常響應有限的操作(通常4個),這也是RESTful架構的第二個風格。
當把應用模型對象轉換成RESTful里的資源時,下面兩個工具函數很有用:
to_resource()
:從應用模型中獲取一個對象,然后轉換成資源。
from_resource()
:把資源轉換成應用模型中的對象。
后面不會再討論這兩個函數,當應用數據模型和資源模型相似時,函數會很簡單;不相似的話會很復雜。
客戶端通過標準HTTP協議消費RESTful API。理論上,RESTful API也可以在其它協議之上提供。但是,由于HTTP協議非常廣泛,把RESTful API映射到另一種協議在真實場景中意義不大。因此,本文僅限于用HTTP協議相關術語描述RESTful協議。
客戶端通常使用HTTP庫來訪問RESTful API。HTTP已經成為一個相對復雜的協議,許多目標平臺/語言都有優秀的庫。因此使用這些庫很合理。
在某些情況下,可能有必要在HTTP庫之上使用通用的REST庫。但是,由于RESTful API中有一些不一致的約定,因此通用的REST庫適用于特定情況下的API。
到此,關于“RESTful API設計怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。