web應用模式
一、web應用模式
在開發web應用中,有兩種模式:
前後端不分離模式和前後端分離模式
1.1 前後端不分離
1.2 前後端分離
二、API介面
為了在團隊內部形成共識、防止個人習慣差異引起的混亂,我們需要找到一種大家都覺得很好的介面實現規範,而且這種規範能夠讓後端寫的介面,用途一目瞭然,減少雙方之間的合作成本。
通過網路,規定了前後臺資訊互動規則的url連結,也就是前後臺資訊互動的媒介
Web API介面和一般的url連結還是有區別的,Web API介面簡單概括有下面四大特點
-
url:長得像返回資料的url連結
-
請求方式:get、post、put、patch、delete
- 採用get方式請求上方介面
-
請求引數:json或xml格式的key-value型別資料
- ak:6E823f587c95f0148c19993539b99295
- region:上海
- query:肯德基
- output:json
-
響應結果:json或xml格式的資料
-
上方請求引數的output引數值決定了響應資料的格式
-
# xml格式 https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=xml #json格式 https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295®ion=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json { "status":0, "message":"ok", "results":[ { "name":"肯德基(羅餐廳)", "location":{ "lat":31.415354, "lng":121.357339 }, "address":"月羅路2380號", "province":"上海市", "city":"上海市", "area":"寶山區", "street_id":"339ed41ae1d6dc320a5cb37c", "telephone":"(021)56761006", "detail":1, "uid":"339ed41ae1d6dc320a5cb37c" } ... ] }
-
三 介面測試工具:Postman
Postman是一款介面除錯工具,是一款免費的視覺化軟體,同時支援各種作業系統平臺,是測試介面的首選工具。
Postman可以直接從官網:https://www.getpostman.com/downloads/下載獲得,然後進行傻瓜式安裝。
- 工作面板
- 簡易的get請求
- 簡易的post請求
- 案例:請求百度地圖介面
四 RESTful API規範
REST全稱是Representational State Transfer,中文意思是表述(編者注:通常譯為表徵性狀態轉移)。 它首次出現在2000年Roy Fielding的博士論文中。
RESTful是一種定義Web API介面的設計風格,尤其適用於前後端分離的應用模式中。
這種風格的理念認為後端開發任務就是提供資料的,對外提供的是資料資源的訪問介面,所以在定義介面時,客戶端訪問的URL路徑就表示這種要操作的資料資源。
事實上,我們可以使用任何一個框架都可以實現符合restful規範的API介面。
4.1 資料安全的保障
-
urls連結一般採用https協議進行傳輸
注:採用https協議,可以提高資料互動過程中的安全性,https協議預設埠(443),http協議預設埠(80)
4.2 介面特徵的表現
用api關鍵字來標識介面url
讓人一看就知道是一個介面,api介面是前後端進行資料互動的媒介
4.3 多個版本共存
-
在url連結中可以標識多個數據版本
url中的連結的v1,v2指代不同的版本
# 產品上線後,會隨著新功能的加入以及BUG的修復,會進行版本迭代工作,由於使用者使用是不受限的,他可能還在用的老的版本,為了使用者體驗,不能直接將老版本的程式碼更新。因此,會存在多個版本共存的現象。
4.4 資料即資源,均使用名詞來表示
-
介面是前後端進行資料互動的場所,我們把這些互動的資料看成資源
# 注意 注:一般提倡用資源的複數形式,在url連結中獎勵不要出現操作資源的動詞,錯誤示範:https://api.baidu.com/delete-user 特殊的介面可以出現動詞,因為這些介面一般沒有一個明確的資源,或是動詞就是介面的核心含義 - https://api.baidu.com/place/search - https://api.baidu.com/login
4.5 資源的操作由請求方式來決定(method)
-
一般對資源的操作無外乎增刪改查操作,我們將請求方式看成對資源的操作方式:
GET https://api.baidu.com/books/ # 獲取所有的資料 GET https://api.baidu.com/books/1/ # 獲取主鍵值為1的書籍 POST https://api.baidu.com/books/ # 新增一本書 PUT https://api.baidu.com/books/1/ # 整體更新主鍵值為1的書籍 PATCH https://api.baidu.com/books/1/ # 區域性更新主鍵值為1的書籍 DELETE https://api.baidu.com/books/1/ # 刪除主鍵值為1的書籍
4.6 過濾 ,通過URL 上傳參的方式傳遞搜尋條件
- 指定返回記錄的數量
https://api.example.com/v1/zoos?limit=10
-
指定返回記錄的開始位置
https://api.example.com/v1/zoos?offset=10
-
指定第幾頁,以及每頁的記錄數
https://api.example.com/v1/zoos?page=2&per_page=100
-
指定返回結果按照哪個屬性排序,以及排序順序
https://api.example.com/v1/zoos?sortby=name&order=asc
-
指定篩選條件
https://api.example.com/v1/zoos?animal_type_id=1
4.7 響應狀態碼
# 正常的響應狀態
200 -- 常規請求
201 -- 建立成功
# 重定向響應
301 -- 永久重定向
302 -- 暫時重定向
# 客戶端異常
403 -- 請求無許可權
404 -- 請求路徑不存在
405 -- 請求方法不存在
# 伺服器異常
500
4.8 錯誤的處理,應該返回錯誤的資訊
[
{
"status": 404,
"msg": "缺少關鍵性引數book_id"
}
]
4.9 返回結果,針對不同操作,伺服器向用戶返回的結果應該符合以下規範
GET /collection:返回資源物件的列表(陣列)
GET /collection/resource:返回單個資源物件
POST /collection:返回新生成的資源物件
PUT /collection/resource:返回完整的資源物件
PATCH /collection/resource:返回完整的資源物件
DELETE /collection/resource:返回一個空文件
4.10 需要url請求的資源需要訪問資源的請求連結
# Hypermedia API,RESTful API最好做到Hypermedia,即返回結果中提供連結,連向其他API方法,使得使用者不查文件,也知道下一步應該做什麼
{
"status": 0,
"msg": "ok",
"results":[
{
"name":"肯德基(羅餐廳)",
"img": "https://image.baidu.com/kfc/001.png"
}
...
]
}
五 DRF的安裝以及簡單的使用
# 安裝DRF
pip install djangorestframework
pip install pymysql
# 如果下載過慢,可以將下載源換成清華源
# 建立django專案
django-admin startproject drfdemo
# 在setttings.py中註冊app
(DRF框架中本質是是一個app)
INSTALLED_APPS = [
'rest_framework'
]