亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

首頁 慕課教程 RESTful 規范教程 RESTful 規范教程 05 RESTful Web API開發的核心任務

RESTful Web API開發的核心任務

通過上節課的學習,我們已經知道了在當下的 Web 開發中 JSON 數據格式已經逐步取代了 XML 用來進行前后端之間的數據交互。但是前端的數據格式可能并不規范,不能直接為后端所用,這個時候就需要我們將數據進行序列化和反序列化,我們先來簡單了解下什么是序列化和反序列化:

  • 序列化:按照前端需求,在數據庫檢索相應數據,轉化為前端所需的數據形式(如 JSON),發給前端。

  • 反序列化:將前端發來的數據,按照數據庫的要求,轉化為數據庫所能接受的形式,存入數據庫。

而序列化和反序列化是 RESTful API 接口開發時的核心任務,這節課我們來學習下序列化和反序列化的概念。

1. 序列化(Serialization)

百度百科中對于序列化的定義:

序列化(serialization)在計算機科學的資料處理中,是指將數據結構或物件狀態轉換成可取用格式(例如存成檔案,存于緩沖,或經由網絡中傳送),以留待后續在相同或另一臺計算機環境中,能恢復原先狀態的過程。依照序列化格式重新獲取字節的結果時,可以利用它來產生與原始物件相同語義的副本。對于許多物件,像是使用大量參照的復雜物件,這種序列化重建的過程并不容易。面向對象中的物件序列化,并不概括之前原始物件所關聯的函式。這種過程也稱為物件編組(marshalling)。從一系列字節提取數據結構的反向操作,是反序列化(也稱為解編組, deserialization, unmarshalling)。

上面的概念有些晦澀,我們可以做如下的類比:

我們將不同數據存儲體(如數據庫)比作不同的網絡游戲,而將數據看成是網絡游戲中的虛擬貨幣。在不同的游戲中,這些虛擬貨幣是不通用的,不能從一個游戲傳到另一個游戲,因為這些貨幣是不通用的。而如果我們在玩家市場,把手中的虛擬貨幣換成現實生活中的貨幣,然后再充入另一個游戲,就能購買想要的裝備。將不通用的虛擬貨幣兌換成通用的真實貨幣的過程,就可以看成是一次序列化。

簡而言之,我們可以將序列化理解為:

將程序中的一個數據結構類型轉換為其他格式(字典、JSON、XML等),例如將 Django 中的模型類對象轉換為 JSON 字符串,這個轉換過程我們稱為序列化。

2. 反序列化(DeSerialization)

反之,將其他格式(字典、JSON、XML等)轉換為程序中的數據,例如將JSON字符串轉換為Django中的模型類對象,這個過程我們稱為反序列化。

反序列化的過程,我們同樣類比上述網絡游戲:反序列化就是將現實生活中的貨幣兌換為游戲中可以使用的游戲幣。

3. 案例演示

為了幫助大家理解序列化與反序列化,這里我們一起來完成一個小的案例,代碼用 Python 語言編寫:

>> import json
# 序列化(將python內部的字典結構轉化為JSON字符串)
>> student = {'name': 'Xiao Ming', 'age': 12} # 未序列化前,數據是python字典形式
>> json.dumps(student)
# 輸出結果
'{"name": "Xiao Ming", "age": 12}' # 經過序列化,數據已成為 python 字符串形式

# 反序列化(將JSON字符串轉化為python內部的字典結構)
>> student_str = '{"name": "Xiao Ming", "age": 12}' # 未返回序列化前,數據類型為python字符串
>> json.loads(student_str)
# 輸出結果
{'name': 'Xiao Ming', 'age': 12} # 序列化之后,數據類型為python字典形式

4. 小結

在開發 REST API 接口時,我們需要做的最核心的事情是:

  • 將數據庫數據序列化為前端所需要的格式,并返回;
  • 將前端發送的數據反序列化為模型類對象,并保存到數據庫中。