Pengantar
REST API (Representational State Transfer Application Programming Interface) adalah salah satu arsitektur yang paling umum digunakan dalam pengembangan aplikasi web. Dengan REST API, aplikasi dapat berkomunikasi satu sama lain melalui HTTP request. Golang, dengan kecepatan dan efisiensinya, adalah pilihan yang tepat untuk membangun REST API yang cepat dan dapat diandalkan. Dalam artikel ini, kita akan membahas bagaimana mengimplementasikan REST API dengan Golang menggunakan library httprouter. Kita akan membuat API sederhana untuk mengelola daftar tugas (to-do list).
1. Persiapan Lingkungan
Sebelum mulai mengembangkan API, pastikan Golang sudah terinstal di sistem Anda. Jika belum, Anda bisa mengunduhnya dari situs resmi Golang. Setelah itu, buat direktori baru untuk proyek Anda dan inisialisasi module Go:
mkdir todo-api
cd todo-api
go mod init todo-api
Kemudian, instal library httprouter:
go get github.com/julienschmidt/httprouter
2. Struktur Proyek
Struktur proyek yang rapi sangat penting untuk memudahkan pengembangan dan pemeliharaan. Berikut adalah struktur dasar proyek kita:
todo-api/
├── main.go
├── handlers/
│ └── todo.go
├── models/
│ └── todo.go
└── router/
└── router.go
3. Model Todo
Pertama, kita buat model Todo di models/todo.go
:
package models
type Todo struct {
ID string `json:"id"`
Title string `json:"title"`
Status string `json:"status"`
}
Model ini akan digunakan untuk merepresentasikan data tugas dalam API kita.
4. Handler Todo
Selanjutnya, kita buat handler untuk mengelola request di handlers/todo.go
:
package handlers
import (
"encoding/json"
"net/http"
"todo-api/models"
"github.com/julienschmidt/httprouter"
)
var todos = []models.Todo{}
func GetTodos(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todos)
}
func GetTodoByID(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
for _, todo := range todos {
if todo.ID == id {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todo)
return
}
}
http.Error(w, "Todo not found", http.StatusNotFound)
}
func CreateTodo(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
var todo models.Todo
json.NewDecoder(r.Body).Decode(&todo)
todos = append(todos, todo)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todo)
}
func UpdateTodo(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
for i, todo := range todos {
if todo.ID == id {
json.NewDecoder(r.Body).Decode(&todo)
todos[i] = todo
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todo)
return
}
}
http.Error(w, "Todo not found", http.StatusNotFound)
}
func DeleteTodo(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
id := ps.ByName("id")
for i, todo := range todos {
if todo.ID == id {
todos = append(todos[:i], todos[i+1:]...)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(todos)
return
}
}
http.Error(w, "Todo not found", http.StatusNotFound)
}
5. Router
Kemudian, kita buat router di router/router.go
:
package router
import (
"todo-api/handlers"
"github.com/julienschmidt/httprouter"
)
func NewRouter() *httprouter.Router {
router := httprouter.New()
router.GET("/todos", handlers.GetTodos)
router.GET("/todos/:id", handlers.GetTodoByID)
router.POST("/todos", handlers.CreateTodo)
router.PUT("/todos/:id", handlers.UpdateTodo)
router.DELETE("/todos/:id", handlers.DeleteTodo)
return router
}
6. Main Function
Terakhir, kita buat fungsi utama untuk menjalankan server di main.go
:
package main
import (
"log"
"net/http"
"todo-api/router"
)
func main() {
r := router.NewRouter()
log.Fatal(http.ListenAndServe(":8080", r))
}
7. Menjalankan Server
Untuk menjalankan server, cukup jalankan perintah berikut di terminal:
go run main.go
Server akan berjalan di http://localhost:8080
dan Anda bisa mulai mengakses endpoint yang telah kita buat.
8. Menguji API
Anda bisa menggunakan tools seperti Postman atau cURL untuk menguji endpoint API yang telah kita buat.
- GET /todos: Mengambil semua todo.
- GET /todos/: Mengambil todo berdasarkan ID.
- POST /todos: Membuat todo baru.
- PUT /todos/: Memperbarui todo berdasarkan ID.
- DELETE /todos/: Menghapus todo berdasarkan ID.
Berikut adalah contoh request untuk membuat todo baru menggunakan cURL:
Copy code
curl -X POST http://localhost:8080/todos -H "Content-Type: application/json" -d '{"id":"1","title":"Learn Golang","status":"In Progress"}'
Kesimpulan
Dengan mengikuti langkah-langkah di atas, Anda telah berhasil mengimplementasikan REST API sederhana dengan Golang menggunakan library httprouter. API ini memungkinkan Anda untuk mengelola daftar tugas (to-do list) dengan operasi CRUD dasar. Untuk memperdalam pemahaman dan mempelajari konsep arsitektur yang lebih kompleks, Anda bisa membaca tutorial RESTful API dan Clean Architecture dengan Golang. Semoga artikel ini bermanfaat dan memberikan dasar yang kuat untuk pengembangan API lebih lanjut. Selamat berkoding!