REST格式
首先要明確一點(diǎn):REST 實(shí)際上只是一種設(shè)計(jì)風(fēng)格,它并不是標(biāo)準(zhǔn)。(所以你可以看到網(wǎng)上一大堆的各種最佳實(shí)踐,設(shè)計(jì)指南,但是沒(méi)有人說(shuō)設(shè)計(jì)標(biāo)準(zhǔn))。aisuhua/restful-api-design-references · GitHub
說(shuō)說(shuō)幾個(gè)重要的概念:
1、REST 是面向資源的,這個(gè)概念非常重要,而資源是通過(guò) URI 進(jìn)行暴露。
URI 的設(shè)計(jì)只要負(fù)責(zé)把資源通過(guò)合理方式暴露出來(lái)就可以了。對(duì)資源的操作與它無(wú)關(guān),操作是通過(guò) HTTP動(dòng)詞來(lái)體現(xiàn),所以REST 通過(guò) URI 暴露資源時(shí),會(huì)強(qiáng)調(diào)不要在 URI 中出現(xiàn)動(dòng)詞。
GET /rest/api/getDogs --> GET /rest/api/dogs 獲取所有小狗狗 GET /rest/api/addDogs --> POST /rest/api/dogs 添加一個(gè)小狗狗 GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一個(gè)小狗狗 GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 刪除一個(gè)小狗狗
左邊的這種設(shè)計(jì),很明顯不符合REST風(fēng)格,上面已經(jīng)說(shuō)了,URI 只負(fù)責(zé)準(zhǔn)確無(wú)誤的暴露資源,而 getDogs/addDogs...已經(jīng)包含了對(duì)資源的操作,這是不對(duì)的。相反右邊卻滿(mǎn)足了,它的操作是使用標(biāo)準(zhǔn)的HTTP動(dòng)詞來(lái)體現(xiàn)。
2、REST很好地利用了HTTP本身就有的一些特征,如HTTP動(dòng)詞、HTTP狀態(tài)碼、HTTP報(bào)頭等等
REST API 是基于 HTTP的,所以你的API應(yīng)該去使用 HTTP的一些標(biāo)準(zhǔn)。這樣所有的HTTP客戶(hù)端(如瀏覽器)才能夠直接理解你的API(當(dāng)然還有其他好處,如利于緩存等等)。REST 實(shí)際上也非常強(qiáng)調(diào)應(yīng)該利用好 HTTP本來(lái)就有的特征,而不是只把 HTTP當(dāng)成一個(gè)傳輸層這么簡(jiǎn)單了。
GET 獲取一個(gè)資源 POST 添加一個(gè)資源 PUT 修改一個(gè)資源 DELETE 刪除一個(gè)資源
實(shí)際上,這四個(gè)動(dòng)詞實(shí)際上就對(duì)應(yīng)著增刪改查四個(gè)操作,這就利用了HTTP動(dòng)詞來(lái)表示對(duì)資源的操作。
HTTP狀態(tài)碼200 OK 400 Bad Request 500 Internal Server Error 在 APP 與 API 的交互當(dāng)中,其結(jié)果無(wú)非就三種狀態(tài):
- 所有事情都按預(yù)期正確執(zhí)行完畢 - 成功
- APP 發(fā)生了一些錯(cuò)誤 – 客戶(hù)端錯(cuò)誤
- API 發(fā)生了一些錯(cuò)誤 – 服務(wù)器端錯(cuò)誤
這三種狀態(tài)與上面的狀態(tài)碼是一一對(duì)應(yīng)的。
HTTP報(bào)頭Authorization 認(rèn)證報(bào)頭 Cache-Control 緩存報(bào)頭 Cnotent-Type 消息體類(lèi)型報(bào)頭 ......
報(bào)頭還有很多,不一一列舉。HTTP報(bào)頭是描述HTTP請(qǐng)求或響應(yīng)的元數(shù)據(jù),它的作用是客戶(hù)端 與 服務(wù)器端進(jìn)行相互通信時(shí),告訴對(duì)方應(yīng)該如何處理本次請(qǐng)求。
3、超媒體
老實(shí)說(shuō),這個(gè)詞匯我到目前還有沒(méi)搞得全懂。那也說(shuō)說(shuō)自己的理解吧,不一定準(zhǔn)確哦,有錯(cuò)誤希望指出。
”超媒體“ 你沒(méi)聽(tīng)說(shuō)過(guò)沒(méi)關(guān)系,”超鏈接“ 你一定不會(huì)陌生。簡(jiǎn)單來(lái)說(shuō),”超鏈接“ 是實(shí)現(xiàn)超媒體中的一種方式。”超媒體“希望達(dá)到一種就是說(shuō)在 REST API 中把所有資源給鏈接起來(lái)。它就猶如你打開(kāi)一個(gè)網(wǎng)站的首頁(yè),你難道看到的只有首頁(yè)嗎?NO !, 不是的,你可以通過(guò)首頁(yè)查看商品、查看文章、查看論壇。”超媒體“ 就是做這個(gè)事情,它利用 API 把所有資源的關(guān)系給鏈接起來(lái)了,你看到不會(huì)只是一個(gè)獨(dú)立的資源,而是關(guān)系網(wǎng)中的一個(gè)資源。
”超媒體“ 有點(diǎn)高大上了,老實(shí)說(shuō),就算你夠牛X,寫(xiě)出了一個(gè)非常棒的符合”超媒體“的REST API,你的用戶(hù)即開(kāi)發(fā)者,也不一定能夠接受你這種高大上的設(shè)計(jì)。當(dāng)然,我相信未來(lái)也許可以普及了。
轉(zhuǎn)載于:https://www.cnblogs.com/superAnny/p/8583585.html
總結(jié)
- 上一篇: gimp and screenshot
- 下一篇: DrawerLayout侧滑