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%