12.21 一文帶你看懂什麼是RESTful API

一、什麼是API

要想知道什麼是RESTful API,我們得先知道什麼是API.

API(Application Programming Interface,應用程序接口)是一些預先定義的函數,或指軟件系統不同組成部分銜接的約定。 [1] 目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問原碼,或理解內部工作機制的細節。(引用自百度百科)

舉個例子:比如我們去肯德基買個漢堡,不需要知道這個漢堡是怎麼做出來的,你付過錢之後就能得到一個漢堡。

肯德基就是一個服務器,你就是一個客戶端,錢就是你向肯德基請求獲得漢堡的參數。

比如,你如果要用水,你自己不必生產水,你只需要調用水廠生產好的水就行了,水廠會把水送到你家的管道里面,你只要打開水龍頭就行了,水就會出來。你打開水龍的過程就是在調用水廠的API.

調用API就是一手交錢一手交貨的過程,製作漢堡則是API背後的工作。

ps:上面是說給不懂計算機的人解釋API是什麼。

用計算機的術語來說就是,程序使用寫代碼的方式訪問其他人寫的代碼的一種渠道就是API.

比如你的程序想要支付寶的支付功能 ,你如果想要自己實現支付功能,你得去找銀行對接啊,你得申請支付牌照,然後再寫程序,一連串下來,你自己都可以成立一個金融公司了,但是現在你不想成立一個金融公司你只想用支付寶的支付功能,怎麼辦呢,你可以使用支付寶的接口,在你的程序裡面調用支付功能的時候,實際上就是請求支付寶的支付功能 ,你不必考慮支付寶的支付功能是怎麼做的,是用什麼語言實現的,你只要按照規範請求支付寶的支付請求就行了。這就是調用支付寶的API.

二、什麼是REST

REST即表述性狀態傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。它是一種針對網絡應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。(引用自百度百科)

表述性狀態傳遞,這是個啥,誰能聽得懂啊,這個中英文直譯我吐了。

  • REST描述的是在網絡中client和server的一種交互的形式,REST不是一種協議本身沒有太大的作用,實用的是如何設計 RESTful API(REST風格的接口)

為什麼要使用RESTful結構呢

以前的網頁都是前端和後端融在一起的,比如之前的JSP等。在之前的PC時代問題沒有啥問題,但是近年來移動互聯網快速發展,各種前端框架特別多,如果我們還是前後端不分離的話,一個是學習成本特別高,一個是代碼的重複率太高導致我們做了很多重複的東西,代碼的複用率不高,用接口的方式可以讓代碼的複用率變的高些,如下圖所示

一文帶你看懂什麼是RESTful API

1576638176196.png

為什麼不用普通的接口方式,比如你要從你的網站上面得到一個城市的天氣,以前有可能你得這麼設計

https://xxx/getWeather?city=深圳

你這樣就得傳兩個參數給後臺,這樣看起來就很臃腫。

用RESTful方式設計接口你可能會這麼設計

GET https://xxx/weathers/深圳

這樣只需要傳一個參數給後臺就可以了,這樣看起來很簡潔,而且我們的URI中使用的是名詞,而不是動詞。通過HTTP動詞來實現資源的跳轉。具體實現方式下面說。

以上就是我們為什麼要使用RESTful API結構的原因。

三、如何設計一個RESTful API結構的系統呢。

  1. URI裡面使用的是名詞而且不是動詞,推薦使用複數,通過HTTP動詞來實現資源的跳轉。
  • 錯誤的 /getOrders listCitys /getWeathers?city=深圳
  • 正確的 GET /orders/1 :返回訂單編號為1的訂單 POST /orders :增加一個訂單 Delete /orders/1 :刪除一個訂單編號為1的訂單 PUT /orders/1 :更新訂單編號為1的訂單
  1. 保證方法裡面只做一件事,不會對資源狀態有所改變。比如下面這樣是不允許的 GET /updateOrder?id=1
  2. 使用正確的HTTP Status Code 表示返回的請求狀態。比如 {"code":"200"}

以上就是如何設計一個簡單的RESTful API結構系統的示例。

Tips:

前後臺的數據傳輸可以用json,可以用xml傳輸,我還是比較傾向於json傳輸比較方便

比如請求一個城市的溫度,用xml返回結果是這樣

<code><city><name>深圳/<name><temperature>26/<temperature><code>200/<code>/<city>/<code>

用json返回就是這樣

<code>{"city":{"name":"深圳","temperature":"26","code":200}}/<code>


分享到:


相關文章: