Skip to content

Latest commit

 

History

History
608 lines (471 loc) · 40.9 KB

README_id.md

File metadata and controls

608 lines (471 loc) · 40.9 KB

Fiber

Fiber adalah web framework yang terinspirasi dari Express yang berbasiskan Fasthttp, HTTP engine paling cepat untuk Go. Dirancang untuk mempermudah, mempercepat pengembangan aplikasi dengan alokasi memori nol-nya serta kinerja yang selalu diperhatikan.

⚡️ Cara Memulai

package main

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

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

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World 👋!")
    })

    app.Listen(":3000")
}

🤖 Pengukuran Kinerja

Pengukuran ini dilakukan oleh TechEmpower dan Go Web. Apabila anda ingin melihat hasil lengkapnya, silahkan kunjungi halaman Wiki kami.

⚙️ Instalasi

Pastikan kamu sudah menginstall Golang (download). Dengan versi 1.14 atau lebih tinggi [ Direkomendasikan ].

Initialize your project by creating a folder and then running go mod init github.com/your/repo (learn more) inside the folder. Then install Fiber with the go get command:

go get -u github.com/gofiber/fiber/v2

🎯 Fitur

💡 Filosofi

Bagi yang baru yang beralih dari Node.js ke Go terkadang perlu waktu yang cukup lama sebelum mereka mampu membuat aplikasi web dengan Go. Fiber, sebagai web framework dirancang secara minimalis dan mengikuti filosofi dari UNIX, sehingga pengguna baru dapat dengan cepat memasuki dunia Go dengan sambutan yang hangat dan dapat diandalkan.

Fiber terinspirasi dari Express, salah satu web framework yang paling terkenal di Internet. Kami menggabungkan kemudahan dari Express dan kinerja luar biasa dari Go. Apabila anda pernah membuat aplikasi dengan Node.js (dengan Express atau yang lainnya), maka banyak metode dan prinsip yang akan terasa sangat umum bagi anda.

Kami mendengarkan para pengguna di GitHub Issues (dan berbagai platform lainnya) untuk menciptakan web framework yang cepat, fleksibel dan bersahabat untuk berbagai macam keperluan, tenggat waktu dan keahlian para pengguna! Sama halnya seperti yang dilakukan Express di dunia JavaScript.

Limitations

  • Due to Fiber's usage of unsafe, the library may not always be compatible with the latest Go version. Fiber 2.18.0 has been tested with Go versions 1.14 to 1.17.
  • Fiber is not compatible with net/http interfaces. This means you will not be able to use projects like gqlgen, go-swagger, or any others which are part of the net/http ecosystem.

👀 Contoh

Dibawah ini terdapat beberapa contoh penggunaan. Jika anda ingin melihat contoh lainnya, silahkan kunjungi Gudang resep atau kunjungi Dokumentasi API kami.

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

    // GET /api/register
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ register
    })

    // GET /flights/LAX-SFO
    app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to"))
        return c.SendString(msg) // => 💸 From: LAX, To: SFO
    })

    // GET /dictionary.txt
    app.Get("/:file.:ext", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
        return c.SendString(msg) // => 📃 dictionary.txt
    })

    // GET /john/75
    app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("👴 %s is %s years old", c.Params("name"), c.Params("age"))
        return c.SendString(msg) // => 👴 john is 75 years old
    })

    // GET /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
        return c.SendString(msg) // => Hello john 👋!
    })

    log.Fatal(app.Listen(":3000"))
}
func main() {
    app := fiber.New()

    app.Static("/", "./public")
    // => http://localhost:3000/js/script.js
    // => http://localhost:3000/css/style.css

    app.Static("/prefix", "./public")
    // => http://localhost:3000/prefix/js/script.js
    // => http://localhost:3000/prefix/css/style.css

    app.Static("*", "./public/index.html")
    // => http://localhost:3000/any/path/shows/index/html

    log.Fatal(app.Listen(":3000"))
}
func main() {
	app := fiber.New()

	// Match any route
	app.Use(func(c *fiber.Ctx) error {
		fmt.Println("🥇 First handler")
		return c.Next()
	})

	// Match all routes starting with /api
	app.Use("/api", func(c *fiber.Ctx) error {
		fmt.Println("🥈 Second handler")
		return c.Next()
	})

	// GET /api/register
	app.Get("/api/list", func(c *fiber.Ctx) error {
		fmt.Println("🥉 Last handler")
		return c.SendString("Hello, World 👋!")
	})

	log.Fatal(app.Listen(":3000"))
}
📚 Tampilkan lebih banyak contoh kode

