一辰斋、什么是API
要想知道什么是RESTful API,我們得先知道什么是API.
API(Application Programming Interface埠褪,應用程序接口)是一些預先定義的函數浓利,或指軟件系統(tǒng)不同組成部分銜接的約定挤庇。 [1] 目的是提供應用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問原碼荞膘,或理解內部工作機制的細節(jié)。(引用自百度百科)
舉個例子:比如我們去肯德基買個漢堡玉工,不需要知道這個漢堡是怎么做出來的羽资,你付過錢之后就能得到一個漢堡。
肯德基就是一個服務器遵班,你就是一個客戶端屠升,錢就是你向肯德基請求獲得漢堡的參數。
比如狭郑,你如果要用水腹暖,你自己不必生產水,你只需要調用水廠生產好的水就行了翰萨,水廠會把水送到你家的管道里面脏答,你只要打開水龍頭就行了,水就會出來亩鬼。你打開水龍的過程就是在調用水廠的API.
調用API就是一手交錢一手交貨的過程殖告,制作漢堡則是API背后的工作。
ps:上面是說給不懂計算機的人解釋API是什么雳锋。
用計算機的術語來說就是黄绩,程序使用寫代碼的方式訪問其他人寫的代碼的一種渠道就是API.
比如你的程序想要支付寶的支付功能 ,你如果想要自己實現支付功能玷过,你得去找銀行對接啊爽丹,你得申請支付牌照,然后再寫程序辛蚊,一連串下來粤蝎,你自己都可以成立一個金融公司了,但是現在你不想成立一個金融公司你只想用支付寶的支付功能袋马,怎么辦呢诽里,你可以使用支付寶的接口,在你的程序里面調用支付功能的時候飞蛹,實際上就是請求支付寶的支付功能 谤狡,你不必考慮支付寶的支付功能是怎么做的,是用什么語言實現的卧檐,你只要按照規(guī)范請求支付寶的支付請求就行了墓懂。這就是調用支付寶的API.
二、什么是REST
REST即表述性狀態(tài)傳遞(英文:Representational State Transfer霉囚,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格捕仔。它是一種針對網絡應用的設計和開發(fā)方式,可以降低開發(fā)的復雜性,提高系統(tǒng)的可伸縮性榜跌。(引用自百度百科)
表述性狀態(tài)傳遞闪唆,這是個啥,誰能聽得懂啊钓葫,這個中英文直譯我吐了悄蕾。
- REST描述的是在網絡中client和server的一種交互的形式,REST不是一種協議本身沒有太大的作用础浮,實用的是如何設計 RESTful API(REST風格的接口)
為什么要使用RESTful結構呢
以前的網頁都是前端和后端融在一起的帆调,比如之前的JSP等。在之前的PC時代問題沒有啥問題豆同,但是近年來移動互聯網快速發(fā)展番刊,各種前端框架特別多,如果我們還是前后端不分離的話影锈,一個是學習成本特別高芹务,一個是代碼的重復率太高導致我們做了很多重復的東西,代碼的復用率不高鸭廷,用接口的方式可以讓代碼的復用率變的高些锄禽,如下圖所示
為什么不用普通的接口方式,比如你要從你的網站上面得到一個城市的天氣靴姿,以前有可能你得這么設計
https://xxx/getWeather?city=深圳
你這樣就得傳兩個參數給后臺沃但,這樣看起來就很臃腫。
用RESTful方式設計接口你可能會這么設計
GET https://xxx/weathers/深圳
這樣只需要傳一個參數給后臺就可以了佛吓,這樣看起來很簡潔宵晚,而且我們的URI中使用的是名詞,而不是動詞维雇。通過HTTP動詞來實現資源的跳轉淤刃。具體實現方式下面說。
以上就是我們?yōu)槭裁匆褂肦ESTful API結構的原因吱型。
三逸贾、如何設計一個RESTful API結構的系統(tǒng)呢。
-
URI里面使用的是名詞而且不是動詞津滞,推薦使用復數铝侵,通過HTTP動詞來實現資源的跳轉。
-
錯誤的
/getOrders
listCitys
/getWeathers?city=深圳
-
正確的
GET /orders/1
:返回訂單編號為1的訂單POST /orders
:增加一個訂單Delete /orders/1
:刪除一個訂單編號為1的訂單PUT /orders/1
:更新訂單編號為1的訂單
-
保證方法里面只做一件事触徐,不會對資源狀態(tài)有所改變咪鲜。比如下面這樣是不允許的
GET /updateOrder?id=1
-
使用正確的HTTP Status Code 表示返回的請求狀態(tài)。比如
{"code":"200"}
以上就是如何設計一個簡單的RESTful API結構系統(tǒng)的示例撞鹉。
Tips:
前后臺的數據傳輸可以用json,可以用xml傳輸疟丙,我還是比較傾向于json傳輸比較方便
比如請求一個城市的溫度颖侄,用xml返回結果是這樣
<city>
<name>深圳</name>
<temperature>26</temperature>
<code>200</code>
</city>
用json返回就是這樣
{
"city":
{
"name":"深圳",
"temperature":"26",
"code":200
}
}