第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁(yè) 慕課教程 RESTful 規(guī)范教程 RESTful 規(guī)范教程 05 RESTful Web API開(kāi)發(fā)的核心任務(wù)

RESTful Web API開(kāi)發(fā)的核心任務(wù)

通過(guò)上節(jié)課的學(xué)習(xí),我們已經(jīng)知道了在當(dāng)下的 Web 開(kāi)發(fā)中 JSON 數(shù)據(jù)格式已經(jīng)逐步取代了 XML 用來(lái)進(jìn)行前后端之間的數(shù)據(jù)交互。但是前端的數(shù)據(jù)格式可能并不規(guī)范,不能直接為后端所用,這個(gè)時(shí)候就需要我們將數(shù)據(jù)進(jìn)行序列化和反序列化,我們先來(lái)簡(jiǎn)單了解下什么是序列化和反序列化:

  • 序列化:按照前端需求,在數(shù)據(jù)庫(kù)檢索相應(yīng)數(shù)據(jù),轉(zhuǎn)化為前端所需的數(shù)據(jù)形式(如 JSON),發(fā)給前端。

  • 反序列化:將前端發(fā)來(lái)的數(shù)據(jù),按照數(shù)據(jù)庫(kù)的要求,轉(zhuǎn)化為數(shù)據(jù)庫(kù)所能接受的形式,存入數(shù)據(jù)庫(kù)。

而序列化和反序列化是 RESTful API 接口開(kāi)發(fā)時(shí)的核心任務(wù),這節(jié)課我們來(lái)學(xué)習(xí)下序列化和反序列化的概念。

1. 序列化(Serialization)

百度百科中對(duì)于序列化的定義:

序列化(serialization)在計(jì)算機(jī)科學(xué)的資料處理中,是指將數(shù)據(jù)結(jié)構(gòu)或物件狀態(tài)轉(zhuǎn)換成可取用格式(例如存成檔案,存于緩沖,或經(jīng)由網(wǎng)絡(luò)中傳送),以留待后續(xù)在相同或另一臺(tái)計(jì)算機(jī)環(huán)境中,能恢復(fù)原先狀態(tài)的過(guò)程。依照序列化格式重新獲取字節(jié)的結(jié)果時(shí),可以利用它來(lái)產(chǎn)生與原始物件相同語(yǔ)義的副本。對(duì)于許多物件,像是使用大量參照的復(fù)雜物件,這種序列化重建的過(guò)程并不容易。面向?qū)ο笾械奈锛蛄谢⒉桓爬ㄖ霸嘉锛P(guān)聯(lián)的函式。這種過(guò)程也稱(chēng)為物件編組(marshalling)。從一系列字節(jié)提取數(shù)據(jù)結(jié)構(gòu)的反向操作,是反序列化(也稱(chēng)為解編組, deserialization, unmarshalling)。

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

我們將不同數(shù)據(jù)存儲(chǔ)體(如數(shù)據(jù)庫(kù))比作不同的網(wǎng)絡(luò)游戲,而將數(shù)據(jù)看成是網(wǎng)絡(luò)游戲中的虛擬貨幣。在不同的游戲中,這些虛擬貨幣是不通用的,不能從一個(gè)游戲傳到另一個(gè)游戲,因?yàn)檫@些貨幣是不通用的。而如果我們?cè)谕婕沂袌?chǎng),把手中的虛擬貨幣換成現(xiàn)實(shí)生活中的貨幣,然后再充入另一個(gè)游戲,就能購(gòu)買(mǎi)想要的裝備。將不通用的虛擬貨幣兌換成通用的真實(shí)貨幣的過(guò)程,就可以看成是一次序列化。

簡(jiǎn)而言之,我們可以將序列化理解為:

將程序中的一個(gè)數(shù)據(jù)結(jié)構(gòu)類(lèi)型轉(zhuǎn)換為其他格式(字典、JSON、XML等),例如將 Django 中的模型類(lèi)對(duì)象轉(zhuǎn)換為 JSON 字符串,這個(gè)轉(zhuǎn)換過(guò)程我們稱(chēng)為序列化。

2. 反序列化(DeSerialization)

反之,將其他格式(字典、JSON、XML等)轉(zhuǎn)換為程序中的數(shù)據(jù),例如將JSON字符串轉(zhuǎn)換為Django中的模型類(lèi)對(duì)象,這個(gè)過(guò)程我們稱(chēng)為反序列化。

反序列化的過(guò)程,我們同樣類(lèi)比上述網(wǎng)絡(luò)游戲:反序列化就是將現(xiàn)實(shí)生活中的貨幣兌換為游戲中可以使用的游戲幣。

3. 案例演示

為了幫助大家理解序列化與反序列化,這里我們一起來(lái)完成一個(gè)小的案例,代碼用 Python 語(yǔ)言編寫(xiě):

>> import json
# 序列化(將python內(nèi)部的字典結(jié)構(gòu)轉(zhuǎn)化為JSON字符串)
>> student = {'name': 'Xiao Ming', 'age': 12} # 未序列化前,數(shù)據(jù)是python字典形式
>> json.dumps(student)
# 輸出結(jié)果
'{"name": "Xiao Ming", "age": 12}' # 經(jīng)過(guò)序列化,數(shù)據(jù)已成為 python 字符串形式

# 反序列化(將JSON字符串轉(zhuǎn)化為python內(nèi)部的字典結(jié)構(gòu))
>> student_str = '{"name": "Xiao Ming", "age": 12}' # 未返回序列化前,數(shù)據(jù)類(lèi)型為python字符串
>> json.loads(student_str)
# 輸出結(jié)果
{'name': 'Xiao Ming', 'age': 12} # 序列化之后,數(shù)據(jù)類(lèi)型為python字典形式

4. 小結(jié)

在開(kāi)發(fā) REST API 接口時(shí),我們需要做的最核心的事情是:

  • 將數(shù)據(jù)庫(kù)數(shù)據(jù)序列化為前端所需要的格式,并返回;
  • 將前端發(fā)送的數(shù)據(jù)反序列化為模型類(lèi)對(duì)象,并保存到數(shù)據(jù)庫(kù)中。