為什么選擇學(xué)習(xí) Sanic 框架
Web Server 和框架
Sanic 稱(chēng)自己既是一個(gè)網(wǎng)絡(luò)框架,也是一個(gè)網(wǎng)絡(luò)服務(wù)器。這是什么意思?更重要的是,為什么這很重要?
那么什么是 Web Server?
Web Server
Web服務(wù)器是一種軟件,旨在通過(guò) HTTP 協(xié)議傳遞文檔和數(shù)據(jù)。它的功能是接受傳入的 HTTP 請(qǐng)求,對(duì)消息進(jìn)行解碼以了解請(qǐng)求試圖完成的任務(wù),并提供適當(dāng)?shù)捻憫?yīng)。Web 服務(wù)器的語(yǔ)言是 HTTP 協(xié)議。
我們可以設(shè)置一個(gè)簡(jiǎn)單的Sanic服務(wù)器,然后從 curl 發(fā)出請(qǐng)求,并查看消息。
- 創(chuàng)建一個(gè)server.py 文件,寫(xiě)入如下代碼:
- 執(zhí)行sanic server.app ,運(yùn)行該服務(wù)器
- 打開(kāi)另一個(gè)終端,運(yùn)行curl localhost:8088 -d '{"foo": "bar"}' 語(yǔ)句,能看到如下輸出:
然后回到另一個(gè)終端,能看到 HTTP 請(qǐng)求消息,如下內(nèi)容:
- 第一行包含 HTTP 方法、路徑和使用的 HTTP 協(xié)議
- 接下來(lái)是 HTTP 頭的列表,每行一個(gè),格式為key:value
- 最后是 HTTP 正文,前面有一個(gè)空行。HTTP 響應(yīng)非常相似:
- 第一行包含 HTTP 協(xié)議,然后是 HTTP 狀態(tài)和狀態(tài)描述
- 接下來(lái)是 HTTP 頭的列表,每行一個(gè),格式為 key:value
- 最后是HTTP正文(如果有),前面有一個(gè)空行。
雖然這是 Web 服務(wù)器的語(yǔ)言,但編寫(xiě)所有這些內(nèi)容非常麻煩。因此,Web 瀏覽器和 HTTP 客戶(hù)端庫(kù)等工具被創(chuàng)建來(lái)為我們構(gòu)建和解析這些消息。
Web 框架
當(dāng)然,我們可以用 Python 編寫(xiě)一個(gè)程序,接收這些原始 HTTP 消息,對(duì)它們進(jìn)行解碼,然后返回一個(gè)適當(dāng)?shù)?HTTP 響應(yīng)消息。然而,這將需要大量的文件,難以擴(kuò)展,并且容易出錯(cuò)。
有一些工具可以幫我們做到這一點(diǎn):Web框架。Web 框架的工作是構(gòu)建 HTTP 消息并適當(dāng)?shù)靥幚碚?qǐng)求。許多框架通過(guò)提供便利和實(shí)用程序來(lái)進(jìn)一步簡(jiǎn)化流程。
Python 生態(tài)系統(tǒng)中有許多 Web 框架在不同程度上完成了這項(xiàng)工作。有些提供了大量的功能,有些則非常稀少。有些非常嚴(yán)格,有些則更加開(kāi)放。Sanic 只在不妨礙開(kāi)發(fā)人員的情況下,才嘗試保持功能豐富的連續(xù)性。
Sanic提供的一個(gè)功能是,它既是一個(gè) Web 框架,也是一個(gè) Web 服務(wù)器。Web 框架做的就是有一個(gè)服務(wù)器調(diào)用一個(gè)輸入函數(shù),向其傳遞有關(guān)請(qǐng)求的信息,并得到響應(yīng)。
async/await 風(fēng)格的協(xié)程處理程序的項(xiàng)目,絕大多數(shù)都需要運(yùn)行一個(gè)ASGI服務(wù)器。它遵循一個(gè)類(lèi)似的模式:一個(gè)ASGI就緒的服務(wù)器調(diào)用一個(gè)ASGI就緒的框架。
這兩個(gè)組件使用一個(gè)特定的協(xié)議相互操作。目前有三種流行的ASGI服務(wù)器:uvicorn、hypercorn和daphne。
Sanic
正因?yàn)?Sanic 誕生于 ASGI 之前的時(shí)代,它需要自己的服務(wù)器。隨著時(shí)間的推移,這已經(jīng)成為它最大的資產(chǎn)之一,并且在很大程度上是它勝過(guò)其他大多數(shù) Python 框架的原因。Sanic 服務(wù)器的開(kāi)發(fā)非常注重性能和請(qǐng)求/響應(yīng)周期的最小化。然而,近年來(lái) Sanic 也采用了 ASGI 接口,使其能夠由 ASGI 網(wǎng)絡(luò)服務(wù)器運(yùn)行。
Sanic 具備開(kāi)箱即用的功能,它可以用于編寫(xiě),部署和擴(kuò)展生產(chǎn)級(jí) Web 應(yīng)用程序。
為什么選擇 Sanic 框架學(xué)習(xí)呢?官方給出了 6 個(gè)原因:
特征(Features)
- 內(nèi)置極速 web server
- 生產(chǎn)準(zhǔn)備就緒
- 極高的拓展性
- 支持 ASGI
- 簡(jiǎn)單直觀(guān)的 API 設(shè)計(jì)
- 社區(qū)保障
總結(jié)
Sanic 會(huì)被看作是為 Flask 應(yīng)用帶來(lái) async/await 風(fēng)格編程的一種嘗試。雖然這可能是最初的概念驗(yàn)證的一個(gè)公平的觀(guān)點(diǎn),但 Sanic 在一個(gè)非常不同的道路上發(fā)展,其目標(biāo)和影響是成為一個(gè)為性能應(yīng)用設(shè)計(jì)的強(qiáng)大工具。
因此,Sanic 通常被那些希望建立一個(gè)豐富環(huán)境的開(kāi)發(fā)者和團(tuán)隊(duì)所使用,以解決他們的應(yīng)用需求所要求的獨(dú)特的、明顯的設(shè)計(jì)模式。該項(xiàng)目的意圖是消除構(gòu)建網(wǎng)絡(luò)服務(wù)器的困難或繁瑣部分,并提供工具來(lái)創(chuàng)建高性能和可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。