Git Product home page Git Product logo

golang-fiber's Introduction

Learning Go Fiber

Sebenarnya banyak sekali Web Framework yang bisa kita gunakan untuk memudahkan kita membuat aplikasi Web dengan Golang. di Golang sendiri salah satu Web Framework yang populer saat ini yaitu Fiber atau Go Fiber. Fiber adalah Web Framework untuk Golang yang terinspirasi dari ExpressJS, oleh karena itu cara penggunaannya sangat mudah dan sederhana.

Membuat Project

Buat sebuah folder dengan nama misalnya GOLANG_FIBER, setelah itu lakukan inisiasi project golang dengan mengetikkan di terminal.

go mod init golang-fiber

Menambahkan Depedensi

Ada beberapa depedensi yang kita perlukan dalam project ini seperti testify untuk membuat unit test dan lainnya. Untuk menambahkan depedensi, caranya ketikkan di terminal.

  1. Testify
go get github.com/stretchr/testify
  1. Go Fiber
go get github.com/gofiber/fiber/v2

Memulai Project

Setelah menambahkan depedensi, selanjutnya buka project menggunakan text editor atau IDE favorit teman-teman. Kemudian buat sebuah file dengan nama main.go

  • file main.go
package main

import "github.com/gofiber/fiber/v2"

func main() {
 app := fiber.New()

 err := app.Listen("localhost:3000")
 if err != nil {
  panic(err)
 }
}

Configuration

Saat membuat fiber.App menggunakan fiber.New() terdapat parameter fiber.Config yang bisa kita gunakan. Ada banyak sekali konfigurasi yang bisa kita ubah, contohnya mengubah konfigurasi timeout.

package main

import (
 "time"

 "github.com/gofiber/fiber/v2"
)

func main() {
 app := fiber.New(fiber.Config{
  IdleTimeout:  time.Second * 5,
  ReadTimeout:  time.Second * 5,
  WriteTimeout: time.Second * 5,
 })

 err := app.Listen("localhost:3000")
 if err != nil {
  panic(err)
 }
}

Routing

Sekarang kita bahas tentang Routing. di Fiber untuk membuat Routing sudah disediakan semua Method di fiber.App yang sesuai dengan HTTPMethod. Parameternya membutuhkan 2, yaitu path nya dan juga fiber.Handler. Kode: Routing Method

// HTTP methods
func (app *App) Get(path string, handlers ...Handler) Router
func (app *App) Head(path string, handlers ...Handler) Router
func (app *App) Post(path string, handlers ...Handler) Router
func (app *App) Put(path string, handlers ...Handler) Router
func (app *App) Delete(path string, handlers ...Handler) Router
func (app *App) Connect(path string, handlers ...Handler) Router
func (app *App) Options(path string, handlers ...Handler) Router
func (app *App) Trace(path string, handlers ...Handler) Router
func (app *App) Patch(path string, handlers ...Handler) Router

Ok, sekarang kita coba buat. Buka file main.go

  • file main.go
package main

import (
        "time"

        "github.com/gofiber/fiber/v2"
)

func main() {
    app := fiber.New(fiber.Config{
        IdleTimeout:  time.Second * 5,
        ReadTimeout:  time.Second * 5,
        WriteTimeout: time.Second * 5,
    })

    // Routing
        app.Get("/", func(ctx *fiber.Ctx) error {
        return ctx.SendString("Hello World")
    })

        err := app.Listen("localhost:3000")
    if err != nil {
        panic(err)
    }
}

Sekarang kita akan mengimplementasikan unit test. Buat sebuah file dengan nama fiber_test.go

  • file fiber_test.go
package main

import (
 "io"
 "net/http/httptest"
 "testing"

 "github.com/gofiber/fiber/v2"
 "github.com/stretchr/testify/assert"
)

func TestRoutingHelloWorld(t *testing.T) {
 app := fiber.New()
 app.Get("/", func(ctx *fiber.Ctx) error {
  return ctx.SendString("Hello World")
 })

 request := httptest.NewRequest("GET", "/", nil)
 response, err := app.Test(request)
 assert.Nil(t, err)
 assert.Equal(t, 200, response.StatusCode)

 bytes, err := io.ReadAll(response.Body)
 assert.Nil(t, err)
 assert.Equal(t, "Hello World", string(bytes))
}

