はじめに
この記事では、PythonのWebフレームワークとしてAPI開発をする際に使用されているFastAPIについて解説しています。
最小のAPI構成を作り、POSTでデータを送信し、GETで取得するところまでをデモソースにて体系的にFastAPIの基礎的な使い方を学習、理解できるようにしています。
FastAPIの基本構造を理解する一助になればと思います。
現在、Pythonの自己学習兼アプリ開発をしているのでアウトプットとして実施したことを記載していきます。 このQiitaシリーズでは、アプリ開発のプロセスを通して学んだ技術や実装の工夫を、実践ベースで共有してます。
前回→【Python入門 #1】Python仮想環境の整え方(venv/poetryの使い分け)
本記事の対象者
- FastAPI自体を学びたい方
- FastAPIを使用した開発を実施する方
- PythonでのAPI開発がはじめての方
開発環境
- Python 3.13.2
- VScode 1.101.2
- FastAPI 0.116.0
FastAPIとは?
FastAPIは、Pythonで書かれた軽量かつ高性能なWeb APIフレームワークです。
基本的なメリットとして、高速な実行速度とSwagger UIによる自動生成(エンドポイントの確認が簡易的に実施できる)等もあり使用するうえでもメリットが大きいフレームワークになります。
また、実際に使用してみた感覚としてシンプルな構造をしており初心者にもある程度取り組みやすいと感じました。ただ開発の基本的な知識がない場合は、少し苦労する部分はあるかなと思います。
FastAPI公式ドキュメント
他のAPIフレームワークとの比較を参考として記載します。
フレームワーク | 主な特徴 | 難易度 |
---|---|---|
Flask | 軽量で柔軟。構成は自由度が高いが手動が多い | 初級〜中級 |
Django | フルスタック。管理画面や認証機能が充実 | 中級〜上級 |
FastAPI(今回) | 高速・型安全・非同期対応。自動ドキュメント付き | 初級〜中級 |
FastAPIの構築手順
【前提条件】:仮想環境の構築とPythonのインストールが完了した状態にしてください。
また、今回のライブラリ管理はPoetryを使用しています。
詳細については、こちらを確認ください。
→【Python入門 #1】Python仮想環境の整え方(venv/poetryの使い分け)
ライブラリ(FastAPI)のインストール
今回は、Poetryを利用しているため下記のコマンドにて実行しています。
poetry add fastapi uvicorn
venv + pipの場合
以下のコマンドでインストールします。
pip install fastapi uvicorn
※FastAPIと同時にインストールしているuvicorm
についてはASGI (Asynchronous Server Gateway Interface) に準拠したPython製のWebサーバーで、FastAPIを実行するために必要なアプリケーションサーバーです。この後、APIの実行結果を確認する際必要になります。
最小のFastAPI構成
環境の準備ができたところで実際にFastAPI構成を使用して動きの確認を行っていきます。
基本的な構成として、POST(ユーザ操作によるデータ送信)→GET(送信されたデータへの応答)を実施するような動きになります。
開発をする上で、基本となる動きにもなるので一度実施しておくことで今後の開発にもプラスになるかなと思います。
【サンプルコード】
Pythonの仮想環境へmain.pyのソースファイルを作成し実際に試しています。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
data_store = []
class Item(BaseModel):
name: str
value: int
@app.post("/items")
def create_item(item: Item):
data_store.append(item)
return {"message": "追加しました"}
@app.get("/items")
def read_items():
return data_store
それぞれの部分について内容を説明していきます。
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi import FastAPI
: アプリ本体を構築するためのクラスを参照しています。
from pydantic import BaseModel
: リクエストのデータ型(バリデーション含む)を定義するためのPydanticの基底クラスを参照しています。
app = FastAPI()
FastAPIインスタンスを生成。この app がアプリケーションのエントリーポイントになります。
data_store = []
一時的なメモリ上のデータ保存リストになっており簡易的にDBのような扱いになります。
class Item(BaseModel):
name: str
value: int
postやgetを実施した際にリクエストで受け取るデータ構造(バリデーション付き)を定義しています。
@app.post("/items")
def create_item(item: Item):
data_store.append(item)
return {"message": "追加しました"}
/items にPOSTリクエストが送られると呼び出される関数です。
受け取った item を data_store に追加し、「追加しました」というメッセージを返すします。
@app.get("/items")
def read_items():
return data_store
/items にGETリクエストが送られると、今までにPOSTされたすべてのデータをdata_store(リスト)として返します。
処理の流れ
- 1.POST /items にデータを送信(例:{"name": "test", "value": 123})
- 2.create_item 関数が呼ばれて data_store に保存
- 3.GET /items を呼ぶと、保存された全データを返す
実際の挙動を確認
実際のAPIの動きを画面表示で確認することができます。
それが、先ほどFastAPIと一緒にインストールしたuvicorn
です。
まずは、起動させる必要があるため下記のコマンドを実行してください。
uvicorn main:app --reload
実行されるとVScodeのターミナル上にINFO:~の列がいくつか表示されるようになります。
実行の確認ができたらURLを検索します。
http://127.0.0.1:8000/docs
※FastAPIの特徴の一つである、Swagger UIが/docsに自動生成されます。
エンドポイントやリクエストボディの構造をコードから生成してくれるので、テストや共同開発に大変有用です。
1. /docsをURL検索
http://127.0.0.1:8000/docs の検索に成功すると下記の画像のような画面が表示されます。
この画面上でAPIの動作について視覚的に確認することが可能になります。
2. POSTでデータをサーバ側で送信する
まずは、下記の矢印にあるドロップダウンリストを表示します。
開いた状態で「Try it out」ボタンを押下します。
ParametersタブのEdit valueに記載されいるnameにはstring、valueにはintとして任意の文字を入力します。
入力後は青色ボタンの「Execute」を実行しデータをサーバ側へ送信します。
成功するとサンプルコードのPOSTにあるreturn {"message": "追加しました"}
がサーバ側から返されてきます。そのデータは下記の位置に記載されています。
3. GETでデータを受信する
次にPOSTで先ほどサーバ側へ送ったデータを画面側で取得し表示します。
まずは、下記の矢印にあるドロップダウンリストを表示します。
その後、青色ボタンの「Execute」を押下します。
実行すると下記のようにPOSTでサーバ側へ送信したデータを取得できます。
4. 同じ手順2~3を再実行した場合
データの状況がわかりやすいように手順2~3を再度実施しました。
下記のように"value":6
が追加されていると思います。
このように、POSTでサーバ側へ送信しデータをdata_store = []
へ追加再度データを受信し表示させるとこのような形で取得することが可能になります。
まとめ
今回は、POST→GETの最小API構成で基本的な動きを確認しました。実際の開発でもこのように画面とサーバ側へデータのやり取りを頻繁に行うため色々と応用を聞かせて行けるかなと思います。
また、FastAPIの書き方もそこまで難しくはないため初心者にも扱いやすいライブラリに感じました。
ぜひ、実際の開発や勉強の一助として試しに動かして使い倒してください。