RestfulApi 學習筆記——簡單介紹(一)
- 2020 年 11 月 1 日
- 筆記
- .net core(web)
前言
什麼是restapi?
直接看://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介面,如果沒有這些介面的話,那麼其擴展性太差了。
結
簡單的做個介紹,後續持續不斷更新。