pemrograman

12 Membuat Static File Handler

Membuat Static File Handler di Golang dengan Httprouter

Dalam aplikasi web, seringkali kita perlu menyajikan file statis seperti gambar, file CSS, atau JavaScript dari folder publik. Dengan menggunakan library julienschmidt/httprouter, Anda dapat dengan mudah membuat handler untuk melayani file statis. Artikel ini akan membahas langkah-langkah lengkap untuk mengimplementasikan static file handler dengan cara yang sederhana dan efisien di Golang.


Prasyarat

  1. Pemahaman Dasar Golang: Anda harus memahami dasar-dasar pemrograman Golang.

  2. Golang Terinstal: Pastikan Golang telah terinstal pada mesin Anda.

  3. Library httprouter: Anda perlu menginstal library ini. Untuk menginstalnya, gunakan perintah berikut:

    go get github.com/julienschmidt/httprouter
    
  4. Folder Publik: Folder untuk menyimpan file statis Anda, misalnya bernama public.


Langkah 1: Menyiapkan Struktur Direktori

Buat struktur proyek sederhana sebagai berikut:

project-root/
├── main.go
├── public/
│   ├── index.html
│   ├── style.css
│   ├── script.js
  • main.go: File utama untuk menjalankan aplikasi.
  • public/: Folder untuk menyimpan file statis yang akan diakses.

Langkah 2: Membuat File main.go

Buka file main.go dan tambahkan kode berikut:

package main

import (
	"log"
	"net/http"
	"github.com/julienschmidt/httprouter"
)

func main() {
	router := httprouter.New()

	// Static file handler untuk folder "public"
	router.ServeFiles("/static/*filepath", http.Dir("./public"))

	// Menjalankan server
	log.Println("Server berjalan di http://localhost:8080")
	log.Fatal(http.ListenAndServe(":8080", router))
}

Penjelasan:

  • router.ServeFiles: Method bawaan dari httprouter yang digunakan untuk melayani file statis. Parameter pertama adalah URL prefix (misalnya /static/*filepath), sedangkan parameter kedua adalah direktori di mana file statis berada (./public).
  • http.Dir("./public"): Mengarahkan handler untuk membaca file dari folder public.
  • ListenAndServe: Menjalankan server pada port 8080.

Langkah 3: Menyiapkan File Statis

Buat beberapa file di dalam folder public/:

  1. public/index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Static Files</title>
        <link rel="stylesheet" href="/static/style.css">
    </head>
    <body>
        <h1>Welcome to Static Files in Golang!</h1>
        <script src="/static/script.js"></script>
    </body>
    </html>
    
  2. public/style.css:

    body {
        font-family: Arial, sans-serif;
        text-align: center;
        margin-top: 50px;
        background-color: #f4f4f9;
    }
    h1 {
        color: #333;
    }
    
  3. public/script.js:

    console.log("Static file loaded successfully!");
    

Langkah 4: Menjalankan Aplikasi

Jalankan aplikasi dengan perintah berikut:

go run main.go

Server akan berjalan di http://localhost:8080.

Pengujian

  1. Buka browser Anda dan akses:

    • http://localhost:8080/static/index.html: Untuk membuka file HTML.
    • http://localhost:8080/static/style.css: Untuk melihat file CSS.
    • http://localhost:8080/static/script.js: Untuk melihat file JavaScript.
  2. Periksa file-file diakses dengan benar dan pastikan tidak ada error pada konsol browser.


Langkah 5: Menambahkan Header untuk File Statis

Untuk menambahkan header pada respon file statis (misalnya header keamanan), Anda dapat membuat middleware sederhana:

func WithHeaders(h http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Cache-Control", "max-age=3600")
		h.ServeHTTP(w, r)
	})
}

Kemudian gunakan middleware tersebut sebelum handler file statis:

staticHandler := WithHeaders(http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
router.Handler("GET", "/static/*filepath", staticHandler)

Penjelasan:

  • http.HandlerFunc: Membungkus handler untuk menambahkan header ke setiap respons.
  • Cache-Control: Menetapkan waktu cache file statis agar browser tidak mengunduh ulang setiap kali file diakses.

Kesimpulan

Pada artikel ini, kita telah membuat file handler untuk melayani file statis menggunakan library httprouter di Golang. Dengan menambahkan header kustom atau middleware, Anda dapat meningkatkan fungsionalitas sesuai kebutuhan aplikasi Anda.

Cobalah mengembangkan lebih lanjut dengan mengintegrasikan endpoint dinamis atau menambahkan sistem logging untuk respons file statis. Selamat mencoba!

comments powered by Disqus