FastAPI框架誕生的緣由(上)

2021-10-03 08:19:32 字數 3545 閱讀 9615

閱讀本文大概需要 3.6 分鐘。

原文:翻譯:somenzz

侵刪本文講述了什麼啟發了 fastapi 的誕生,它與其他替代框架的對比,以及從中汲取的經驗。

簡介:

如果不是基於前人的成果,fastapi將不會存在。在 fastapi之前,前人已經建立了許多任務具 。

幾年來,我一直在避免建立新框架。首先,我嘗試使用許多不同的框架,外掛程式和工具來解決fastapi涵蓋的所有功能。

但是有時候,沒有更好的辦法,除了建立具有所有這些功能的東西,從以前的工具中汲取最佳創意,並以最佳方式將它們組合起來,使用以前甚至沒有的語言功能(python 3.6+型別提示)。

在此之前的一些框架:

django

django 是最流行的 python 框架,受到廣泛信任。它用於構建 instagram 之類的系統。

它與關聯式資料庫(例如 mysql 或 postgresql)相對緊密地結合在一起,因此,以nosql 資料庫(例如 couchbase,mongodb,cassandra 等)作為 django 的主儲存引擎並不是一件容易的事。

建立它是為了在後端生成 html,而不是建立現代前端(例如 react,vue.js 和angular)或與其通訊的其他系統(例如 iot 裝置)使用的api 。

django rest framework

django rest framework 是乙個非常靈活的框架,用於構建 web api,以改善 django 的 api 功能。

mozilla,red hat 和 eventbrite 等許多公司都使用它。

django rest framework 是第乙個自動生成 api 文件的框架,自動生成 api 的介面文件是 fastapi 框架誕生的緣由之一。

注意

django rest framework 框架的作者是 tom christie ,tom christie 也創造了 starlette和 uvicorn。fastapi 正是建立在 starlette 和 uvicorn 的基礎之上。

啟發 fastapi 地方:有乙個自動 api 文件,web 使用者介面可供使用者測試。

flask

flask 是一種輕量級的框架,它不包括資料庫整合,也沒有很多的附帶的功能,雖然這django 那裡是預設提供的。

這個簡單性和靈活的特性允許使用 nosql 資料庫作為主資料儲存。儘管文件在某些方面有所技術性,但它非常簡單,因此學習起來相對直觀。

它還常用於其他不需要資料庫,使用者管理或 django 中預建功能的應用程式。儘管其中許多功能都可以通過新增外掛程式來實現。

各個模組之前的解耦,使之成為乙個「微框架」,可以通過擴充套件為精確地提供所需的東西,這是我想要保留的一項關鍵功能。

考慮到 flask 的簡單性,它似乎很適合構建 api。接下來要找到的是 flask的 「 django rest framework」。

啟發 fastapi 地方:成為乙個微框架。易於混合和匹配所需的工具和零件。擁有乙個簡單易用的路由系統。

requests

fastapi 實際上不是 requests 的替代工具。它們的適用範圍非常不同。實際上,在fastapi 應用程式內部使用 requests 是很常見的。

但是,fastapi 從 requests 中獲得了很多啟發。requests  是乙個與api(作為客戶端)進行互動的庫,而 fastapi 是乙個用於構建 api(作為伺服器)的庫。它們或多或少地處於相反的末端,彼此互補。requests   具有非常簡單直觀的設計,非常易於使用,並具有合理的預設值。但同時,它非常強大且可自定義。

您的使用方式非常簡單。例如,要發出get請求,您可以編寫:

response = requests.get("")

fastapi 對應的 api 路徑操作如下所示:

def read_url():

return

啟發 fastapi 地方:

swagger/openapi

我想要 django rest framework 的主要功能是自動 api 文件。然後我發現 api 文件有乙個標準叫 swagger ,它使用 json 或 yaml 來描述。

並且 swagger api 的 web 使用者介面已經被人建立出來了。因此,能夠為 api 生成swagger 文件將允許自動使用此 web 使用者介面。

在某個時候,swagger 被授予 linux foundation,將其重新命名為 openapi。這就是為什麼在談論版本 2.0 時通常會說「 swagger」,對於版本3+來說是「 openapi」。

啟發 fastapi 地方:

為api規範採用開放標準,而不是使用自定義架構。並整合基於標準的使用者介面工具:

選擇這兩個是因為它們相當受歡迎且穩定,但是通過快速搜尋,您可以找到數十個 openapi 的其他替代使用者介面(可以與fastapi一起使用)。

flask rest frameworks

有幾個 flask rest frameworks ,但經過調查和試用,我發現,不少專案都停產或放棄,還存在有一些長期的問題,使得它們並不適合解決前面的問題。

marshmallow

乙個由 api 系統所需的主要功能是資料的序列化,就是把資料從程式語言中的物件轉稱成可以在網路上傳輸的物件,比如資料庫中的資料轉換為 json 物件。將 python 中的datetime 物件轉為字串,等等。

另外乙個功能就是資料的驗證,確保傳入的引數是有效的,例如,有些欄位是乙個 int,型別而不是字串,這在檢測輸入資料是非常有用的。

如果沒有資料驗證,你就必須用手工寫**來完成所有的檢查。

這兩點功能就是 marshmallow 所提供的,這些是乙個偉大的圖書館,之前我經常使用它。

marshmallow 產生之前 python 還沒有加入型別提示。因此,定義乙個 schema 你需要引入 marshmallow 特定的 utils 的和類。

啟發 fastapi 地方:

使用**來定義提供的資料型別和驗證的 schema,驗證都是自動化的。

webargs

api 框架需要的另一大功能點是解析從前端傳送的請求資料。webargs (包括flask) 是提供這一功能的工具,它採用 marshmallow 做資料驗證。webargs 和 marshmallow  的作者是同乙個開發人員。這是乙個偉大的工具,在 fastapi 誕生之前,我一直在用它。

啟發 fastapi 地方:

對輸入的請求資料的自動驗證。

(未完待續)

SSH框架的搭建 上

弄了幾天,終於找到乙個比較好的解耦性高的框架搭建 在這裡,使三個框架能很好的搭配起來,最主要的就是要能夠做好配置檔案。下面直接貼上我們的配置檔案 xmlns xsi xmlns p xmlns aop xmlns context xmlns jee xmlns tx xsi schemalocati...

MapReduce框架在Yarn上的詳解

在yarn 上乙個mapreduce 任務叫做乙個 job。乙個 job的主程式在 mapreduce 框架上實現的應用名稱叫 這是乙個mapreduce 為提高shuffle 效率reduce 階段會在 map階段結束之前就開始。直到所有 maptask 完成之後 reducetask 才能完成,...

Yaf框架在window上的配置

yaf是乙個高效簡潔的輕量級框架,寫這篇文章主要是需要做乙個php 介面開發,這裡首選yaf。一般情況而言都是架構在伺服器上,這裡主要是測試需求所以撘在本地。本地環境 可以使用整合環境或者虛擬機器 docker 或者vm 也可以自己配,方法就就不贅述,筆者本地採用的phpstudy。步驟如下 2.解...