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 等)作為主要儲存引擎並不容易。
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>
Django REST Framework 是為了在 Django 的基礎上建構 Web API 而建的靈活工具包,旨在提升其 API 功能。
Django REST Framework 是為了在 Django 的基礎上建構 Web API 而建的靈活工具包,旨在提升其 API 功能。
它被許多公司使用,包括 Mozilla、Red Hat 和 Eventbrite。
它是自動生成 API 文件的早期範例之一,而這正是啟發 「探索」FastAPI 的第一個想法之一。
它是自動生成 API 文件的早期範例之一,而這正是啟發「探索」FastAPI 的第一個想法之一。
/// 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 文件。
後來我發現有一種標準可以用來記錄 API,使用 JSON(或 YAML,JSON 的擴展)來描述,稱為 Swagger。
後來我發現有一種標準可以用來記錄 API,使用 JSON(或 YAML,JSON 的擴展)來描述,稱為 Swagger。
而且已經有人為 Swagger API 創建了一個網頁用戶界面。因此,能夠為 API 生成 Swagger 文件,就能自動使用這個網頁用戶界面。
@ -122,12 +122,12 @@ def read_url():
採用並使用 API 規範的開放標準,而非自定義的架構。
並整合基於標準的用戶面工具:
並整合基於標準的用戶面工具:
* <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>
這兩者之所以被選中,是因為它們相當流行且穩定,但若稍加搜尋,你會發現有數十種適用於 OpenAPI 的替代用戶面(你也可以在 **FastAPI** 中使用這些工具)。
這兩者之所以被選中,是因為它們相當流行且穩定,但若稍加搜尋,你會發現有數十種適用於 OpenAPI 的替代用戶面(你也可以在 **FastAPI** 中使用這些工具)。
///
@ -145,7 +145,7 @@ API 系統所需的主要功能之一是數據 "<abbr title="又稱為marshallin
這些功能正是 Marshmallow 所提供的主要功能。它是一個非常優秀的函式庫,我之前也經常使用它。
但 Marshmallow 是在 Python 型提示(type hints)出現之前建的。因此,要定義每個 <abbr title="數據應如何被組成的定義">schema</abbr> 你必須使用 Marshmallow 提供的特定工具和類別。
但 Marshmallow 是在 Python 型提示(type hints)出現之前建的。因此,要定義每個 <abbr title="數據應如何被組成的定義">schema</abbr> 你必須使用 Marshmallow 提供的特定工具和類別。
/// 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>
這是一個 Flask 的件,將 Webargs、Marshmallow 和 APISpec 整合在一起。
這是一個 Flask 的擴充套件,將 Webargs、Marshmallow 和 APISpec 整合在一起。
它利用 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-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 | 資訊
@ -243,9 +243,9 @@ Flask-apispec 由與 Marshmallow 相同的開發團隊所創建。
它內建一套依賴注入(Dependency Injection)系統,靈感來自 Angular 2。與其他依賴注入系統一樣,它需要事先註冊「可注入項目(injectables)」,這導致程式碼變得更冗長且重複。
因為參數是用 TypeScript 類型(類似 Python 型別註記)來描述的,因此編輯器支援相當良好。
因為參數是用 TypeScript 型別(類似 Python 型別提示)來描述的,因此編輯器支援相當良好。
但由於 TypeScript 型在編譯後不會保留於 JavaScript,因此無法同時用來定義驗證、序列化與文件化。
但由於 TypeScript 型在編譯後不會保留於 JavaScript,因此無法同時用來定義驗證、序列化與文件化。
由於這一點及其他設計考量,要實現驗證、序列化與自動模式生成,需要在許多地方添加裝飾器,這導致程式碼變得冗長。
@ -253,7 +253,7 @@ Flask-apispec 由與 Marshmallow 相同的開發團隊所創建。
/// 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>
這是一個基於 `asyncio` 極快的python框架,與Flask非常相似。
這是一個基於 `asyncio` 極快的 Python 框架,與 Flask 非常相似。
/// 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)。
* 透過型別自動執行驗證與文件生成。
* 內建相依性注入(Dependency Injection)系統。
* 內建依賴注入系統。
然而,Molten 並未採用像 Pydantic 這樣的第三方資料驗證、序列化與文件生成工具,而是內建了一套自己的解決方案。因此,定義的資料型別無法像 Pydantic 那樣輕鬆地被重複使用。
@ -360,7 +360,7 @@ Hug 的創新理念對 FastAPI 產生了直接影響,特別是使用 Python
不過,APIStar 的請求體(Body)架構定義並不像 Pydantic 那樣直接使用 Python 型別提示,而是更接近 Marshmallow。因此,編輯器的支援性相對較差,但即便如此,當時 APIStar 仍是最好的選擇。
當時,它的效能測試(Benchmark)表現最佳,只有 Starlette 能超越它。
當時,它的基準測試(Benchmark)表現最佳,只有 Starlette 能超越它。
最初,它沒有自動生成 API 文件的 Web UI,但我知道可以手動加入 Swagger UI 來補足這項功能。
@ -378,7 +378,7 @@ APIStar 是由 Tom Christie 創建的。他同時也是以下專案的作者:
* Django REST Framework
* Starlette (**FastAPI** 的基礎)
* Uvicorn (被Starlette 和 **FastAPI** 使用)
* Uvicorn (被 Starlette 和 **FastAPI** 使用)
///
@ -454,7 +454,7 @@ FastAPI 使用 ASGI 來處理所有核心的 Web 功能,並在其基礎上增
`FastAPI` 類別直接繼承自 `Starlette`類別。
因此,任何可以在 Starlette 上做的事情,都可以直接在 **FastAPI** 上做,因為 FastAPI 本質上就是 增強版的 Starlette。
因此,任何可以在 Starlette 上做的事情,都可以直接在 **FastAPI** 上做,因為 FastAPI 本質上就是增強版的 Starlette。
///
@ -462,7 +462,7 @@ FastAPI 使用 ASGI 來處理所有核心的 Web 功能,並在其基礎上增
Uvicorn 是一款極速的 ASGI 伺服器,基於 uvloop 和 httptools 架構而成。
它並不是一個網頁框架,而是一個伺服器。例如,它不提供路徑導向的路由功能,這部分需要像Starlette 或 **FastAPI** 這類框架來實現。
它並不是一個網頁框架,而是一個伺服器。例如,它不提供路徑導向的路由功能,這部分需要像 Starlette 或 **FastAPI** 這類框架來實現。
Uvicorn 是 Starlette 和 **FastAPI** 官方推薦的伺服器。
@ -471,12 +471,12 @@ Uvicorn 是 Starlette 和 **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