All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 52s
3.1 KiB
3.1 KiB
trigger
| trigger |
|---|
| always_on |
Backend API Specification (api-rules.md)
🚀 1. 目標範圍與分類
本系統 API 分為兩大類,遵循不同的設計慣例:
- Admin/Web API (
/api/v1/...): 供後台管理介面、APP UI 使用。遵循標準 RESTful 與 JSON 結構。 - Machine IoT API (
/api/app/...): 供販賣機、計時器等硬體端點使用。需相容既有 PDF 規格(如 B010, B600),欄位命名多為req1,req2或特定縮寫。
🔐 2. 認證與安全性
- Admin API: 採用 Laravel Sanctum (Session/Token) 認證。
- Machine IoT API:
- 核心機制: 必須在 Header 帶入
Authorization: Bearer <api_token>進行身份驗證。 - Phase 1 (兼容模式): 若為相容既有機動硬體,可暫時接受 Request 包含
key欄位,但後端應過渡至 Bearer 驗證。 - 安全性強化: 改用每台機台專屬的
api_token(透過 B010 初始化或派發),並配合serial_no(即workid) 進行資料歸屬權驗證。
- 核心機制: 必須在 Header 帶入
- 傳輸安全: 必須強制使用 HTTPS。
📦 3. 回應格式規範
3.1 標準回應 (Admin/Web API)
{
"success": true,
"code": 200,
"message": "OK",
"data": { ... }
}
3.2 IoT 指令回應 (B010/B055 等)
機台端通常透過 response 的 status 欄位或特定的 message 字串來執行動作:
- 成功但有指令:
{"status": "49", "message": "reload B017"} - 純資料回傳: 直接返回對象陣列或 PDF 定義的欄位。
🛠️ 4. 主要 Endpoints 與命名慣例
4.1 管理類 (Admin UI)
GET /api/v1/users: 管理員清單GET /api/v1/machines: 機台清單PUT /api/v1/machines/{id}: 更新機台參數- 遵循 kebab-case 路由與 snake_case JSON 欄位。
4.2 終端類 (IoT / Machine) — 須嚴格遵守 PDF 規格
- API 識別碼 (workid): URL 中的
{workid}參數固定為該 API 的功能代碼 (如B010,B017,B600),不隨機台改變。 - 機台識別方式:
- Header: 透過
Authorization: Bearer <api_token>識別。 - Request Body: 透過
machine或serial_no等欄位識別具體機台。
- Header: 透過
- 主要 Endpoint 範例:
- 心跳上報 (B010):
POST /api/app/machine/status/B010 - 交易回傳 (B600):
POST /api/app/B600(Body 欄位req2為機台編號) - 貨道庫存 (B017):
POST /api/app/machine/reload_msg/B017 - 遠端出貨 (B055):
POST /api/app/machine/dispense/B055
- 心跳上報 (B010):
⚡ 5. 高併發處理與隊列
為了系統穩定性,以下 API 嚴禁直寫資料庫,必須進入 Redis Queue 異步處理:
- B010: 心跳上傳(每 5-10 秒一次)。
- B600 / B602: 交易與出貨紀錄。
- B220: 零錢機庫存變動。
- B710: 計時器狀態同步。
後端應立即回傳 202 Accepted 或業務定義的成功碼,由 Job 背景完成數據持久化。
📄 6. 交付與文件
- OpenAPI: 應區分
admin.yaml與iot.yaml。 - Postman: 提供帶有環境變數(機台金鑰、Base URL)的 Collection。