要弄清楚什么是RESTful API戏售,首先要知道REST是什么。
REST草穆,表示性狀態(tài)轉(zhuǎn)移(representation state transfer)灌灾。簡單來說,就是用
URI
表示資源悲柱,用HTTP方法(GET, POST, PUT, DELETE)表征對這些資源的操作锋喜。
- Resource: 資源,即數(shù)據(jù)豌鸡,存在互聯(lián)網(wǎng)上的可被訪問的實體
- Representation: 數(shù)據(jù)的某種表現(xiàn)形式嘿般,如HTML, JSON段标。
- State Transfer:狀態(tài)變化,HTTP方法實現(xiàn)
RESTful API 就是REST風(fēng)格的API〔└觯現(xiàn)在終端平臺多樣怀樟,移動、平板盆佣、PC等許多媒介向服務(wù)端發(fā)送請求后往堡,如果不適用RESTful API,需要為每個平臺的數(shù)據(jù)請求定義相應(yīng)的返回格式共耍,以適應(yīng)前端顯示虑灰。但是RESTful API 要求前端以一種預(yù)定義的語法格式發(fā)送請求,那么服務(wù)端就只需要定義一個統(tǒng)一的響應(yīng)接口痹兜,不必像之前那樣解析各色各式的請求穆咐。
RESTful 是典型的基于HTTP的協(xié)議。它有哪些設(shè)計原則和規(guī)范呢字旭?
資源对湃。首先要明確資源就是網(wǎng)絡(luò)上的一個實體,可以是文本遗淳、圖片拍柒、音頻、視頻屈暗。資源總是以一定的格式來表現(xiàn)自己拆讯。文本用txt、html养叛;圖片用JPG种呐、JPEG等等。而JSON是RESTful API中最常用的資源表現(xiàn)格式弃甥。
-
統(tǒng)一接口爽室。對于業(yè)務(wù)數(shù)據(jù)的CRUD,RESTful 用HTTP方法與之對應(yīng)潘飘。
URI肮之。統(tǒng)一資源標識符,它可以唯一標識一個資源卜录。注意到戈擒,URL(統(tǒng)一資源定位符)是一種URI,因為它可以唯一標志資源艰毒。但URL != URI筐高。應(yīng)該說URL 是URI的子集。因為URL使用路徑來唯一標識資源,這只是唯一標識資源的一種方式柑土。還可以用一個唯一編號來標識資源蜀肘,如example.html.fuce2da23。只不過這種方式并不被廣泛使用稽屏“绯瑁總之,要在概念上對URL和URI有所區(qū)分狐榔。
無狀態(tài)坛增。 所謂無狀態(tài)是指所有資源都可以用URI定位,而且這個定位與其他資源無關(guān)薄腻,不會因為其他資源的變動而變化收捣。這里引入一個冪等性的概念:無論一個操作被執(zhí)行一次還是多次,執(zhí)行后的效果都相同庵楷。比如對某資源發(fā)送GET請求罢艾,如果訪問一次和訪問十次獲得的數(shù)據(jù)一樣,那么就說這個請求具有冪等性尽纽。
URL中只能有名詞咐蚯,不能出現(xiàn)動詞。這是因為在REST要求對資源的操作由HTTP 方法給出弄贿,而方法是由HTTP 請求報文頭部給出的仓蛆,自然不需要在URL中暴露操作方式。
還有一些屬于業(yè)務(wù)決定型規(guī)則挎春,比如應(yīng)該將版本加到URL中,對返回記錄進行限制過濾豆拨。不是強制的直奋,但是比較建議這么做。