Mux (Bukan merk mobil)
Mux adalah package routing yang dibuat oleh gorilla toolkit untuk golang. Kita menggunakan package untuk mempersingkat waktu development router. Jika anda tidak menggunakan package dalam routing maka harus melakukan parsing url. Karena dalam go “/note” dan “/note/1” dihitung dalam satu route. Sehingga untuk dapat membuat mekanisme routing yang benar diperlukan melakukan parsing manual terhadap request url serta memfilter http method dalam request tersebut(GET/POST/PUT/DELETE/DLL).
Dengan menggunakan mux maka proses parsing dan filter terhadap berbagai parameter dalam http request telah dihandle oleh package mux tersebut. Sehingga kita tidak perlu memikirkan routing dan dapat fokus menyelesaikan solusi untuk proses bisnis yang kita hadapi.
Programming itu susah gunakan library / package untuk meningkatkan efisiensi
Installasi Mux
Sebelum anda melakukan install mux pastikan go anda telah terinstall dan terkonfigurasi dengan baik. Untuk memastikan bahwa installasi berhasil dan terkonfigurasi(workspace) jalankan perintah dibawah ini
go env | grep "GOPATH"
jika terdapat GOPATH pada env variable maka go telah terinstall. Mux akan terinstall pada direktori sebagaimana terdapat digopath tersebut. Sehingga sesuaikan GOPATH dengan direktori project anda. Untuk mengganti GOPATH gunakan perintah
export GOPATH=lokasidirektori
setelah konfigurasi go maka kita install mux dengan menggunakan perintah
go get -u github.com/gorilla/mux
Implementasi mux pada golang
selain menggunakan mux terdapat package lain yang digunakan yakni
- net/http karena api(application programming interface) kita menggunakan http dengan method POST/GET/DELETE/PUT yakni mengikuti aturan pada REST
- fmt untuk memberikan response ke client yang merequest api. Ulasan ini hanya membahas routing tidak membahas mengenai response encode/json dan lain sebagainnya
1. Inisiasi router mux
Langsung saja kita membuat instances mux dengan menggunakan syntax mux.NewRouter() dan mendefinisikan route pertama kita yakni ke “/”.
package main import "github.com/gorilla/mux" import "net/http" import "fmt" func homeRoute(res http.ResponseWriter, req *http.Request) { fmt.Fprint(res, "<b>Hello world</b>") } func main() { router := mux.NewRouter() router.HandleFunc("/", homeRoute) http.ListenAndServe("localhost:1557", router) }
HandleFunc adalah fungsi yang sebenarnya berasal dari net/http yang berguna untuk melakukan routing. Parameter pertama (“/”) merupakan endpoint dari routing. Sedangkan parameter kedua homeRoute adalah interface yang berisi logic yang dapat kita tuliskan di path tersebut.
Interface tersebut memiliki dua method yakni response dan request yang berasal dari package http. Response berada di http.ResponseWriter dan request berasal dari http.Request. Jangan lupa untuk menggunakan pointer pada http.Request karena http terbind / binded dengan variable http dimemory.
Kemudian terahir kita jalankan http server pada port 1557(silahkan tentukan port yang diguankan sesuai dengan preferensi anda, pastikan port tidak digunakan aplikasi lainnya) dan memasukan handler berupa router yang kita buat dengan menggunakan mux.
1.1 Testing
Arahkan browser anda ke localhost 1557 atau anda dapat menggunakan curl. Bebas silahkan pilih sesuai dengan keinginan. Kami menggunakan browser maka jika http server dan routing berjalan dengan baik anda akan melihat tulisan hello world dibrowser
2. Membuat REST Endpoint
selanjutnya kita akan membuat endpoint berdasarkan kaidah rest. Tetapi sebelumnya kita tentukan dahulu daftar endpointnya
Endpoint | Http method |
/note | GET |
/note/id, untuk mendapatkan data note berdasarkan id | GET |
/note/id, untuk mengubah note berdasarkan id | PUT |
/note/id, untuk menghapus note berdasarkan id | DELETE |
/note, untuk menambahkan note | POST |
kita tidak akan membuat logic dari setiap endpoint melainkan berfokus membuat rest endpoitnya. Mux memiliki kemampuan mendefinisikan endpoint beserta http methodnya dengan format sebagai berikut
router.HandleFunc("/path", interfaceHandler).Methods("GET/POST/DELETE/PUT")
sehingga berdasarkan format tersebut kita dapat membuat lima endpoint diatas dengan menggunakan kode seperti dibawah ini
package main import "github.com/gorilla/mux" import "net/http" import "fmt" func getNote(res http.ResponseWriter, req *http.Request) { fmt.Fprint(res, "<b>get note</b>") } func postNote(res http.ResponseWriter, req *http.Request) { fmt.Fprint(res, "<b>post note</b>") } func putNote(res http.ResponseWriter, req *http.Request) { routerParams := mux.Vars(req) fmt.Println(routerParams["id"]) fmt.Fprint(res, "<b>put note</b>") } func deleteNote(res http.ResponseWriter, req *http.Request) { routerParams := mux.Vars(req) fmt.Println(routerParams["id"]) fmt.Fprint(res, "<b>delete note</b>") } func getNoteDetail(res http.ResponseWriter, req *http.Request) { routerParams := mux.Vars(req) fmt.Println(routerParams["id"]) fmt.Fprint(res, "<b>get note</b>") } func main() { router := mux.NewRouter() router.HandleFunc("/note", getNote).Methods("GET") router.HandleFunc("/note", postNote).Methods("POST") router.HandleFunc("/note/{id}", getNoteDetail).Methods("GET") router.HandleFunc("/note/{id}", putNote).Methods("PUT") router.HandleFunc("/note/{id}", deleteNote).Methods("DELETE") http.ListenAndServe("localhost:1557", router) }
Done kita telah berhasil membuat endpoint dengan menggunakan mux serta net/http langkah selanjutnya adalah mengisi handler pada masing-masing endpoint dengan logic application dan menghubungkannya dengan database.
mux.Vars(request) digunakan untuk mengambil parameter yang ada para request url. Contoh diatas parameter yang diambil adalah “ID” yang merupakan id dari note. Anda dapat melakukan uji coba dengan menggunakan postman/restclient untuk menguji coba tiap endpoint
kk mau tny utk pemasangan iklan betting disitus degananda.com diperbolehkan ga?
klo bole bisa minta daftar harga perbulan utk masing2 posisi banner?
terima kasih