Pengenalan
HttpRouter merupakan salah satu open source library yang populer untuk HTTP Handler di golang. HttpRouter ini terkenal dengan kecepatannya dan sangat minimalis atau simpel dikarenakan memiliki fitur untuk routing saja, tidak memiliki fitur apapun selain itu. Jika teman-teman ingin lihat lebih detail bisa kunjungi github-nya di sini https://github.com/julienschmidt/httprouter
HTTP Method
Router pada library disini sama dengan ServeMux yang mana kita bisa menambahkan route ke dalam Router. Kelebihan dibandingkan dengan ServeMux adalah pada library ini kita bisa menentukan method HTTP yang ingin kita gunakan misalkan GET,POST,PUT, DELETE dan lain-lain. Cara menambahkan router tersebut ke dalam router yaitu dengan cara memanggil function yang akan kita gunakan method HTTP tersebut misalkan router.GET().
Httprouter.Handle
Saat kita menggunakan ServeMux, pasti kita menambahkan route untuk bisa menambahkan http.Handler maka pada Library ini berbeda yaitu pada router kita tidak menggunakan http.Handler lg melainkan kita menggunakan type httprouter.Handle. Perbedaanya yaitu terdapat parameter ketiga yaitu Params yang mana ini bisa kita gunakan untuk kebutuhan-kebutuhan tersendiri.
Router
Library HttpRouter berisi struct Router yang mana merupakan implementasi dari http.Handler sehinga kita bisa dengan mudah menambahkan ke dalam http.Server untuk membuat sebuah Router dengan menggunakan function httprouter.New() yang akan mengembalikan Router pointer.
Berikut ini contoh inisialisasi router.
package main
import (
"net/http"
"github.com/julienschmidt/httprouter"
)
func main() {
router := httprouter.New()
server := http.Server{
Handler: router,
Addr: "localhost:8080",
}
server.ListenAndServe()
}
Membuat Project Baru
Baiklah saat ini kita akan coba menggunakan HttpRouter ini dengan project baru dengan pertama
Membuat folder baru atau project baru dengan mkdir learn-golang-httprouter. Lakukan inisialisasi golang module dengan perintah
go mod init github.com/santekno/learn-golang-httprouter
Setelah itu akan terbuat otomatis file bernama go.mod. Atau jika ingin lebih mudah bisa langsung saja clone atau unduh repository santekno disini https://github.com/santekno/learn-golang-httprouter.
Selanjutnya kita tambahkan golang library yang diatas kita sudah bahas yaitu dengan perintah ini
go get github.com/julienschmidt/httprouter
Jika sudah dieksekusi maka file go.mod akan menambahkan library-nya pada file tersebut seperti ini dan akan otomatis juga terbuat file go.sum.
module github.com/santekno/learn-golang-httprouter
go 1.21.1
require github.com/julienschmidt/httprouter v1.3.0 // indirect
Jangan lupa juga kita membutuhkan library tambahan untuk membuat unit test yaitu dengan menggunakan library ini.
go get github.com/stretchr/testify
Alhasil akhir dari file go.mod akan terlihat isinya seperti ini.
module github.com/santekno/learn-golang-httprouter
go 1.21.1
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/stretchr/testify v1.8.4 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Kita lanjutkan membuat file main.go dengan isi inisialisasi httprouter seperti ini
package main
import (
"fmt"
"net/http"
"github.com/julienschmidt/httprouter"
)
func main() {
router := httprouter.New()
router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
fmt.Fprint(w, "Hello Get")
})
router.POST("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
fmt.Fprint(w, "Hello Post")
})
server := http.Server{
Handler: router,
Addr: "localhost:8080",
}
server.ListenAndServe()
}
Jika sudah seperti ini maka kita bisa coba jalankan projek ini dengan perintah dibawah ini
go build && ./learn-golang-httprouter
Maka jika kita akses menggunakan curl method GET akan seperti ini
➜ santekno-hugo git:(main) ✗ curl http://localhost:8080/
Hello Get%
Dan untuk endpoint dengan method POST seperti ini.
➜ santekno-hugo git:(main) ✗ curl --location --request POST 'http://localhost:8080'
Hello Post%