Python

【入門】PythonのFastAPIの使い方についてわかりやすく解説!

fastapi
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、FastAPIの使い方を解説していきます!FastAPIはPythonでWeb APIを構築するためのフレームワーク!実際にFastAPIを触りながら使い方をマスターしていきましょう!

こんにちは!スタビジ編集部です!

今回は「FastAPI」の使い方について解説していきます。

FastAPIを使うことで簡単にWeb APIを開発することが出来ます。

近年WebアプリではAPIを使うことが多くなっているので、ぜひFastAPIの使い方をマスターしましょう!

ウマたん
ウマたん
当メディアが運営するスタアカの以下のコースでPythonでAPIを利用する方法を解説しています!ぜひ参考にしてみて下さい!

FastAPIとは

FastAPI」について簡単に見ていきましょう。

FastAPIはPythonでWebアプリケーションやWeb APIを開発するためのWebフレームワークです。

PythonのWebフレームワークといえば「Django」や「Flask」が有名ですね。

FastAPIの特徴は主に以下が挙げられます。

・直感的でシンプルな構文なので学習しやすい
・非同期処理をサポートしているので、高速なリクエスト処理を実現
・コードから自動的にAPIのドキュメントを生成する機能を提供
・Pythonの型ヒントを活用して、タイプミスやデータの不整合を検知
・APIのオープンスタンダードに基づき、互換性がある

FastAPIはWebフレームワークの中でもWeb APIの開発に特化しており、そのための機能が充実しています。

ウマたん
ウマたん
シンプルなコードで実装できるので、Pythonを触ったことがある人なら簡単に開発できるよ!

APIについては以下の記事で解説しているので参考にしてみて下さい。

PythonのAPIを利用
【5分で分かる】Pythonを使って様々なサービスのAPIを利用してみよう!当サイト【スタビジ】の本記事では、Pythonを使ってSlackやGoogleのAPIを利用していきます!APIを利用することで非常に様々なことができるので是非試してみましょう!APIを使えるようになると幅が広がりますよ!...

FastAPIを試してみよう

実際に自分の環境でFastAPIを動かしてみましょう。

本記事では”python3.11.8″を利用しています。

事前準備

FastAPIを動かすために必要なツールをインストールします。

まずはFastAPIをインストールします。

pip install fastapi

pipコマンドでインストールできます。

FastAPIではpythonは3.8以上のバージョンが必要になります。

続いてFastAPIを動かすためのASGIサーバーをインストールします。

ASGI(Asynchronous Server Gateway Interface)サーバー“とは、Pythonで書かれたWebアプリケーションやAPIを動かすためのサーバーで、非同期処理をサポートしています。

ASGIサーバーには”Uvicorn“や”Hypercorn“といったものが挙げられます。

pip install "uvicorn[standard]"

こちらもpipコマンドでインストールできます。

デモアプリケーションを確認

始めに”公式ドキュメントのデモ“を実装してみましょう。

main.pyというファイルを作成し、以下のコードを記述します。

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

それぞれ細かく見ていきましょう。

app = FastAPI()

ここではFastAPIクラスのインスタンスを作成し、”app”と定義しています。ここでFastAPIアプリケーションが作成されます。

@app.get("/")
def read_root():
    return {"Hello": "World"}

「@app.get(“/”)」はFastAPIで使用されるデコレーターの一つで”/”ルートへのGETリクエストを処理するための関数を指定しています。

ここでは、read_root関数が定義され、「{“Hello”: “World”}」と返すようにしています。

FastAPIではこのデコレーターで修飾された関数を”パスオペレーション関数“と呼びます。

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

ここでも同様にデコレーターとパスオペレーション関数を定義しています。

read_item関数ではint型の”item_id”とstr型の”q”いう引数を受け取ります。

“item_id”はルートにも記載があり、パスのパラメータを想定しています。

“q”はクエリパラメータを想定しています。

クエリパラメータとはURLの末尾に”?”の後ろに続く形でキーと値のペア形式で渡されるパラメータです。

例としては”~/item/1?q=example”のようなイメージで、デフォルト値は”None”となっています。

