FastAPI、めっちゃ便利ですよね!
昔はDjango(というかDjango REST Framework)をよく利用しており、Webバックエンドの開発はほぼ全てDjangoだったんですが、今年FastAPIで開発をしてみたらめちゃ開発体験がよく、最近ずっと利用しています。
なんですが、Djangoみたいなフルスタックフレームワークと違って、基本的な設定などは自分で行わないといけないのが結構大変だなーと思っています。
なので!サクッと使ってすぐテンプレートを作りました!
弊社はGIS(地理空間情報)を専門とする会社なので、おまけでPostGISというPostgreSQLの地理空間拡張と、最近とにかく利用しまくっているOpenSearchのコンテナも突っ込んでおきました!
使い方
リポジトリをダウンロードして、その後フォルダ名を変更します。
(フォルダ名は好きな名称で)
git clone https://github.com/nokonoko1203/fastapi-template.git
mv fastapi-template/ fastapi-app
cd fastapi-app
アプリケーションを初期化します。
app
の部分はパッケージ名になるので、ここも自由な名称にしましょう
make init new=app
アプリケーション群を起動します。
make run
まずはFastAPIが立ち上がっていることを確認するためにhttp://localhost:8080/docs
を見てみましょう。
API仕様書が表示されました。
FastAPIはこの機能が特に便利ですよねー!
次にhttp://localhost:5601
に接続し、OpenSearch dashboardを開いてみましょう。
ユーザー名・パスワードはadmin/adminで設定しています。
ログインできたら左上のハンバーガーからサイドバーを開き、一番したのdev toolsをクリックします。
簡単なクエリをすると、ちゃんと動いていることがわかりますね!
詳しくは説明しませんが、FastAPIとの接続もできるようになっています!
api/src/app/services/opensearch.py
from typing import Annotated
from fastapi import Depends, Request
from opensearchpy import AsyncOpenSearch
from sample.config import settings
def get_opensearch(request: Request) -> AsyncOpenSearch:
auth = (settings.opensearch_master_user, settings.opensearch_master_password)
return AsyncOpenSearch(
settings.opensearch_url,
http_auth=auth,
use_ssl=True,
verify_certs=False,
ssl_assert_hostname=False,
ssl_show_warn=False,
)
Opensearch = Annotated[AsyncOpenSearch, Depends(get_opensearch)]
api/src/sample/app.py
from fastapi import FastAPI
from .services.opensearch import AsyncOpenSearch
app = FastAPI()
@app.on_event("shutdown")
async def app_shutdown(es: AsyncOpenSearch):
await es.close()
@app.get("/")
async def hello():
return {"message": "Hello World"}
api/src/sample/config.py
from pydantic_settings import BaseSettings
class _Settings(BaseSettings):
opensearch_url: str = "https://opensearch:9200"
"""OpenSearch の接続URL"""
opensearch_master_user: str | None = "admin"
"""OpenSearch のマスターユーザー名"""
opensearch_master_password: str | None = "admin"
"""OpenSearch のマスターパスワード"""
settings = _Settings()
FastAPIでOpenSearchを触っていくためのパッケージの導入や、設定が完了しているので、すぐにデータの検索・表示などを行うアプリケーションを作成していくことができます!
ぜひご利用ください!