目錄
前一章節講什麼是前後端,以及前後端是通過API交互的,但沒有具體解釋什麼是API,這章節進行簡單的解說。
一、前言
我們經常聽到開發一句話“你給我一個接口讓我調用一下唄”,老闆問能不能用自己的程序獲取一些數據,開發往往也說"可以呀,讓對方給一個接口和權限,讓我們調用就行了"
那這裏的接口到底指的是什麼呢?
二、什麼是接口?
2.1 什麼是API
上面開發所說的接口並不是我們編程的接口Interface,這裏的接口我們往往把它叫做API(Application Programming Interface,應用程序編程接口)
接口一般分2大類:
1. 非web的應用程序方面,一般是系統方面或CS模式的應用,叫一般叫系統API。你加入相關別人指定的“文件”,往往是鏈接庫或SDK,你就可以使用這個庫所提供的類、函數或方法去“操作”對方
2. web方面的,叫web API。一般就給我一個URL和一串授權的數字(我們給它起個名字叫token,令牌),你有了這個URL和一串授權數字,你就可以按別人公司的API文檔使用別人指定的方法及參數之類了。
例子:dnspod API就是一個例子,地址爲:https://www.dnspod.cn/docs/index.html
它就是使用POST應用對dnspod的頁面操作的,返回的是json格式的數據。它可以使用linux的curl命令,-X POST指定是POST方式提交。爲什麼要使用 POST,因爲它有授權的tonken令牌,不能明碼,被你看到,不安全呀。
說了一大堆,簡單來說API就是別人給你一個“文件”或要帶上“授權字符串”URL地址,這樣你就可以實現對其系統進行操作。
因爲我們是電商運維,主要是網站,所以我們更多關注的是web API,上面的web API還沒有說明清楚的話。
web api簡單理解就是:對網站操作進行封裝以url的形式供別人調用,並返回可網絡傳輸的通用格式數據。
1.這個URL一般是有一定格式的,不同公司有不同的格式,一般api會有使用說明文檔,教你如何使用。如阿里雲api、dnspod api、微信小程序api
2. 請求這個URL往往需要在頭部發授權驗證碼的,一般是使用token驗證。
3.api返回的一般是通用格式可在網絡中傳輸數據(json或xml)
一般選擇json,xml比較舊現在已經很少人在使用了。一般不會直接返回HTML因爲HTML已經是可以直接呈現了。
一般請求是通過網絡傳輸的,所以要求能在網絡中傳輸;通用才能被絕大部分程序解析,這樣就與編程語言無關,就可以轉化爲自己所使用語言的數據類型進行存儲。
粗暴的理解就是:如果一個URL返回的不是HTML,而是機器能直接解析的數據,這個URL就可以看成是一個Web API
注:
Web API顧名思義,是一個可以使用HTTP協議訪問的API。
這是一個概念,而不是技術。我們可以使用不同的技術來構建Web API,如Java、.net等。
Web API一般基於HTTP/REST來實現,什麼都不需要定義,參數(輸入的數據)可以是JSON, XML或者簡單文本,響應(輸出數據)一般是JSON或XML。它不提供服務調用標準和服務發現標準。可以按你服務的特點來寫一些簡單的使用說明給使用者。 主要是把web api一般理解成http/REST來實現就行了。
2.2 REST、RESTful、RESTful API
上面講到REST隨便提一下REST、RESTful、RESTful API三種概念
2.1.1 rest
REST(Representational State Transfer) 並不是一種具體的實現技術,而是一種軟件架構風格,主要有以下特點:
- 從資源的角度來考察整個網絡,每個資源有唯一標識
- 使用通用的連接器接口操作資源
- 對資源的操作不會改變資源標識
- 連接協議具有無狀態性
- 能夠使用 Cache 機制來增進性能
REST 風格幾乎是爲 HTTP 協議量身定做的,在 HTTP 協議中用 URI 來標識唯一的資源,用 GET、PUT、POST、DELETE 等動詞來操作資源,HTTP 協議是無狀態協議,可以通過 Cache 來提高性能。
2.1.2 RESTful
REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful
有興趣的可以瞭解一下阮一峯的《理解RESTful架構》
1.爲什麼會出現restful
在Restful之前的操作:
http://127.0.0.1/user/query/1 GET 根據用戶id查詢用戶數據
http://127.0.0.1/user/save POST 新增用戶
http://127.0.0.1/user/update POST 修改用戶信息
http://127.0.0.1/user/delete GET/POST 刪除用戶信息
RESTful用法:
http://127.0.0.1/user/1 GET 根據用戶id查詢用戶數據
http://127.0.0.1/user POST 新增用戶
http://127.0.0.1/user PUT 修改用戶信息
http://127.0.0.1/user DELETE 刪除用戶信息
之前的操作是沒有問題的,大神認爲是有問題的,有什麼問題呢?你每次請求的接口或者地址,都在做描述,例如查詢的時候用了query,新增的時候用了save,其實完全沒有這個必要,我使用了get請求,就是查詢.使用post請求,就是新增的請求,我的意圖很明顯,完全沒有必要做描述,這就是爲什麼有了restful.
2. 使用
HTTP 請求在 RESTful Web 服務中的典型應用
資源 |
GET |
PUT |
POST |
DELETE |
一組資源的 URI,比如 |
列出 URI 及該資源組中每個資源的詳細信息 |
使用一組給定的資源替換當前整組資源 |
在本組資源中創建 / 追加一個新資源 |
刪除整組資源 |
單個資源的 URI,比如 |
獲取給定資源的詳細信息 |
替換 / 創建指定的資源,並將其追加到相應的資源組 |
把指定的資源作爲資源組,並在其下創建 / 追加一個新元素,使其隸屬於當前資源 |
刪除指定元素 |
2.1.3 RESTful API
符合REST架構設計的API
RESTful API 是一套互聯網應用程序的 API 設計理論。
RESTful API 的返回結果應該符合以下規範
- GET /collection:返回資源對象的列表(數組)
- GET /collection/resource:返回單個資源對象
- POST /collection:返回新生成的資源對象
- PUT /collection/resource:返回完整的資源對象
- PATCH /collection/resource:返回完整的資源對象
- DELETE /collection/resource:返回一個空文檔
有興趣的可以瞭解一下阮一峯的《RESTful API 設計指南》《RESTful API 最佳實踐》
2.3 web API好處
編寫API有什麼好處呢?由於API就是把Web App的功能全部封裝了,所以,通過API操作數據,可以極大地把前端和後端的代碼隔離,使得後端代碼易於測試,前端代碼編寫更簡單。
此外,如果我們把前端頁面看作是一種用於展示的客戶端,那麼API就是爲客戶端提供數據、操作數據的接口。這種設計可以獲得極高的擴展性。例如,當用戶需要在手機上購買商品時,只需要開發針對iOS和Android的兩個客戶端,通過客戶端訪問API,就可以完成通過瀏覽器頁面提供的功能,而後端代碼基本無需改動。
當一個Web應用以API的形式對外提供功能時,整個應用的結構就擴展爲:
值得注意的是 RESTful API是一個設計理論,並不是一個框架,是你按這種理論去設計。