Cara membuat Http Server di Golang

HTTP server di Go adalah sebuah aplikasi yang mampu menerima permintaan HTTP dan memberikan respons berdasarkan permintaan tersebut. Dalam contoh kode yang Anda berikan, sebuah HTTP server sederhana dibuat menggunakan pustaka standar net/http dari Go.

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

type Product struct {
	Name  string `json:"name"`
	Price int    `json:"price"`
	Stock int    `json:"stock"`
}

var products []Product

func main() {
	http.HandleFunc("/product", ProductHandler)
	http.ListenAndServe(":8080", nil)
}

func ProductHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method == "GET" {
		// Handle GET request, return list of products
		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusOK)
		json.NewEncoder(w).Encode(products)
	} else if r.Method == "POST" {
		// Handle POST request, parse request body and validate
		var product Product
		err := json.NewDecoder(r.Body).Decode(&product)
		if err != nil {
			w.WriteHeader(http.StatusBadRequest)
			fmt.Fprintf(w, "Invalid request body")
			return
		}

		// Basic validation
		if product.Name == "" || product.Price <= 0 || product.Stock < 0 {
			w.WriteHeader(http.StatusBadRequest)
			fmt.Fprintf(w, "Invalid product data")
			return
		}

		// Save the product to the list
		products = append(products, product)

		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(http.StatusCreated)
		json.NewEncoder(w).Encode(product)
	} else {
		w.WriteHeader(http.StatusMethodNotAllowed)
		fmt.Fprintf(w, "Method not allowed")
	}
}

Mari jelaskan bagian-bagian dari kode tersebut:

  1. Struct Product:

    type Product struct {
        Name  string `json:"name"`
        Price int    `json:"price"`
        Stock int    `json:"stock"`
    }

    Struct Product digunakan untuk mendefinisikan bentuk data produk dengan tiga properti: Name (nama produk), Price (harga produk), dan Stock (stok produk).

  2. Variabel products:

    var products []Product

    Variabel products adalah slice dari Product, yang digunakan untuk menyimpan daftar produk yang dimasukkan oleh pengguna melalui permintaan HTTP POST.

  3. Fungsi ProductHandler:

    func ProductHandler(w http.ResponseWriter, r *http.Request) {
        // ...
    }

    Fungsi ProductHandler adalah request handler untuk endpoint /product. Fungsi ini menangani permintaan HTTP GET dan POST.

  4. HTTP Method Handling:

    if r.Method == "GET" {
        // Handle GET request, return list of products
        // ...
    } else if r.Method == "POST" {
        // Handle POST request, parse request body and validate
        // ...
    } else {
        w.WriteHeader(http.StatusMethodNotAllowed)
        fmt.Fprintf(w, "Method not allowed")
        return
    }

    Kode tersebut memeriksa metode HTTP dari permintaan (r.Method). Jika metodenya adalah GET, server akan mengembalikan daftar produk dalam format JSON. Jika metodenya adalah POST, server akan mendekode body JSON permintaan, memvalidasi datanya, dan menambahkan produk ke dalam daftar products. Jika metode HTTP tidak valid (bukan GET atau POST), server akan memberikan respons dengan status "Method Not Allowed".

  5. Menjalankan HTTP Server:

    func main() {
        http.HandleFunc("/product", ProductHandler)
        http.ListenAndServe(":8080", nil)
    }

    Fungsi main menetapkan ProductHandler sebagai request handler untuk endpoint /product dan kemudian menjalankan server HTTP pada port 8080.

Ketika Anda menjalankan program ini, Anda dapat mengakses http://localhost:8080/product menggunakan HTTP client seperti browser atau curl. Saat melakukan GET request, server akan mengirimkan daftar produk yang sudah ada. Saat melakukan POST request dengan mengirimkan data produk dalam format JSON, server akan menambahkan produk baru ke dalam daftar products setelah memvalidasi data tersebut.

Berikutnya untuk membuat hot reload di Golang menggunakan library Air dengan struktur proyek yang telah disebutkan, Anda dapat mengikuti langkah-langkah berikut:

Langkah 1: Install library Air

Jika Anda belum menginstal Air, jalankan perintah berikut untuk menginstalnya:

go get -u github.com/cosmtrek/air

Langkah 2: Inisialisasi Proyek dengan Air menggunakan air init

Buka terminal atau command prompt, dan navigasikan ke direktori proyek Anda (project-folder/). Kemudian, jalankan perintah berikut untuk menginisialisasi proyek Anda dengan Air:

air init

Perintah ini akan membuat file konfigurasi air.toml di dalam direktori proyek Anda secara otomatis.

Langkah 3: Menjalankan Aplikasi dengan Hot Reload

Setelah proses inisialisasi selesai, Anda dapat menjalankan aplikasi Golang Anda dengan perintah berikut:

air

Sekarang, aplikasi Anda akan dijalankan menggunakan Air, dan setiap kali Anda menyimpan perubahan di file main.go atau file-file lain dalam proyek, Air akan mendeteksi perubahan tersebut dan secara otomatis mengompilasi ulang aplikasi Anda, memungkinkan hot reload.

Pastikan Anda telah mengonfigurasi main.go dengan benar sesuai dengan kebutuhan proyek Anda. Dengan langkah-langkah ini, Anda dapat mengaktifkan hot reload dalam proyek Golang Anda menggunakan library Air tanpa harus membuat file konfigurasi air.toml secara manual.

Last updated