Browse Source

Apply suggestions from code review

Co-authored-by: W. H. Wang <[email protected]>
pull/13521/head
Easonliuuuuu 2 weeks ago
committed by GitHub
parent
commit
f65c179dad
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 52
      docs/zh-hant/docs/alternatives.md

52
docs/zh-hant/docs/alternatives.md

@ -20,19 +20,19 @@ Django 是最受歡迎的 Python 框架,並且廣受信任。它被用來構
它與關聯式資料庫(如 MySQL 或 PostgreSQL)的耦合度較高,因此將 NoSQL 資料庫(如 Couchbase、MongoDB、Cassandra 等)作為主要儲存引擎並不容易。 它與關聯式資料庫(如 MySQL 或 PostgreSQL)的耦合度較高,因此將 NoSQL 資料庫(如 Couchbase、MongoDB、Cassandra 等)作為主要儲存引擎並不容易。
Django 的設計初衷是為了在後端生成 HTML,而不是為了建供現代前端(如 React、Vue.js 和 Angular)或其他系統 (類似 <abbr title="Internet of Things">IoT</abbr> devices)使用的 API。 Django 的設計初衷是為了在後端生成 HTML,而不是為了建供現代前端(如 React、Vue.js 和 Angular)或其他系統 (類似 <abbr title="Internet of Things">IoT</abbr> devices)使用的 API。
### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> ### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a>
Django REST Framework 是為了在 Django 的基礎上建構 Web API 而建的靈活工具包,旨在提升其 API 功能。 Django REST Framework 是為了在 Django 的基礎上建構 Web API 而建的靈活工具包,旨在提升其 API 功能。
它被許多公司使用,包括 Mozilla、Red Hat 和 Eventbrite。 它被許多公司使用,包括 Mozilla、Red Hat 和 Eventbrite。
它是自動生成 API 文件的早期範例之一,而這正是啟發 「探索」FastAPI 的第一個想法之一。 它是自動生成 API 文件的早期範例之一,而這正是啟發「探索」FastAPI 的第一個想法之一。
/// note | 筆記 /// note | 筆記
Django REST Framework 是 Tom Christie 所發明. 他同時研發了 Starlette 和 Uvicorn, 兩者皆是基於 **FastAPI**. Django REST Framework 是 Tom Christie 所發明,他同時研發了 Starlette 和 Uvicorn,兩者皆是基於 **FastAPI**
/// ///
@ -50,7 +50,7 @@ Flask 是一個「微框架」,它並未內建資料庫整合功能,也不
由於其設計極為簡潔,學習起來相對直觀,儘管其文件在某些部分仍需要點技術。 由於其設計極為簡潔,學習起來相對直觀,儘管其文件在某些部分仍需要點技術。
它也常被用於其他不一定需要資料庫、用戶管理或 Django 中預建的眾多功能之應用程式。儘管這些功能中的許多可以透過件來添加。 它也常被用於其他不一定需要資料庫、用戶管理或 Django 中預建的眾多功能之應用程式。儘管這些功能中的許多可以透過擴充套件來添加。
這種模組化的設計,以及作為一個可擴展以滿足特定需求的「微框架」,正是我希望保留的關鍵特性。 這種模組化的設計,以及作為一個可擴展以滿足特定需求的「微框架」,正是我希望保留的關鍵特性。
@ -110,7 +110,7 @@ def read_url():
我從 Django REST Framework 中想要的主要功能是自動生成 API 文件。 我從 Django REST Framework 中想要的主要功能是自動生成 API 文件。
後來我發現有一種標準可以用來記錄 API,使用 JSON(或 YAML,JSON 的擴展)來描述,稱為 Swagger。 後來我發現有一種標準可以用來記錄 API,使用 JSON(或 YAML,JSON 的擴展)來描述,稱為 Swagger。
而且已經有人為 Swagger API 創建了一個網頁用戶界面。因此,能夠為 API 生成 Swagger 文件,就能自動使用這個網頁用戶界面。 而且已經有人為 Swagger API 創建了一個網頁用戶界面。因此,能夠為 API 生成 Swagger 文件,就能自動使用這個網頁用戶界面。
@ -122,12 +122,12 @@ def read_url():
採用並使用 API 規範的開放標準,而非自定義的架構。 採用並使用 API 規範的開放標準,而非自定義的架構。
並整合基於標準的用戶面工具: 並整合基於標準的用戶面工具:
* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> * <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>
* <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> * <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>
這兩者之所以被選中,是因為它們相當流行且穩定,但若稍加搜尋,你會發現有數十種適用於 OpenAPI 的替代用戶面(你也可以在 **FastAPI** 中使用這些工具)。 這兩者之所以被選中,是因為它們相當流行且穩定,但若稍加搜尋,你會發現有數十種適用於 OpenAPI 的替代用戶面(你也可以在 **FastAPI** 中使用這些工具)。
/// ///
@ -145,7 +145,7 @@ API 系統所需的主要功能之一是數據 "<abbr title="又稱為marshallin
這些功能正是 Marshmallow 所提供的主要功能。它是一個非常優秀的函式庫,我之前也經常使用它。 這些功能正是 Marshmallow 所提供的主要功能。它是一個非常優秀的函式庫,我之前也經常使用它。
但 Marshmallow 是在 Python 型提示(type hints)出現之前建的。因此,要定義每個 <abbr title="數據應如何被組成的定義">schema</abbr> 你必須使用 Marshmallow 提供的特定工具和類別。 但 Marshmallow 是在 Python 型提示(type hints)出現之前建的。因此,要定義每個 <abbr title="數據應如何被組成的定義">schema</abbr> 你必須使用 Marshmallow 提供的特定工具和類別。
/// check | 啟發了 **FastAPI** /// check | 啟發了 **FastAPI**
@ -205,7 +205,7 @@ APISpec 是 Marshmallow 相同的開發團隊所創建。
### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a> ### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a>
這是一個 Flask 的件,將 Webargs、Marshmallow 和 APISpec 整合在一起。 這是一個 Flask 的擴充套件,將 Webargs、Marshmallow 和 APISpec 整合在一起。
它利用 Webargs 和 Marshmallow 提供的數據驗證與解析功能,透過 APISpec 自動產生 OpenAPI 規範。 它利用 Webargs 和 Marshmallow 提供的數據驗證與解析功能,透過 APISpec 自動產生 OpenAPI 規範。
@ -221,7 +221,7 @@ APISpec 是 Marshmallow 相同的開發團隊所創建。
* <a href="https://github.com/tiangolo/full-stack-flask-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchbase</a> * <a href="https://github.com/tiangolo/full-stack-flask-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchbase</a>
* <a href="https://github.com/tiangolo/full-stack-flask-couchdb" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchdb</a> * <a href="https://github.com/tiangolo/full-stack-flask-couchdb" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchdb</a>
這些全端應用程式生成器也是 [**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank}的基礎。 這些全端應用程式生成器也是 [**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank} 的基礎。
/// info | 資訊 /// info | 資訊
@ -243,9 +243,9 @@ Flask-apispec 由與 Marshmallow 相同的開發團隊所創建。
它內建一套依賴注入(Dependency Injection)系統,靈感來自 Angular 2。與其他依賴注入系統一樣,它需要事先註冊「可注入項目(injectables)」,這導致程式碼變得更冗長且重複。 它內建一套依賴注入(Dependency Injection)系統,靈感來自 Angular 2。與其他依賴注入系統一樣,它需要事先註冊「可注入項目(injectables)」,這導致程式碼變得更冗長且重複。
因為參數是用 TypeScript 類型(類似 Python 型別註記)來描述的,因此編輯器支援相當良好。 因為參數是用 TypeScript 型別(類似 Python 型別提示)來描述的,因此編輯器支援相當良好。
但由於 TypeScript 型在編譯後不會保留於 JavaScript,因此無法同時用來定義驗證、序列化與文件化。 但由於 TypeScript 型在編譯後不會保留於 JavaScript,因此無法同時用來定義驗證、序列化與文件化。
由於這一點及其他設計考量,要實現驗證、序列化與自動模式生成,需要在許多地方添加裝飾器,這導致程式碼變得冗長。 由於這一點及其他設計考量,要實現驗證、序列化與自動模式生成,需要在許多地方添加裝飾器,這導致程式碼變得冗長。
@ -253,7 +253,7 @@ Flask-apispec 由與 Marshmallow 相同的開發團隊所創建。
/// check | 啟發了 **FastAPI** /// check | 啟發了 **FastAPI**
使用 Python 型來獲得更強大的編輯器支援。 使用 Python 型來獲得更強大的編輯器支援。
設計一個強大的依賴注入系統,並設法減少程式碼重複。 設計一個強大的依賴注入系統,並設法減少程式碼重複。
@ -261,13 +261,13 @@ Flask-apispec 由與 Marshmallow 相同的開發團隊所創建。
### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a> ### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a>
這是一個基於 `asyncio` 極快的python框架,與Flask非常相似。 這是一個基於 `asyncio` 極快的 Python 框架,與 Flask 非常相似。
/// note | 技術層面細節 /// note | 技術層面細節
它使用了 <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a> 而非python預設的`asyncio` loop。這也是讓它速度之快的原因。 它使用了 <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a> 而非 Python 預設的 `asyncio` loop。這也是讓它速度之快的原因。
它很明顯的啟發了 Uvicorn 和 Starlette,兩者在效能測試速度皆優於Sanic。 它很明顯的啟發了 Uvicorn 和 Starlette,兩者在效能測試速度皆優於 Sanic。
/// ///
@ -291,7 +291,7 @@ Falcon 是另一個高效能的 Python 框架,設計簡潔,並作為 Hug 等
尋找方法以獲得優秀的效能。 尋找方法以獲得優秀的效能。
與 Hug 一樣(因為 Hug 是基於 Falcon 的),啟發 FastAPI 讓函式可選擇性地使用 response 參數來設置標頭、cookie 和狀態碼。 與 Hug 一樣(因為 Hug 是基於 Falcon 的),啟發 FastAPI 讓函式可選擇性地使用 response 參數來設置標頭、cookie 和狀態碼。
/// ///
@ -301,7 +301,7 @@ Falcon 是另一個高效能的 Python 框架,設計簡潔,並作為 Hug 等
* 基於 Python 型別註解(type hints)。 * 基於 Python 型別註解(type hints)。
* 透過型別自動執行驗證與文件生成。 * 透過型別自動執行驗證與文件生成。
* 內建相依性注入(Dependency Injection)系統。 * 內建依賴注入系統。
然而,Molten 並未採用像 Pydantic 這樣的第三方資料驗證、序列化與文件生成工具,而是內建了一套自己的解決方案。因此,定義的資料型別無法像 Pydantic 那樣輕鬆地被重複使用。 然而,Molten 並未採用像 Pydantic 這樣的第三方資料驗證、序列化與文件生成工具,而是內建了一套自己的解決方案。因此,定義的資料型別無法像 Pydantic 那樣輕鬆地被重複使用。
@ -360,7 +360,7 @@ Hug 的創新理念對 FastAPI 產生了直接影響,特別是使用 Python
不過,APIStar 的請求體(Body)架構定義並不像 Pydantic 那樣直接使用 Python 型別提示,而是更接近 Marshmallow。因此,編輯器的支援性相對較差,但即便如此,當時 APIStar 仍是最好的選擇。 不過,APIStar 的請求體(Body)架構定義並不像 Pydantic 那樣直接使用 Python 型別提示,而是更接近 Marshmallow。因此,編輯器的支援性相對較差,但即便如此,當時 APIStar 仍是最好的選擇。
當時,它的效能測試(Benchmark)表現最佳,只有 Starlette 能超越它。 當時,它的基準測試(Benchmark)表現最佳,只有 Starlette 能超越它。
最初,它沒有自動生成 API 文件的 Web UI,但我知道可以手動加入 Swagger UI 來補足這項功能。 最初,它沒有自動生成 API 文件的 Web UI,但我知道可以手動加入 Swagger UI 來補足這項功能。
@ -378,7 +378,7 @@ APIStar 是由 Tom Christie 創建的。他同時也是以下專案的作者:
* Django REST Framework * Django REST Framework
* Starlette (**FastAPI** 的基礎) * Starlette (**FastAPI** 的基礎)
* Uvicorn (被Starlette 和 **FastAPI** 使用) * Uvicorn (被 Starlette 和 **FastAPI** 使用)
/// ///
@ -454,7 +454,7 @@ FastAPI 使用 ASGI 來處理所有核心的 Web 功能,並在其基礎上增
`FastAPI` 類別直接繼承自 `Starlette`類別。 `FastAPI` 類別直接繼承自 `Starlette`類別。
因此,任何可以在 Starlette 上做的事情,都可以直接在 **FastAPI** 上做,因為 FastAPI 本質上就是 增強版的 Starlette。 因此,任何可以在 Starlette 上做的事情,都可以直接在 **FastAPI** 上做,因為 FastAPI 本質上就是增強版的 Starlette。
/// ///
@ -462,7 +462,7 @@ FastAPI 使用 ASGI 來處理所有核心的 Web 功能,並在其基礎上增
Uvicorn 是一款極速的 ASGI 伺服器,基於 uvloop 和 httptools 架構而成。 Uvicorn 是一款極速的 ASGI 伺服器,基於 uvloop 和 httptools 架構而成。
它並不是一個網頁框架,而是一個伺服器。例如,它不提供路徑導向的路由功能,這部分需要像Starlette 或 **FastAPI** 這類框架來實現。 它並不是一個網頁框架,而是一個伺服器。例如,它不提供路徑導向的路由功能,這部分需要像 Starlette 或 **FastAPI** 這類框架來實現。
Uvicorn 是 Starlette 和 **FastAPI** 官方推薦的伺服器。 Uvicorn 是 Starlette 和 **FastAPI** 官方推薦的伺服器。
@ -471,12 +471,12 @@ Uvicorn 是 Starlette 和 **FastAPI** 官方推薦的伺服器。
運行 **FastAPI** 應用程式的主要網頁伺服器。 運行 **FastAPI** 應用程式的主要網頁伺服器。
此外,你還可以使用 `--workers` 指令選項,啟動非同步的多程伺服器,以提升效能。 此外,你還可以使用 `--workers` 指令選項,啟動非同步的多程伺服器,以提升效能。
更多詳細資訊請參考 [Deployment](deployment/index.md){.internal-link target=_blank} 章節. 更多詳細資訊請參考[部署](deployment/index.md){.internal-link target=_blank}章節。
/// ///
## 效能測試與速度 ## 效能測試與速度
如需瞭解、比較並觀察 Uvicorn, Starlette 和 FastAPI,請前往 [Benchmarks](benchmarks.md){.internal-link target=_blank}. 如需瞭解、比較並觀察 Uvicorn, Starlette 和 FastAPI,請前往[基準測試](benchmarks.md){.internal-link target=_blank}.

Loading…
Cancel
Save