1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-24 20:04:03 +00:00
fiber/.github/README_ru.md
2020-03-07 22:41:14 +03:00

19 KiB
Raw Blame History

Fiber


Fiber — это веб фреймворк, который был вдохновлен 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)
}

⚙️ Установка

Прежде всего, скачайте и установите Go. Версия 1.11 или выше.

Установка выполняется с помощью команды go get:

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

🤖 Бенчмарки

Тестирование проводилось с помощью TechEmpower и Go Web. Если вы хотите увидеть все результаты, пожалуйста, посетите наш Wiki.

🎯 Особенности

💡 Философия

Новые Go-программисты, которые переключаются с Node.js на Go, имеют дело с очень извилистой кривой обучения, прежде чем они смогут начать создавать свои веб-приложения или микросервисы. Fiber, как веб-фреймворк, был создан с идеей минимализма и следовал принципу UNIX, так что новички смогут быстро войти в мир Go без особых проблем.

Fiber вдохновлен Express, самым популярным веб фреймворком в Интернете. Мы объединили простоту Express и чистую производительность Go. Если вы когда-либо реализовывали веб-приложение на Node.js (с использованием Express или аналогичного фреймворка), то многие методы и принципы покажутся вам очень знакомыми.

Мы прислушиваемся к нашим пользователям в issues (и остальном Интернете), чтобы создать быстрый, гибкий и дружелюбный веб фреймворк на Go для любых задач, дедлайнов и уровней разработчиков! Как это делает Express в мире JavaScript.

👀 Примеры

Ниже перечислены некоторые из распространенных примеров. Если вы хотите увидеть больше примеров кода, пожалуйста, посетите наш репозиторий рецептов или документацию по API.

Роутинг

Документация:

Пример:

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

  // GET /john
  app.Get("/:name", func(c *fiber.Ctx) {
    fmt.Printf("Hello %s!", c.Params("name"))
    // => Hello john!
  })

  // GET /john
  app.Get("/:name/:age?", func(c *fiber.Ctx) {
    fmt.Printf("Name: %s, Age: %s", c.Params("name"), c.Params("age"))
    // => Name: john, Age:
  })

  // GET /api/register
  app.Get("/api*", func(c *fiber.Ctx) {
    fmt.Printf("/api%s", c.Params("*"))
    // => /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)
}

Middleware и функция Next

Документация:

Пример:

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

  // Match any route
  app.Use(func(c *fiber.Ctx) {
    fmt.Println("First middleware")
    c.Next()
  })

  // Match all routes starting with /api
  app.Use("/api", func(c *fiber.Ctx) {
    fmt.Println("Second middleware")
    c.Next()
  })

  // POST /api/register
  app.Post("/api/register", func(c *fiber.Ctx) {
    fmt.Println("Last middleware")
    c.Send("Hello, World!")
  })

  app.Listen(3000)
}
📚 Показать больше примеров кода

Работа с шаблонами

Документация:

Поддерживаемые движки шаблонов:

Пример:

func main() {
  // Вы можете настроить нужный движок для шаблонов 
  // перед инициализацией приложения:
  app := fiber.New(&fiber.Settings{
    TemplateEngine:    "mustache",
    TemplateFolder:    "./views",
    TemplateExtension: ".tmpl",
  })

  // ИЛИ уже после инициализации приложения,
  // в любом удобном месте:
  app.Settings.TemplateEngine = "mustache"
  app.Settings.TemplateFolder = "./views"
  app.Settings.TemplateExtension = ".tmpl"

  // Теперь, вы сможете вызывать шаблон `./views/home.tmpl` вот так:
  app.Get("/", func(c *fiber.Ctx) {
    c.Render("home", fiber.Map{
      "title": "Homepage",
      "year":  1999,
    })
  })
  
  // ...
}

Группировка роутов в цепочки

Документация:

Пример:

func main() {
  app := fiber.New()
  
  // Корневой API роут
  api := app.Group("/api", cors())  // /api
  
  // Роуты для API v1
  v1 := api.Group("/v1", mysql())   // /api/v1
  v1.Get("/list", handler)          // /api/v1/list
  v1.Get("/user", handler)          // /api/v1/user
  
  // Роуты для API v2
  v2 := api.Group("/v2", mongodb()) // /api/v2
  v2.Get("/list", handler)          // /api/v2/list
  v2.Get("/user", handler)          // /api/v2/user
  
  // ...
}

Встроенный логгер

Документация:

Пример:

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

func main() {
    app := fiber.New()
    
    // Если вы хотите изменить конфигурацию логгера по умолчанию
    loggerConfig := middleware.LoggerConfig{
      Format:     "${time} - ${method} ${path}\n",
      TimeFormat: "Mon, 2 Jan 2006 15:04:05 MST",
    }

    // Middleware для логгера с кастомным конфигом
    app.Use(middleware.Logger(loggerConfig))

    // ...
}

Cross-Origin Resource Sharing (CORS)

Документация:

CORS — это механизм, использующий дополнительные HTTP-заголовки, чтобы дать возможность агенту пользователя получать разрешения на доступ к выбранным ресурсам с сервера на источнике (домене), отличном от того, что сайт использует в данный момент.

Пример:

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

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

    // Подключаем CORS для каждого роута в качестве middleware
    app.Use(middleware.CORS())

    app.Get("/", func(c *fiber.Ctx) {
        c.Send("CORS is enabled!")
    })

    app.Listen(3000)
}

Проверьте работу CORS, передав любой домен в заголовке 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

Документация:

Пример:

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

  type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
  }

  // Serialize JSON
  app.Get("/json", func(c *fiber.Ctx) {
    c.JSON(&User{"John", 20})
    // => {"name":"John", "age":20}
  })

  app.Listen(3000)
}

Поддержка WebSocket

Документация:

Пример:

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

  app.WebSocket("/ws/:name", func(c *fiber.Conn) {
    log.Println(c.Params("name"))

    for {
      mt, msg, err := c.ReadMessage()
      if err != nil {
        log.Println("read:", err)
        break
      }

      log.Printf("recovery: %s", msg)

      err = c.WriteMessage(mt, msg)
      if err != nil {
        log.Println("write:", err)
        break
      }
    }
  })

  // Слушаем вебсокет по адресу ws://localhost:3000/ws/john
  app.Listen(3000)
}

Восстановление работы после panic

Документация:

Пример:

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

  app.Get("/", func(c *fiber.Ctx) {
    panic("Something went wrong!")
  })

  app.Recover(func(c *fiber.Ctx) {
    c.Status(500).Send(c.Error())
    // => 500 "Something went wrong!"
  })

  app.Listen(3000)
}

💬 Медиа

👍 Помощь проекту

Если вы хотите сказать спасибо и/или поддержать активное развитие Fiber:

  1. Добавьте GitHub Star в проект.
  2. Напишите о проекте в вашем Twitter.
  3. Сделайте обзор фреймворка на Medium, Dev.to или в личном блоге.
  4. Помогите нам перевести README и API на другой язык.

Те, кто уже поддержал проект

Buy Me A Coffee

HenrikBinggl

Vic Shóstak

MarvinJWendt

ToishY

JustDave

Звезды

Stars over time

⚠️ Лицензия

Fiber — это бесплатное программное обеспечение с открытым исходным кодом, лицензированное по лицензии MIT.