#backend#go#http#router#middleware
Router, middleware และแผนผัง route
NewRouter (router.go:59) สร้าง chi router ตัวเดียวที่รวมทุก route: กลุ่มแกนกลาง (/auth, /query, /blob, /admin/providers) ที่ต้องมีเสมอ และกลุ่มโมดูล (/api/v1/..., /process, /mcp) ที่ลงทะเบียนเฉพาะเมื่อ ExtraHandlers มี handler นั้นไม่ใช่ nil (router.go:40-57,121). แคตตาล็อก endpoint รายละเอียดของโมดูลอยู่นอกขอบเขตโน้ตนี้ — ที่นี่สรุปโครงและกติกาการป้องกัน.
ทำงานอย่างไร
- ชั้นนอกสุด (ทุกคำขอ) ตามลำดับ
router.go:62-66:RequestID→Recoverer→Timeout(60s)→SecurityHeaders→RequestLogger.SecurityHeadersเรียกsecurity.SetSecureHeaders(middleware.go:18-23) ดู เครื่องมือกลาง platform: docno, sqllit, search, security (Platform utilities).RequestLoggerlog 1 บรรทัด/คำขอ: method, path, status, duration, request_id (middleware.go:26-45) — ไม่ log body/query string.
GET /healthเสมอ (router.go:68);GET /swagger/*เฉพาะเมื่อenv == "development"(:69-71) (การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment)).- กลุ่มแกนกลางลงทะเบียนเสมอ; กลุ่มโมดูลตรวจ
ex.X != nilทีละกลุ่ม. queryWriteGuard=RequireRight(Rights, processhttp.QueryRequiredRight)(router.go:86-89;diส่งRights: identityServiceดู สถาปัตยกรรม Hexagonal และ composition root ของ Go backend (Hexagonal Architecture + DI)).
แผนผัง route
| กลุ่ม | route | หมายเหตุ |
|---|---|---|
/auth |
POST /login, /select-company, /refresh, /logout |
router.go:73-77 (ขั้นตอน login / เลือกบริษัท / refresh / logout (Identity login flow)) |
/auth |
GET /me |
:79-81 |
/query |
POST /list, /limit, /batch |
:90-94,102 (Query Gateway: /query/list, limit, batch, exec, execBatch) |
/query |
POST /exec, /execBatch |
:95-101 (นโยบายล็อกการเขียนผ่าน Query Gateway (Query write policy / lockdown)) |
/blob |
POST /insert |
:105-111 (แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert)) |
/admin/providers |
POST /, GET / |
:114-120 (ทะเบียน Provider แบบไฟล์ JSON (Provider registry)) |
/process และ /api/v1/process |
ชุด endpoint เดียวกัน 2 prefix | :127-209 (engine นอกขอบเขต ดู ภาพรวมกลุ่ม process ของ Backend (Process overview)) |
/api/v1/admin |
providers, users, databases, database-info, main-query, menu-permissions, workspace/* | :213-250 (Admin API สำหรับจัดการ Provider/ผู้ใช้/ฐานข้อมูล/สิทธิ์เมนู (Admin API), Workspace Google: ล็อกอินด้วยอีเมล สร้างบริษัทใหม่ สมาชิก และผูก LINE (Workspace Google API)) |
/api/v1/dashboard |
GET /overview |
:253-255 |
/api/v1/crm |
GET /image, /overview, /activities; POST /activities, /upload |
:260-266 |
/api/v1/ai |
GET /context, POST /chat |
:271-274 |
/api/v1/wms, tms, procure, etax, market, autocare |
endpoint ของโมดูล | :277-325 |
/api/v1/pos |
shift, image + กลุ่ม DeviceOnly / UserOnly |
:328-351 (POS Sync API: เครื่อง POS เชื่อมกับ Account (POS device sync)) |
/api/v1/monitormap |
GET /tile, POST /tile |
:354-360 |
/mcp, /api/v1/mcp |
GET/POST |
:363-366 |
/api/v1/mcp/tokens |
list / create / revoke | :368-373 |
สิ่งที่ควรรู้
Auth(middleware/auth.go:39) อ่านAuthorization: Bearer <token>เรียกVerifyAccessTokenแล้วใส่SessionClaimsลง context (ClaimsFromContext); ล้มเหลวตอบ 401missing or invalid access token(JWT session token และการเพิกถอน (JWT + revocation store)).AdminAuth(adminauth.go:18) ใช้กุญแจADMIN_API_KEYเทียบแบบ constant-time; กุญแจว่าง = ปฏิเสธทุกคำขอ (ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config)).RequireRight(permission.go:62) รับฟังก์ชันที่คืนRightต่อคำขอ —/processใช้RequiredRight(maprouteRightsตาม path),/query/exec*และ/blob/insertใช้QueryRequiredRight(จำแนกตามคำสั่ง SQL) (สิทธิ์เมนูและ middleware RequireRight (Menu rights / permission)).- มี 2 prefix ซ้ำสำหรับ process (
/process/...และ/api/v1/process/...) ลงทะเบียนชุดเดียวกัน — คาดว่าไว้ให้ client เก่า/ใหม่ใช้ได้ทั้งคู่ (ยังไม่ยืนยันเจตนา). /api/v1/crm/imageคือ route จริง (router.go:262) แต่ URL ที่ฝังใน DB ตอน blob insert ขึ้นต้น/api/crm/image(แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert)).
ที่มาในโค้ด
backend/internal/adapter/inbound/http/router.go:40-57—ExtraHandlers.backend/internal/adapter/inbound/http/router.go:59-121— middleware ชั้นนอก, auth, query, blob, admin/providers.backend/internal/adapter/inbound/http/router.go:121-376— กลุ่มโมดูล.backend/internal/adapter/inbound/http/middleware/middleware.go:18-45— headers + logger.backend/internal/adapter/inbound/http/middleware/auth.go:39—Auth.
ดูเพิ่ม
ภาพรวม Backend Go ของ BC Ai Account (Backend overview) · รูปแบบ error และ response ของ API (apperr + response helper) · สิทธิ์เมนูและ middleware RequireRight (Menu rights / permission) · สถาปัตยกรรม Hexagonal และ composition root ของ Go backend (Hexagonal Architecture + DI) · สารบัญ ADR ของ backend (Architecture Decision Records)