インプルの井上です。本日はPythonのフレームワークFastAPIをご紹介いたします。
動的型付け且つインタープリタ言語であるPythonにおいて型安全で高速に処理されるFastAPIは、
今後さらに人気度が高まるのではないかと個人的に期待しております。
是非ご参考ください。
FastAPIとは?
FastAPIはPythonでRESTful APIを構築するための最新のWebフレームワークです。
RESTful API説明:https://ramble.impl.co.jp/2886/
2018 年に初めてリリースされて以来、使いやすさ・スピード・堅牢性の3点が開発者達に評価され、
近年急速に人気を伸ばしております。以下はPythonフレームワークのGitHub Starsの推移です。
画像を見ていただくだけでもFastAPIの評価度・注目度の高さがわかるかと思います。
FastAPIの特徴
- リクエストとレスポンスのスキーマ定義に合わせて自動的にSwaggerUIのドキュメントが生成される
- 上記のスキーマを明示的に定義することにより、型安全な開発が可能
- ASGIに対応しているので、非同期処理を行うことができ、高速
上記の特徴からFastAPIは様々なケースにおいて活躍いたします。近年では機械学習がトレンドとなって
いるため機械学習サービスに取り入れるケースも多いそうです。個人的にはWeb APIの作成にFastAPI
を選択するのが一番力を発揮できるのでは無いかと考えております。
Swagger UIのドキュメント自動生成
FastAPIの特徴としてリクエストのレスポンスとスキーマを定義することとなるのですが、
これによってフロントエンドエンジニアが実装時に利用するドキュメントが自動生成され、
さらにAPI自体を試すこともできます。ドキュメントが生成されることで
フロントエンド・バックエンド間での仕様の勘違いを防ぐことができ、開発スピードの向上に繋がり
ます。APIの仕様が違って手戻りという状況はエンジニアにとっては結構あるあるなのかなと
思っているのでこの機能は助かりますね。以下はSwagger UIドキュメントのサンプルです。
型安全
Pythonは動的型付け言語です。しかし、「型ヒント」を使って関数のシグネチャなどに型を
付与することができます。
型ヒント説明:https://ramble.impl.co.jp/6193/
シグネチャ説明:https://zenn.dev/t_kitamura/articles/90bc98a3787044
そして、FastAPIでは依存するPydanticというライブラリによってこの型ヒントを利用した
APIの入出力バリデーションを行っております。以下Pydanticのバリデーションサンプルです。
クラス内の型を変更
class Task(BaseModel):
id: int
- title: Optional[str] = Field(None, example="コーヒーを入れる")
+ title: Optional[bool] = Field(None, example="コーヒーを入れる")
done: bool = Field(False, description="完了フラグ")
Swagger UIでAPIをコールし、コンソールを確認すると
pydantic.error_wrappers.ValidationError: 1 validation error for Task
title
value could not be parsed to a boolean (type=type_error.bool)
とValidationErrorを起こしているのがわかります。
高速
FastAPIはDjango、Flask、Bottleと比較しても圧倒的に高速です。Node.jsやGo言語に匹敵する
高速なアプリケーションを開発できるとも言われており、Pythonフレームワークの中では
最も高速です。以下の図は各フレームワークの速度を表した図になリます。
上の図を見るとFastAPIの速度がPythonフレームワークの中で最も速いことがわかります。
このパフォーマンスにより、サービスの拡大期にも十分耐え得るAPIを作成することが可能となります。
最後に
いかがでしたでしょうか?ざっと特徴を読んだだけでもFastAPIに可能性を感じてきません
でしょうか?今後はFastAPIを使用した処理も記事として載せようと思っているので、
その際も読んでいただけると幸いです。