Skip to content

Latest commit

 

History

History
715 lines (554 loc) · 50.2 KB

README_pl.md

File metadata and controls

715 lines (554 loc) · 50.2 KB

Fiber

Fiber jest frameworkiem webowym inspirowanym javascriptowym frameworkiem Express. Został zbudowany na podstawie Fasthttp, najszybszym silniku HTTP powstałym w Go. Został zaprojektowany tak, aby ułatwić szybkie programowanie z myślą o wydajności oraz zerowej alokacji pamięci.

⚡️ Szybki start

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

🤖 Testy wydajności

Testy te zostały przeprowadzone przez TechEmpower oraz Go Web. Jeżeli chcesz zobaczyć wszystkie wyniki, proszę, odwiedź naszą Wiki.

⚙️ Instalacja

Upewnij się, że masz zainstalowane Go (pobierz). Wymagana jest wersja 1.17 lub wyższa.

Zainicjalizuj swój projekt poprzez stworzenie folderu i użycie komendy go mod init github.com/your/repo (zobacz więcej) w tym folderze. Następnie zainstaluj Fiber'a przy użyciu komendy go get:

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

🎯 Funkcjonalności

💡 Nasza filozofia

Nowi gophersi, którzy przenoszą się z Node.js na Go, mierzą się z problemami nauczania, zanim będą mogli rozpocząć budowanie swoich aplikacji internetowych lub mikroserwisów. Fiber, jako framework, został stworzony z myślą o minimalizmie i podąża za filozofią UNIX, aby nowi programiści w Go mogli szybko wkroczyć do świata Go, ciesząc się serdecznym i godnym zaufania przyjęciem.

Fiber jest inspirowany javascriptowym frameworkiem Express, najpopularniejszym frameworkiem webowym w internecie. Połączyliśmy łatwość Express'a z czystą wydajnością Go. Jeżeli kiedykolwiek tworzyłeś aplikację webową w Node.js (korzystając z Express'a lub podobnych), wtedy wiele metod i zasad będzie dla ciebie bardzo znajomych.

Słuchamy naszych użytkowników w issues, na kanale Discord i wszędzie w Internecie, aby stworzyć szybki, elastyczny i przyjazny framework webowy dla Go, który nadaje się do wszelkich zadań, terminów i umiejętności programistów! Tak jak Express w świecie JavaScript.

⚠️ Ograniczenia

  • Z uwagi na użycie unsafe przez Fiber'a, biblioteka nie zawsze będzie kompatybilna z najnowszą wersją Go. Fiber 2.40.0 został przetestowany z Go w wersjach 1.17 i 1.21.
  • Fiber nie jest kompatybilny z interfejsami net/http. To oznacza, że nie będziesz w stanie korzystać (bezpośrednio) z projektów takich jak gqlgen, go-swagger lub innych, które są częścią ekosystemu net/http.

👀 Przykłady

Poniżej znajdują się niektóre przykłady. Jeśli chcesz zobaczyć więcej przykładów kodu, odwiedź nasze repozytorium Recipes lub odwiedź naszą dokumentację 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/list
    app.Get("/api/list", func(c *fiber.Ctx) error {
        fmt.Println("🥉 Last handler")
        return c.SendString("Hello, World 👋!")
    })

    log.Fatal(app.Listen(":3000"))
}
📚 Pokaż więcej przykładów

Silniki widoków

📖 Config 📖 Silniki 📖 Render

Fiber domyślnie korzysta z html/template, kiedy nie wybrano żadnego silnika.

Jeżeli chcesz wykonywać lub korzystać z innego silnika jak amber, handlebars, mustache, pug itd. sprawdź naszą paczkę Template, która wspiera wiele silników widoków.

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

Grupowanie route'ów w łańcuchy

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

Sprawdź CORS poprzez przesłanie jakiejkolwiek domeny w nagłówku Origin:

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

Niestandardowa odpowiedź 404

📖 Metody HTTP

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

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

Dodanie WebSocket

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

Wydarzenia wysyłane przez serwer

📖 More Info

import (
    "github.com/gofiber/fiber/v2"
    "github.com/valyala/fasthttp"
)

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

  app.Get("/sse", func(c *fiber.Ctx) error {
    c.Set("Content-Type", "text/event-stream")
    c.Set("Cache-Control", "no-cache")
    c.Set("Connection", "keep-alive")
    c.Set("Transfer-Encoding", "chunked")

    c.Context().SetBodyStreamWriter(fasthttp.StreamWriter(func(w *bufio.Writer) {
      fmt.Println("WRITER")
      var i int

      for {
        i++
        msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
        fmt.Fprintf(w, "data: Message: %s\n\n", msg)
        fmt.Println(msg)

        w.Flush()
        time.Sleep(5 * time.Second)
      }
    }))

    return nil
  })

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

