Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
01 Oct 2023 · 3 mnt baca ·Artikel 60 / 119
Go

01 Pengenalan HTTP Router

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

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.

go
 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

bash
1go 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

bash
1go 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.

bash
1module github.com/santekno/learn-golang-httprouter
2
3go 1.21.1
4
5require github.com/julienschmidt/httprouter v1.3.0 // indirect

Jangan lupa juga kita membutuhkan library tambahan untuk membuat unit test yaitu dengan menggunakan library ini.

bash
1go get github.com/stretchr/testify

Alhasil akhir dari file go.mod akan terlihat isinya seperti ini.

bash
 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

go
 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

bash
1go build && ./learn-golang-httprouter 

Maka jika kita akses menggunakan curl method GET akan seperti ini

bash
1➜  santekno-hugo git:(main) ✗ curl http://localhost:8080/
2Hello Get% 

Dan untuk endpoint dengan method POST seperti ini.

bash
1➜  santekno-hugo git:(main) ✗ curl --location --request POST 'http://localhost:8080'
2Hello Post%

Artikel Terkait

💬 Komentar