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