Skip to content

Latest commit

 

History

History
639 lines (494 loc) · 41.6 KB

README_id.md

File metadata and controls

639 lines (494 loc) · 41.6 KB

Fiber

Fiber adalah kerangka kerja web 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 menginstalasi Golang (download). Dengan versi 1.14 atau lebih tinggi [ Direkomendasikan ].

Inisialisasi proyek kamu dengan membuat folder lalu jalankan go mod init github.com/nama-kamu/repo (belajar lebih banyak) di dalam folder. Kemudian instal Fiber dengan perintah go get:

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 kerangka kerja web 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 kerangka kerja web 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 kerangka kerja web yang cepat, fleksibel dan bersahabat untuk berbagai macam keperluan, tenggat waktu dan keahlian para pengguna! Sama halnya seperti yang dilakukan Express di dunia JavaScript.

⚠️ Limitasi

  • Karena penggunaan Fiber yang tidak aman, perpustakaan mungkin tidak selalu kompatibel dengan versi Go terbaru. Fiber 2.18.0 telah diuji dengan Go versi 1.14 hingga 1.17.
  • Fiber tidak kompatibel dengan antarmuka net/http. Ini berarti kamu tidak akan dapat menggunakan proyek seperti gqlgen, go-swagger, atau lainnya yang merupakan bagian dari ekosistem net/http.

👀 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()

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

    data, _ := json.MarshalIndent(app.GetRoute("api"), "", "  ")
    fmt.Print(string(data))
    // Prints:
    // {
    //    "method": "GET",
    //    "name": "api",
    //    "path": "/api/*",
    //    "params": [
    //      "*1"
    //    ]
    // }


    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 mengalihkan ke html/template saat tidak ada mesin tampilan yang disetel.

Jika kamu ingin menjalankan sebagian atau menggunakan mesin yang berbeda seperti amber, handlebars, mustache atau pug dan lain-lain..

Lihat paket contoh kami yang mendukung beberapa mesin tampilan.

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 kerangka kerja Fiber.

Middleware Description
basicauth Middleware Basic auth menyediakan Autentikasi 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 proyek ini dengan membelikan secangkir kopi.

☕ Pendukung

Fiber adalah proyek sumber terbuka 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

⭐️ Pengamat bintang

Stargazers over time

⚠️ Lisensi

Copyright (c) 2019-present Fenny and Contributors. Fiber adalah proyek 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 perpustakaan pihak-ketiga