@ -14,7 +14,7 @@
## 以前のツール { #previous -tools }
### < a href = "https://www.djangoproject.com/" class = "external-link" target = "_blank" > Django</ a > { #django }
### [Django ](https://www.djangoproject.com/ ) { #django }
Pythonのフレームワークの中で最もポピュラーで、広く信頼されています。Instagramのようなシステムの構築に使われています。
@ -22,7 +22,7 @@ Pythonのフレームワークの中で最もポピュラーで、広く信頼
バックエンドでHTMLを生成するために作られたものであり、現代的なフロントエンド (ReactやVue.js、Angularなど) や、他のシステム (< abbr title = "Internet of Things - モノのインターネット" > IoT< / abbr > デバイスなど) と通信するAPIを構築するために作られたものではありません。
### < a href = "https://www.django-rest-framework.org/" class = "external-link" target = "_blank" > Django REST Framework</ a > { #django -rest-framework }
### [Django REST Framework ](https://www.django-rest-framework.org/ ) { #django -rest-framework }
Django REST Frameworkは、Djangoを下敷きにしてWeb APIを構築する柔軟なツールキットとして、APIの機能を向上させるために作られました。
@ -42,7 +42,7 @@ Django REST Framework は Tom Christie によって作成されました。Starl
///
### < a href = "https://flask.palletsprojects.com" class = "external-link" target = "_blank" > Flask</ a > { #flask }
### [Flask ](https://flask.palletsprojects.com ) { #flask }
Flask は「マイクロフレームワーク」であり、データベースとの統合のようなDjangoがデフォルトで持つ多くの機能は含まれていません。
@ -64,7 +64,7 @@ Flaskのシンプルさを考えると、APIを構築するのに適している
///
### < a href = "https://requests.readthedocs.io" class = "external-link" target = "_blank" > Requests</ a > { #requests }
### [Requests ](https://requests.readthedocs.io ) { #requests }
**FastAPI**は実際には**Requests**の代替ではありません。それらのスコープは大きく異なります。
@ -106,7 +106,7 @@ def read_url():
///
### < a href = "https://swagger.io/" class = "external-link" target = "_blank" > Swagger</ a > / < a href = "https://github.com/OAI/OpenAPI-Specification/" class = "external-link" target = "_blank" > OpenAPI</ a > { #swagger -openapi }
### [Swagger ](https://swagger.io/ ) / [OpenAPI ](https://github.com/OAI/OpenAPI-Specification/ ) { #swagger -openapi }
私がDjango REST Frameworkに求めていた主な機能は、APIの自動的なドキュメント生成でした。
@ -124,8 +124,8 @@ def read_url():
そして、標準に基づくユーザーインターフェースツールを統合しています。
* < 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 >
* [Swagger UI ](https://github.com/swagger-api/swagger-ui )
* [ReDoc ](https://github.com/Rebilly/ReDoc )
この二つは人気で安定したものとして選択されましたが、少し検索してみると、 (**FastAPI**と同時に使用できる) OpenAPIのための多くの代替となるツールを見つけることができます。
@ -135,7 +135,7 @@ def read_url():
いくつかのFlask RESTフレームワークがありますが、それらを調査してみたところ、多くのものが不適切な問題が残ったまま、中断されたり放置されていることがわかりました。
### < a href = "https://marshmallow.readthedocs.io/en/stable/" class = "external-link" target = "_blank" > Marshmallow</ a > { #marshmallow }
### [Marshmallow ](https://marshmallow.readthedocs.io/en/stable/ ) { #marshmallow }
APIシステムで必要とされる主な機能の一つに、コード (Python) からデータを取り出して、ネットワークを介して送れるものに変換するデータの「< dfn title = "別名: marshalling、変換" > シリアライゼーション< / dfn > 」があります。例えば、データベースのデータを含むオブジェクトをJSONオブジェクトに変換したり、`datetime` オブジェクトを文字列に変換するなどです。
@ -153,7 +153,7 @@ APIが必要とするもう一つの大きな機能はデータのバリデー
///
### < a href = "https://webargs.readthedocs.io/en/latest/" class = "external-link" target = "_blank" > Webargs</ a > { #webargs }
### [Webargs ](https://webargs.readthedocs.io/en/latest/ ) { #webargs }
APIに求められる他の大きな機能として、< dfn title = "Pythonデータへの読み込みと変換" > 受信したリクエストデータのパース< / dfn > があります。
@ -175,7 +175,7 @@ Webargsは、Marshmallowと同じ開発者により作られました。
///
### < a href = "https://apispec.readthedocs.io/en/stable/" class = "external-link" target = "_blank" > APISpec</ a > { #apispec }
### [APISpec ](https://apispec.readthedocs.io/en/stable/ ) { #apispec }
MarshmallowとWebargsはバリデーション、パース、シリアライゼーションをプラグインとして提供しています。
@ -205,7 +205,7 @@ OpenAPIという、APIについてのオープンな標準をサポートして
///
### < a href = "https://flask-apispec.readthedocs.io/en/latest/" class = "external-link" target = "_blank" > Flask-apispec</ a > { #flask -apispec }
### [Flask-apispec ](https://flask-apispec.readthedocs.io/en/latest/ ) { #flask -apispec }
Webargs、Marshmallow、APISpecを連携させたFlaskプラグインです。
@ -219,11 +219,11 @@ Flask、Flask-apispec、Marshmallow、Webargsの組み合わせは、**FastAPI**
これを使うことで、いくつかのFlaskフルスタックジェネレータを作成することになりました。これらは私 (といくつかの外部のチーム) が今まで使ってきたメインのスタックです。
* < a href = "https://github.com/tiangolo/full-stack" class = "external-link" target = "_blank" > https://github.com/tiangolo/full-stack< / 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 >
* [https://github.com/tiangolo/full-stack ](https://github.com/tiangolo/full-stack )
* [https://github.com/tiangolo/full-stack-flask-couchbase ](https://github.com/tiangolo/full-stack-flask-couchbase )
* [https://github.com/tiangolo/full-stack-flask-couchdb ](https://github.com/tiangolo/full-stack-flask-couchdb )
そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank} の元となっていました。
そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md)の元となっていました。
/// info | 情報
@ -237,7 +237,7 @@ Flask-apispecはMarshmallowと同じ開発者により作成されました。
///
### < a href = "https://nestjs.com/" class = "external-link" target = "_blank" > NestJS</ a > (と< a href = "https://angular.io/" class = "external-link" target = "_blank" > Angular</ a > ) { #nestjs -and-angular }
### [NestJS ](https://nestjs.com/ ) (と[Angular](https://angular.io/) ) { #nestjs -and-angular }
NestJSはAngularにインスパイアされたJavaScript (TypeScript) NodeJSフレームワークで、Pythonですらありません。
@ -259,13 +259,13 @@ Angular 2にインスピレーションを受けた、統合された依存性
///
### < a href = "https://sanic.readthedocs.io/en/latest/" class = "external-link" target = "_blank" > Sanic</ a > { #sanic }
### [Sanic ](https://sanic.readthedocs.io/en/latest/ ) { #sanic }
`asyncio` に基づいた、Pythonのフレームワークの中でも非常に高速なものの一つです。Flaskと非常に似た作りになっています。
/// note | 技術詳細
Pythonの`asyncio`ループの代わりに、< a href = "https://github.com/MagicStack/uvloop" class = "external-link" target = "_blank" > `uvloop`< / a > が利用されています。それにより、非常に高速です。
Pythonの`asyncio`ループの代わりに、[`uvloop`](https://github.com/MagicStack/uvloop) が利用されています。それにより、非常に高速です。
`Uvicorn` と`Starlette`に明らかなインスピレーションを与えており、それらは現在オープンなベンチマークにおいてSanicより高速です。
@ -279,7 +279,7 @@ Pythonの`asyncio`ループの代わりに、<a href="https://github.com/MagicSt
///
### < a href = "https://falconframework.org/" class = "external-link" target = "_blank" > Falcon</ a > { #falcon }
### [Falcon ](https://falconframework.org/ ) { #falcon }
Falconはもう一つの高性能Pythonフレームワークで、ミニマムに設計されており、Hugのような他のフレームワークの基盤として動作します。
@ -297,7 +297,7 @@ Hug (HugはFalconをベースにしています) と一緒に、**FastAPI**が`r
///
### < a href = "https://moltenframework.com/" class = "external-link" target = "_blank" > Molten</ a > { #molten }
### [Molten ](https://moltenframework.com/ ) { #molten }
**FastAPI**を構築する最初の段階でMoltenを発見しました。そして、それは非常に似たようなアイデアを持っています。
@ -321,7 +321,7 @@ Pydanticのようなデータのバリデーション、シリアライゼーシ
///
### < a href = "https://github.com/hugapi/hug" class = "external-link" target = "_blank" > Hug</ a > { #hug }
### [Hug ](https://github.com/hugapi/hug ) { #hug }
Hugは、Pythonの型ヒントを利用してAPIパラメータの型宣言を実装した最初のフレームワークの1つです。これは素晴らしいアイデアで、他のツールが同じことをするきっかけとなりました。
@ -337,7 +337,7 @@ OpenAPIやJSON Schemaのような標準に基づいたものではありませ
/// info | 情報
HugはTimothy Crosleyにより作成されました。彼は< a href = "https://github.com/timothycrosley/isort" class = "external-link" target = "_blank" > `isort`< / a > など、Pythonのファイル内のインポートの並び替えを自動的におこうなう素晴らしいツールの開発者です。
HugはTimothy Crosleyにより作成されました。彼は[`isort`](https://github.com/timothycrosley/isort) など、Pythonのファイル内のインポートの並び替えを自動的におこうなう素晴らしいツールの開発者です。
///
@ -351,7 +351,7 @@ Hugは、**FastAPI**がヘッダーやクッキーを設定するために関数
///
### < a href = "https://github.com/encode/apistar" class = "external-link" target = "_blank" > APIStar</ a > (< = 0.5) { #apistar -0-5 }
### [APIStar ](https://github.com/encode/apistar ) (< = 0.5) { #apistar -0-5 }
**FastAPI**を構築することを決める直前に、**APIStar**サーバーを見つけました。それは私が探していたものがほぼすべて含まれており、素晴らしいデザインでした。
@ -401,7 +401,7 @@ APIStarはTom Christieにより開発されました。以下の開発者でも
## **FastAPI**が利用しているもの { #used -by-fastapi }
### < a href = "https://docs.pydantic.dev/" class = "external-link" target = "_blank" > Pydantic</ a > { #pydantic }
### [Pydantic ](https://docs.pydantic.dev/ ) { #pydantic }
Pydanticは、Pythonの型ヒントを元にデータのバリデーション、シリアライゼーション、 (JSON Schemaを使用した) ドキュメントを定義するライブラリです。
@ -413,11 +413,11 @@ Marshmallowに匹敵しますが、ベンチマークではMarshmallowよりも
データのバリデーション、データのシリアライゼーション、自動的なモデルの (JSON Schemaに基づいた) ドキュメント化の全てを扱えます。
**FastAPI**はJSON SchemaのデータをOpenAPIに利用します 。
**FastAPI**はそのJSON SchemaデータをOpenAPIに取り込みます (それ以外にも多くのことを行います) 。
///
### < a href = "https://www.starlette.dev/" class = "external-link" target = "_blank" > Starlette</ a > { #starlette }
### [Starlette ](https://www.starlette.dev/ ) { #starlette }
Starletteは、軽量な< dfn title = "非同期Python Webアプリケーションを構築するための新しい標準" > ASGI< / dfn > フレームワーク/ツールキットで、高性能な非同期サービスの構築に最適です。
@ -462,7 +462,7 @@ webに関するコアな部分を全て扱います。その上に機能を追
///
### < a href = "https://www.uvicorn.dev/" class = "external-link" target = "_blank" > Uvicorn</ a > { #uvicorn }
### [Uvicorn ](https://www.uvicorn.dev/ ) { #uvicorn }
Uvicornは非常に高速なASGIサーバーで、uvloopとhttptoolsにより構成されています。
@ -476,10 +476,10 @@ Starletteや**FastAPI**のサーバーとして推奨されています。
コマンドラインオプション `--workers` を使って、非同期のマルチプロセスサーバーにできます。
詳細は[デプロイ](deployment/index.md){.internal-link target=_blank} の項目で確認してください。
詳細は[デプロイ](deployment/index.md)の項目で確認してください。
///
## ベンチマーク と スピード { #benchmarks -and-speed }
Uvicorn、Starlette、FastAPIの違いを理解、比較、確認するには、[ベンチマーク](benchmarks.md){.internal-link target=_blank} を確認してください。
Uvicorn、Starlette、FastAPIの違いを理解、比較、確認するには、[ベンチマーク](benchmarks.md)を確認してください。