文章目錄
API:
就是一些預先定義好的函數,目的是能夠讓應用程序或開發人員能具有訪問網絡資源的能力,而又無需關心訪問的源碼,或是裂解內部工作機制的細節。
Restful API規範
1、協議
renst api 與用戶的通信協議,總是使用HHTTP協議
2、域名
應該儘量將api部署在專用的域名之下
https://api.example.com
如果確定API很簡單,不會有進一步擴展,可以考慮放在主域名下。
https://example.com/api/
3、版本
應該將API的版本號放入URL
https://api.example.com/version/
另一種做法是將版本號放在HTTP頭信息中但不如放在URL方便和直觀
4、路徑
路徑又稱重點,表示API的具體網址。
在RESTful架構中每個網址代表一種資源,所以網址中不能有動詞,只能由名詞,而且所用的名詞往往與數據庫的表明對應。一般來說,數據庫中的表都是同種記錄的“集合”,所以API中的名詞也應該是複數。
example:
有一個API提供動物園(zoo)的信息,還包括各種動物和僱員信息,則它的路徑應該設計成下面這樣。
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
5、HTTP動詞
post(create) delete(delete) put(update) get(select)
6、過濾信息
如果記錄數量很多,APi應該提供參數,過濾返回結果。
?limit=10:指定返回記錄的數量
?offset=10:指定返回記錄的開始位置
?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
?sortby=name&order=asc:指定返回結果按照那個屬性排序,以及排序順序
?animal_type_id=1:指定篩選條件
7、狀態碼
200
201
204
401
403
404
406
8、錯誤處理
{
error:“Invalid API key”
}
HTTP協議:
http的重要性:
web service Http+xml
rest大型架構 http+json/xml
各種api
採集、挖礦
Ajax
rest是Http驅動的,別切完全發揮HTTP的能力
HTTP是什麼:
一種web常見應用層的網絡協議,全程爲:超文本傳輸協議
作爲協議:http僅僅是將通信過程規範化,可客戶端與服務端能夠更好的理解對方想要表達的內容
HTTP是基於TCP傳輸層實現的,默認的TCP端口號:80
HTTP的特點
1、無狀態
2、多次HTTP請求
3、基於TCP協議
HTTP的組成:
HTTP協議分成請求和響應兩個部分,請求是指客戶端向服務器發送的消息,響應是指服務器收到消息後向客戶端返回的消息
URI(統一資源標識符)
http://user:[email protected]:8080/p/a/t/h?query=string#hash
http 協議名稱
user 用戶名(可選)
pass 對應密碼(可選)
host.com 主機域名地址(也可以是IP地址)
8080 端口號 默認 80
/p/a/t/h 資源路徑
query=string 參數傳遞
hash 錨點
HTTP請求與響應
請求:
1、請求行
2、請求頭信息
3、請求主體信息
2和3之間要有一個空行
請求格式
請求行 (方法 路徑 協議)
請求頭信息 (格式爲key=value)
空行
請求主體(可選)(發送的內容)
例子:
POST /index.php http/1.1
host: localhost
content-type:application/x-www-form-urlencoded
content-length:25
name=zhangsan
響應行 (協議 狀態碼 狀態文字)
響應頭信息(格式爲key=value)
空行
主體信息 (發送的內容/none)
RESTful(Representational State Transfer)
百度百科:
RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用於移動互聯網廠商作爲業務使能接口的場景,實現第三方OTT調用移動網絡資源的功能,動作類型爲新增、變更、刪除所調用資源。
RESTful架構是對MVC架構改進後所形成的一種架構,通過使用事先定義好的接口與不同的服務聯繫起來。在RESTful架構中,瀏覽器使用POST,DELETE,PUT和GET四種請求方式分別對指定的URL資源進行增刪改查操作。因此,RESTful是通過URI實現對資源的管理及訪問,具有擴展性強、結構清晰的特點。
RESTful架構將服務器分成前端服務器和後端服務器兩部分,前端服務器爲用戶提供無模型的視圖;後端服務器爲前端服務器提供接口。瀏覽器向前端服務器請求視圖,通過視圖中包含的AJAX函數發起接口請求獲取模型。
項目開發引入RESTful架構,利於團隊並行開發。在RESTful架構中,將多數HTTP請求轉移到前端服務器上,降低服務器的負荷,使視圖獲取後端模型失敗也能呈現。但RESTful架構卻不適用於所有的項目,當項目比較小時無需使用RESTful架構,項目變得更加複雜。
1、資源與URI和URL
a、資源,resources,網絡上的具體信息
b、URI:uniform resource identifiter 統一資源標識符,用來唯一的標識一個資源
c、URL:uniform resource locator,統一資源定位器,用來定位某個特定資源
2、表現層,representation
表現層:資源呈現出來的形式
a、純文本
b、html
c、json
3、狀態轉移,state transfer
a、HTTP協議是一個無狀態的協議
b、GET、POST、PUT、DELETE
REST架構設計6原則
a、Uniform Interface
b、Statelss
c、Cacheble
d、Client-Server
e、Layered System
f、Code on Demand
OAuth2.0的原理介紹-概述
參考:http://www.ruanyifeng.com/blog/2019/04/oauth_design.html
A. 客戶端從資源擁有者那請求授權。授權請求可以直接發給資源擁有者,或間接的通過授權服務器這種中
介,後者更可取。
B. 客戶端收到一個授權許可,代表資源服務器提供的授權。(獲取授權碼)
C. 客戶端使用它自己的私有證書及授權許可到授權服務器驗證。
D. 如果驗證成功,則下發一個訪問令牌。(獲取access_token訪問令牌)
E. 客戶端使用訪問令牌向資源服務器請求受保護資源。
F. 資源服務器會驗證訪問令牌的有效性,如果成功則下發受保護資源。(獲取訪問的受保護資源)
OAuth幾種授權模式
授權碼模式:
它的步驟如下:
(A)用戶訪問客戶端,後者將前者導向認證服務器。
(B)用戶選擇是否給予客戶端授權。
(C)假設用戶給予授權,認證服務器將用戶導向客戶端事先指定的"重定向URI"(redirection URI),同時附上一個授權碼。
(D)客戶端收到授權碼,附上早先的"重定向URI",向認證服務器申請令牌。這一步是在客戶端的後臺的服務器上完成的,對用戶不可見。
(E)認證服務器覈對了授權碼和重定向URI,確認無誤後,向客戶端發送訪問令牌(access token)和更新令牌(refresh token)。
下面是上面這些步驟所需要的參數。
A步驟中,客戶端申請認證的URI,包含以下參數:
response_type:表示授權類型,必選項,此處的值固定爲"code"
client_id:表示客戶端的ID,必選項
redirect_uri:表示重定向URI,可選項
scope:表示申請的權限範圍,可選項
state:表示客戶端的當前狀態,可以指定任意值,可選項.認證服務器會原封不動地返回這個值。(如果是你自己實現的oauth2.0服務端,可以不校驗這個參數,client端就可以不管這個參數)
C步驟中,服務器迴應客戶端的URI,包含以下參數:
code:表示授權碼,必選項。該碼的有效期應該很短,通常設爲10分鐘,客戶端只能使用該碼一次,否則會被授權服務器拒絕。該碼與客戶端ID和重定向URI,是一一對應關係。
state:如果客戶端的請求中包含這個參數,認證服務器的迴應也必須一模一樣包含這個參數。
D步驟中,客戶端向認證服務器申請令牌的HTTP請求,包含以下參數:
grant_type:表示使用的授權模式,必選項,此處的值固定爲"authorization_code"。
code:表示上一步獲得的授權碼,必選項。
redirect_uri:表示重定向URI,必選項,且必須與A步驟中的該參數值保持一致。
client_id:表示客戶端ID,必選項。
client_secret:客戶端密鑰
E步驟中,認證服務器發送的HTTP回覆,包含以下參數:
access_token:表示訪問令牌,必選項。
token_type:表示令牌類型,該值大小寫不敏感,必選項,可以是bearer類型或mac類型。
expires_in:表示過期時間,單位爲秒。如果省略該參數,必須其他方式設置過期時間。
refresh_token:表示更新令牌,用來獲取下一次的訪問令牌,可選項。
scope:表示權限範圍,如果與客戶端申請的範圍一致,此項可省略。
token的設計及加密方法
Token的基本設計原則:
hamac簡介:
作用:
驗證Token的有效性: