Dari terminal kosong sampai endpoint kustom yang jalan: memasang CLI Nest, membaca struktur proyek yang dihasilkan, dan bagaimana controller dan service membagi tugas di antara keduanya.

Pernah dengar NestJS dan penasaran kenapa banyak developer, terutama dari dunia Node.js, berbondong-bondong memakainya? Singkatnya, NestJS membawa struktur dan keteraturan ke pengembangan backend dengan TypeScript. Kalau Anda ingin mulai, artikel ini adalah panduan langkah demi langkah untuk membangun REST API pertama Anda.
Kita akan mulai dari instalasi sampai membuat endpoint kita sendiri. Langsung saja!
Satu catatan sebelum mulai: panduan ini mengacu pada NestJS 12, rilis terbaru saat ini (terbit Agustus 2026). Decorator dan perintah CLI di bawah tidak berubah dari versi sebelumnya — yang bergeser adalah syarat versi Node.js-nya.
Sebelum mulai ngoding, ada baiknya tahu dulu apa yang membuat NestJS istimewa:
Cukup basa-basinya, mari siapkan perkakasnya!
Pastikan hal-hal berikut sudah terpasang di komputer Anda:
Sudah siap? Mari pasang CLI NestJS.
NestJS punya Command Line Interface (CLI) yang sangat membantu untuk membuat proyek, module, controller, dan komponen lain dengan cepat. Buka terminal Anda dan jalankan perintah ini:
npm install -g @nestjs/cliPerintah di atas akan memasang CLI NestJS secara global di sistem Anda.
Setelah CLI terpasang, membuat proyek baru jadi gampang sekali. Masuk ke direktori kerja yang Anda inginkan, lalu jalankan:
nest new my-first-apiCLI akan menanyakan package manager mana yang ingin Anda pakai (npm, yarn, atau pnpm). Pilih salah satu, dan biarkan CLI bekerja membuatkan struktur proyeknya untuk Anda.
Setelah selesai, masuk ke direktori proyeknya:
cd my-first-apiKalau Anda buka folder proyeknya, strukturnya akan terlihat seperti ini:
src/
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.tsTanpa mengubah apa pun, kita sudah punya aplikasi yang bisa dijalankan. Untuk menjalankannya dalam mode development (dengan hot-reload), pakai perintah ini:
npm run start:devTunggu sebentar, dan Anda akan melihat log di terminal yang menandakan aplikasinya sudah berjalan, biasanya di port 3000.
Sekarang buka browser atau Postman Anda dan akses http://localhost:3000. Anda akan disambut pesan: Hello World!
Selamat! API pertama Anda sudah jalan! 🎉
Dari mana “Hello World!” itu datang? Mari kita bedah alurnya.
// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}Decorator @Controller() menandai kelas ini sebagai controller. Decorator @Get() pada method getHello() berarti method ini akan menangani request GET ke path root (/).
3. Service yang Bekerja: controller tidak langsung memberi jawabannya sendiri. Ia memanggil method getHello() dari AppService. Ini praktik yang baik untuk memisahkan logika routing dari logika bisnis.
// src/app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}Decorator @Injectable() menandai kelas ini supaya bisa di-inject ke komponen lain (seperti controller kita). Di sinilah “Hello World!” sebenarnya dibuat.
Sekarang mari buat sesuatu yang lebih menarik. Kita akan membuat endpoint baru GET /greeting/:name yang memberikan sapaan personal.
1. Ubah Service (app.service.ts)
Tambahkan method baru untuk membuat pesan sapaannya.
// src/app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
// Add this new method
getGreeting(name: string): string {
return `Hello, ${name}! Welcome to your first API.`;
}
}2. Ubah Controller (app.controller.ts)
Tambahkan method baru di controller untuk membuat route-nya dan memanggil method service yang baru kita buat.
// src/app.controller.ts
import { Controller, Get, Param } from '@nestjs/common'; // Don't forget to import Param
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
// Add this new method
@Get('greeting/:name')
sendGreeting(@Param('name') name: string): string {
return this.appService.getGreeting(name);
}
}Perhatikan:
3. Coba!
Simpan semua perubahan Anda. Development server akan otomatis restart. Sekarang buka browser atau Postman dan akses URL baru kita, misalnya:
http://localhost:3000/greeting/Budi
Anda akan mendapat response berikut:
Hello, Budi! Welcome to your first API.Coba ganti “Budi” dengan nama Anda sendiri dan lihat hasilnya!
Selamat! Anda sudah berhasil membuat proyek REST API sederhana dengan NestJS, memahami komponen dasarnya (Controller, Service, Module), bahkan membuat endpoint kustom dengan parameter.
Ini baru puncak gunung es dari apa yang bisa dilakukan NestJS. Langkah berikutnya yang bisa Anda jelajahi:
Terus bereksperimen dan selamat ngoding! 👨💻👩💻

Kenapa src/ yang datar mulai berantakan begitu proyeknya punya fitur sungguhan, dan tata letak module-driven yang menggantikannya — satu direktori per fitur, dengan common, config, dan database di sampingnya.

Membangun form registrasi yang type-safe di Next.js dengan React Hook Form dan skema Zod — mulai dari setup, validasi, sampai memasang komponennya ke sebuah halaman.