ウマたん
ウマたん
HTTPリクエストを受け取って、結果を返すデモが簡単に実装できる!

デモアプリケーションを動かしてみる

実際にデモアプリケーションを動かしてみましょう。

uvicorn main:app --reload

uvicornでmain.pyのFastAPIアプリケーションである”app”を起動します。

–reloadオプション“はコードの変更があるのサーバーが再起動する設定になります。

ブラウザでローカルホストの8000ポート(http://127.0.0.1:8000)にアクセスすると「{“Hello”: “World”}」と表示されます。

fastapiルートパス(”/”)へのリクエストに対してread_root関数が動いているのがわかりますね。

では、ここで受け付けるパスを変えてみます。

@app.get("/hello")
def read_root():
    return {"Hello": "World"}

main.pyを上記のように変えて保存します。

すると先ほどの画面が以下のように変わります。

fastapiルートパス(”/”)への処理が定義されていないため、FastAPIで用意されているエラー文が返ってきました。

指定した”/hello”のパスでアクセスすると先ほどと同じように「{“Hello”: “World”}」が表示されます。

fastapi

続いてread_item関数の動きも見ていきましょう。

fastapi

“item_id”に1を入れたURLを実行すると、“item_id”に1が”q”はデフォルトの”null”(Pythonの”None”はJsonでは”null”)が表示されます。

では、クエリも入れたURL(http://127.0.0.1:8000/items/1?q=example)を実行します。

fastapi

“q”に設定した”example”が入って表示されているのが確認出来ました。

ウマたん
ウマたん
ルール通りに結果が返ってくることがわかるね!

APIドキュメントを確認する

FastAPIではコードから「自動対話型のAPIドキュメント」を生成してくれます。

ブラウザから”http://127.0.0.1:8000/docs”にアクセスすると、生成されたAPIドキュメントを確認できます。

fastapi

APIドキュメントはSwagger UI“と呼ばれるWeb APIの仕様を視覚的に確認・操作するためのツールで作成されています。

この画面ではAPIの動作を確認してみましょう。

“Read Item”のタブを開き、”Try it out”をクリックします。

fastapi

下記のように、パラメータを設定して”Execute”ボタンを押すと、APIを実行することが出来ます。

fastapi

リクエストURLの内容と実行結果が返ってきます。

fastapi
ウマたん
ウマたん
自動生成されるAPIドキュメントでUI上でAPIの動作を確認できるのは便利!

FastAPIでイベント管理APIを作ってみよう

FastAPIを使ってWeb APIを作ってみましょう。

今回は以下の機能を持ったイベント管理をするAPIを作っていきます。

・Json形式でイベント情報を受け取る
・イベントごとにidを割り振り、idに応じてイベント情報を返す
・指定されたidのイベントがない場合はエラー文を返す

ではそれぞれ見ていきましょう。

イベント情報を受け取る

まずは、イベントのデータモデルを定義します。

event.pyファイルを作成し、”BaseModel”クラスを継承した”Event”クラスを定義します。

from pydantic import BaseModel
from datetime import datetime

# イベントを定義
class Event(BaseModel):
    id: int
    title: str
    datetime: datetime
    location: str
    description: str

pydanticのBaseModel“クラスではモデル内の変数を型で指定できます。

ここでイベントに必要な変数を定義します。

イベントを受け取る部分を実装します、main.pyを以下のように修正します。

from fastapi import FastAPI, HTTPException
from fastapi.responses import RedirectResponse
from event import Event

app = FastAPI()

# イベントデータを格納するリスト
events_db = []
event_id_counter = 0

#イベントを作成する
@app.post("/events/")
def create_event(event: Event):
    global event_id_counter
    event_id_counter += 1
    event.id = event_id_counter
    events_db.append(event)
    return {"message": "イベント作成", "event": event}

FastAPIのHTTP POSTメソッドで”/events/”に送られたデータの処理を定義します。

creat_event関数で送られたEventモデル形式のデータをリストに追加します。

また、リストに追加する前にイベントごとにidを更新して、idからデータを取ってこれるように処理を行っています。

イベント情報を取得する

main.pyに作成したイベント情報を取得する処理を追加していきましょう。

#rootパスへのGETリクエストが実行されたら"/events/"に転送する
@app.get("/")
def root():
    return RedirectResponse(url="/events/")

#すべてのイベントを取得する
@app.get("/events/")
def get_all_events():
    return events_db

#特定のイベントを取得する
@app.get("/events/{event_id}")
def get_event(event_id: int):
    for event in events_db:
        if event.id == event_id:
            return event
    raise HTTPException(status_code=404, detail="イベントはありませんでした")

デモアプリと同様にGETリクエストの処理を定義しています。

FastAPIでは起動時に”/”が呼び出されるので、”/events/”に転送する処理を記載しています。

get_event関数ではパスのidに紐づいたイベントをリストから検索し、当てはまったイベント情報を返しています。

また、当てはまらない場合はFastAPIの”HTTPException“を使用して、HTTPエラーとして404を返す設定をします。

イベント情報を送信する

HTTP POSTリクエストを送信できるようにリクエスト用のコードを実装します。

今回は”event1.json”、”event2.json”というファイルを作り、request.pyでイベント情報のリクエストを送信するようにします。

event1.jsonファイルの中身は以下のようにしました。”Event”クラスで定義したものと同じ形式にします。

{
    "id": 1,
    "title": "ミーティング",
    "datetime": "2024-04-01T10:00:00",
    "location": "Zoom",
    "description": "進捗確認"
}

続いて、リクエストを送信する”request.py”を見ていきます。

import requests
import json

# JSONファイルからイベント情報を読み込む関数
def load_event_data(file_name):
    with open(file_name, "r") as file:
        return json.load(file)

# 各JSONファイルからイベント情報を読み込み、リクエストを送信する
for file_name in ["event1.json", "event2.json"]:
    # イベント情報を読み込む
    event_data = load_event_data(file_name)
    
    # POSTリクエストの送信
    response = requests.post("http://localhost:8000/events/", json=event_data)

    # レスポンスの確認
    print(response.status_code)
    print(response.json())

処理としてはJsonファイルを読み込んで、POSTリクエストを送信するシンプルなものです。

PythonでHTTPリクエストを送信する際は”requestsライブラリ“を利用すると便利です。

動作確認

では実際に動かしてみます。

uvicorn main:app --reload

デモアプリでは”http://127.0.0.1:8000″にアクセスしていましたが、今回は”/”のURLは”/events/”にリダイレクトするように設定しています。

fastapi

イベントデータがないので、空の状態が表示されます。

イベント情報を登録していきましょう。request.pyを実行します。

python3 request.py

再度”/events/”にアクセスすると、イベントが登録されていることがわかります。

fastapi

また実装通り、URLにidを指定するとidに応じてイベントを抽出し、範囲外のidの場合はエラー文を返しています。

fastapi

最後にAPIドキュメントも見ていきましょう。

ここではPOSTリクエストの動作も確認できます。

fastapi

“/events/”を見るとイベントが追加されていることがわかります。

fastapi
ウマたん
ウマたん
APIを通じて、データの登録から取得までを確認できた!

DBと組み合わせるとより複雑なデータの処理が出来るから試してみよう!

FastAPI まとめ

FastAPIの使い方を見ていきました。

FastAPIの特徴をおさらいすると以下です。

・直感的でシンプルな構文なので学習しやすい
・非同期処理をサポートしているので、高速なリクエスト処理を実現
・コードから自動的にAPIのドキュメントを生成する機能を提供
・Pythonの型ヒントを活用して、タイプミスやデータの不整合を検知
・APIのオープンスタンダードに基づき、互換性がある

FastAPIを使うと簡単にWeb APIの処理を記述できることが分かったと思います。

ウマたん
ウマたん
FastAPIを使って、いろんなAPIを作ってみよう!

本記事を通してアプリ開発や機械学習をもっと勉強したいと思った方は、当メディアが運営する教育サービス「スタアカ(スタビジアカデミー)」の講座をチェックしてみてください。

AIデータサイエンス特化スクール「スタアカ」

スタアカトップ
【価格】ライトプラン:980円/月
プレミアムプラン:98,000円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組み合わせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!

Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら