Endpoint ที่ยังไม่ปิด — 35 เส้นที่ audit ว่าไม่มีคนเรียก แต่จงใจเว้นไว้
รายการเส้นที่อยู่ในถัง NONE ของ audit แต่ไม่ถูกปิดด้วย [NotExposed] ในรอบ 10/09 พร้อมเหตุผลรายเส้นและสิ่งที่ต้องทำก่อนจะปิดได้
อัปเดต: 2026-09-10
Endpoint ที่ยังไม่ปิด — 35 เส้นที่ audit ว่าไม่มีคนเรียก แต่จงใจเว้นไว้
เอกสารพี่น้องของ API Inventory · ไฟล์นั้นคือรายการเต็มพร้อมสถานะทุกเส้น ไฟล์นี้ขยายเฉพาะ 35 เส้นที่ยังเปิดอยู่ทั้งที่ audit จัดเป็น NONE เพื่อให้กลับมาแก้ทีหลังได้
รอบ 10/09/2026 ปิดไป 216 เส้น ด้วย [NotExposed] · 35 เส้นนี้ถูกกันออกอย่างตั้งใจ ไม่ใช่ตกหล่น
สรุปตามเหตุผล
| เหตุผล | เส้น |
|---|---|
| audit รอบ 09/09 เจอ caller จริง | 13 |
| แผนแก้ถังไปแล้ว ไม่ใช่ NONE | 6 |
| Sentinel — กันทั้ง service ไว้รอบนี้ | 11 |
| caller อยู่นอก repo ทั้งหมด | 2 |
| webhook จาก Entra | 1 |
| โค้ดไม่ได้ถูก build จริง | 2 |
| รวม | 35 |
audit รอบ 09/09 เจอ caller จริง (13 เส้น)
audit 2026-09-07 บอกว่าไม่มีใครเรียก แต่ scan ซ้ำวันที่ 09/09 เจอ call site จริงในโค้ดปัจจุบัน — ส่วนใหญ่คือฟีเจอร์ที่ merge ลงหลังวัน audit
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| FileManagementService | POST | /file-management/v1/files/upload | audit 09/09 เจอ caller: FE |
| FileManagementService | GET | /file-management/v1/files/{fileId:guid}/download | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/admin/amlo/cases | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/admin/amlo/companies/{companyId:guid}/members | audit 09/09 เจอ caller: FE |
| UserService | POST | /user-service/v1/admin/amlo/companies/{companyId:guid}/unblock | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/admin/amlo/companies/{companyId:guid}/unblock-history | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/admin/amlo/current-generation | audit 09/09 เจอ caller: FE |
| UserService | POST | /user-service/v1/admin/amlo/trigger-sync | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/admin/amlo/unblock-history | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/apps/{app_id}/modes/{mode}/roles | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/users/me | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/users/me/applications/{applicationId:guid}/permissions | audit 09/09 เจอ caller: FE |
| UserService | GET | /user-service/v1/users/me/details | audit 09/09 เจอ caller: FE |
ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องทำอะไร ปล่อยเปิดไว้ถูกแล้ว · ถ้าจะปิดต้องรื้อว่า caller นั้นเลิกใช้จริงหรือยัง
แผนแก้ถังไปแล้ว ไม่ใช่ NONE (6 เส้น)
มติในแผนหลักย้ายเส้นเหล่านี้ออกจากถัง NONE ไปเป็น FE หรือ BE ตั้งแต่ก่อนลงมือ
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| NotificationService | POST | /notification-service/v1/notifications/batch | แผนแก้ถังเป็น FE/BE แล้ว |
| UserService | GET | /user-service/v1/line-connectivity/instances/{id:guid} | แผนแก้ถังเป็น FE/BE แล้ว |
| UserService | POST | /user-service/v1/line-connectivity/instances/{id:guid}/steps/{stepType} | แผนแก้ถังเป็น FE/BE แล้ว |
| UserService | POST | /user-service/v1/line-connectivity/register/start | แผนแก้ถังเป็น FE/BE แล้ว |
| UserService | POST | /user-service/v1/line-connectivity/unsubscribe/start | แผนแก้ถังเป็น FE/BE แล้ว |
| UserService | GET | /user-service/v1/subscriptions/users | แผนแก้ถังเป็น FE/BE แล้ว |
ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องทำอะไรกับ [NotExposed] · ฝั่ง BE จัดการด้วย [ApiExplorerSettings] ของ Lane BE ไปแล้ว
Sentinel — กันทั้ง service ไว้รอบนี้ (11 เส้น)
แผนหลักข้อ 8.3 สั่งให้ทำ Sentinel เป็นตัวสุดท้ายหรือข้ามไปก่อน เพราะผู้เรียกหลายเส้นเป็น browser และ Entra ที่ redirect เข้ามา ไม่ใช่โค้ดใน repo ⇒ static analysis มองไม่เห็นโดยโครงสร้าง
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| SentinelGatewayService | GET | /sentinel/antiforgery-token | audit 09/09 เจอ caller: FE |
| SentinelGatewayService | GET | /sentinel/error | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | POST | /sentinel/idle-logout | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | POST | /sentinel/internal/resolve-session | แผนแก้ถังเป็น FE/BE แล้ว |
| SentinelGatewayService | POST | /sentinel/logout-entra | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | DELETE | /sentinel/sessions | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | GET | /sentinel/sessions | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | GET | /sentinel/sessions/by-email/{email} | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | DELETE | /sentinel/sessions/{sessionId:guid} | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | GET | /sentinel/tenants | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
| SentinelGatewayService | GET | /sentinel/user | แผนสั่งกัน Sentinel ไว้ทำทีหลัง — caller เป็น browser/Entra |
ต้องทำอะไรก่อนจะปิดได้ — ต้องไล่ทีละเส้นว่าใครเรียกจริง โดยดูจาก APIM policy, การ redirect ของ OIDC flow และ log จริง ก่อนตัดสินใจปิด — ห้ามยกลิสต์มาแปะทั้งชุด
caller อยู่นอก repo ทั้งหมด (2 เส้น)
ผู้เรียกไม่ใช่โค้ดในองค์กร จึงไม่มีทางโผล่ใน static scan ไม่ว่า scan กี่รอบ
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| WorkflowService | POST | /callback/onActionChanged | caller อยู่นอก repo (browser/webhook/probe) |
| WorkflowService | POST | /callback/onInit | caller อยู่นอก repo (browser/webhook/probe) |
ต้องทำอะไรก่อนจะปิดได้ — ต้องยืนยันจาก log หรือ config ของระบบต้นทางก่อน ไม่ใช่จากการ grep
webhook จาก Entra (1 เส้น)
Microsoft Entra Custom Authentication Extension เรียกเข้ามาโดยตรง — เป็น external webhook ที่ผูกกับ ระบบ login ไม่ใช่ repo ไหนใน scan
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| NotificationService | POST | /notification-service/v1/auth-extension/email-otp-send | caller คือ Entra Custom Authentication Extension |
ต้องทำอะไรก่อนจะปิดได้ — ปิดไม่ได้จนกว่าจะเลิกใช้ Custom Authentication Extension ตัวนั้น
โค้ดไม่ได้ถูก build จริง (2 เส้น)
route อยู่ในไฟล์ที่ถูก <Compile Remove> ออกจาก build ⇒ ไม่มี action จริงตอน runtime ให้แปะ attribute
| Service | Verb | Route | รายละเอียด |
|---|---|---|---|
| WorkflowService | GET | /TestMediatoR | TestController ถูก <Compile Remove> ที่ WorkFlow01.API.csproj:17 |
| WorkflowService | GET | /test | TestController ถูก <Compile Remove> ที่ WorkFlow01.API.csproj:17 |
ต้องทำอะไรก่อนจะปิดได้ — ไม่ต้องแปะ [NotExposed] · ถ้าจะเก็บกวาดจริงคือลบไฟล์ทิ้ง ซึ่งเป็นคนละงาน
ถ้าจะกลับมาปิดเส้นพวกนี้
- เลือกเส้นที่จะปิด แล้วหา หลักฐานว่าไม่มีคนเรียกจริง จากของที่ static analysis มองไม่เห็น — APIM analytics, log ของ ingress, Postman collection, cronjob, และ config ของระบบต้นทางที่อยู่นอกองค์กร
- แปะ
[NotExposed(Reason = "...")]บน action เท่านั้น ห้ามแปะบน class เพราะจะปิด sibling ทั้ง controller dotnet buildแล้วตรวจว่า diff เป็น insert อย่างเดียว (git diff -- '*.cs' | grep -cE "^-[^-]"= 0) — controller หลายไฟล์มีคอมเมนต์ภาษาไทย การแก้ด้วย text editor ทำ encoding พังเงียบ ๆ ได้โดย build ยังเขียว- deploy dev ก่อน แล้วดูว่ามีอะไรพัง ค่อยขึ้น uat — ทีละ service ไม่ใช่ทีเดียวทั้งหมด
กลไกของ [NotExposed] อธิบายไว้ที่ Package — ปิด endpoint ที่ routing table