Chapter 02

FastAPIの概要

smithonisan
smithonisan
2021.08.13に更新
このチャプターの目次

FastAPIについて

Pythonの世界では、Ruby on Railsのような大規模WebフレームワークであるDjangoをはじめ、FlaskやBottleといったマイクロフレームワークが古くから人気を博してきました。そこに、期待の新星として登場したのがFastAPIです。

早速ですが、FastAPIの特長を見てみましょう。

  • リクエストとレスポンスのスキーマ定義に合わせて自動的にSwagger UIのドキュメントが生成される
  • 上記のスキーマを明示的に定義することにより、型安全な開発が可能
  • ASGIに対応しているので、非同期処理を行うことができ、高速

FastAPIは様々なケースにおいて活躍します。近年では機械学習の興隆により、Pythonを使った機械学習サービスの提供のためにFastAPIが選ばれることもよくあります。機械学習の処理は、APIとして構築されることの多いpredictionフェイズであっても比較的時間や負荷のかかる処理が多いため、非同期処理による高速性が活かされるでしょう。

一方で筆者は、スタートアップや新規Webサービス立ち上げのケースなど、SPA(Single Page Application)と組み合わせて、バックエンドとして動くWeb APIを作成したい場合に、より強力な力を発揮するのではと考えています。

前述の通り、FastAPIはリクエストとレスポンスのスキーマを定義することになります。これによって、フロントエンドエンジニアが実装の際に利用するドキュメントを簡単に自動生成でき、さらに実際にリクエストパラメータを変更してAPIの呼び出しを試すこともできるのです。

スキーマを先に定義することによってフロントエンドとバックエンド間のインターフェイスを取り決め、それぞれの開発を同時にスタートする方式を、一般に 「スキーマ駆動開発(Schema-Driven Development)」 と呼びます。
FastAPIを使うと、ノウハウや事前知識がなくても、スキーマ駆動開発を違和感なく自然に始めることができます。スキーマ駆動開発によって、フロントエンドとバックエンドをインテグレーションした際の、仕様の勘違いなどによる手戻りが発生するリスクを減らすことができ、ひいては開発スピードを上げることにも繋がります。

Webサービスのバックエンド開発をする場合、開発スピード向上に貢献するだけでなく、その後のフェイズでもFastAPIは力を発揮します。経験の長い方だと思い当たるところがあるかもしれませんが、Webサービスは多数のユーザーに使われるようになってくるとスケーリングの問題に突き当たることがよくあります。

FastAPIは型安全なだけでなく、高速です。

Web開発の世界では、開発のスピードとプロダクトの寿命のトレードオフが問題になることはよくありますが、FastAPIはGoなどの静的型付け言語とも引けをとらないパフォーマンスにより、サービスの拡大期にも十分耐え得るAPIを作成することが可能なのです。

本書では、TODOアプリを例にとって、上記に紹介したFastAPIの魅力を紹介していきます。開発においては経験は重要な要素です。是非写経や、コピー・アンド・ペーストで構いませんので、コードに触れてみてください。FastAPIにおけるWebAPI開発を多くの方に身に着けて頂けることを楽しみにしています。

Flaskとの比較

Flask は2010年から開発されている、Python製軽量Webフレームワーク(マイクロフレームワーク)です。
FastAPIが 公式ドキュメントで説明している とおり、FastAPIも少なからずFlaskの影響を受けています。

Flaskは簡単にAPIを作るためにもとても便利なフレームワークです。しかし、FastAPIはより後発であるがために、上記で説明した、

  • 自動的にSwagger UIのドキュメントが生成される
  • 型安全
  • 高速

というFlaskにはない特長を持っています。

「高速」に関しては、 FastAPI vs Flask のベンチマーク結果がありますので参照してみてください。

https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=query&l=zijzen-sf&f=zhb2tb-zik0zj-zik0zj-zik0zj-zik0zj-zik0zj-zik0zj-ziimf3-zik0zj-zik0zj-zik0zj-cn3