Skip to content

Latest commit

 

History

History
662 lines (511 loc) · 41.3 KB

README_it.md

File metadata and controls

662 lines (511 loc) · 41.3 KB

Fiber

Fiber è un framework web inspirato a Express costruito sopra Fasthttp, un motore HTTP molto veloce per Go. Progettato per semplificare le cose per uno sviluppo veloce con zero allocazione di memoria e le prestazioni in mente.

⚡️ Avvio rapido

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")
}

🤖 Benchmark

Questi test sono stati eseguiti da TechEmpower e Go Web. Se vuoi vedere tutti i risultati, visita la nostra Wiki.

⚙️ Installazione

Assicurati di avere Go (download) installato. Versione 1.14 o superiore.

Inizializza il tuo progetto creando una cartella e successivamente lanciando go mod init github.com/your/repo (per maggiori info) da dentro la cartella. Dopo installa Fiber con il comando go get:

go get -u github.com/gofiber/fiber/v2

🎯 Caratteristiche

💡 Filosofia

I nuovi gopher che passano da Node.js a Go hanno a che fare con una curva di apprendimento prima di poter iniziare a creare le proprie applicazioni web o microservizi. Fiber, come web framework , è stato creato con l'idea di minimalismo e seguendo lo 'UNIX way' , così i nuovi gopher posso entrare rapidamente nel mondo di Go con un caldo e fidato benvenuto.

Fiber è inspirato da Express, il web framework più popolare su internet. Abbiamo combiniamo la facilità di Express e le pure prestazioni di Go. Se hai mai implementato una applicazione web in Node.js (utilizzando Express o simili), allora i tanti metodi e principi ti saranno molto familiari.

Limitazioni

  • Dato che Fiber utilizza unsafe, la libreria non sempre potrebbe essere compatibile con l'ultima versione di Go. Fiber 2.18.0 è stato testato con la versioni 1.14 alla 1.17 di Go.
  • Fiber non è compatibile con le interfacce net/http. Questo significa che non è possibile utilizzare progetti come qglgen, go-swagger, o altri che fanno parte dell'ecosistema net/http.

👀 Esempi

Qui sotto trovi molti dei più comuni esempi. Se vuoi vedere ulteriori esempi, visita il nostro Recipes repository o la nostra documentazione API .

func main() {
    app := fiber.New()

    // GET /api/register
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ register
    })

    // 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 /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 /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 /john
    app.Get("/:name", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
        return c.SendString(msg) // => Hello john 👋!
    })

    log.Fatal(app.Listen(":3000"))
}
func main() {
    app := fiber.New()

    // GET /api/register
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ register
    }).Name("api")

    data, _ := json.MarshalIndent(app.GetRoute("api"), "", "  ")
    fmt.Print(string(data))
    // Prints:
    // {
    //    "method": "GET",
    //    "name": "api",
    //    "path": "/api/*",
    //    "params": [
    //      "*1"
    //    ]
    // }


    log.Fatal(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

    log.Fatal(app.Listen(":3000"))
}
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"))
}
📚 Mostra altri esempi

View engine

📖 Config 📖 Engines 📖 Render

Fiber usa di default html/template quando nessun view engine è stato impostato.

Se vuoi eseguire parzialmente o utilizzare un engine differente come amber, handlebars, mustache o pug ecc..

Dai un'occhiata al pacchetto Template che supporta multipli view engine.

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"))
}

Raggruppare le route

📖 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"))
}

Controlla il CORS passando un dominio qualsiasi nell'header Origin:

curl -H "Origin: http://example.com" --verbose http://localhost:3000

Risposte 404 personalizzate

📖 HTTP Methods

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"))
}

Risposte 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) 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

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"))
}

Utilizzare Trusted Proxy

