Fiber

Fiber is een web framework geΓ―nspireerd door Express gebouwd bovenop Fasthttp, de snelste HTTP-engine voor Go. Ontworpen om snelle ontwikkeling gemakkelijker te maken zonder geheugenallocatie tezamen met hoge prestaties.

## ⚑️ Bliksemsnelle start ```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") } ``` ## πŸ€– Benchmarks Deze tests zijn uitgevoerd door [TechEmpower](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext) en [Go Web](https://github.com/smallnest/go-web-framework-benchmark). Bezoek onze [Wiki](https://fiber.wiki/benchmarks) voor alle benchmark resultaten.

## βš™οΈ Installatie Allereerst, [download](https://golang.org/dl/) en installeer Go. `1.14` of hoger is vereist. Installatie wordt gedaan met behulp van het [`go get`](https://golang.org/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) commando: ```bash go get github.com/gofiber/fiber/v2 ``` ## 🎯 Features - Robuuste [routing](https://fiber.wiki/routing) - Serveer [statische bestanden](https://fiber.wiki/application#static) - Extreme [prestaties](https://fiber.wiki/benchmarks) - [Weinig geheugenruimte](https://fiber.wiki/benchmarks) - [API endpoints](https://fiber.wiki/context) - [Middleware](https://fiber.wiki/middleware) & [Next](https://fiber.wiki/context#next) ondersteuning - [Snelle](https://dev.to/koddr/welcome-to-fiber-an-express-js-styled-fastest-web-framework-written-with-on-golang-497) server-side programmering - [Template engines](https://fiber.wiki/middleware#template) - [WebSocket ondersteuning](https://fiber.wiki/middleware#websocket) - [Rate Limiter](https://fiber.wiki/middleware#limiter) - Vertaald in [15 talen](https://docs.gofiber.io/) - En nog veel meer, [ontdek Fiber](https://fiber.wiki/) ## πŸ’‘ Filosofie Nieuwe gophers die de overstap maken van [Node.js](https://nodejs.org/en/about/) naar [Go](https://golang.org/doc/), hebben te maken met een leercurve voordat ze kunnen beginnen met het bouwen van hun webapplicaties of microservices. Fiber, als een **web framework**, is gebouwd met het idee van **minimalisme** en volgt de **UNIX-manier**, zodat nieuwe gophers snel de wereld van Go kunnen betreden met een warm en vertrouwd welkom.\ Fiber is **geΓ―nspireerd** door Express, het populairste webframework op internet. We hebben het **gemak** van Express gecombineerd met de **onbewerkte prestaties** van Go. Als je ooit een webapplicatie in Node.js hebt geΓ―mplementeerd (_zoals Express of vergelijkbaar_), dan zullen veel methoden en principes **heel gewoon** voor je lijken. We **luisteren** naar onze gebruikers in [issues](https://github.com/gofiber/fiber/issues) (_en overal op het internet_) om een **snelle**, **flexibele** en **vriendelijk** Go web framework te maken voor **elke** taak, **deadline** en ontwikkelaar **vaardigheid**! Net zoals Express dat doet in de JavaScript-wereld. ## πŸ‘€ Voorbeelden Hieronder staan enkele van de meest voorkomende voorbeelden. > Bekijk ons [Recepten repository](https://github.com/gofiber/recipes) voor meer voorbeelden met code of bezoek onze [API documentatie](https://fiber.wiki). 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) // => βœ‹ /api/register }) 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 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 πŸ‘‹!") }) app.Listen(":3000") } ```
πŸ“š Show more code examples ### Views engines πŸ“– [Settings](https://docs.gofiber.io/application#settings) πŸ“– [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, }) }) 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://github.com/gofiber/fiber/blob/master/middleware/logger.md) ```go package main import ( "os" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/logger" ) func main() { app := fiber.New() // Default app.Use(logger.New()) // Custom logging format app.Use(logger.New(logger.Config{ Format: "${method} - ${path}", })) // More configs app.Use(logger.New(logger.Config{ Next: func(ctx *fiber.Ctx) bool { return ctx.Path() != "/private" }, Format: "${method} - ${path}", Output: os.Stdout, })) app.Listen(":3000") } ``` ### Cross-Origin Resource Sharing (CORS) πŸ“– [CORS](https://docs.gofiber.io/middleware#cors) ```go import ( "github.com/gofiber/fiber/v2" "github.com/gofiber/cors" ) func main() { app := fiber.New() // CORS with default config 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" }) app.Listen(":3000") } ``` ### JSON Response πŸ“– [JSON](https://docs.gofiber.io/context#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!"} }) app.Listen(":3000") } ``` ### WebSocket Upgrade πŸ“– [Websocket](https://docs.gofiber.io/middleware#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://github.com/gofiber/fiber/blob/master/middleware/recover.md) ```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") }) app.Listen(":3000") } ```
## 🧬 Fiber Middleware The Fiber middleware modules listed here are maintained by the [Fiber team](https://github.com/orgs/gofiber/people). | Middleware | Description | Built-in middleware | | :--- | :--- | :--- | | [adaptor](https://github.com/gofiber/adaptor) | Converter for net/http handlers to/from Fiber request handlers, special thanks to @arsmn! | - | | [basicauth](https://github.com/gofiber/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/blob/master/middleware/compress.md) | Compression middleware for Fiber, it supports `deflate`, `gzip` and `brotli` by default. | `middleware.Compress()` | | [cors](https://github.com/gofiber/cors) | Enable cross-origin resource sharing \(CORS\) with various options. | - | | [csrf](https://github.com/gofiber/csrf) | Protect from CSRF exploits. | - | | [filesystem](https://github.com/gofiber/fiber/blob/master/middleware/filesystem.md) | FileSystem middleware for Fiber, special thanks and credits to Alireza Salary | - | | [favicon](https://github.com/gofiber/fiber/blob/master/middleware/favicon.md) | Ignore favicon from logs or serve from memory if a file path is provided. | `middleware.Favicon()` | | [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. | - | | [limiter](https://github.com/gofiber/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/blob/master/middleware/logger.md) | HTTP request/response logger. | `middleware.Logger()` | | [pprof](https://github.com/gofiber/pprof) | Special thanks to Matthew Lee \(@mthli\) | - | | [recover](https://github.com/gofiber/fiber/blob/master/middleware/recover.md) | Recover middleware recovers from panics anywhere in the stack chain and handles the control to the centralized[ ErrorHandler](error-handling.md). | `middleware.Recover()` | | [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. | - | | [requestid](https://github.com/gofiber/fiber/blob/master/middleware/request_id.md) | Request ID middleware generates a unique id for a request. | `middleware.RequestID()` | | [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-swagger](https://github.com/arsmn/fiber-swagger) - [arsmn/fiber-casbin](https://github.com/arsmn/fiber-casbin) - [arsmn/fiber-introspect](https://github.com/arsmn/fiber-introspect) - [shareed2k/fiber_tracing](https://github.com/shareed2k/fiber_tracing) - [shareed2k/fiber_limiter](https://github.com/shareed2k/fiber_limiter) - [thomasvvugt/fiber-boilerplate](https://github.com/thomasvvugt/fiber-boilerplate) - [arsmn/gqlgen](https://github.com/arsmn/gqlgen) - [kiyonlin/fiber_limiter](https://github.com/kiyonlin/fiber_limiter) - [juandiii/go-jwk-security](https://github.com/juandiii/go-jwk-security) - [itsursujit/fiber-boilerplate](https://github.com/itsursujit/fiber-boilerplate) ## πŸ‘ Bijdragen Om de actieve ontwikkelingen van `Fiber` te ondersteunen of om een **bedankje** te geven: 1. Voeg een [GitHub Star](https://github.com/gofiber/fiber/stargazers) toe aan het project. 2. Tweet over het project [op je Twitter account](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. Schrijf een recensie of tutorial op [Medium](https://medium.com/), [Dev.to](https://dev.to/) of een persoonlijke blog. 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)