fiber/.github/README_pl.md

50 KiB
Raw Permalink Blame History

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.

📖 Podstawowy Routing

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

📖 Nazywanie Route'ów

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

📖 Serwowanie plików statycznych

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

📖 Middleware i Next

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