Context di Fiber (Ctx)

Saat kita membuat Handler di Fiber Routing, kita hanya cukup menggunakan parameter fiber.Ctx. Ctx ini merupakan representasi dari Request dan Response di Fiber. Oleh karena itu, kita bisa mendapatkan informasi HTTP Request, dan juga bisa membuat HTTP Response menggunakan fiber.Ctx.

  • Buka kembali file fiber_test.go
func TestCtx(t *testing.T) {
    app.Get("/hello", func(ctx *fiber.Ctx) error {
        name := ctx.Query("name", "Guest")
        return ctx.SendString("Hello " + name)
    })

        request := httptest.NewRequest("GET", "/hello?name=Mazufik", nil)
    response, err := app.Test(request)
    assert.Nil(t, err)
    assert.Equal(t, 200, response.StatusCode)

        bytes, err := io.ReadAll(response.Body)
    assert.Nil(t, err)
    assert.Equal(t, "Hello Mazufik", string(bytes))

        request = httptest.NewRequest("GET", "/hello", nil)
    response, err = app.Test(request)
    assert.Nil(t, err)
    assert.Equal(t, 200, response.StatusCode)

        bytes, err = io.ReadAll(response.Body)
    assert.Nil(t, err)
    assert.Equal(t, "Hello Guest", string(bytes))
}

HTTP Request

Representasi dari HTTP Request di FIber adalah Ctx. Untuk mengambil informasi dari HTTP Request, kita bisa menggunakan banyak sekali Method yang terdapat di Ctx.

  • Buka kembali file fiber_test.go
func TestHttpRequest(t *testing.T) {
 app.Get("/request", func(ctx *fiber.Ctx) error {
  first := ctx.Get("firstname")
  last := ctx.Cookies("lastname")
  return ctx.SendString("Hello " + first + " " + last)
 })

 request := httptest.NewRequest("GET", "/request", nil)
 request.Header.Set("firstname", "Mazufik")
 request.AddCookie(&http.Cookie{Name: "lastname", Value: "Rahman"})
 response, err := app.Test(request)
 assert.Nil(t, err)
 assert.Equal(t, 200, response.StatusCode)

 bytes, err := io.ReadAll(response.Body)
 assert.Nil(t, err)
 assert.Equal(t, "Hello Mazufik Rahman", string(bytes))
}

Route Parameter

Fiber mendukung Route Parameter, dimana kita bisa menambahkan parameter di path URL. Ini sangat cocok ketika kita membuat RESTful API, yang butuh data dikirim via path URL. Saat membuat Route Parameter, kita perlu memberi nama, dan di Ctx, kita bisa mengambil seluruh data menggunakan method AllParams(), atau menggunakan method Params(nama).

  • Buka kembali file fiber_test.go
func TestRouteParameter(t *testing.T) {
 app.Get("/users/:userId/orders/:orderId", func(ctx *fiber.Ctx) error {
  userId := ctx.Params("userId")
  orderId := ctx.Params("orderId")
  return ctx.SendString("Get Order " + orderId + " From User " + userId)
 })

 request := httptest.NewRequest("GET", "/users/mazufik/orders/12", nil)
 response, err := app.Test(request)
 assert.Nil(t, err)
 assert.Equal(t, 200, response.StatusCode)

 bytes, err := io.ReadAll(response.Body)
 assert.Nil(t, err)
 assert.Equal(t, "Get Order 12 From User mazufik", string(bytes))
}

Request Form

Ketika kita mengirim data menggunakan HTTP Form, kita bisa menggunakan method FormValue(name) pada Ctx untuk mendapatkan data yang dikirim.

  • Buka kembali file fiber_test.go
func TestFormRequest(t *testing.T) {
 app.Post("/hello", func(ctx *fiber.Ctx) error {
  name := ctx.FormValue("name")
  return ctx.SendString("Hello " + name)
 })

 body := strings.NewReader("name=Mazufik")
 request := httptest.NewRequest("POST", "/hello", body)
 request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
 response, err := app.Test(request)
 assert.Nil(t, err)
 assert.Equal(t, 200, response.StatusCode)

 bytes, err := io.ReadAll(response.Body)
 assert.Nil(t, err)
 assert.Equal(t, "Hello Mazufik", string(bytes))
}

golang-fiber's People

Contributors

mazufik avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.