実際のところ
スクリプト
# 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の標準機能で大変便利なところ
