4B WebApi 第一版實作與 API / DB 驗收紀錄

返回

4B WebApi 第一版實作與 API / DB 驗收紀錄

本文件承接 4B WebApi contract 草案 / 實作前確認表4B WebApi 決策確認紀錄,記錄 4B 最小 WebApi 第一版的實作範圍、API 測試、DB 非破壞性驗收與仍需停止的項目。

本次驗收不代表同意建立 ServiceHost、Plugin Loader、外部 DLL 載入、認證授權套件、Swagger、正式部署設定、正式 DB DDL、正式 Apply 或真實硬體控制。

0. 驗收狀態

項目內容
文件狀態已完成
整理日期2026-06-06
對應階段第四階段 4B WebApi
程式 repohs-device-control-template
程式 branchpoc/nmodbus-tcp
程式 commit9527773 新增 4B WebApi 第一版與驗收測試
GitHub ActionsNotify docs repo status run 27055408505,completed / success
本次定位最小 WebApi 第一版,負責 HTTP 邊界與 Application contract mapping
本次驗收結論通過;4B WebApi 第一版可作為後續 4C ServiceHost contract 前的 WebApi 基準

1. 程式實作範圍

類型檔案 / 內容說明
SolutionHS.DeviceControl.sln掛入 WebApi 與 WebApi.Tests。
WebApi 專案src/HS.DeviceControl.WebApi/HS.DeviceControl.WebApi.csprojnet5.0,引用 Application / Core / Adapters 作為 host composition root。
啟動入口Program.csStartup.cs不加 Swagger / auth / 部署設定;預設使用 in-memory task store、mock device adapter 與 mock schema inspector。
ControllersHealthControllerTasksControllerDevicesControllerSchemaController僅處理 HTTP request / response 與 Application service mapping。
API DTOTaskStartApiRequestTaskCancelApiRequestSchemaPreviewApiRequestApiErrorResponse錯誤回應不暴露 exception stack trace 或敏感資訊。
API 測試tests/HS.DeviceControl.WebApi.Tests/WebApiControllerTests.cs使用 fake Application service 驗證 route mapping、HTTP status 與停止線。

2. 第一版 route 驗收

MethodRoute驗收結果備註
GET/healthHTTP 200回傳 Application health 摘要,不含 secret。
POST/api/tasksHTTP 202建立 in-memory task request,回傳 TaskIdQueued
GET/api/tasks/{taskId}HTTP 200可查回剛建立的 task 狀態。
GET/api/devices/{deviceId}/statusHTTP 200使用 mock adapter read-only status,不呼叫 Execute()
POST/api/schema/previewHTTP 200使用 mock inspector 產生 ManualApplyPreview;canApply=falseddlExecutionAllowed=falseddlExecuted=false

3. 驗證紀錄

驗證項目指令 / 方法結果
WebApi testsdotnet test tests/HS.DeviceControl.WebApi.Tests/HS.DeviceControl.WebApi.Tests.csprojPassed:7 passed / 0 failed / 0 skipped。
Solution testsdotnet test HS.DeviceControl.sln --no-restorePassed:475 passed / 0 failed / 0 skipped。
DB 非破壞性測試Solution tests 中 HS.DeviceControl.Infrastructure.MySql.TestsPassed:89 passed;未啟用真實 DB manual gate,未執行 DDL / ALTER / Apply。
本機 API 啟動dotnet run --no-build --project src/HS.DeviceControl.WebApi -- --urls http://127.0.0.1:5097WebApi 可啟動,驗收後已停止背景程序。
Schema preview 安全旗標本機 POST /api/schema/preview回傳 canApply=falseddlExecutionAllowed=falseddlExecuted=false,只產生 SQL preview 字串。
污染掃描rg 掃描 source/docs/json/html/txt/log,排除 bin/obj原始碼與文件範圍未找到污染字串。
diff checkgit diff --check無 whitespace error;僅有 LF/CRLF 提醒。
Push 後 Actionsgh run list --repo Hongsen-tw/hs-device-control-template --branch poc/nmodbus-tcprun 27055408505 completed / success。

4. DB 驗收邊界

分類本次結果
自動化 DB 相關測試已透過 solution tests 跑過 Infrastructure.MySql 測試 89 筆。
真實 DB 連線未執行;未要求密碼、Token、IP、Port 或 connection string。
DDL / ALTER / Apply未執行;WebApi 只提供 preview endpoint。
Schema preview使用 mock inspector;只產生 dry-run / manual preview,不修改資料庫。
後續真實 DB read-only preview仍需另行確認測試 DB、連線資訊、AllowRead 與操作窗口。

5. 完成判定

判定項結果
4B WebApi 專案建立通過
Route / DTO / error response 第一版通過
API 測試通過
本機 API 啟動驗收通過
DB 非破壞性驗收通過
ServiceHost 停止線維持,未建立
Plugin Loader 停止線維持,未建立
正式 DB DDL / Apply 停止線維持,未執行

6. 剩餘風險與限制

7. 建議下一步

建議將本文件 repo stage / commit / push,查 Cloudflare Pages 部署後,再進入 4C ServiceHost contract 草案 / 實作前確認。4C 開始前仍需先確認 ServiceHost lifecycle、啟停方式、Adapter 生命週期、Log / Health / Trace 與部署停止線。