Middleware Recover

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

Używanie zaufanego 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"))
}

🧬 Wbudowane Middleware

Poniżej znajduje się lista middleware, które są zawarte wraz z frameworkiem Fiber.

Middleware Opis
basicauth Podstawowe middleware zapewniające podstawowe uwierzytelnienie HTTP. Wywołuje ono handler Next dla poprawnych danych uwierzytelniających oraz 401 Unauthorized dla niepoprawnych lub brakujacych danych.
cache Przechwytuje i cache'uje odpowiedzi
compress Middleware kompresji dla Fiber'a, podstawowo wspiera deflate, gzip i brotli.
cors Zezwala na cross-origin resource sharing (CORS) z wieloma opcjami konfiguracji.
csrf Chroni przed exploitami CSRF.
encryptcookie Middleware szyfrujące wartości ciasteczek.
envvar Odsłania zmienne środowiskowe oraz zapewnia dodatkową konfigurację.
etag Middleware ETag, które pozwala cache być bardziej wydajnym i oszczędzać transfer danych, jako, że serwer web nie musi wysyłać pełnej odpowiedzi, jeżeli dane się nie zmieniły.
expvar Middleware Expvar, które udostępnia warianty uruchomieniowe przez swój serwer HTTP, w formacie JSON
favicon Ignoruje favicony z logów lub serwuje je z pamięci, gdy ścieżka do pliku została podana
filesystem FileSystem middleware for Fiber, special thanks and credits to Alireza Salary
limiter Rate-limiting middleware for Fiber. Use to limit repeated requests to public APIs and/or endpoints such as password reset.
logger Logger zapytań/odpowiedzi HTTP.
monitor Middleware Monitor, które reportuje metryki serwera, inspirowane express-status-monitor
pprof Specjalne podziękowania dla Matthew Lee (@mthli)
proxy Pozwala ci przesyłać zapytania dalej do wielu serwerów
recover Middleware Recover przywraca działanie po wystąpieniu awarii w dowolnym miejscu w programie i przekazuje kontrolę do scentralizowanego typu ErrorHandler.
requestid Dodaje requestid do każdego zapytania.
session Middleware sesji. UWAGA: To middleware korzysta z naszej paczki Storage
skip Middleware skip, które pomija opakowany handler, jeżeli założona zasada jest spełniona
rewrite Middleware Rewrite przepisuje scieżkę URL bazując na podanych zasadach. Może być przydatne w przypadku potrzeby kompatybilności wstecznej lub po prostu tworzeniu czystszych i bardziej przejrzystych linków.
timeout Dodaje maksymalny czas dla zapytania i podaje go dalej do ErrorHandler, gdy limit został przekroczony.
adaptor Konwertuje handlery net/http do/z zapytania Fiber'a, specjalne podziękowania dla @arsmn!
helmet Pomaga zabezpieczyć twoją aplikację poprzez ustawianie wielu nagłówków HTTP.
redirect Middleware przekierowywujące
keyauth Middleware Key auth zapewnia uwierzytelnienie na podstawie klucza.

🧬 Zewnętrzne middleware

Lista zewnętrznie hostowanych modułów middleware i utrzymywanych przez zpesół Fiber'a.

Middleware Description
jwt JWT returns a JSON Web Token (JWT) auth middleware.
storage Premade storage drivers that implement the Storage interface, designed to be used with various Fiber middlewares.
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!

🕶️ Awesome List

Po więcej artykułów, middleware, przykładów lub narzędzi sprawdź naszą awesome list.

👍 Wspomaganie

Jeżeli chcesz podziękować i/lub wesprzeć aktywny rozwój Fiber'a:

  1. Dodaj Gwiazdkę GitHub dla tego projektu.
  2. Zatweetuj o tym projekcie na twoim 𝕏 (Twitter).
  3. Napisz recenzję lub tutorial na Medium, Dev.to lub personalnym blogu.
  4. Wesprzyj projekt, przekazując darowiznę w postaci filiżanki kawy.

☕ Wspierający

Fiber to projekt open source, który działa dzięki darowiznom, aby pokryć koszty, takie jak nasza nazwa domeny, GitBook, Netlify oraz hosting serverless. Jeśli chcesz wesprzeć Fiber, możesz ☕ tutaj kupić kawę.

Użytkownik Dotacja
@destari ☕ x 10
@dembygenesis ☕ x 5
@thomasvvugt ☕ x 5
@hendratommy ☕ x 5
@ekaputra07 ☕ x 5
@jorgefuertes ☕ x 5
@candidosales ☕ x 5
@l0nax ☕ 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

‎‍💻 Współtwórcy projektu

Code Contributors

⭐️ Obserwujący projekt

Stargazers over time

⚠️ Licencja

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

Licencje bibliotek od innych twórców