สมอง SML

คลังความรู้ / หลังบ้าน Go

#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 รายละเอียดของโมดูลอยู่นอกขอบเขตโน้ตนี้ — ที่นี่สรุปโครงและกติกาการป้องกัน.

ทำงานอย่างไร

  1. ชั้นนอกสุด (ทุกคำขอ) ตามลำดับ router.go:62-66: RequestID → Recoverer → Timeout(60s) → SecurityHeaders → RequestLogger.
  2. GET /health เสมอ (router.go:68); GET /swagger/* เฉพาะเมื่อ env == "development" (:69-71) (การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment)).
  3. กลุ่มแกนกลางลงทะเบียนเสมอ; กลุ่มโมดูลตรวจ ex.X != nil ทีละกลุ่ม.
  4. queryWriteGuard = RequireRight(Rights, processhttp.QueryRequiredRight) สร้างเฉพาะเมื่อมี Rights (router.go:86-89); ถ้าไม่มี route เขียนจะไม่ถูกคุมสิทธิ์เมนู (ใน 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 Auth :79-81
/query POST /list, /limit, /batch Auth :90-94,102 (Query Gateway: /query/list, limit, batch, exec, execBatch)
/query POST /exec, /execBatch Auth + queryWriteGuard :95-101 (นโยบายล็อกการเขียนผ่าน Query Gateway (Query write policy / lockdown))
/blob POST /insert Auth + queryWriteGuard :105-111 (แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert))
/admin/providers POST /, GET / AdminAuth (X-Admin-Api-Key) :114-120 (ทะเบียน Provider แบบไฟล์ JSON (Provider registry))
/process และ /api/v1/process ชุด endpoint เดียวกัน 2 prefix Auth + RequireRight(routeRights) :127-209 (engine นอกขอบเขต ดู ภาพรวมกลุ่ม process ของ Backend (Process overview))
/api/v1/admin providers, users, databases, database-info, main-query, menu-permissions, workspace/* AdminAuth :213-250 (Admin API สำหรับจัดการ Provider/ผู้ใช้/ฐานข้อมูล/สิทธิ์เมนู (Admin API), Workspace Google: ล็อกอินด้วยอีเมล สร้างบริษัทใหม่ สมาชิก และผูก LINE (Workspace Google API))
/api/v1/dashboard GET /overview Auth :253-255
/api/v1/crm GET /image, /overview, /activities; POST /activities, /upload Auth :260-266
/api/v1/ai GET /context, POST /chat Auth :271-274
/api/v1/wms, tms, procure, etax, market, autocare endpoint ของโมดูล Auth :277-325
/api/v1/pos shift, image + กลุ่ม DeviceOnly / UserOnly ex.Pos.Auth (ตัวพิเศษ) :328-351 (POS Sync API: เครื่อง POS เชื่อมกับ Account (POS device sync))
/api/v1/monitormap GET /tile (ไม่ต้อง login), POST /tile (ต้อง Auth) แยกรายเมธอด :354-360
/mcp, /api/v1/mcp GET/POST ตรวจ token ใน handler เอง :363-366
/api/v1/mcp/tokens list / create / revoke AdminAuth :368-373

สิ่งที่ควรรู้

ที่มาในโค้ด

  • 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 ของ SML 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)