Quick Start
このページでは、最小限のSonolusサーバーを2通りで立ち上げます。
- FastAPI直利用(従来)
- APIRouter組み込み(新仕様)
インストール
bash
pip install sonolus-fastapi1) FastAPI直利用(従来)
py
import time
from fastapi import HTTPException
from sonolus_fastapi import Sonolus
from sonolus_fastapi.backend import StorageBackend
from sonolus_fastapi.utils.context import SonolusContext
from sonolus_fastapi.utils.session import MemorySessionStore
from sonolus_models import (
PostItem,
ServerItemDetails,
ServerInfoAuthenticationButton,
ServerInfoItemButton,
SonolusServerInfo,
)
sonolus = Sonolus(
address="https://example.com", # 返却される source の基準URL
port=8000,
dev=True,
enable_cors=True,
session_store=MemorySessionStore(),
backend=StorageBackend.MEMORY,
)
now = int(time.time() * 1000)
sonolus.items.post.add(
PostItem(
name="example_post",
title="Example Post",
version=1,
author="Author Name",
tags=[],
description="This is an example post item.",
time=now,
thumbnail=None,
)
)
@sonolus.server.server_info(SonolusServerInfo)
async def get_server_info(ctx: SonolusContext):
return SonolusServerInfo(
title="Example Sonolus Server",
description="QuickStart server",
buttons=[
ServerInfoAuthenticationButton(type="authentication"),
ServerInfoItemButton(type="post"),
],
configuration=None,
banner=None,
)
@sonolus.post.detail(ServerItemDetails)
async def get_post_detail(ctx: SonolusContext, name: str):
post = sonolus.items.post.get(name)
if post is None:
raise HTTPException(404, "Post item not found")
return ServerItemDetails(
item=post,
description="Example post detail",
actions=[],
hasCommunity=False,
leaderboards=[],
sections=[],
)
if __name__ == "__main__":
sonolus.run()2) APIRouter組み込み(新仕様)
py
from fastapi import APIRouter, FastAPI
from sonolus_fastapi import Sonolus
app = FastAPI()
api_router = APIRouter(prefix="/api")
sonolus = Sonolus(
router=api_router,
dev=True,
)
app.include_router(api_router)ポイント:
router=...を渡すと、Sonolusルートを既存アプリに統合できます- このモードでは
portやaddressは必須ではありません - ルートは
"/api/sonolus/..."に生えます
source フィールドの挙動
BaseItem.source は以下の仕様です。
- ストレージ(memory/json/database)には保存しません
- レスポンス生成時に動的に上書きします
- 上書き値は
Sonolus.address(未設定時は現在のリクエストURL)
動作確認
standalone モード:
text
http://localhost:8000/sonolus/info
http://localhost:8000/sonolus/posts/example_postrouter モード(prefix=/api の場合):
text
http://localhost:8000/api/sonolus/info