Setelah membangun beberapa aplikasi CLI dan berbasis file, kita naik ke arsitektur client-server: REST API Manajemen Tugas. API ini menyediakan endpoint HTTP untuk membuat, membaca, memperbarui, dan menghapus tugas (operasi CRUD), dengan database SQLite untuk persistensi dan JWT untuk authentication. Kita memakai framework Ktor sebagai server HTTP. Proyek ini memperkenalkan konsep penting pengembangan backend: desain endpoint yang konsisten, status code HTTP yang tepat, validasi request, dan keamanan authentication. Setiap Bagian menghasilkan API yang dapat diuji dengan curl atau test HTTP, sehingga kita mendapat umpan balik konkret sebelum menambah lapisan berikutnya.

Tujuan Proyek #

REST API yang akan kita bangun menyediakan endpoint berikut:

  • GET /tasks — daftar semua tugas.
  • POST /tasks — buat tugas baru.
  • GET /tasks/{id} — ambil tugas berdasarkan ID.
  • PUT /tasks/{id} — perbarui tugas berdasarkan ID.
  • DELETE /tasks/{id} — hapus tugas berdasarkan ID.
  • POST /auth/login — login dan dapatkan JWT.

Setiap endpoint mengembalikan status code HTTP yang sesuai: 200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found, atau 401 Unauthorized. Body response dalam format JSON yang konsisten sehingga klien dapat mengandalkan kontrak untuk parsing otomatis.

Perilaku yang Diharapkan #

Contoh sesi pemakaian dengan curl:

bash
curl -X POST http://localhost:8080/tasks -H "Content-Type: application/json" -d '{"judul":"Belajar Ktor"}'
curl http://localhost:8080/tasks

Output yang Dihasilkan:

text
{"id":1,"judul":"Belajar Ktor","selesai":false}
[{"id":1,"judul":"Belajar Ktor","selesai":false}]

Response pertama mengembalikan tugas yang baru dibuat dengan status 201 Created. Response kedua mengembalikan array berisi seluruh tugas dengan status 200 OK. Setiap request yang gagal divalidasi mengembalikan pesan JSON yang menjelaskan field mana yang bermasalah.

Teknologi dan Stack #

Proyek ini menggunakan peranti berikut:

KomponenVersiTujuan
BahasaKotlin 2.0.21Coroutines, type-safe DSL
Web frameworkKtor 2.3Native Kotlin, ringan, async
DatabaseSQLite via JDBCTanpa server, mudah dipelajari
Serializationkotlinx.serializationStandar resmi Kotlin untuk JSON
AuthenticationJWT (HS256)Stateless, cocok untuk REST
Build toolGradle 8.x dengan Kotlin DSLPlugin Ktor, fat JAR
Pengujiankotlin.test + Ktor Test EngineTest integration tanpa server nyata

Proyek ini memanfaatkan ekosistem Kotlin secara penuh. Ktor menyediakan DSL yang ringkas; kotlinx.serialization menangani JSON otomatis; JDBC mengakses SQLite tanpa konfigurasi server.

Prasyarat #

Pembaca diharapkan telah menyelesaikan chapter berikut:

  • Section Coroutines: suspend, runBlocking, dan Dispatchers,
  • Section Error Handling: Result<T> dan try/catch,
  • Section Object-Oriented Programming: data class dan interface,
  • Konsep dasar HTTP method (GET, POST, PUT, DELETE) dan status code,
  • Konsep dasar database (tabel, kolom, primary key),
  • Proyek Aplikasi Keuangan Pribadi: serialisasi JSON dan validasi input.

Tanpa prasyarat tersebut, sebaiknya pelajari dahulu section atau proyek terkait sebelum melanjutkan.

Arsitektur #

Aplikasi disusun mengikuti pola berlapis yang khas untuk backend REST. Request masuk melalui Ktor Application yang menjalankan pipeline middleware (logging, content negotiation, authentication). Setelah itu, request dirutekan ke Route yang sesuai, yang mendelegasikan pekerjaan ke Repository. Repository menjadi satu-satunya tempat yang menyentuh database via JDBC, sehingga lapisan routing tetap fokus pada HTTP dan tidak terkontaminasi SQL.

Pemisahan Repository dari Routing memungkinkan kita mengganti implementasi persistensi (misalnya dari SQLite ke PostgreSQL) tanpa mengubah kode routing. Invariant seperti “judul tidak boleh kosong” dipasang di lapisan validasi sebelum mencapai repository, sehingga database tidak perlu menangani data yang tidak lengkap.

Struktur Bagian #

Proyek ini dikerjakan dalam empat bagian berurutan:

BagianYang DikerjakanHasil yang Diharapkan
1. Desain APIDaftar endpoint, request/response body, status code, skema JSONKontrak API terdokumentasi sebelum implementasi dimulai
2. Implementasi EndpointRouting Ktor, simulasi data di memori tanpa server nyataEndpoint CRUD dapat dipanggil dengan curl pada port lokal
3. Database dan ValidasiJDBC SQLite, skema tabel, validasi request bodyData tersimpan persisten; request invalid ditolak dengan 400
4. Authentication dan TestingJWT issuance dan verifikasi, Ktor Test EngineEndpoint terproteksi memerlukan Bearer token; test berjalan tanpa server TCP

Mulailah dari Bagian 1 dan ikuti urutannya karena setiap Bagian dibangun di atas Bagian sebelumnya. Setelah Bagian 4 selesai, kita siap melangkah ke proyek Aplikasi Inventaris yang memperluas penggunaan SQLite dengan transaksi stok dan pencarian berbasis SQL LIKE.

Referensi Lanjutan #

  • Ktor welcome — halaman pengenalan Ktor sebagai kerangka backend REST API proyek ini
  • Ktor routing — panduan resmi routing Ktor yang menjadi kerangka endpoint REST API proyek