← Semua picks

Framework Conditional

tRPC vs GraphQL vs REST+Zod: pilih API layer 2026

API layer 2026: tRPC vs GraphQL vs REST+Zod — kapan overkill, kapan worth it

18 Agustus 2026 · 8 menit ·Use case: Memilih API layer untuk aplikasi TypeScript fullstack — antara type-safety, fleksibilitas client, dan total cost of ownership.
tRPCGraphQLREST+Zod

Konteks: kenapa 2026 masih relevan debat ini

Tiga tahun lalu, pilihan API layer terasa lebih jelas: GraphQL untuk complex client, REST untuk segalanya. Sekarang, tRPC sudah mature, REST+Zod ecosystem sudah solid (ts-rest, zod-to-openapi), dan GraphQL punya Pothos + Houdini yang lebih ergonomis.

Masalahnya: banyak tim Indonesia masih memilih GraphQL karena “scalable” atau tRPC karena “modern” tanpa mempertimbangkan total cost of ownership — termasuk latency ke Jakarta, kebutuhan external client, dan learning curve tim.

Artikel ini bukan tentang mana yang “terbaik”. Ini tentang kondisi spesifik mana yang wins.

Perbandingan langsung

AspektRPCGraphQLREST+Zod
Setup costRendah (monorepo TS)Tinggi (schema, resolver, codegen)Rendah–sedang
Type safetyEnd-to-end otomatisPerlu codegen (graphql-codegen)Perlu ts-rest / openapi-typescript
External clientTidak bisa (TS only)Excellent (language-agnostic)Excellent
DX di monorepoExcellentSedangSedang–baik
Latency overheadMinimalAda (query parsing + resolver chain)Minimal
Hosting IndonesiaVPS/Cloudflare WorkersPerlu managed service atau self-hostVPS apapun
Ecosystem maturityStable, tapi nicheSangat maturePaling mature

tRPC

Kekuatan nyata

tRPC wins di satu skenario spesifik: monorepo TypeScript fullstack dengan client yang semuanya TypeScript dan owned oleh tim yang sama. Di kondisi itu, DX-nya tidak ada tandingan — tulis procedure di server, langsung callable di client dengan type inference penuh, tanpa generate step, tanpa boilerplate.

Untuk Next.js App Router atau Astro dengan API routes, tRPC bisa di-setup dalam satu hari dan langsung produktif. Refactor type di satu tempat, TypeScript error langsung muncul di semua consumer — ini nyata menghemat waktu di project mid-size.

Keterbatasan yang sering diabaikan

tRPC adalah TypeScript-to-TypeScript RPC. Kalau ada kebutuhan mobile native (React Native masih hitung, tapi Kotlin/Swift tidak), atau kalau backend Anda butuh dikonsumsi oleh third-party, tRPC tidak bisa serve itu. Anda harus tetap expose REST endpoint terpisah — yang artinya Anda maintain dua layer.

Selain itu, tRPC belum punya adoption yang luas di luar lingkaran Next.js community. Kalau tim baru join dan belum familiar, ada learning curve. Debugging juga kurang straightforward dibanding REST — request/response tidak se-plain JSON biasa karena transport layer-nya berbeda.

Kapan worth

tRPC worth kalau Anda bangun SaaS internal atau B2B tool di mana semua client adalah web TypeScript, dan tidak ada rencana expose API ke pihak ketiga dalam 12-18 bulan ke depan.

GraphQL

Kekuatan nyata

GraphQL genuinely menyelesaikan masalah riil: multiple client dengan kebutuhan data berbeda. Kalau Anda punya mobile app, web app, dan dashboard analytics yang semua butuh data yang sama tapi dengan shape berbeda, GraphQL memungkinkan tiap client ambil persis yang dibutuhkan tanpa over-fetch atau under-fetch.

Di 2026, GraphQL tooling sudah lebih baik. Pothos membuat schema definition lebih ergonomis di TypeScript. Houdini dan TanStack Query + urql membuat client-side cache management lebih bisa diprediksi. Untuk aplikasi dengan data graph yang complex (relasi banyak, querying nested entity), GraphQL masih yang paling ekspresif.

Keterbatasan yang perlu diperhitungkan

