以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2025/06/24/221416より取得しました。


FastAPIとuvicornサーバーを使った簡易ロボットサーバー その2:JSONをうける

実際のところ

スクリプト

# ownserver.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import Literal

app = FastAPI()

# リクエストボディのスキーマ定義
class RobotCommand(BaseModel):
    direction: Literal["right", "left", "forward", "backward", "up", "down"]
    distance_mm: float = Field(gt=0, description="移動距離(ミリメートル)")

class CommandRequest(BaseModel):
    cmd: RobotCommand

@app.get("/")
async def root():
    return {"message": "Robot API Server"}

@app.get("/health")
async def health_check():
    return {"status": "ok"}

@app.post("/robot/move")
async def move_robot(request: CommandRequest):
    """
    ロボットを移動させるエンドポイント
    """
    try:
        direction = request.cmd.direction
        distance = request.cmd.distance_mm
        
        # ここに実際のロボット制御コードを書く
        print(f"Moving robot: {direction} by {distance}mm")
        
        return {
            "status": "success",
            "command": {
                "direction": direction,
                "distance_mm": distance
            },
            "message": f"Robot moved {direction} by {distance}mm"
        }
    
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Robot control error: {str(e)}")

動作検証

$ curl -X POST http://localhost:8000/robot/move   -H "Content-Type: application/json"   -d '{"cmd": {"direction": "up", "distance_mm": 25.5}}'
{"status":"success","command":{"direction":"up","distance_mm":25.5},"message":"Robot moved up by 25.5mm"}

ドキュメント

http://localhost:8000/redoc にアクセスすると、API仕様を確認できます
これはFastAPIの標準機能で大変便利なところ




以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2025/06/24/221416より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14