raviMukti / training-golang-httprouter

Training Golang HttpRouter dari ProgrammerZamanNow

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Training Golang HttpRouter

  • HttpRouter merupakan library yang cukup populer dan cepat. Ini dikarenakan HttRouter hanya fokus kepada routing saja, sehingga ukuran library ini pun cukup kecil. HttpRouter bisa dikombinasikan dengan library lain sesuai kebutuhan. Jadi ini bukan web framework, tapi hanya routing library saja
  • Menambah library HttpRouter go get github.com/julienschmidt/httprouter dan untuk asserting nya agar tidak sulit kita akan menambahkan library Testify dengan perintah go get github.com/stretchr/testify
  • Inti dari library HttpRouter adalah struct Router. Router ini merupakan implementasi dari http.Handler, sehingga kita bisa dengan mudah menambahkan ke dalam http.Server. Untuk membuat Router, kita bisa menggunakan function httprouter.New(), yang akan mengembalikan Router pointer
  • Router mirip dengan ServeMux, dimana kita bisa menambahkan route ke dalam Router. Kelebihan dibandingkan dengan ServeMux adalah, pada Router, kita bisa menentukan HTTP Method yang ingin kita gunakan, misal GET, POST, PUT, dan lain-lain. Cara menambahkan route ke dalam Router adalah gunakan function yang sama dengan HTTP Method nya, misal router.GET(), router.POST(), dan lain-lain
  • Saat kita menggunakan ServeMux, ketika menambah route, kita bisa menambahkan http.Handler. Berbeda dengan Router, pada Router kita tidak menggunakan http.Handler lagi, melainkan menggunakan type httprouter.Handle. Perbedaan dengan http.Handler adalah, pada httprouter.Handle, terdapat parameter ke tiga yaitu Params
  • httprouter.Handle memiliki parameter yang ketiga, yaitu Params. Untuk apa kegunaan Params? Params merupakan tempat untuk menyimpan parameter yang dikirim dari client. Namun Params ini bukan query parameter, melainkan parameter di URL. Kadang kita butuh membuat URL yang tidak fix, alias bisa berubah-ubah, misal /products/1, /products/2, dan seterusnya. ServeMux tidak mendukung hal tersebut, namun Router mendukung hal tersebut. Parameter yang dinamis yang terdapat di URL, secara otomatis dikumpulkan di Params. Namun, agar Router tahu, kita harus memberi tahu ketika menambahkan Route, dibagian mana kita akan buat URL path nya menjadi dinamis
  • Ada beberapa jenis router pattern diantaranya adalah Named Parameter, Catch All parameter
  • Named parameter adalah pola pembuatan parameter dengan menggunakan nama. Setiap nama parameter harus diawali dengan : (titik dua), lalu diikuti dengan nama parameter. Contoh, jika kita memiliki pattern seperti ini /user/ravi maka ini akan match dengan /user/:user
  • Selain named parameter, ada juga yang bernama catch all parameter, yaitu menangkap semua parameter. Catch all parameter harus diawali dengan * (bintang), lalu diikuti dengan nama parameter. Catch all parameter harus berada di posisi akhir URL. Contoh pattern nya adalah /src/somefile maka akan match dengan /src/*filepath
  • Pada materi Go-Lang Web, kita sudah pernah membahas tentang Serve File. Pada Router pun, mendukung serve static file menggunakan function ServeFiles(Path, FileSystem). Dimana pada Path, kita harus menggunakan Catch All Parameter. Sedangkan pada FileSystem kita bisa melakukan manual load dari folder atau menggunakan golang embed, seperti yang pernah kita bahas di materi Go-Lang Web
  • Apa yang terjadi jika terjadi panic pada logic Handler yang kita buat? Secara otomatis akan terjadi error, dan web akan berhenti mengembalikan response. Kadang saat terjadi panic, kita ingin melakukan sesuatu, misal memberitahu jika terjadi kesalahan di web, atau bahkan mengirim informasi log kesalahan yang terjadi. Sebelumnya, seperti yang sudah kita bahas di materi Go-Lang Web, jika kita ingin menangani panic, kita harus membuat Middleware khusus secara manual. Namun di Router, sudah disediakan untuk menangani panic, caranya dengan menggunakan attribute PanicHandler : func(http.ResponseWriter, *http.Request, interface{})
  • Selain panic handler, Router juga memiliki not found handler. Not found handler adalah handler yang dieksekusi ketika client mencoba melakukan request URL yang memang tidak terdapat di Router. Secara default, jika tidak ada route tidak ditemukan, Router akan melanjutkan request ke http.NotFound, namun kita bisa mengubah nya. Caranya dengan mengubah router.NotFound = http.Handler
  • Saat menggunakan ServeMux, kita tidak bisa menentukan HTTP Method apa yang digunakan untuk Handler. Namun pada Router, kita bisa menentukan HTTP Method yang ingin kita gunakan, lantas apa yang terjadi jika client tidak mengirim HTTP Method sesuai dengan yang kita tentukan? Maka akan terjadi error Method Not Allowed. Secara default, jika terjadi error seperti ini, maka Router akan memanggil function http.Error. Jika kita ingin mengubahnya, kita bisa gunakan router.MethodNotAllowed = http.Handler
  • HttpRouter hanyalah library untuk http router saja, tidak ada fitur lain selain router. Dan karena Router merupakan implementasi dari http.Handler, jadi untuk middleware, kita bisa membuat sendiri, seperti yang sudah kita bahas pada course Go-Lang Web

About

Training Golang HttpRouter dari ProgrammerZamanNow


Languages

Language:Go 100.0%