pemrograman

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.

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%
comments powered by Disqus