01 Pengenalan HTTP Router
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.
1package main
2
3import (
4 "net/http"
5
6 "github.com/julienschmidt/httprouter"
7)
8
9func main() {
10 router := httprouter.New()
11
12 server := http.Server{
13 Handler: router,
14 Addr: "localhost:8080",
15 }
16
17 server.ListenAndServe()
18}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
1go mod init github.com/santekno/learn-golang-httprouterSetelah 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
1go get github.com/julienschmidt/httprouterJika sudah dieksekusi maka file go.mod akan menambahkan library-nya pada file tersebut seperti ini dan akan otomatis juga terbuat file go.sum.
1module github.com/santekno/learn-golang-httprouter
2
3go 1.21.1
4
5require github.com/julienschmidt/httprouter v1.3.0 // indirectJangan lupa juga kita membutuhkan library tambahan untuk membuat unit test yaitu dengan menggunakan library ini.
1go get github.com/stretchr/testifyAlhasil akhir dari file go.mod akan terlihat isinya seperti ini.
1module github.com/santekno/learn-golang-httprouter
2
3go 1.21.1
4
5require (
6 github.com/davecgh/go-spew v1.1.1 // indirect
7 github.com/julienschmidt/httprouter v1.3.0 // indirect
8 github.com/pmezard/go-difflib v1.0.0 // indirect
9 github.com/stretchr/objx v0.5.0 // indirect
10 github.com/stretchr/testify v1.8.4 // indirect
11 gopkg.in/yaml.v3 v3.0.1 // indirect
12)Kita lanjutkan membuat file main.go dengan isi inisialisasi httprouter seperti ini
1package main
2
3import (
4 "fmt"
5 "net/http"
6
7 "github.com/julienschmidt/httprouter"
8)
9
10func main() {
11 router := httprouter.New()
12
13 router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
14 fmt.Fprint(w, "Hello Get")
15 })
16
17 router.POST("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
18 fmt.Fprint(w, "Hello Post")
19 })
20
21 server := http.Server{
22 Handler: router,
23 Addr: "localhost:8080",
24 }
25
26 server.ListenAndServe()
27}Jika sudah seperti ini maka kita bisa coba jalankan projek ini dengan perintah dibawah ini
1go build && ./learn-golang-httprouter Maka jika kita akses menggunakan curl method GET akan seperti ini
1➜ santekno-hugo git:(main) ✗ curl http://localhost:8080/
2Hello Get% Dan untuk endpoint dengan method POST seperti ini.
1➜ santekno-hugo git:(main) ✗ curl --location --request POST 'http://localhost:8080'
2Hello Post%