38 KiB
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
Make sure you have Go installed (download). Version 1.14
or higher is required.
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
- Sistem Routing yang solid
- Serve file statis
- Kinerja ekstrim
- Penggunaan memori yang kecil
- Cocok untuk API
- Mendukung Middleware & Next seperti Express
- Kembangkan aplikasi dengan Cepat
- Template engines
- WebSocket support
- Rate Limiter
- Tersedia dalam 15 bahasa
- Dan masih banyak lagi, kunjungi Fiber
💡 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.
👀 Contoh
Dibawah ini terdapat beberapa contoh penggunaan. Jika anda ingin melihat contoh lainnya, silahkan kunjungi Gudang resep atau kunjungi Dokumentasi API kami.
📖 Routing Dasar
func main() {
app := fiber.New()
// GET /john
app.Get("/:name", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
return c.SendString(msg) // => Hello john 👋!
})
// 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 /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 /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 /api/register
app.Get("/api/*", func(c *fiber.Ctx) error {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
return c.SendString(msg) // => ✋ register
})
log.Fatal(app.Listen(":3000"))
}
📖 Serving File Static
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"))
}
📖 Middleware & Next
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
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
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
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!
- arsmn/fiber-casbin
- arsmn/fiber-introspect
- arsmn/fiber-swagger
- arsmn/gqlgen
- codemicro/fiber-cache
- sujit-baniya/fiber-boilerplate
- juandiii/go-jwk-security
- kiyonlin/fiber_limiter
- shareed2k/fiber_limiter
- shareed2k/fiber_tracing
- thomasvvugt/fiber-boilerplate
- ansrivas/fiberprometheus
- LdDl/fiber-long-poll
- K0enM/fiber_vhost
👍 Berkontribusi
Apabila anda ingin mengucapkan terima kasih dan/atau mendukung pengembangan Fiber
:
- Berikan bintang atau GitHub Star ke proyek ini.
- Bagikan di Twitter anda.
- Buat ulasan atau tutorial di Medium, Dev.to atau blog pribadi anda.
- 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
⭐️ Stargazers
⚠️ 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