Sampai di part terakhir seri Tutorial GoFiber Dasar. Selamat — kalau sudah mengikuti dari Part 1, sekarang ada REST API blog yang lengkap: routing, database, validasi, autentikasi JWT, otorisasi berbasis kepemilikan dan role, upload file, testing otomatis, dokumentasi API, sampai siap di-deploy pakai Docker.
Apa yang Sudah Dibangun
| Area | Fitur |
|---|---|
| Dasar | Routing, handler pattern, koneksi MySQL lewat GORM |
| Data | Model Post, migration, seeder dengan data dummy |
| CRUD | Create, Read, Update, Delete Post lengkap dengan validasi |
| Developer Experience | Hot reload (Air), response standarisasi, error handling terpusat |
| Autentikasi | Register, login, JWT access token, refresh token dengan rotasi, logout |
| Otorisasi | Middleware proteksi route, kepemilikan post (author), role admin vs user |
| Relasi Data | Post-User (author), Post-Category (many-to-many) |
| File | Upload thumbnail dengan validasi tipe & ukuran |
| Kualitas | Unit test, feature test end-to-end, dokumentasi Swagger/OpenAPI |
| Deploy | Docker multi-stage build, Docker Compose, panduan VPS |
Keputusan Desain yang Perlu Diingat
Beberapa keputusan penting yang dibuat sepanjang seri ini, dengan alasannya:
- Access token pendek (15 menit) + refresh token (7 hari, dengan rotasi) — membatasi dampak kalau access token bocor, sementara user tidak perlu login ulang terus-menerus. Refresh token disimpan sebagai hash SHA-256 di database, bukan string mentah.
jwt.WithValidMethodsdi setiap parsing JWT — mencegah serangan algorithm confusion. Ini ditemukan dan diperbaiki lewat review keamanan di tengah proses, bukan direncanakan sejak awal — bukti bahwa security review berkelanjutan itu penting, bukan cuma sekali di akhir.- Kepemilikan (ownership) dipisah dari role — user biasa cuma bisa mengubah/menghapus resource miliknya sendiri; admin punya hak override terbatas (menghapus post siapa saja), bukan hak tak terbatas (tidak bisa mengedit isi post orang lain).
Preloaddengan kolom terbatas (publicAuthorColumns) untuk data yang tampil di endpoint publik — prinsip jangan expose lebih dari yang dibutuhkan, walau field itu sudah "aman" secara teknis (bukan password).- Database test terpisah dari database development — supaya proses testing yang menghapus/mengubah data tidak pernah menyentuh data development yang sedang dipakai untuk demo manual.
Keterbatasan yang Disengaja (di Luar Scope "Dasar")
Seri ini fokus ke fundamental, bukan API production yang lengkap segala fitur. Beberapa hal yang sengaja tidak dibahas:
- Blacklist access token — logout hanya mencabut refresh token; access token yang sudah terbit tetap valid sampai kadaluarsa (maksimal 15 menit), karena JWT stateless.
- Rate limiting — endpoint seperti login rawan brute-force di dunia nyata, butuh pembatasan request per-IP.
- Caching — endpoint list/search yang sering diakses biasanya butuh cache (Redis, dsb) di scale besar.
- Background job/queue — untuk tugas yang tidak perlu selesai langsung dalam satu request (kirim email, resize gambar, dst).
- Fitur komunitas — komentar, like, follow antar user, notifikasi.
- CI/CD otomatis —
go test ./...sudah ada, tapi belum terhubung ke pipeline otomatis (GitHub Actions, dst) yang jalan tiap push.
Struktur Project untuk Referensi
blogfiber/
├── main.go # entry point, wiring semua komponen
├── auth/ # JWT & refresh token helper
├── database/ # koneksi & migration
├── handlers/ # HTTP handler per resource (posts, auth, categories)
├── middleware/ # AuthRequired, AdminOnly
├── models/ # struct GORM (Post, User, Category, RefreshToken)
├── response/ # helper format response seragam
├── routes/ # route registration
├── validation/ # validator reusable
├── cmd/seed/ # seeder terpisah dari server utama
├── docs/ # dokumentasi Swagger (generated, jangan edit manual)
├── public/uploads/ # file yang di-upload user
├── Dockerfile & docker-compose.yml
└── main_test.go, posts_feature_test.go # feature test
Melanjutkan dari Sini
Kalau ingin melangkah lebih jauh dari seri "Dasar" ini, beberapa arah yang bisa dieksplorasi:
- Tambahkan rate limiting (
github.com/gofiber/fiber/v2/middleware/limiter, sudah bawaan Fiber). - Pindahkan upload file dari disk lokal ke object storage (S3-compatible) supaya tidak terikat ke satu server.
- Terapkan caching di endpoint
Index/Showyang sering diakses. - Tambahkan CI (GitHub Actions) yang menjalankan
go test ./...otomatis di setiap pull request.
Terima kasih sudah mengikuti seri Tutorial GoFiber Dasar ini sampai akhir. Source code lengkap tersedia di setiap branch/commit per part, jadi bisa dibandingkan progress kode antar part kapan saja.
Bagian dari Series: GoFiber Dasar - Belajar Fundamental Lewat REST API Blog
Belajar konsep-konsep dasar GoFiber (routing, handler, GORM, MySQL, JWT auth) dengan membangun REST API blog sederhana dari nol - lengkap dengan auten...
Lihat Series Lengkap