Pendahuluan
REST API adalah salah satu cara paling umum untuk menghubungkan frontend dan backend menggunakan protokol HTTP. Dengan Golang, kita bisa membuat server HTTP yang cepat dan ringan tanpa banyak dependency tambahan.
Membuat Server HTTP Sederhana
Berikut contoh sederhana membuat HTTP server di Golang menggunakan package bawaan net/http:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
})
fmt.Println("Server running on :8080")
http.ListenAndServe(":8080", nil)
}
Membuat Endpoint API
Sekarang kita buat endpoint khusus untuk API:
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"message":"Hello API"}`))
})
Handling Method (GET, POST)
Untuk membuat API lebih fleksibel, kita bisa membedakan request berdasarkan method HTTP:
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
w.Write([]byte("GET Request"))
case "POST":
w.Write([]byte("POST Request"))
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
})
Parsing JSON Request
Untuk menerima data dari client, kita bisa membaca body request dalam format JSON:
type Request struct {
Name string `json:"name"`
}
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
var req Request
json.NewDecoder(r.Body).Decode(&req)
response := fmt.Sprintf("Hello %s", req.Name)
w.Write([]byte(response))
})
Response JSON
Gunakan encoding/json untuk mengirim response dalam format JSON:
type Response struct {
Message string `json:"message"`
}
http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
res := Response{Message: "Success"}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(res)
})
Routing Lebih Rapi
Agar code lebih terstruktur, pisahkan handler ke function:
func apiHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("API Endpoint"))
}
func main() {
http.HandleFunc("/api", apiHandler)
http.ListenAndServe(":8080", nil)
}
Middleware Sederhana
Middleware digunakan untuk logging, authentication, atau validasi request:
func logger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Request:", r.URL.Path)
next.ServeHTTP(w, r)
})
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/api", apiHandler)
http.ListenAndServe(":8080", logger(mux))
}
Testing API
Kamu bisa mengetes API menggunakan curl atau Postman:
curl http://localhost:8080/api
Best Practice
- Gunakan struct untuk request dan response
- Selalu set Content-Type JSON
- Pisahkan handler agar code lebih clean
- Gunakan middleware untuk logging dan auth
- Validasi input dari client
Kesimpulan
Dengan package net/http bawaan Golang, kita sudah bisa membuat REST API yang cepat dan efisien. Untuk project besar, kamu bisa menggunakan framework seperti Gin atau Fiber untuk mempermudah routing dan middleware.