要想知道什麼是RESTful API,咱們得先知道什麼是API.前端
API(Application Programming Interface,應用程序接口)是一些預先定義的函數,或指軟件系統不一樣組成部分銜接的約定。 [1] 目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問原碼,或理解內部工做機制的細節。(引用自百度百科)json
舉個例子:好比咱們去肯德基買個漢堡,不須要知道這個漢堡是怎麼作出來的,你付過錢以後就能獲得一個漢堡。後端
肯德基就是一個服務器,你就是一個客戶端,錢就是你向肯德基請求得到漢堡的參數。前端框架
好比,你若是要用水,你本身沒必要生產水,你只須要調用水廠生產好的水就好了,水廠會把水送到你家的管道里面,你只要打開水龍頭就好了,水就會出來。你打開水龍的過程就是在調用水廠的API.服務器
調用API就是一手交錢一手交貨的過程,製做漢堡則是API背後的工做。網絡
ps:上面是說給不懂計算機的人解釋API是什麼。架構
用計算機的術語來講就是,程序使用寫代碼的方式訪問其餘人寫的代碼的一種渠道就是API.框架
好比你的程序想要支付寶的支付功能 ,你若是想要本身實現支付功能,你得去找銀行對接啊,你得申請支付牌照,而後再寫程序,一連串下來,你本身均可以成立一個金融公司了,可是如今你不想成立一個金融公司你只想用支付寶的支付功能,怎麼辦呢,你可使用支付寶的接口,在你的程序裏面調用支付功能的時候,實際上就是請求支付寶的支付功能 ,你沒必要考慮支付寶的支付功能是怎麼作的,是用什麼語言實現的,你只要按照規範請求支付寶的支付請求就好了。這就是調用支付寶的API.函數
REST即表述性狀態傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。它是一種針對網絡應用的設計和開發方式,能夠下降開發的複雜性,提升系統的可伸縮性。(引用自百度百科)學習
表述性狀態傳遞,這是個啥,誰能聽得懂啊,這個中英文直譯我吐了。
爲何要使用RESTful結構呢
之前的網頁都是前端和後端融在一塊兒的,好比以前的JSP等。在以前的PC時代問題沒有啥問題,可是近年來移動互聯網快速發展,各類前端框架特別多,若是咱們仍是先後端不分離的話,一個是學習成本特別高,一個是代碼的重複率過高致使咱們作了不少重複的東西,代碼的複用率不高,用接口的方式可讓代碼的複用率變的高些,以下圖所示
爲何不用普通的接口方式,好比你要從你的網站上面獲得一個城市的天氣,之前有可能你得這麼設計
https://xxx/getWeather?city=深圳
你這樣就得傳兩個參數給後臺,這樣看起來就很臃腫。
用RESTful方式設計接口你可能會這麼設計
GET https://xxx/weathers/深圳
這樣只須要傳一個參數給後臺就能夠了,這樣看起來很簡潔,並且咱們的URI中使用的是名詞,而不是動詞。經過HTTP動詞來實現資源的跳轉。具體實現方式下面說。
以上就是咱們爲何要使用RESTful API結構的緣由。
URI裏面使用的是名詞並且不是動詞,推薦使用複數,經過HTTP動詞來實現資源的跳轉。
錯誤的
/getOrders
listCitys
/getWeathers?city=深圳
正確的
GET /orders/1
:返回訂單編號爲1的訂單
POST /orders
:增長一個訂單
Delete /orders/1
:刪除一個訂單編號爲1的訂單
PUT /orders/1
:更新訂單編號爲1的訂單
保證方法裏面只作一件事,不會對資源狀態有所改變。好比下面這樣是不容許的
GET /updateOrder?id=1
使用正確的HTTP Status Code 表示返回的請求狀態。好比
{"code":"200"}
以上就是如何設計一個簡單的RESTful API結構系統的示例。
Tips:
先後臺的數據傳輸能夠用json,能夠用xml傳輸,我仍是比較傾向於json傳輸比較方便
好比請求一個城市的溫度,用xml返回結果是這樣
<city>
<name>深圳</name>
<temperature>26</temperature>
<code>200</code>
</city>
複製代碼
用json返回就是這樣
{
"city":
{
"name":"深圳",
"temperature":"26",
"code":200
}
}
複製代碼