# tRPC คืออะไร? คู่มือสร้าง Type-Safe API ด้วย tRPC กับ Next.js สำหรับนักพัฒนา SME ปี 2026
ในยุคที่การพัฒนาเว็บแอปพลิเคชันด้วย TypeScript กลายเป็นมาตรฐาน นักพัฒนา SME ไทยหลายคนยังคงพบปัญหาเดิมซ้ำๆ นั่นคือ "API Type Mismatch" — เมื่อ Backend ส่งข้อมูลในรูปแบบหนึ่ง แต่ Frontend รับไปใช้อีกรูปแบบหนึ่ง จนเกิด Bug ที่หาสาเหตุได้ยาก
tRPC (TypeScript Remote Procedure Call) คือ Library ที่ถูกออกแบบมาเพื่อแก้ปัญหานี้โดยตรง ด้วยแนวคิดที่เรียบง่าย: ให้ Frontend และ Backend ใช้ TypeScript Type เดียวกัน โดยไม่ต้องเขียน API Schema แยกต่างหาก
บทความนี้จะพาคุณทำความเข้าใจ tRPC ตั้งแต่พื้นฐาน วิธีตั้งค่าใน Next.js 15 และเหตุผลว่าทำไมธุรกิจ SME ที่ใช้ TypeScript ควรพิจารณา tRPC แทน REST API แบบเดิม
tRPC คืออะไร? หลักการพื้นฐานที่ต้องรู้
tRPC ย่อมาจาก TypeScript Remote Procedure Call เป็น Library ที่ช่วยให้คุณสร้าง API ที่มี Type Safety แบบ End-to-End หมายความว่า ทั้งฝั่ง Server และ Client ใช้ TypeScript Types เดียวกัน 100% โดยไม่ต้องเขียน Code ซ้ำ
หลักการสำคัญของ tRPC:
สิ่งที่ทำให้ tRPC แตกต่างคือ ไม่มี Code Generation — TypeScript อนุมาน Type อัตโนมัติจาก Server ไปยัง Client ผ่าน Generic Types ทำให้เมื่อคุณเปลี่ยน Schema ใน Server, Editor จะแสดง Error ใน Client ทันที
ทำไมธุรกิจ SME ไทยถึงควรใช้ tRPC ในปี 2026?
สำหรับทีมพัฒนาขนาดเล็กที่ต้องทำงานเร็วและมี Resource จำกัด tRPC มีข้อดีที่ชัดเจนหลายประการ
1. ลดเวลา Debug จาก Type Error
เมื่อ Backend เปลี่ยน Response Format, TypeScript จะแสดง Error ใน Frontend ทันที ไม่ต้องรอถึง Runtime หรือเจอ Bug จาก User จริง
2. ไม่ต้องเขียน API Documentation แยก
ทีมงานสามารถดู Type ใน IDE ได้โดยตรง ลดขั้นตอนการอัพเดท Swagger หรือ Postman Collection
3. Autocomplete ครบทุก Field
เมื่อเรียก API จาก Client, IDE จะแสดง Autocomplete ของ Input และ Output ทุก Field อัตโนมัติ ทำให้เขียน Code ได้เร็วขึ้นอย่างเห็นได้ชัด
4. Type-Safe End-to-End
จาก Database Schema (Prisma) → tRPC Router → Next.js Component สามารถ Flow Type ได้ตลอดสาย ลด Bug จาก Data Transformation ที่ผิดพลาด
5. เหมาะกับ Monorepo
สำหรับโปรเจกต์ที่ใช้ Turborepo หรือ Nx, tRPC ทำงานร่วมกันได้ดีมาก เนื่องจาก Share Type ข้าม Package ได้โดยตรง
วิธีตั้งค่า tRPC กับ Next.js 15 ทีละขั้นตอน
ขั้นตอนที่ 1: ติดตั้ง Dependencies
```bash
npm install @trpc/server @trpc/client @trpc/next @trpc/react-query @tanstack/react-query zod
```
ขั้นตอนที่ 2: สร้าง tRPC Instance
สร้างไฟล์ `src/server/trpc.ts`:
```typescript
import { initTRPC } from '@trpc/server';
const t = initTRPC.create();
export const router = t.router;
export const publicProcedure = t.procedure;
```
ขั้นตอนที่ 3: สร้าง Router
สร้างไฟล์ `src/server/routers/user.ts`:
```typescript
import { z } from 'zod';
import { publicProcedure, router } from '../trpc';
export const userRouter = router({
getById: publicProcedure
.input(z.object({ id: z.string() }))
.query(async ({ input }) => {
return { id: input.id, name: 'User', email: 'user@example.com' };
}),
create: publicProcedure
.input(z.object({ name: z.string(), email: z.string().email() }))
.mutation(async ({ input }) => {
return { success: true, userId: 'new-id-123' };
}),
});
```
ขั้นตอนที่ 4: ตั้งค่า API Handler
สร้างไฟล์ `src/app/api/trpc/[trpc]/route.ts`:
```typescript
import { fetchRequestHandler } from '@trpc/server/adapters/fetch';
import { appRouter } from '../../../../server/routers';
const handler = (req: Request) =>
fetchRequestHandler({
endpoint: '/api/trpc',
req,
router: appRouter,
createContext: () => ({}),
});
export { handler as GET, handler as POST };
```
ขั้นตอนที่ 5: เรียกใช้งานจาก Client Component
```typescript
import { api } from '~/utils/api';
export function UserProfile({ userId }: { userId: string }) {
const { data, isLoading } = api.user.getById.useQuery({ id: userId });
if (isLoading) return <div>กำลังโหลด...</div>;
return <div>สวัสดี, {data?.name}</div>;
}
```
เปรียบเทียบ tRPC กับ REST API และ GraphQL
| คุณสมบัติ | REST API | GraphQL | tRPC |
|-----------|----------|---------|------|
| Type Safety | ❌ Manual | ⚠️ Code Gen | ✅ Auto |
| Learning Curve | 🟢 ต่ำ | 🔴 สูง | 🟡 กลาง |
| Flexibility | ✅ สูง | ✅ สูง | ⚠️ TS Only |
| Performance | 🟡 กลาง | 🟡 กลาง | ✅ ดี |
| API Documentation | ❌ ต้องเขียนเอง | ✅ Introspection | ✅ จาก Type |
| เหมาะกับ | ทุก Stack | Complex Query | TypeScript Mono |
เมื่อไหรควรใช้ tRPC:
เมื่อไหรควรใช้ REST หรือ GraphQL:
Best Practices สำหรับการใช้ tRPC ใน Production
1. ใช้ Zod สำหรับ Input Validation ทุก Procedure
Zod ช่วยตรวจสอบ Data ที่รับจาก Client ก่อนเข้า Business Logic ทำให้ API ปลอดภัยและ Type Safe พร้อมกัน
2. แบ่ง Router ตาม Domain
แทนที่จะใส่ทุกอย่างใน Router เดียว ควรแบ่งเป็น `userRouter`, `blogRouter`, `orderRouter` แล้วรวมใน `appRouter` เดียว
3. ใช้ Protected Procedure สำหรับ API ที่ต้อง Login
สร้าง `protectedProcedure` ที่ตรวจสอบ Session ก่อนทุกครั้ง เพื่อป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต
4. Enable Batching สำหรับ Performance
tRPC รองรับ Request Batching ซึ่งรวมหลาย API Call เป็น HTTP Request เดียว ช่วยลด Round-trip Time บนหน้าจอที่มี Query หลายตัว
สรุปและก้าวต่อไป
tRPC เป็นเครื่องมือที่ทรงพลังสำหรับทีมพัฒนาที่ใช้ TypeScript และ Next.js ช่วยลด Bug จาก Type Error ได้อย่างมีนัยสำคัญ พร้อมเพิ่ม Developer Experience ให้ดีขึ้นด้วย Autocomplete และ Type Inference แบบ Real-time
สำหรับธุรกิจ SME ที่กำลังพัฒนาระบบ Internal Tool, Dashboard หรือ Web App ด้วย Next.js, tRPC คือตัวเลือกที่คุ้มค่าอย่างยิ่งในปี 2026
Key Takeaways:
ต้องการความช่วยเหลือด้านพัฒนาระบบด้วย Next.js หรือ Laravel? ทีม ADS FIT พร้อมให้คำปรึกษาและพัฒนาระบบที่ตอบโจทย์ธุรกิจของคุณ [ติดต่อเราได้เลย](https://www.adsfit.co.th/contact)
