FastAPIって何?


この記事では、Pythonで効率的かつ迅速なAPIを構築するための最先端フレームワークであるFastAPIをご紹介します。

FastAPIは、型ヒントを活用し、非同期処理をサポートすることで、開発者に高いパフォーマンスとコーディング体験を提供してくれます。

SwaggerやReDocを利用して生成される自動ドキュメンテーション機能も、API開発を効率的かつ迅速に進めるための大事な手助けとなります。

基本的なコーディングと動作確認を通じて、FastAPIがモダンAPI開発における優れた選択肢である理由を解説していきます。

FastAPIって何?

FastAPIは、2018年にSebastián Ramírezによってリリースされました。その後、急速な発展を遂げ、現在はモダンAPI開発のトレンドとして広く認知されているAPIフレームワークで、RESTful APIをサポートしています。

FastAPIは、型ヒントの活用と非同期処理のサポートにフォーカスして、開発者に効率的なコーディングと高いパフォーマンスの双方の実現を目指して開発がすすめられました。

2019年以降は、Pythonコミュニティと連携し、積極的なコミュニティの貢献とフィードバックによってフレームワークはさらに進化を遂げています。

FastAPIのバージョン0.47.0以降では、Swagger UIやReDocといったAPIドキュメンテーションツールのサポートが導入され、APIドキュメントが自動生成可能となりました。

さらに、標準的なPythonのデータベースライブラリを利用しることで様々なデータベースを利用することが可能です。これにより様々なプロジェクトの要求に柔軟で効果的なデータベースの選択が可能となっています。

FastAPIは、現在も継続的な改善が行われており、最新のPythonや関連ライブラリへの対応が維持されています。GitHubを通じて最新情報が公開されており、開発者は素早くアップデートや新機能の導入を行うことができます。

FastAPIを使うメリットとは

FastAPIを使うメリットは、何といっても直感的なコーディングと高パフォーマンスが得られる点です。FastAPIは非同期処理が活用されているため、同時リクエストやリアルタイム処理に対して効率的なレスポンスが可能となります。

Pythonの型ヒントを活用しており、静的型付けによるコードの可読性や保守性が向上します。

Swagger UIやReDocなどで自動生成されたAPIドキュメントを利用することができ、Pythonの型ヒントを活用により静的型付けによるコードの可読性や保守性が向上します。これによりコーディングのバグを大幅に減らすことが可能となります。

例えばDjangoは、包括的なWebアプリケーション開発が可能でAPIサーバの構築も可能ですが、API開発に特化しているFastAPIの方がより適したシーンが多いかもしれません。

FastAPIの簡単な使い方

FastAPIは、Web APIとしてさまざまなHTTPメソッド(オペレーション)をサポートしています。主要なオペレーションは以下の通りです。

HTTPメソッド 概 要
GETリソースを取得します。
データの取得に利用される典型的なメソッドです。
POSTデータの送信や新しいリソースの作成に使用します。
クライアントからサーバーにデータを送信するためのメソッドです。
PUTリソースの作成又は更新に使用します。
指定されたURIに新しいリソースを作成するか、既存のリソースを更新します。
DELETEリソースの削除に使用します。
指定されたURIに存在するリソースを削除します。
PATCHリソースの部分的な更新に使用します。
リソースの一部を更新する場合に利用されることがあります。FastAPI
FastAPIの主要なHTTPメソッドの概要

FastAPIを利用するためには、fastapiとuvicornモジュールをインポートする必要があります。

pip3 install fastapi uvicorn

uvicornは、PythonのASGI(Asynchronous Server Gateway Interface)サーバーを実行するためのモジュールです。ASGIは、非同期なWebアプリケーションやAPIを構築するための標準規格であり、FastAPIはこのフレームワークを使用してWeb APIを実現しています。

ここで簡単なWeb APIを作成してみましょう。FastAPIでリソースを取得(GET)する簡単なコード(main.py)は以下の通りです。

from fastapi import FastAPI
from typing import Optional

app = FastAPI()

@app.get("/")
async def testapi(param1: Optional[str] = None, param2: Optional[int] = None):
    return {
        "param1": param1,
        "param2": param2
    }

