RestfulApi 學習筆記——簡單介紹(一)

前言

什麼是restapi?

直接看:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

阮一峯的blog,即可明白,下面是一些例子,增強理解。

正文

例子一 資源鏈是箱子

比如說我們要得到某個用戶,我們可能這樣寫:api/getusers

這樣就不符合了,因爲操作動作讓請求方式替代。

比如說get 請求就表示是獲取users,那麼就不需要寫get,那麼可以這樣寫:api/users 然後get請求。

這個怎麼說呢?也就是說把資源鏈當做資源鏈,而不是語義,說簡單點就是資源鏈指向的是某個資源,而不是某個操作。

那麼如果獲取方式不同怎麼寫呢?比如說查詢按照某個字段從小到大排序,那麼應該如何寫呢?我們需要明白查詢從小到大排序是條件,而不是動作。

那麼可以作爲參數來傳遞api/users?orderby='xxx'

例子二 給箱子取一個好的名字

api/users 那麼你能寫成api/u,因爲這樣不具備語義化

例子三 不要給箱子定義多個名字

比如說我們獲取到多個用戶,那麼我就使用api/users,然後我獲取某個用戶我就去獲取api/user/1。

這樣其實是沒有必要的,api/users 表示的就是users 這個資源箱。使用api/user/1 從新給箱子又改了一個名字,我覺得這樣難以維護,

而且這樣做,不能體現這是一條資源鏈,因爲user 並不能表示這個資源箱的名字,而是一個複數,是一個集合來表示。

例子四 給箱子裏面套箱子,結構化

比如說查詢某家公司下面的某個員工?

/api/employees/1 這樣寫似乎沒有什麼問題,但是呢?這樣寫還是存在某些問題的,因爲這樣沒有體現好資源結構。

如果這樣寫是不是更好,/api/companies/1/employees/1,這樣寫是否更好一點?這樣在api層面暴露出了更多的信息,比如說知道了員工是在某個公司下面。

這樣體現了一個很好的結構性。

例子五 不要讓restful作爲約束

比如說我們可能看到這樣的api,/api/users/allcount,這樣寫是不符合restful api的,表示獲取users的數量,因爲這不能把allcount 作爲一個箱子,因爲他的來源於users,users纔是一個資源箱。

那麼這樣寫是否正確呢?當然是不符合的了,但是有存在的合理性。因爲如果這樣寫/api/users?search='allcount',這樣寫當然也是錯誤的了,因爲/api/users獲取的是users資源,得到的結果卻是一個數量,

而且這樣寫讓我們的代碼混亂不堪。當然我們也可以提取出去,/api/statistics?name='users'&&result='allcount',這樣寫也會混亂不堪。那麼就把這個當做一個箱子的特殊的孔,其合理性也很高。

所以說不能把restful完全作爲一種不可牴觸的東西,主要是看這個資源箱的結構是怎麼樣的。就像這個例子一樣,在這個api接口資源庫中,在users打個孔,真的沒啥的,就跟一個機箱一樣,裏面存着一些外設

usb接口,如果沒有這些接口的話,那麼其擴展性太差了。

簡單的做個介紹,後續持續不斷更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章