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 Mulai ```go 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](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext) dan [Go Web](https://github.com/smallnest/go-web-framework-benchmark). Apabila anda ingin melihat hasil lengkapnya, silahkan kunjungi halaman [Wiki](https://docs.gofiber.io/benchmarks) kami.

## βš™οΈ Instalasi Pertama, [unduh](https://golang.org/dl/) dan instal Go di komputer anda. Versi `1.14` atau yang lebih tinggi diperlukan. Instalasi dilakukkan dengan perintah [`go get`](https://golang.org/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them): ```bash go get github.com/gofiber/fiber/v2/... ``` ## 🎯 Fitur - Sistem [Routing](https://docs.gofiber.io/routing) yang solid - Serve [file statis](https://docs.gofiber.io/application#static) - [Kinerja](https://docs.gofiber.io/benchmarks) ekstrim - [Penggunaan memori](https://docs.gofiber.io/benchmarks) yang kecil - Cocok untuk [API](https://docs.gofiber.io/context) - Mendukung Middleware & [Next](https://docs.gofiber.io/context#next) seperti Express - Kembangkan aplikasi dengan [Cepat](https://dev.to/koddr/welcome-to-fiber-an-express-js-styled-fastest-web-framework-written-with-on-golang-497) - [Template engines](https://github.com/gofiber/template) - [WebSocket support](https://github.com/gofiber/websocket) - [Rate Limiter](https://docs.gofiber.io/middleware#limiter) - Available in [15 languages](https://docs.gofiber.io/) - Dan masih banyak lagi, [kunjungi Fiber](https://docs.gofiber.io/) ## πŸ’‘ Filosofi Bagi yang baru yang beralih dari [Node.js](https://nodejs.org/en/about/) ke [Go](https://golang.org/doc/) 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 dengan cepat memasuki dunia Go dengan sambutan yang hangat dan dapat diandalkan. Fiber terinspirasi dari Express, salah satu web framework 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](https://github.com/gofiber/fiber/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 dilakukkan Express di dunia JavaScript. ## πŸ‘€ Contoh Dibawah ini terdapat beberapa contoh penggunaan. Jika anda ingin contoh lainnya, silahkan kunjungi [Gudang resep](https://github.com/gofiber/recipes) atau kunjungi [Dokumentasi API](https://docs.gofiber.io) kami. Listed below are some of the common examples. If you want to see more code examples , please visit our [Recipes repository](https://github.com/gofiber/recipes) or visit our hosted [API documentation](https://docs.gofiber.io). #### πŸ“– [**Basic Routing**](https://docs.gofiber.io/#basic-routing) ```go 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 Static Files**](https://docs.gofiber.io/application#static) ```go 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**](https://docs.gofiber.io/context#next) ```go 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")) } ```
πŸ“š Show more code examples ### Views engines πŸ“– [Config](https://docs.gofiber.io/fiber#config) πŸ“– [Engines](https://github.com/gofiber/template) πŸ“– [Render](https://docs.gofiber.io/context#render) Fiber defaults to the [html/template](https://golang.org/pkg/html/template/) when no view engine is set. If you want to execute partials or use a different engine like [amber](https://github.com/eknkc/amber), [handlebars](https://github.com/aymerick/raymond), [mustache](https://github.com/cbroglie/mustache) or [pug](https://github.com/Joker/jade) etc.. Checkout our [Template](https://github.com/gofiber/template) package that support multiple view engines. ```go 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](https://docs.gofiber.io/application#group) ```go 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](https://docs.gofiber.io/middleware/logger) ```go 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](https://docs.gofiber.io/middleware/cors) ```go 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: ```bash curl -H "Origin: http://example.com" --verbose http://localhost:3000 ``` ### Custom 404 response πŸ“– [HTTP Methods](https://docs.gofiber.io/application#http-methods) ```go 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](https://docs.gofiber.io/ctx#json) ```go 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](https://github.com/gofiber/websocket) ```go import ( "github.com/gofiber/fiber/v2" "github.com/gofiber/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](https://docs.gofiber.io/middleware/recover) ```go import ( "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/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")) } ```
## 🧬 Internal Middleware Here is a list of middleware that are included within the Fiber framework. | Middleware | Description | | :--- | :--- | | [basicauth](https://github.com/gofiber/fiber/tree/master/middleware/basicauth) | Basic auth middleware provides an HTTP basic authentication. It calls the next handler for valid credentials and 401 Unauthorized for missing or invalid credentials. | | [compress](https://github.com/gofiber/fiber/tree/master/middleware/compress) | Compression middleware for Fiber, it supports `deflate`, `gzip` and `brotli` by default. | | [cache](https://github.com/gofiber/fiber/tree/master/middleware/cache) | Intercept and cache responses | | [cors](https://github.com/gofiber/fiber/tree/master/middleware/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | | [csrf](https://github.com/gofiber/fiber/tree/master/middleware/csrf) | Protect from CSRF exploits. | | [filesystem](https://github.com/gofiber/fiber/tree/master/middleware/filesystem) | FileSystem middleware for Fiber, special thanks and credits to Alireza Salary | | [favicon](https://github.com/gofiber/fiber/tree/master/middleware/favicon) | Ignore favicon from logs or serve from memory if a file path is provided. | | [limiter](https://github.com/gofiber/fiber/tree/master/middleware/limiter) | Rate-limiting middleware for Fiber. Use to limit repeated requests to public APIs and/or endpoints such as password reset. | | [logger](https://github.com/gofiber/fiber/tree/master/middleware/logger) | HTTP request/response logger. | | [pprof](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Special thanks to Matthew Lee \(@mthli\) | | [proxy](https://github.com/gofiber/fiber/tree/master/middleware/pprof) | Allows you to proxy requests to a multiple servers | | [requestid](https://github.com/gofiber/fiber/tree/master/middleware/requestid) | Adds a requestid to every request. | | [recover](https://github.com/gofiber/fiber/tree/master/middleware/recover) | Recover middleware recovers from panics anywhere in the stack chain and handles the control to the centralized[ ErrorHandler](error-handling.md). | | [timeout](https://github.com/gofiber/fiber/tree/master/middleware/timeout) | Adds a max time for a request and forwards to ErrorHandler if it is exceeded. | ## 🧬 External Middleware List of externally hosted middleware modules and maintained by the [Fiber team](https://github.com/orgs/gofiber/people). | Middleware | Description | | :--- | :--- | | [adaptor](https://github.com/gofiber/adaptor) | Converter for net/http handlers to/from Fiber request handlers, special thanks to @arsmn! | | [helmet](https://github.com/gofiber/helmet) | Helps secure your apps by setting various HTTP headers. | | [jwt](https://github.com/gofiber/jwt) | JWT returns a JSON Web Token \(JWT\) auth middleware. | | [keyauth](https://github.com/gofiber/keyauth) | Key auth middleware provides a key based authentication. | | [rewrite](https://github.com/gofiber/rewrite) | Rewrite middleware rewrites the URL path based on provided rules. It can be helpful for backward compatibility or just creating cleaner and more descriptive links. | | [session](https://github.com/gofiber/session) | This session middleware is build on top of fasthttp/session by @savsgio MIT. Special thanks to @thomasvvugt for helping with this middleware. | | [template](https://github.com/gofiber/template) | This package contains 8 template engines that can be used with Fiber `v1.10.x` Go version 1.13 or higher is required. | | [websocket](https://github.com/gofiber/websocket) | Based on Fasthttp WebSocket for Fiber with Locals support! | ## 🌱 Third Party Middlewares This is a list of middlewares that are created by the Fiber community, please create a PR if you want to see yours! - [arsmn/fiber-casbin](https://github.com/arsmn/fiber-casbin) - [arsmn/fiber-introspect](https://github.com/arsmn/fiber-introspect) - [arsmn/fiber-swagger](https://github.com/arsmn/fiber-swagger) - [arsmn/gqlgen](https://github.com/arsmn/gqlgen) - [codemicro/fiber-cache](https://github.com/codemicro/fiber-cache) - [itsursujit/fiber-boilerplate](https://github.com/itsursujit/fiber-boilerplate) - [juandiii/go-jwk-security](https://github.com/juandiii/go-jwk-security) - [kiyonlin/fiber_limiter](https://github.com/kiyonlin/fiber_limiter) - [shareed2k/fiber_limiter](https://github.com/shareed2k/fiber_limiter) - [shareed2k/fiber_tracing](https://github.com/shareed2k/fiber_tracing) - [thomasvvugt/fiber-boilerplate](https://github.com/thomasvvugt/fiber-boilerplate) - [ansrivas/fiberprometheus](https://github.com/ansrivas/fiberprometheus) ## πŸ‘ Berkontribusi Apabila anda ingin mengucapkan **terima kasih** dan/atau mendukung pengembangan `Fiber`: 1. Berikan bintang atau [GitHub Star](https://github.com/gofiber/fiber/stargazers) ke proyek ini. 2. Bagikan [di Twitter anda](https://twitter.com/intent/tweet?text=Fiber%20is%20an%20Express%20inspired%20%23web%20%23framework%20built%20on%20top%20of%20Fasthttp%2C%20the%20fastest%20HTTP%20engine%20for%20%23Go.%20Designed%20to%20ease%20things%20up%20for%20%23fast%20development%20with%20zero%20memory%20allocation%20and%20%23performance%20in%20mind%20%F0%9F%9A%80%20https%3A%2F%2Fgithub.com%2Fgofiber%2Ffiber). 3. Buat ulasan atau tutorial di [Medium](https://medium.com/), [Dev.to](https://dev.to/) atau blog pribadi anda. 4. Support the project by donating a [cup of coffee](https://buymeacoff.ee/fenny). ## β˜• Supporters Fiber is an open source project that runs on donations to pay the bills e.g. our domain name, gitbook, netlify and serverless hosting. If you want to support Fiber, you can β˜• [**buy a coffee here**](https://buymeacoff.ee/fenny). | | User | Donation | | :---------------------------------------------------------- | :----------------------------------------------- | :-------- | | ![](https://avatars.githubusercontent.com/u/204341?s=25 ) | [@destari](https://github.com/destari) | β˜• x 10 | | ![](https://avatars.githubusercontent.com/u/63164982?s=25 ) | [@dembygenesis](https://github.com/dembygenesis) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/56607882?s=25 ) | [@thomasvvugt](https://github.com/thomasvvugt) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/27820675?s=25 ) | [@hendratommy](https://github.com/hendratommy) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/1094221?s=25 ) | [@ekaputra07](https://github.com/ekaputra07) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/194590?s=25 ) | [@jorgefuertes](https://github.com/jorgefuertes) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/186637?s=25 ) | [@candidosales](https://github.com/candidosales) | β˜• x 5 | | ![](https://avatars.githubusercontent.com/u/29659953?s=25 ) | [@l0nax](https://github.com/l0nax) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/59947262?s=25 ) | [@ankush](https://github.com/ankush) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/635852?s=25 ) | [@bihe](https://github.com/bihe) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/307334?s=25 ) | [@justdave](https://github.com/justdave) | β˜• x 3 | | ![](https://avatars.githubusercontent.com/u/11155743?s=25 ) | [@koddr](https://github.com/koddr) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/29042462?s=25 ) | [@lapolinar](https://github.com/lapolinar) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/2978730?s=25 ) | [@diegowifi](https://github.com/diegowifi) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/44171355?s=25 ) | [@ssimk0](https://github.com/ssimk0) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/5638101?s=25 ) | [@raymayemir](https://github.com/raymayemir) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/619996?s=25 ) | [@melkorm](https://github.com/melkorm) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/31022056?s=25 ) | [@marvinjwendt](https://github.com/thomasvvugt) | β˜• x 1 | | ![](https://avatars.githubusercontent.com/u/31921460?s=25 ) | [@toishy](https://github.com/toishy) | β˜• x 1 | ## β€Žβ€πŸ’» Code Contributors Code Contributors ## ⭐️ Stargazers Stargazers over time ## ⚠️ License Copyright (c) 2019-present [Fenny](https://github.com/fenny) and [Contributors](https://github.com/gofiber/fiber/graphs/contributors). `Fiber` is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/blob/master/LICENSE). Official logo was created by [Vic ShΓ³stak](https://github.com/koddr) and distributed under [Creative Commons](https://creativecommons.org/licenses/by-sa/4.0/) license (CC BY-SA 4.0 International). **Third-party library licenses** - [schema](https://github.com/gorilla/schema/blob/master/LICENSE) - [isatty](https://github.com/mattn/go-isatty/blob/master/LICENSE) - [fasthttp](https://github.com/valyala/fasthttp/blob/master/LICENSE) - [encoding](https://github.com/segmentio/encoding/blob/master/LICENSE) - [colorable](https://github.com/mattn/go-colorable/blob/master/LICENSE) - [fasttemplate](https://github.com/valyala/fasttemplate/blob/master/LICENSE) - [bytebufferpool](https://github.com/valyala/bytebufferpool/blob/master/LICENSE) - [gopsutil](https://github.com/shirou/gopsutil/blob/master/LICENSE) - [go-ole](https://github.com/go-ole/go-ole) - [wmi](https://github.com/StackExchange/wmi)