日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FastAPI框架诞生的缘由(上)

發布時間:2024/1/18 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FastAPI框架诞生的缘由(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

原文:https://fastapi.tiangolo.com/alternatives/

作者:tiangolo,FastAPI 的創作者,github star 10.1k

翻譯: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 ? 具有非常簡單直觀的設計,非常易于使用,并具有合理的默認值。但同時,它非常強大且可自定義。

這就是為什么,如官方網站所述:

Requests??是有史以來下載次數最多的Python軟件包之一

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

?

response = requests.get("http://example.com/some/url")

FastAPI 對應的 API 路徑操作如下所示:

@app.get("/some/url") def read_url(): return {"message": "Hello World"}

它們使用起來的相似之處如 requests.get(...) 和 @app.get(...)。

?

啟發 FastAPI 地方:

  • 擁有簡單直觀的API。

  • 直接,直觀地使用HTTP方法名稱(操作)。

  • 具有合理的默認值,功能強大的自定義。

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規范采用開放標準,而不是使用自定義架構。并集成基于標準的用戶界面工具:

  • Swagger UI

  • ReDoc

選擇這兩個是因為它們相當受歡迎且穩定,但是通過快速搜索,您可以找到數十個 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 地方:

對輸入的請求數據的自動驗證。

(未完待續)

總結

以上是生活随笔為你收集整理的FastAPI框架诞生的缘由(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。