上記のコードでは、fastapiモジュールの他にtypingモジュールのOptionalメソッドもインポートしています。Optionalメソッドは、Pythonの型ヒントの一部であり、変数が指定されていない場合は、変数の値にNoneを代入します。

まずはじめにFastAPIをインスタンス化します。

app = FastAPI()

次にデコレータ「@app.get」で関数「testapi」を「”/”」パスに対応させ、非同期でGETリクエストするようにしています。Pythonのデコレータは、簡単に説明すると関数に関数を渡す場合に利用されるのが一般的です。

「Optional[str] = None」や「Optional[int] = None」で型ヒントを設定し、変数の指定がない場合はNoneを代入するようにしています。

戻り値は、クエリパラメータで渡された「param1」と「param2」の値を返してきます。

APIサーバを起動する

先ほど作成したPythonコードをAPIサーバとして実行します。APIサーバは、以下のように実行します。

uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['D:\\.vscode\\test1']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [17940] using statreload
INFO:     Started server process [18272]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

uvicornは、PythonのASGIサーバーを実行するためのモジュールで、非同期なWeb APIを起動することができます。

引数には、FastAPIを記述したPythonコードの名前(main)とFastAPIのインスタンス名(app)を「:」でつなげて指定します。

「–reload」を引数に指定することで、uvicornで実行されたPythonコードに変更があった場合は自動的に変更内容が反映されるようにすることができます。

uvicornは、localhost(127.0.0.1)の8000番ポートがデフォルトでASGIサーバを実行します。ブラウザから、「http://127.0.0.1:8000」にアクセスしてみましょう。

上記のブラウザ画面のように、「param1」と「param2」の値がJSON形式で表示されればFastAPIが正しく起動されています。

次にクエリパラメタを設定して実行してみましょう。URIに「http://127.0.0.1:8000?param1=Hello_API&param2=777」を入力してみます。

クエリパラメータに設定した値がJSON形式で表示されていますね。

では、URIに「http://127.0.0.1:8000?param1=777&param2=Hello_API」を入力したらどうなるでしょうか。

型ヒントで整数型(integer)が指定されているクエリパラメタ「param2」に対して、整数型以外が代入されたためにエラーメッセージが出力されました。

APIドキュメンテーションツール

Swagger UIとReDocはFastAPIは、FastAPIで定義されたAPIエンドポイントやリクエスト・レスポンスの情報を自動的にドキュメント化し、API利用者がわかりやすい形式でAPI仕様書を表示してくれます。

Swagger UIは、/docsパスにアクセスすることでAPI仕様書が表示されます。

Swagger UIサンプル表示画面

ReDocは、/redocパスにアクセスすることでAPI仕様書が表示されます。

ReDocサンプル表示画面

まとめ

いかがでしたでしょうか。

この記事では、PythonのAPI開発を効率的かつ迅速に進めるための最先端フレームワークであるFastAPIについて解説しました。

FastAPIは2018年の登場以来、モダンAPI開発のトレンドとして広く認知され、今もなお積極的な開発が行われています。Python 3.5から導入された型ヒントの活用やuvicornの非同期処理によって、開発者に高いパフォーマンスと直感的なコーディングが実現可能となっています。

FastAPIは、Swagger UIやReDocなどの自動ドキュメンテーション機能により、APIドキュメントの自動生成が可能であり、開発者にとって魅力的な要素となっています。また、標準的なPythonのデータベースライブラリを利用できるため、柔軟なデータベースの選択が可能であり、開発の柔軟性が高くなります。

FastAPIを使用することで、コードの可読性や保守性が向上し、バグの発生を大幅に減少させることが可能です。例えば、包括的なWebアプリケーション開発が可能なDjangoと比較しても、API開発に特化したFastAPIの軽量性が魅力的でり、様々なAPI開発シーンでの利用が期待されます。

FastAPIを利用して効果的なAPI開発を進めてみてください。

参考になれば幸いです。

システムのお悩みについてご相談ください

本サイトの掲載内容に関するお問い合わせは、こちらから承ります。
SOHOのシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。