18 KiB
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
package main
import "github.com/gofiber/fiber"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) {
c.Send("Hallo, Wereld!")
})
app.Listen(3000)
}
⚙️ Installatie
Allereerst, download en installeer Go. 1.11
of hoger is vereist.
Installatie wordt gedaan met behulp van het go get
commando:
go get -u github.com/gofiber/fiber
🤖 Benchmarks
Deze tests zijn uitgevoerd door TechEmpower en Go Web. Bezoek onze Wiki voor alle benchmark resultaten.
🎯 Features
- Robuuste routing
- Serveer statische bestanden
- Extreme prestaties
- Weinig geheugenruimte
- API endpoints
- Middleware & Next ondersteuning
- Snelle server-side programmering
- Template engines
- WebSocket ondersteuning
- Rate Limiter
- Vertaald in 11 andere talen
- En nog veel meer, ontdek Fiber
💡 Filosofie
Nieuwe gophers die de overstap maken van Node.js naar Go, 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 (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 voor meer voorbeelden met code of bezoek onze API documentatie.
Routing
📖 https://fiber.wiki/#basic-routing
func main() {
app := fiber.New()
// GET /john
app.Get("/:naam", func(c *fiber.Ctx) {
fmt.Printf("Hallo %s!", c.Params("naam"))
// => Hallo john!
})
// GET /john
app.Get("/:naam/:leeftijd?", func(c *fiber.Ctx) {
fmt.Printf("Naam: %s, Leeftijd: %s", c.Params("naam"), c.Params("leeftijd"))
// => Naam: john, Leeftijd:
})
// GET /api/registreer
app.Get("/api/*", func(c *fiber.Ctx) {
fmt.Printf("/api/%s", c.Params("*"))
// => /api/registreer
})
app.Listen(3000)
}
Serveer statische bestanden
📖 https://fiber.wiki/application#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
app.Listen(3000)
}
Middleware & Next
📖 https://fiber.wiki/routing#middleware 📖 https://fiber.wiki/context#next
func main() {
app := fiber.New()
// Komt overeen met elke route
app.Use(func(c *fiber.Ctx) {
fmt.Println("Eerste middleware")
c.Next()
})
// Komt overeen met alle routes welke beginnen met /api
app.Use("/api", func(c *fiber.Ctx) {
fmt.Println("Tweede middleware")
c.Next()
})
// GET /api/registreer
app.Get("/api/registreer", func(c *fiber.Ctx) {
fmt.Println("Laatste middleware")
c.Send("Hallo, Wereld!")
})
app.Listen(3000)
}
📚 Bekijk meer code voorbeelden
Template engines
📖 https://fiber.wiki/application#settings
📖 https://fiber.wiki/context#render
📖 https://fiber.wiki/middleware#template
Fiber ondersteunt de standaard Go template engine
Maar het is ook mogelijk om andere template engines te gebruiken zoals amber, handlebars, mustache of pug.
Gebruik hiervoor onze Template Middleware.
package main
import (
"github.com/gofiber/fiber"
"github.com/gofiber/template"
)
func main() {
// Stel een template engine in tijdens de aanvang van de app:
app := fiber.New(&fiber.Settings{
TemplateEngine: template.Mustache(),
TemplateFolder: "./views",
TemplateExtension: ".tmpl",
})
// OF na de aanvang van de app op elke geschikte locatie:
app.Settings.TemplateEngine = template.Mustache()
app.Settings.TemplateFolder = "./views"
app.Settings.TemplateExtension = ".tmpl"
// Het aanroepen van de template `./views/home.tmpl` kan als volgt:
app.Get("/", func(c *fiber.Ctx) {
c.Render("home", fiber.Map{
"title": "Home",
"year": 2020,
})
})
// ...
}
Routes groeperen in chains
📖 https://fiber.wiki/application#group
func main() {
app := fiber.New()
// Root API route
api := app.Group("/api", cors()) // /api
// API v1 routes
v1 := api.Group("/v1", mysql()) // /api/v1
v1.Get("/lijst", handler) // /api/v1/lijst
v1.Get("/gebruiker", handler) // /api/v1/gebruiker
// API v2 routes
v2 := api.Group("/v2", mongodb()) // /api/v2
v2.Get("/lijst", handler) // /api/v2/lijst
v2.Get("/gebruiker", handler) // /api/v2/gebruiker
// ...
}
Middleware logger
📖 https://fiber.wiki/middleware#logger
import (
"github.com/gofiber/fiber"
"github.com/gofiber/logger"
)
func main() {
app := fiber.New()
// Optionele loggerconfiguratie
config := logger.Config{
Format: "${time} - ${method} ${path}\n",
TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
}
// Logger met configuratie
app.Use(logger.New(config))
app.Listen(3000)
}
Cross-Origin Resource Sharing (CORS)
📖 https://fiber.wiki/middleware#cors
import (
"github.com/gofiber/fiber"
"github.com/gofiber/cors"
)
func main() {
app := fiber.New()
// CORS met standaardconfiguratie
app.Use(cors.New())
app.Listen(3000)
}
Controleer CORS door een willekeurig domein in de Origin
-header door te geven:
curl -H "Origin: http://google.nl" --verbose http://localhost:3000
Custom 404 response
📖 https://fiber.wiki/application#http-methods
func main() {
app := fiber.New()
app.Static("/public")
app.Get("/demo", func(c *fiber.Ctx) {
c.Send("Dit is een demo!")
})
app.Post("/registreer", func(c *fiber.Ctx) {
c.Send("Welkom!")
})
// Laatste middleware die bij alles past
app.Use(func(c *fiber.Ctx) {
c.SendStatus(404)
// => 404 "Not Found"
})
app.Listen(3000)
}
JSON Response
📖 https://fiber.wiki/context#json
type Gebruiker struct {
Naam string `json:"naam"`
Leeftijd int `json:"leeftijd"`
}
func main() {
app := fiber.New()
app.Get("/gebruiker", func(c *fiber.Ctx) {
c.JSON(&Gebruiker{"John", 20})
// => {"naam":"John", "leeftijd":20}
})
app.Get("/json", func(c *fiber.Ctx) {
c.JSON(fiber.Map{
"success": true,
"message": "Hi John!",
})
// => {"success":true, "message":"Hi John!"}
})
app.Listen(3000)
}
WebSocket Upgrade
📖 https://fiber.wiki/middleware#websocket
import (
"github.com/gofiber/fiber"
"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
}
}
}))
app.Listen(3000)
// ws://localhost:3000/ws
}
Recover middleware
📖 https://fiber.wiki/middleware#recover
import (
"github.com/gofiber/fiber"
"github.com/gofiber/recover"
)
func main() {
app := fiber.New()
// Optionele recover configuratie
config := recover.Config{
Handler: func(c *fiber.Ctx, err error) {
c.SendString(err.Error())
c.SendStatus(500)
},
}
// Logger met aangepaste configuratie
app.Use(recover.New(config))
app.Listen(3000)
}
🧬 Beschikbare Middlewares
Voor eenvoudiger en duidelijker werk hebben we de beschikbare middleware in afzonderlijke repositories geplaatst:
- Basic Authentication
- Key Authentication
- Compression
- Request ID
- WebSocket
- Rewrite
- Recover
- Limiter
- Session
- Logger
- Helmet
- Embed
- PPROF
- CORS
- CSRF
- JWT
💬 Media
- Welcome to Fiber — an Express.js styled web framework written in Go with ❤️ — 03 Feb 2020
- Fiber released v1.7! 🎉 What's new and is it still fast, flexible and friendly? — 21 Feb 2020
- 🚀 Fiber v1.8. What's new, updated and re-thinked? — 03 Mar 2020
- Is switching from Express to Fiber worth it? 🤔 — 01 Apr 2020
- Creating Fast APIs In Go Using Fiber — 07 Apr 2020
👍 Bijdragen
Om de actieve ontwikkelingen van Fiber
te ondersteunen of om een bedankje te geven:
- Voeg een GitHub Star toe aan het project.
- Tweet over het project op je Twitter account.
- Schrijf een recensie of tutorial op Medium, Dev.to of een persoonlijke blog.
- Help ons deze
README
naar een andere taal te vertalen. - Support the project by donating a cup of coffee.
☕ 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
User | Donation | |
---|---|---|
@thomasvvugt | ☕ x 5 | |
@ekaputra07 | ☕ x 5 | |
@bihe | ☕ x 3 | |
@justdave | ☕ x 3 | |
@koddr | ☕ x 1 | |
@raymayemir | ☕ x 1 | |
@melkorm | ☕ x 1 | |
@marvinjwendt | ☕ x 1 | |
@toishy | ☕ x 1 |
💻 Code Contributors
⚠️ License
Copyright (c) 2019-present Fenny and Contributors. Fiber
is free and open-source software licensed under the MIT License. Official logo was created by Vic Shóstak and distributed under Creative Commons license (CC BY-SA 4.0 International).
Third-party library licenses