# フレームワーク実装の照合(2026-10-27) 提供された `ese774_frame` のソースコード10本を照合した記録です。ネットワーク通信や実機動作の検証結果ではありません。追跡可能性のため、`source_reference/ese774_frame/` に照合用コピーを保存しています。 ## 自動ディスパッチの仕様 `FastApiServer` は FastAPI の lifespan 内でデバイスを生成し、ルータを構築して登録します。`api_spec=None` の場合は指定された `router_cls`、未指定なら `DeviceRouter` を使用します。`api_spec` が指定されている場合、`router_cls` が必須です。DOBOT の標準構成は自動ディスパッチ方式です。 `DeviceRouter` は `POST /instance/{object_name}/__dispatch__`、`GET /instance/{object_name}/__meta__`、`GET /instance/{object_name}/__property__/{property_name}`、`PUT /instance/{object_name}/__property__/{property_name}` を提供します。自動モードではメソッド別の GET/POST 経路も登録します。ディスパッチ要求のキーは `method`、`args`、`kwargs` のみで、余分なキーは HTTP 422、`method` がない場合は HTTP 400 です。自動モードではカスタムルータのオーバーライドを優先し、その他はデバイスの公開メンバーに委譲します。非公開メンバーおよび `dispatch_exclude` 指定名は動的探索から除外されます。 コルーチン関数は `await` され、同期関数は直接呼び出されます。したがって長時間実行される同期処理は要求処理をブロックする可能性があり、このコードだけではロボットコマンドの並列実行の安全性や非ブロッキング性は保証できません。明示的な HTTP 例外以外は HTTP 500 に変換されます。終了時は `disconnect()` が呼び出し可能なら実行されます。**HTTP応答の完了をロボットの移動完了と同一視してはいけません。** `DeviceProxy` は明示的な登録表に従って同期・非同期クライアントを選択します。登録されたクライアントクラスがない場合はフレームワークのクライアントにフォールバックします。`async_mode=None` は登録時の `default_async_mode`(既定値 `True`)に従い、エイリアスも登録できます。 ## 照合したソース | モジュール | クラス | 関数定義数(メソッドを含む) | |---|---|---:| | `api_server.py` | FastApiServer | 3 | | `adapter.py` | _BytesJsonEncoder | 17 | | `device_router.py` | DeviceRouter | 21 | | `make_pyi_device_router.py` | — | 2 | | `api_spec.py` | ApiSpec | 4 | | `sync_device_client.py` | SyncDeviceClient | 22 | | `make_pyi_device_proxy.py` | — | 2 | | `make_pyi_device_client.py` | — | 15 | | `device_proxy.py` | DeviceProxyEntry | 8 | | `async_device_client.py` | AsyncDeviceClient | 19 | ## 検証範囲 AST構文検査と文書内リンク検査は構造的な整合性の確認であり、サーバ起動、シリアライズ往復、通信、移動完了、安全機能の実証ではありません。`source_reference/` のソースは**照合用**であり、インストール済みパッケージの置換には使用しません。