📖 Config

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New(fiber.Config{
        EnableTrustedProxyCheck: true,
        TrustedProxies: []string{"0.0.0.0", "1.1.1.1/30"}, // IP address or IP address range
        ProxyHeader: fiber.HeaderXForwardedFor},
    })

    // ...

    log.Fatal(app.Listen(":3000"))
}

🧬 Middleware Interni

Qui una lista dei middleware inclusi con Fiber.

Middleware Descrizione
basicauth Basic auth middleware provvede un'autenticazione base HTTP. Chiama un next handler per credenziali valide e 401 Unauthorized per credenziali mancanti o invalide.
compress Compression middleware per Fiber, supporta deflate, gzip e brotli di default.
cache Intercetta e cacha le risposte
cors Attiva il cross-origin resource sharing (CORS) con diverse opzioni.
csrf Protegga da exploit CSRF.
filesystem FileSystem middleware per Fiber, un ringraziamento speciale e meriti a Alireza Salary
favicon Ignora la favicon dai log o serve dalla memoria se un file path è stato fonito.
limiter Rate-limiting middleware per Fiber. Viene usato per limitare le richieste ripetute a un API pubblica e/o a degli endpoint tipo il reset della password.
logger HTTP request/response logger.
pprof Un ringraziamento speciale a Matthew Lee (@mthli)
proxy Permette di effettuare proxy delle richieste a server multipli.
requestid Aggiunge un requestid ad ogni richiesta request.
recover Recover middleware recupera da panic ovunque nello stack chain e passa il controllo a un ErrorHandler centralizzato.
timeout Aggiunge un tempo massimo per richiesta e la invia all'ErrorHandler se il tempo massimo viene superato.

🧬 Middleware Esterni

La lista dei moduli middleware hostati esternamente e mantenuti dal team di Fiber.

Middleware Descrizione
adaptor Converte un net/http handler da/a un Fiber request handler, un ringrazimento speciale a @arsmn!
helmet Aiuta a rendere sicura la tua app impostando diversi headers HTTP.
jwt JWT ritorna un JSON Web Token (JWT) auth middleware.
keyauth Key auth middleware fornisce una autenticazione basata su chiavi.
rewrite Rewrite middleware riscrive le URL basandosi sulle regole fornite. Può essere utile per mantenere la compatibilità o semplicemente per creare link più puliti e descrittivi.
session Questo session middleware per la sessione è costruito sopra a fasthttp/session da @savsgio MIT. Un ringraziamento speciale a @thomasvvugt per l'aiuto con questo middleware.
template Questo pacchetto contiene 8 template engine che possono essere usati con Fiber v1.10.x Go versione 1.13 o superiore sono richiesti.
websocket Basato su Fasthttp WebSocket per Fiber con supporto a Locals!

🌱 Middleware di Terzi

Questa è una lista dei middleware che sono stati creati dalla comunità di Fiber, puoi creare una PR se vuoi vedere anche il tuo!

👍 Contribuire

Se vuoi dirci grazie e/o supportare lo sviluppo di Fiber:

  1. Aggiungi una stella GitHub al progetto.
  2. Tweeta del progetto su Twitter.
  3. Scrivi una recensione o un tutorial su Medium, Dev.to o sul tuo blog personale.
  4. Supporta il progetto donando una tazza di caffè.

☕ Supporter

Fiber è un progetto open source che va avanti grazie alle donazioni per pagare le spese e.g. il nostro nome dominio, gitbook, netlify e hosting serverless. Se vuoi supportare Fiber, puoi ☕ comprarci un caffè qui.

Utente Donazione
@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

‎‍💻 Code Contributor

Code Contributors

⭐️ Stargazers

Stargazers over time

⚠️ Licenza

Copyright (c) 2019-ora Fenny e Contributors. Fiber è un software free e open-source licenzato sotto MIT License. Il logo ufficiale è stato creato da Vic Shóstak e distribuito sotto licenza Creative Commons (CC BY-SA 4.0 International).

**Licenze di Terze parti **