サイトアイコン アマチュア無線局JS2IIU

Streamlit応用編 第11回: StreamlitでAPIを作成する方法

こんにちは、JS2IIUです。
Streamlitを使ったアプリケーション開発もいよいよ最終回となりました。今回は、Streamlitを活用してAPIを作成する方法を解説します。具体的には、簡単なRESTful APIの構築と、FastAPIとの統合によるより複雑なAPIアプリケーションの作成方法について説明します。


RESTful APIの構築

API(Application Programming Interface)は、他のアプリケーションとデータをやり取りするための仕組みです。RESTful APIは、HTTPプロトコルを使用してリソースを操作する標準的な方法です。Streamlitは通常、インタラクティブなWebアプリケーションを作成するために使われますが、APIを構築するためにも利用できます。

基本的なRESTful APIの実装

以下に、Streamlitを使って簡単なREST APIを作成する方法を示します。このAPIは、ユーザーからのリクエストを受け取り、対応するデータを返します。

import streamlit as st
import pandas as pd

# ダミーデータの作成
data = {
    "id": [1, 2, 3],
    "name": ["Alice", "Bob", "Charlie"],
    "age": [25, 30, 35]
}
df = pd.DataFrame(data)

# APIエンドポイントの設定
st.write("### API: Get User Data")

user_id = st.number_input("User ID", min_value=1, max_value=3, step=1)

if st.button("Get User Data"):
    user_data = df[df["id"] == user_id].to_dict(orient="records")
    st.json(user_data)

このコードは、ユーザーIDを入力すると、そのIDに対応するユーザーデータをJSON形式で返すシンプルなAPIです。


StreamlitとFastAPIの統合

より高度なAPI機能を実装するためには、StreamlitとFastAPIを組み合わせることが効果的です。FastAPIは、高性能なAPIを簡単に構築できるPythonのフレームワークです。

FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Uvicorn
The lightning-fast ASGI server.

FastAPIとStreamlitの連携方法

次に、FastAPIとStreamlitを統合して、StreamlitアプリケーションでAPIを利用する例を示します。

先にFastAPIをインストールしておきます。 $ pip install fastapi

uvicornもインストールする必要があります。 $ pip install uvicorn

from fastapi import FastAPI
import uvicorn
import streamlit as st
import requests

# FastAPIのインスタンスを作成
app = FastAPI()

# ダミーデータの作成
data = {
    1: {"name": "Alice", "age": 25},
    2: {"name": "Bob", "age": 30},
    3: {"name": "Charlie", "age": 35}
}

@app.get("/user/{user_id}")
def get_user(user_id: int):
    return data.get(user_id, {"error": "User not found"})

# FastAPIのサーバーを別スレッドで実行
def run_api():
    uvicorn.run(app, host="0.0.0.0", port=8000)

import threading
api_thread = threading.Thread(target=run_api, daemon=True)
api_thread.start()

# Streamlitアプリケーション
st.write("### FastAPIと連携したユーザーデータの取得")

user_id = st.number_input("User ID", min_value=1, max_value=3, step=1)

if st.button("Get User Data"):
    response = requests.get(f"http://localhost:8000/user/{user_id}")
    st.json(response.json())

このコードでは、FastAPIをバックエンドとして使用し、Streamlitがフロントエンドとして動作します。ユーザーがStreamlitアプリからユーザーデータをリクエストすると、FastAPIがデータを提供します。

まとめと感謝

これまで11回にわたり、Streamlitを使ったアプリケーション開発の様々なトピックを取り上げてきました。第1回ではキャッシュ機能の活用から始まり、インタラクティブなウィジェットの応用、データのアップロードとダウンロード、レイアウトやテーマのカスタマイズ、認証やセキュリティ、そしてデータベースとの連携など、多岐にわたる内容をカバーしました。

これで全11回のシリーズ連載は終了となります。ここまでお読みいただき、本当にありがとうございました。皆さんのプロジェクトが、今回の連載で得た知識を活用してさらに発展することを願っています。もし今後もStreamlitに関する質問や疑問があれば、ぜひコメントやフィードバックをお寄せください。

それでは、今後も素晴らしいStreamlitアプリを作成していきましょう!73

補足:Streamlit応用編 記事リスト

Streamlit応用編 第1回: キャッシュ機能の活用
https://js2iiu.com/2024/08/28/streamlit-01-cache/

Streamlit応用編 第2回: インタラクティブなウィジェットの応用
https://js2iiu.com/2024/08/29/streamlit-02-widget/

Streamlit応用編 第3回: データのアップロードとダウンロード
https://js2iiu.com/2024/08/29/streamlit-03-download/

Streamlit応用編 第4回: レイアウトのカスタマイズ
https://js2iiu.com/2024/08/30/streamlit-04-layout/

Streamlit応用編 第5回: テーマのカスタマイズ
https://js2iiu.com/2024/08/31/streamlit-05-theme-custom/

Streamlit応用編 第6回: デプロイと共有
https://js2iiu.com/2024/09/01/streamlit-06-deploy/

Streamlit応用編 第7回: 認証とセキュリティ
https://js2iiu.com/2024/09/02/streamlit-07-security/

Streamlit応用編 第8回: データベースとの連携
https://js2iiu.com/2024/09/02/streamlit-08-database/

Streamlit応用編 第9回: 複雑なデータビジュアライゼーション
https://js2iiu.com/2024/09/05/streamlit-09-visualization/

Streamlit応用編 第10回: マルチページアプリの作成
https://js2iiu.com/2024/09/06/streamlit-10-multipage/

Streamlit応用編 第11回: StreamlitでAPIを作成する方法
https://js2iiu.com/2024/09/07/streamlit-11-api/

モバイルバージョンを終了