Views engines

📖 Config 📖 Engines 📖 Render

Fiber defaults to the html/template when no view engine is set.

If you want to execute partials or use a different engine like amber, handlebars, mustache or pug etc..

Checkout our Template package that support multiple view engines.

package main

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/template/pug"
)

func main() {
    // You can setup Views engine before initiation app:
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    // And now, you can call template `./views/home.pug` like this:
    app.Get("/", func(c *fiber.Ctx) error {
        return c.Render("home", fiber.Map{
            "title": "Homepage",
            "year":  1999,
        })
    })

    log.Fatal(app.Listen(":3000"))
}

Grouping routes into chains

📖 Group

func middleware(c *fiber.Ctx) error {
    fmt.Println("Don't mind me!")
    return c.Next()
}

func handler(c *fiber.Ctx) error {
    return c.SendString(c.Path())
}

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

    // Root API route
    api := app.Group("/api", middleware) // /api

    // API v1 routes
    v1 := api.Group("/v1", middleware) // /api/v1
    v1.Get("/list", handler)           // /api/v1/list
    v1.Get("/user", handler)           // /api/v1/user

    // API v2 routes
    v2 := api.Group("/v2", middleware) // /api/v2
    v2.Get("/list", handler)           // /api/v2/list
    v2.Get("/user", handler)           // /api/v2/user

    // ...
}

Middleware logger

📖 Logger

package main

import (
    "log"

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

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

    app.Use(logger.New())

    // ...

    log.Fatal(app.Listen(":3000"))
}

Cross-Origin Resource Sharing (CORS)

📖 CORS

import (
    "log"

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

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

    app.Use(cors.New())

    // ...

    log.Fatal(app.Listen(":3000"))
}

Check CORS by passing any domain in Origin header:

curl -H "Origin: http://example.com" --verbose http://localhost:3000

Custom 404 response

📖 HTTP Methods

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

    app.Static("/", "./public")

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("This is a demo!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("Welcome!")
    })

    // Last middleware to match anything
    app.Use(func(c *fiber.Ctx) error {
        return c.SendStatus(404)
        // => 404 "Not Found"
    })

    log.Fatal(app.Listen(":3000"))
}

JSON Response

📖 JSON

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

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

    app.Get("/user", func(c *fiber.Ctx) error {
        return c.JSON(&User{"John", 20})
        // => {"name":"John", "age":20}
    })

    app.Get("/json", func(c *fiber.Ctx) error {
        return c.JSON(fiber.Map{
            "success": true,
            "message": "Hi John!",
        })
        // => {"success":true, "message":"Hi John!"}
    })

    log.Fatal(app.Listen(":3000"))
}

WebSocket Upgrade

📖 Websocket

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/websocket"
)

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

  app.Get("/ws", websocket.New(func(c *websocket.Conn) {
    for {
      mt, msg, err := c.ReadMessage()
      if err != nil {
        log.Println("read:", err)
        break
      }
      log.Printf("recv: %s", msg)
      err = c.WriteMessage(mt, msg)
      if err != nil {
        log.Println("write:", err)
        break
      }
    }
  }))

  log.Fatal(app.Listen(":3000"))
  // ws://localhost:3000/ws
}

Recover middleware

📖 Recover

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

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

    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("normally this would crash your app")
    })

    log.Fatal(app.Listen(":3000"))
}

🧬 Middleware Internal

Kumpulan middleware yang ada didalam framework Fiber.