GraphQL bukan “REST yang lebih baik” — GraphQL adalah trade-off yang berbeda. Setup cost lebih tinggi: perlu define schema terpisah, tulis resolver, setup codegen untuk type safety, dan maintain N+1 query problem dengan DataLoader. Untuk CRUD sederhana, ini adalah overhead yang tidak sebanding.

Di Indonesia, ada satu faktor yang sering diabaikan: latency managed service. Kalau Anda pakai Hasura Cloud atau Apollo GraphOS di region US/EU, setiap GraphQL query Anda tambah 80-200ms dibanding REST ke server lokal. Untuk user di luar Jawa dengan koneksi variabel, ini terasa. Self-host GraphQL di VPS Jakarta atau Singapore ap-southeast-1 lebih baik, tapi itu tambah ops burden.

Kapan worth

GraphQL worth kalau Anda punya minimum dua client berbeda dengan kebutuhan query berbeda (misalnya web dashboard dan mobile app), atau kalau Anda expose API ke developer eksternal yang butuh flexibility query. Tidak worth untuk internal tool CRUD atau single-client SaaS.

REST+Zod

Kekuatan nyata

REST+Zod adalah pendekatan yang paling pragmatis dan portable. REST sudah dipahami semua orang — developer baru, stakeholder teknis, dokumentasi otomatis dengan OpenAPI, integration dengan tool apapun. Zod di-layer di atas memberikan type safety di request/response tanpa coupling arsitektur.

Dengan kombinasi zod-to-openapi dan openapi-typescript, Anda bisa generate TypeScript type dari schema OpenAPI dan pakai di frontend — end-to-end type safety tanpa lock-in ke framework spesifik. ts-rest membawa DX yang lebih mirip tRPC tapi tetap compatible dengan REST semantics dan bisa di-consume oleh client non-TypeScript.

Untuk deployment di Indonesia, REST ke VPS Hetzner Helsinki atau DigitalOcean Singapore dengan Nginx di depannya adalah setup yang sudah proven — tidak ada layer tambahan yang perlu dipelajari atau di-debug.

Keterbatasan

REST+Zod tidak punya DX seamless seperti tRPC. Ada generate step, atau ada contract file yang perlu dijaga sinkron secara manual. Kalau tim tidak disiplin menjaga schema tetap konsisten antara backend dan frontend, type safety bisa bocor. Ini bukan keterbatasan teknis — ini keterbatasan proses yang perlu dijaga.

Kapan worth

REST+Zod worth untuk hampir semua kasus, tapi paling optimal kalau Anda: punya multiple technology stack di backend atau frontend, butuh dokumentasi API yang bisa dibaca non-developer, atau bekerja di lingkungan di mana tidak semua client adalah TypeScript.

Verdict

Pakai tRPC kalau:

  • Monorepo TypeScript dengan semua client TypeScript
  • Tidak butuh expose API ke external consumer
  • Tim sudah familiar dengan Next.js / Astro fullstack pattern
  • Project internal / B2B dengan scope yang terdefinisi

Pakai GraphQL kalau:

  • Punya 2+ client berbeda dengan kebutuhan data berbeda (mobile + web, atau external API consumer)
  • Data model complex dengan banyak relasi
  • Tim sudah punya pengalaman GraphQL dan siap maintain schema
  • Deploy di region ap-southeast-1 atau server Jakarta (bukan managed service offshore)

Pakai REST+Zod kalau:

  • Tim mixed-stack atau tidak semua TypeScript
  • Butuh OpenAPI documentation untuk stakeholder atau third-party
  • Project yang kemungkinan besar akan expose API ke consumer eksternal di masa depan
  • Default pilihan untuk most Indonesian SMB SaaS — paling portable, paling mudah di-maintain, paling mudah di-hire untuk

Satu hal yang perlu saya tekankan: jangan pilih GraphQL karena ingin terlihat enterprise. Saya sudah lihat lebih dari sekali tim startup Indonesia setup Apollo Server dengan schema lengkap untuk aplikasi yang basically adalah CRUD 5 table — overhead yang tidak worth. Mulai dari REST+Zod, migrasi ke GraphQL kalau kebutuhan multiple client benar-benar muncul.

Ditulis oleh Asti Larasati

// Pick Framework lain


← Semua picks RSS feed