37 KiB
Fiber היא web framework בהשראת Express הבנויה על גבי Fasthttp, מנוע ה-HTTP המהיר ביותר עבור Go. נועדה להקל על העניינים למען פיתוח מהיר, ללא הקצאות זכרון ולוקחת ביצועים בחשבון.
⚡️ התחלה מהירה
package main
import "github.com/gofiber/fiber"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) {
c.Send("Hello, World 👋!")
})
app.Listen(3000)
}
🤖 מדדים
הבדיקות מבוצעות על ידי TechEmpower ו-Go Web. אם אתם רוצים לראות את כל התוצאות, אנא בקרו ב-Wiki שלנו.
⚙️ התקנה
קודם כל, הורידו והתקינו את Go. נדרשת גרסה 1.11
ומעלה.
ההתקנה מתבצעת באמצעות הפקודה go get
:
go get -u github.com/gofiber/fiber
🎯 יכולות
- ניתוב רובסטי
- הנגשת קבצים סטטיים
- ביצועים גבוהים במיוחד
- צורך כמות זכרון קטנה
- נקודות קצה עבור API
- תמיכה ב-Middleware & Next
- תכנות מהיר של צד שרת
- מנועי תבניות
- תמיכה ב-WebSocket
- הגבלת קצבים ובקשות
- Available in 12 languages
- והרבה יותר, חקור את Fiber
💡 פילוסופיה
gophers חדשים שעושים את המעבר מ-Node.js ל-Go מתמודדים עם עקומת למידה לפני שהם יכולים להתחיל לבנות את יישומי האינטרנט או המיקרו-שירותים שלהם. Fiber כ-web framework, נוצרה עם רעיון המינימליזם ועוקבת אחרי הדרך של UNIX, כך ש-gophers חדשים יוכלו להיכנס במהירות לעולם של Go עם קבלת פנים חמה ואמינה.
Fiber נוצרה בהשראת Express, ה-web framework הפופולרית ביותר ברחבי האינטרנט. שילבנו את הקלות של Express והביצועים הגולמיים של Go. אם אי-פעם מימשתם יישום web ב-Node.js (באמצעות Express או דומיו), אז הרבה מהפונקציות והעקרונות ייראו לכם מאוד מוכרים.
אנחנו מקשיבים למשתמשים שלנו ב-issues (ובכל רחבי האינטרנט) כדי ליצור web framework מהירה, גמישה, וידידותית בשפת Go עבור כל משימה, תאריך יעד וכישורי מפתח! בדיוק כמו ש-Express מבצע בעולם של JavaScript.
👀 דוגמאות
להלן כמה מהדוגמאות הנפוצות. אם ברצונכם לראות דוגמאות קוד נוספות, אנא בקרו במאגר המתכונים שלנו או בקרו בתיעוד ה-API שלנו.
func main() {
app := fiber.New()
// GET /john
app.Get("/:name", func(c *fiber.Ctx) {
msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
c.Send(msg) // => Hello john 👋!
})
// GET /john/75
app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) {
msg := fmt.Sprintf("👴 %s is %s years old", c.Params("name"), c.Params("age"))
c.Send(msg) // => 👴 john is 75 years old
})
// GET /dictionary.txt
app.Get("/:file.:ext", func(c *fiber.Ctx) {
msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
c.Send(msg) // => 📃 dictionary.txt
})
// GET /flights/LAX-SFO
app.Get("/flights/:from-:to", func(c *fiber.Ctx) {
msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to"))
c.Send(msg) // => 💸 From: LAX, To: SFO
})
// GET /api/register
app.Get("/api/*", func(c *fiber.Ctx) {
msg := fmt.Sprintf("✋ %s", c.Params("*"))
c.Send(msg) // => ✋ /api/register
})
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
app.Listen(3000)
}
func main() {
app := fiber.New()
// Match any route
app.Use(func(c *fiber.Ctx) {
fmt.Println("🥇 First handler")
c.Next()
})
// Match all routes starting with /api
app.Use("/api", func(c *fiber.Ctx) {
fmt.Println("🥈 Second handler")
c.Next()
})
// GET /api/register
app.Get("/api/list", func(c *fiber.Ctx) {
fmt.Println("🥉 Last handler")
c.Send("Hello, World 👋!")
})
app.Listen(3000)
}
📚 הצג דוגמאות קוד נוספות
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.
import (
"github.com/gofiber/fiber"
"github.com/gofiber/template/pug"
)
func main() {
// You can setup Views engine before initiation app:
app := fiber.New(&fiber.Settings{
Views: pug.New("./views", ".pug"),
})
// OR after initiation app at any convenient location:
app.Settings.Views = pug.New("./views", ".pug"),
// And now, you can call template `./views/home.pug` like this:
app.Get("/", func(c *fiber.Ctx) {
c.Render("home", fiber.Map{
"title": "Homepage",
"year": 1999,
})
})
// ...
}
קיבוץ routes ל-chains
📖 קבוצות
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("/list", handler) // /api/v1/list
v1.Get("/user", handler) // /api/v1/user
// API v2 routes
v2 := api.Group("/v2", mongodb()) // /api/v2
v2.Get("/list", handler) // /api/v2/list
v2.Get("/user", handler) // /api/v2/user
// ...
}
Middleware של לוגים
📖 Logger
import (
"github.com/gofiber/fiber"
"github.com/gofiber/fiber/middleware"
)
func main() {
app := fiber.New()
// Default
app.Use(middleware.Logger())
// Custom logging format
app.Use(middleware.Logger("${method} - ${path}"))
// Custom Config
app.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Next: func(ctx *fiber.Ctx) bool {
return ctx.Path() != "/private"
},
Format: "${method} - ${path}",
Output: io.Writer,
}))
app.Listen(3000)
}
שיתוף משאבים בין מקורות (CORS)
📖 CORS
import (
"github.com/gofiber/fiber"
"github.com/gofiber/cors"
)
func main() {
app := fiber.New()
// CORS with default config
app.Use(cors.New())
app.Listen(3000)
}
בדוק את ה-CORS על ידי העברת כל domain ב-header של Origin
:
curl -H "Origin: http://example.com" --verbose http://localhost:3000
תגובת 404 מותאמת אישית
func main() {
app := fiber.New()
app.Static("./public")
app.Get("/demo", func(c *fiber.Ctx) {
c.Send("This is a demo!")
})
app.Post("/register", func(c *fiber.Ctx) {
c.Send("Welcome!")
})
// Last middleware to match anything
app.Use(func(c *fiber.Ctx) {
c.SendStatus(404)
// => 404 "Not Found"
})
app.Listen(3000)
}
תגובת JSON
📖 JSON
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
app := fiber.New()
app.Get("/user", func(c *fiber.Ctx) {
c.JSON(&User{"John", 20})
// => {"name":"John", "age":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
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
}
Middleware של התאוששות
📖 התאוששות
import (
"github.com/gofiber/fiber"
"github.com/gofiber/fiber/middleware"
)
func main() {
app := fiber.New()
app.Use(middleware.Recover())
app.Get("/", func(c *fiber.Ctx) {
panic("normally this would crash your app")
})
app.Listen(3000)
}
🧬 Fiber Middleware
The Fiber middleware modules listed here are maintained by the Fiber team.
Middleware | Description | Built-in middleware |
---|---|---|
adaptor | Converter for net/http handlers to/from Fiber request handlers, special thanks to @arsmn! | - |
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 | Compression middleware for Fiber, it supports deflate , gzip and brotli by default. |
middleware.Compress() |
cors | Enable cross-origin resource sharing CORS with various options. |
- |
csrf | Protect from CSRF exploits. | - |
filesystem | FileSystem middleware for Fiber, special thanks and credits to Alireza Salary | - |
favicon | Ignore favicon from logs or serve from memory if a file path is provided. | middleware.Favicon() |
helmet | Helps secure your apps by setting various HTTP headers. | - |
jwt | JWT returns a JSON Web Token JWT auth middleware. |
- |
keyauth | Key auth middleware provides a key based authentication. | - |
limiter | Rate-limiting middleware for Fiber. Use to limit repeated requests to public APIs and/or endpoints such as password reset. | - |
logger | HTTP request/response logger. | middleware.Logger() |
pprof | Special thanks to Matthew Lee @mthli |
- |
recover | Recover middleware recovers from panics anywhere in the stack chain and handles the control to the centralized ErrorHandler. | middleware.Recover() |
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 | Request ID middleware generates a unique id for a request. | middleware.RequestID() |
session | This session middleware is build on top of fasthttp/session by @savsgio MIT. Special thanks to @thomasvvugt for helping with this middleware. | - |
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 | 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!
💬 מדיה
- 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
- Building a Basic REST API in Go using Fiber - 23 Apr 2020
- 📺 Building a REST API using GORM and Fiber - 25 Apr 2020
- 🌎 Create a travel list app with Go, Fiber, Angular, MongoDB and Google Cloud Secret Manager - 25 Apr 2020
- Fiber v1.9.6 🔥 How to improve performance by 817% and stay fast, flexible and friendly? - 12 May 2020
- The road to web-based authentication with Fiber ⚡ - 20 May 2020
- Building an Express-style API in Go with Fiber - 10 June 2020
- Construir una API en Golang con Fiber 🇪🇸 - 28 June 2020
- 📺Why Go Fiber Is THE New Framework To Learn - 29 June 2020
👍 לתרום
אם אתם רוצים לומר תודה או/ו לתמוך בפיתוח הפעיל של Fiber
:
- תוסיפו GitHub Star לפרויקט.
- צייצו לגבי הפרויקט בטוויטר שלכם.
- כתבו ביקורת או מדריך ב-Medium, Dev.to או בבלוג האישי שלכם.
- עזרו לנו לתרגם את ה-
README
הזה לשפה אחרת. - תמכו בפרויקט על ידי תרומת כוס קפה.
☕ תומכים
Fiber היא פרויקט קוד פתוח שתשלום חשובונתיו מסתמך על תרומות, כגון שם ה-domain שלנו, gitbook, netlify ו-serverless hosting. אם אתם רוצים לתמוך ב-Fiber, אתם יכולים ☕ קנו קפה כאן.
משתמש | תרומה | |
---|---|---|
@destari | ☕ x 10 | |
@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 |
💻 תורמי קוד
⭐️ Stargazers
⚠️ רישיון
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).
רישיונות של ספריות צד שלישי