Middleware Description
basicauth Middleware Basic auth menyediakan Authentikasi dasar HTTP. Ia memanggil handler selanjutnya untuk kredensial yang valid dan 401 unathorized untuk kredential yang hilang atau tidak valid.
compress Kompresi middleware untuk fiber, ia mendukung deflate, gzip and brotli secara default
cache Mencegat dan respond cache
cors Memungkinkan cross-origin resource sharing (CORS) dengan berbagai pilihan.
csrf Melindungi dari eksploitasi CSRF.
filesystem FileSystem middleware untuk Fiber, Terima kasih khusus dan kredit untuk Alireza Salary
favicon Mengabaikan favicon dari logs atau serve dari memori jika file path tersedia.
limiter Rate-limiting middleware untuk Fiber. Digunakan untuk membatasi request berulang ke APIs publik dan/atau endpoint seperti password reset.
logger HTTP request/response logger.
pprof Terima kasih khusus kepada Matthew Lee (@mthli)
proxy Mengizinkan anda untuk proxy request ke banyak server.
requestid Menambahkan sebuah requestid pada tiap request.
recover Middleware Recover memulihkan dari panik di rantai stack manapun dan menangani kontrol pada ErrorHandler tersentralisasi.
timeout Menambahkan waktu maksimal untuk sebuah request dan melanjutkan ke ErrorHandler jikan sudah melampaui waktunya.

🧬 Middleware External

Kumpulan middleware yang dihost external dan diurus oleh Tim Fiber.

Middleware Description
adaptor Konverter untuk net/http handlers ke/dari request Fiber, terima kasih khusus pada @arsmn!
helmet Membantu mengamankan aplikasi anda dengan mengatur berbagai HTTP headers.
jwt JWT mengembalikan sebuah Middleware Auth JSON Web Token (JWT).
keyauth Middleware Key auth menyediakan authentikasi berbasis kunci.
rewrite Middleware Rewrite menulis kembali jalur URL berdasarkan aturan yang disediakan. Ini akan bermanfaat untuk backward compatibility atau hanya membuat cleaner dan link deskriptif.
session Middleware session ini dibangun diatas fasthttp/session oleh @savsgio MIT. Terima kasih khusus kepada @thomasvvugt untuk bantuannya membangun middleware ini.
template Package ini berisi 8 template engines yang dapat digunakan dengan Fiber v1.10.x, Go versi 1.13 atau lebih tinggi diperlukan.
websocket Berdasarkan WebSocket Fasthttp untuk Fiber dengan dukungan lokal!

🌱 Third Party Middlewares

Berikut adalah kumpulan middlewares yang dibuat oleh komunitas Fiber, silahkan membuat PR jika kamu ingin melihat milik anda disini!

👍 Berkontribusi

Apabila anda ingin mengucapkan terima kasih dan/atau mendukung pengembangan Fiber:

  1. Berikan bintang atau GitHub Star ke proyek ini.
  2. Bagikan di Twitter anda.
  3. Buat ulasan atau tutorial di Medium, Dev.to atau blog pribadi anda.
  4. Dukung project ini dengan membelikan secangkir kopi.

☕ Pendukung

Fiber adalah projek open source yang beroperasi dalam donasi untuk membayar tagihan, seperti nama domain, gitbook, netlify dan serverless hosting. Jika anda mau mendukung Fiber, anda dapat membeli kami kopi disini.

User Donation
@destari ☕ x 10
@dembygenesis ☕ x 5
@thomasvvugt ☕ x 5
@hendratommy ☕ x 5
@ekaputra07 ☕ x 5
@jorgefuertes ☕ x 5
@candidosales ☕ x 5
@l0nax ☕ x 3
@ankush ☕ x 3
@bihe ☕ x 3
@justdave ☕ x 3
@koddr ☕ x 1
@lapolinar ☕ x 1
@diegowifi ☕ x 1
@ssimk0 ☕ x 1
@raymayemir ☕ x 1
@melkorm ☕ x 1
@marvinjwendt ☕ x 1
@toishy ☕ x 1

‎‍💻 Kontributor Kode

Code Contributors

⭐️ Stargazers

Stargazers over time

⚠️ Lisensi

Copyright (c) 2019-present Fenny and Contributors. Fiber adalah project gratis dan open-source dibawah lisensi MIT. Logo resmi diciptakan oleh Vic Shóstak dan didistribusikan dalam lisensi Creative Commons (CC BY-SA 4.0 International).

Lisensi Third-party library