怎樣用通俗的語言解釋REST

2021-09-28 15:54:35 字數 2735 閱讀 2009

以下內容取自知乎:

rest -- representational state transfer

首先,之所以晦澀是因為前面主語被去掉了,全稱是 resource representational state transfer:通俗來講就是:資源在網路中以某種表現形式進行狀態轉移。分解開來:

resource:資源,即資料(前面說過網路的核心)。比如 newsfeed,friends等;

representational:某種表現形式,比如用json,xml,jpeg等;

state transfer:狀態變化。通過http動詞實現。

看了網上好多對rest的介紹,非常理論,讓人很難耐著性子看完。即使看完了,還是會雲裡霧裡,不知所云。

一句話概括很精闢:

url定位資源,用http動詞(get,post,delete,detc)描述操作。

1. rest描述的是在網路中client和server的一種互動形式;rest本身不實用,實用的是如何設計 restful api(rest風格的網路介面);

2. server提供的restful api中,url中只使用名詞來指定資源,原則上不使用動詞。「資源」是rest架構或者說整個網路處理的核心。比如:

獲取某人的新鮮;

獲取某人的好友列表;

獲取某人的詳細資訊;3. 用http協議裡的動詞來實現資源的新增,修改,刪除等操作。即通過http動詞來實現資源的狀態扭**

get 用來獲取資源,

post 用來新建資源(也可以用於更新資源),

put 用來更新資源,

delete 用來刪除資源。比如:

delete 刪除某人的好友 (在http parameter指定好友id)

post 新增好友

update 更新個人資料

4. server和client之間傳遞某資源的乙個表現形式,比如用json,xml傳輸文字,或者用jpg,webp傳輸等。當然還可以壓縮http傳輸時的資料(on-wire data compression)。

5. 用 http status code傳遞server的狀態資訊。比如最常用的 200 表示成功,500 表示server內部錯誤等。

主要資訊就這麼點。web端和server只使用上述定義的api來傳遞資料和改變資料狀態。格式一般是json。ios和android同理可得。由此可見,web,ios,android和第三方開發者變為平等的角色通過一套api來共同消費server提供的服務。

首先要明確一點:rest 實際上只是一種設計風格,它並不是標準。(所以你可以看到網上一大堆的各種最佳實踐,設計指南,但是沒有人說設計標準)。aisuhua/restful-api-design-references · github

說說幾個重要的概念:

1、rest 是面向資源的,這個概念非常重要,而資源是通過 uri 進行暴露。

uri 的設計只要負責把資源通過合理方式暴露出來就可以了。對資源的操作與它無關,操作是通過 http動詞來體現,所以rest 通過 uri 暴露資源時,會強調不要在 uri **現動詞。

比如:左邊是錯誤的設計,而右邊是正確的

get /rest/api/getdogs --> get /rest/api/dogs 獲取所有小狗狗 

get /rest/api/adddogs --> post /rest/api/dogs 新增乙個小狗狗

get /rest/api/editdogs/:dog_id --> put /rest/api/dogs/:dog_id 修改乙個小狗狗

get /rest/api/deletedogs/:dog_id --> delete /rest/api/dogs/:dog_id 刪除乙個小狗狗

左邊的這種設計,很明顯不符合rest風格,上面已經說了,uri 只負責準確無誤的暴露資源,而 getdogs/adddogs...已經包含了對資源的操作,這是不對的。相反右邊卻滿足了,它的操作是使用標準的http動詞來體現。

2、rest很好地利用了http本身就有的一些特徵,如http動詞、http狀態碼、http報頭等等

rest api 是基於 http的,所以你的api應該去使用 http的一些標準。這樣所有的http客戶端(如瀏覽器)才能夠直接理解你的api(當然還有其他好處,如利於快取等等)。rest 實際上也非常強調應該利用好 http本來就有的特徵,而不是只把 http當成乙個傳輸層這麼簡單了。

http動詞

get     獲取乙個資源 

post 新增乙個資源

put 修改乙個資源

delete 刪除乙個資源

實際上,這四個動詞實際上就對應著增刪改查四個操作,這就利用了http動詞來表示對資源的操作。

http狀態碼

200 ok 

400 bad request

500 internal server error

這三種狀態與上面的狀態碼是一一對應的。

http報頭

authorization 認證報頭 

cache-control 快取報頭

cnotent-type 訊息體型別報頭

......

報頭還有很多,不一一枚舉。http報頭是描述http請求或響應的元資料,它的作用是客戶端 與 伺服器端進行相互通訊時,告訴對方應該如何處理本次請求。

怎樣用通俗的語言解釋REST,以及RESTful?

一句話 就是用url定位資源,用http描述操作。我在這裡的答案主要解釋什麼是rest?為什麼要用rest?不包括具體該如何使用rest風格,你可以在網上看教程去學習相關知識。現在稍微具體一下什麼是rest架構風格。rest也就是representational state transfer 表現層...

怎樣用ntdsutil刪除ad中的垃圾資訊

以下是關於如何利用ntdsutil刪除域控制器的操作步驟,供您參考。c ntdsutil ntdsutil metadata cleanup metadata cleanup select operation target select operation target connections se...

怎樣用Java來獲取真實的IP位址

在jsp裡,獲取客戶端的ip位址的方法是 request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,將http 192.168.1.110 2046 的url反向 為 htt...