Skip to content

Volume 11 · API Reference

เล่มนี้รวบรวม API surface ของระบบ VTRC ทั้งหมด — ทุก endpoint, ทุก GraphQL operation, header, error code, และ pattern การเรียก — เพื่อให้สามารถค้นหา signature และพฤติกรรมของ API ได้โดยไม่ต้องเปิด codebase


เล่มนี้คืออะไร

Volume 11 เป็น API reference ครอบคลุม 3 backend services ของระบบ VTRC:

  1. vtrc-api — service หลักที่ frontend ทั้งคู่ยิงเข้ามา (GraphQL + REST)
  2. cu-central-api — service ที่ vtrc-api forward ไป (GraphQL + REST auth)
  3. centralize-api — NestJS facade สำหรับ HRMI MSSQL (REST + Swagger)

เล่มนี้เน้น what (มี endpoint อะไร, signature อย่างไร, return อะไร) มากกว่า how (business logic ทำงานอย่างไร — อยู่ใน Volume 12)


ตัวเลขที่ควรจำ

ตัวเลขค่าที่มา
Backend services3vtrc-api, cu-central-api, centralize-api
รวม GraphQL operations~348265 (vtrc-api) + 83 (cu-central-api)
รวม REST endpoints5230 (vtrc-api) + 5 (cu-central-api) + 17 (centralize-api)
GraphQL subscriptions0ทุก service เป็น Query/Mutation เท่านั้น
vtrc-api typeDefs files44vtrc-api/api/src/typeDefs/
vtrc-api resolver files42vtrc-api/api/src/resolvers/
cu-central-api typeDefs files32cu-central-api/main-api/src/typeDefs/
cu-central-api resolver files27cu-central-api/main-api/src/resolvers/
centralize-api controllers4centralize-api/src/*.controller.ts
centralize-api DTOs19centralize-api/src/dto/
ภาษาที่ใช้JavaScript (vtrc-api + cu-central-api) + TypeScript (centralize-api)
FrameworkApollo Server 2 + Express (vtrc-api + cu-central-api) + NestJS 9 (centralize-api)
API docsSwagger/OpenAPI เฉพาะ centralize-api (/docs)

ภาพรวม 3 services ใน 1 ตาราง

ด้านvtrc-apicu-central-apicentralize-api
ภาษาJS (ESM)JS (ESM)TypeScript
FrameworkApollo 2 + ExpressApollo 2 + ExpressNestJS 9
ประเภท APIGraphQL + RESTGraphQL + RESTREST เท่านั้น
Port8081CODE_DEFAULT 8080 (CLIENT_TARGET ตัวอย่าง 8082)3000
Path หลัก/api/graphql (prod) /api-uat/graphql (UAT)/api/graphql/api/* (global prefix)
DBMariaDB (vtrc + vtrc-centralize)MSSQL (5 connections)MSSQL (2 connections)
AuthJWT + apiKey (6 APP_TYPE)JWT + apiKey (2 levels) + LDAPJWT guard (bypassed)
SourceDB shardingไม่มีมี (per-row column)มี (per-DB union)
Docsไม่มีไม่มีSwagger /docs
Callerfrontend ทั้งคู่vtrc-api (ผ่าน END_POINT_CENTRALIZE)ไม่ยืนยันใน workspace นี้

สไตล์การอ่านเล่มนี้

  • ถ้าสนใจ endpoint เฉพาะ → ไป บท 10.3 (vtrc-api GraphQL) หรือ บท 10.5 (cu-central-api)
  • ถ้าสนใจ auth/headers → ไป บท 10.2
  • ถ้าสนใจ error code → ไป บท 10.7
  • ถ้าสนใจ file upload/download → ไป บท 10.8
  • ถ้าสนใจ forward pattern → ไป บท 10.9

สิ่งที่ Volume นี้ไม่ cover

  • Business logic ของ resolver/service — cover ใน Volume 12
  • DB schema และ model — cover ใน Volume 9
  • Deployment topology — cover ใน Volume 2 และ Volume 13
  • Security vulnerability analysis — cover ใน Volume 10

โครงสร้างบท

บทชื่อคำถามที่ตอบ
10.1API topologyมีกี่ service, transport อะไร, เลือกใช้ตัวไหน
10.2Auth & headers referenceส่ง header อะไร, apiKey ทำงานอย่างไร, JWT อย่างไร
10.3vtrc-api GraphQL catalog265 operations จัดกลุ่ม + signature ตัวอย่าง
10.4vtrc-api REST surface30 endpoints ใน routes.js
10.5cu-central-api GraphQL + REST83 ops + 5 REST auth + SourceDB sharding
10.6centralize-api (NestJS) REST + Swagger17 endpoints, DTOs, @Public bypass, /docs
10.7Error model — 3 services เทียบกันerror code catalog, HTTP status, frontend จัดการอย่างไร
10.8File upload & download + PDF generationUpload scalar vs multer, qpdf-encrypted PDF
10.9Forward/proxy patternvtrc-api → cu-central-api อย่างไร, retry 3 ครั้ง
10.10Scorecard + ปัญหา API surfaceauth coverage, schema typos, hardcoded keys

คำแนะนำการใช้งาน

ตอนเขียน frontend ใหม่

  1. เช็ค บท 10.2 ว่าต้องส่ง header อะไร
  2. ค้นหา query/mutation ที่ต้องการใน บท 10.3 (vtrc-api) หรือ บท 10.5 (cu-central-api)
  3. ดู signature + return type แล้วเขียน code

ตอน debug API

  1. ดู บท 10.7 ว่า error code ที่ได้หมายความว่าอะไร
  2. ถ้าเป็น forward → ดู บท 10.9 ว่า retry ทำงานอย่างไร
  3. ถ้าเป็น file → ดู บท 10.8

ตอนเพิ่ม endpoint ใหม่

  1. ดู pattern ของ service นั้นในบทที่เกี่ยวข้อง
  2. ใช้ helper ที่มีอยู่ (responError, GraphqlCDWithToken, @Public(), ...)
  3. อย่าลืมเพิ่มใน routes.js, typeDefs/index.js, หรือ controller ตามระบบ

หมายเหตุเรื่อง path notation

ทุก file:line reference ในเล่มนี้ใช้ path relative จาก src/ ของแต่ละ service:

ServiceBase path
vtrc-apivtrc-api/api/src/
cu-central-apicu-central-api/main-api/src/
centralize-apicentralize-api/src/

ตัวอย่าง: typeDefs/root.js:4 ในบท vtrc-api หมายถึง vtrc-api/api/src/typeDefs/root.js บรรทัดที่ 4