1. 程式人生 > 實用技巧 >web應用模式

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&region=%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&region=%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 上傳參的方式傳遞搜尋條件

  1. 指定返回記錄的數量
https://api.example.com/v1/zoos?limit=10
  1. 指定返回記錄的開始位置

    https://api.example.com/v1/zoos?offset=10
    
  2. 指定第幾頁,以及每頁的記錄數

    https://api.example.com/v1/zoos?page=2&per_page=100
    
  3. 指定返回結果按照哪個屬性排序,以及排序順序

    https://api.example.com/v1/zoos?sortby=name&order=asc
    
  4. 指定篩選條件

    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'
]