Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

links & monitor & README #257

Merged
merged 3 commits into from May 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
98 changes: 43 additions & 55 deletions README.md
@@ -1,32 +1,22 @@
---
description: >-
An online API documentation with examples so you can start building web apps
with Fiber right away!
---
## 👋 Welcome to Fiber Docs
An online API documentation with examples so you can start building web apps with Fiber right away!

# 👋 Welcome
**Fiber** is an [Express](https://github.com/expressjs/express) inspired **web framework** built on top of [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for [Go](https://go.dev/doc/). Designed to **ease** things up for **fast** development with **zero memory allocation** and **performance** in mind.

**Fiber** is an [Express](https://github.com/expressjs/express) inspired **web framework** built on top of [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for [Go](https://golang.org/doc/). Designed to **ease** things up for **fast** development with **zero memory allocation** and **performance** in mind.

{% hint style="warning" %}
These docs are for **Fiber v2**, which was released on **September 15th, 2020**.
{% endhint %}

## Installation
### Installation

First of all, [download](https://golang.org/dl/) and install Go. `1.14` or higher is required.
First of all, [download](https://go.dev/dl/) and install Go. `1.14` or higher is required.

Installation is done using the [`go get`](https://golang.org/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) command:
Installation is done using the [`go get`](https://pkg.go.dev/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) command:

```bash
```
go get github.com/gofiber/fiber/v2
```

## Zero Allocation

{% hint style="warning" %}
Some values returned from \***fiber.Ctx** are **not** immutable by default
{% endhint %}
### Zero Allocation
Some values returned from \***fiber.Ctx** are **not** immutable by default.

Because fiber is optimized for **high-performance**, values returned from **fiber.Ctx** are **not** immutable by default and **will** be re-used across requests. As a rule of thumb, you **must** only use context values within the handler, and you **must not** keep any references. As soon as you return from the handler, any values you have obtained from the context will be re-used in future requests and will change below your feet. Here is an example:

Expand All @@ -39,7 +29,7 @@ func handler(c *fiber.Ctx) error {
}
```

If you need to persist such values outside the handler, make copies of their **underlying buffer** using the [copy](https://golang.org/pkg/builtin/#copy) builtin. Here is an example for persisting a string:
If you need to persist such values outside the handler, make copies of their **underlying buffer** using the [copy](https://pkg.go.dev/builtin/#copy) builtin. Here is an example for persisting a string:

```go
func handler(c *fiber.Ctx) error {
Expand All @@ -56,7 +46,7 @@ func handler(c *fiber.Ctx) error {
}
```

We created a custom `ImmutableString` a function that does the above and is available in the [gofiber/utils](https://github.com/gofiber/utils) package.
We created a custom `ImmutableString` function that does the above and is available in the [gofiber/utils](https://github.com/gofiber/utils) package.

```go
app.Get("/:foo", func(c *fiber.Ctx) error {
Expand All @@ -67,43 +57,41 @@ app.Get("/:foo", func(c *fiber.Ctx) error {
})
```

Alternatively, you can also use the[ **Immutable setting**](./). It will make all values returned from the context immutable, allowing you to persist them anywhere. Of course, this comes at the cost of performance.
Alternatively, you can also use the `Immutable` setting. It will make all values returned from the context immutable, allowing you to persist them anywhere. Of course, this comes at the cost of performance.

For more information, please check [**\#426**](https://github.com/gofiber/fiber/issues/426) **and** [**\#185**](https://github.com/gofiber/fiber/issues/185).
For more information, please check [**\#426**](https://github.com/gofiber/fiber/issues/426) and [**\#185**](https://github.com/gofiber/fiber/issues/185).

## Hello, World!
### Hello, World!

Embedded below is essentially the most straightforward **Fiber** app, which you can create.
Embedded below is essentially the most straightforward **Fiber** app you can create:

```go
package main

import "github.com/gofiber/fiber/v2"

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

app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})

app.Listen(":3000")
app.Listen(":3000")
}
```

```text
go run server.go
```

Browse to `http://localhost:3000,` and you should see `Hello, World!` on the page.
Browse to `http://localhost:3000` and you should see `Hello, World!` on the page.

## Basic routing
### Basic routing

Routing refers to determining how an application responds to a client request to a particular endpoint, which is a URI \(or path\) and a specific HTTP request method \(GET, PUT, POST and so on\).
Routing refers to determining how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (`GET`, `PUT`, `POST`, etc.).

{% hint style="info" %}
Each route can have **multiple handler functions**, that is executed when the route is matched.
{% endhint %}
Each route can have **multiple handler functions** that are executed when the route is matched.

Route definition takes the following structures:

Expand All @@ -112,17 +100,17 @@ Route definition takes the following structures:
app.Method(path string, ...func(*fiber.Ctx) error)
```

* `app` is an instance of **Fiber**.
* `Method` is an [HTTP request method](https://docs.gofiber.io/api/app#route-handlers), in capitalization: `Get`, `Put`, `Post`, etc.
* `path` is a virtual path on the server.
* `func(*fiber.Ctx) error` is a callback function containing the [Context](https://docs.gofiber.io/api/ctx) executed when the route is matched.
- `app` is an instance of **Fiber**
- `Method` is an [HTTP request method](https://docs.gofiber.io/api/app#route-handlers): `GET`, `PUT`, `POST`, etc.
- `path` is a virtual path on the server
- `func(*fiber.Ctx) error` is a callback function containing the [Context](https://docs.gofiber.io/api/ctx) executed when the route is matched

**Simple route**

```go
// Respond with "Hello, World!" on root path, "/"
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
return c.SendString("Hello, World!")
})
```

Expand All @@ -132,8 +120,8 @@ app.Get("/", func(c *fiber.Ctx) error {
// GET http://localhost:8080/hello%20world

app.Get("/:value", func(c *fiber.Ctx) error {
return c.SendString("value: " + c.Params("value"))
// => Get request with value: hello world
return c.SendString("value: " + c.Params("value"))
// => Get request with value: hello world
})
```

Expand All @@ -143,11 +131,11 @@ app.Get("/:value", func(c *fiber.Ctx) error {
// GET http://localhost:3000/john

app.Get("/:name?", func(c *fiber.Ctx) error {
if c.Params("name") != "" {
return c.SendString("Hello " + c.Params("name"))
// => Hello john
}
return c.SendString("Where is john?")
if c.Params("name") != "" {
return c.SendString("Hello " + c.Params("name"))
// => Hello john
}
return c.SendString("Where is john?")
})
```

Expand All @@ -157,19 +145,19 @@ app.Get("/:name?", func(c *fiber.Ctx) error {
// GET http://localhost:3000/api/user/john

app.Get("/api/*", func(c *fiber.Ctx) error {
return c.SendString("API path: " + c.Params("*"))
// => API path: user/john
return c.SendString("API path: " + c.Params("*"))
// => API path: user/john
})
```

## Static files
### Static files

To serve static files such as **images**, **CSS**, and **JavaScript** files, replace your function handler with a file or directory string.

Function signature:

```go
app.Static(prefix, root string)
app.Static(prefix, root string, config ...Static)
```

Use the following code to serve files in a directory named `./public`:
Expand All @@ -190,7 +178,7 @@ http://localhost:8080/js/jquery.js
http://localhost:8080/css/style.css
```

## Note

For more information on how to build APIs in Go with Fiber, please check out this excellent article [on building an express-style API in Go with Fiber](https://blog.logrocket.com/express-style-api-go-fiber/)
### Note

For more information on how to build APIs in Go with Fiber, please check out this excellent article
[on building an express-style API in Go with Fiber](https://blog.logrocket.com/express-style-api-go-fiber/).
2 changes: 1 addition & 1 deletion api/app.md
Expand Up @@ -603,7 +603,7 @@ Using `ListenMutualTLS` defaults to the following config \( use `Listener` to pr

## Listener

You can pass your own [`net.Listener`](https://golang.org/pkg/net/#Listener) using the `Listener` method. This method can be used to enable **TLS/HTTPS** with a custom tls.Config.
You can pass your own [`net.Listener`](https://pkg.go.dev/net/#Listener) using the `Listener` method. This method can be used to enable **TLS/HTTPS** with a custom tls.Config.

{% code title="Signature" %}
```go
Expand Down
2 changes: 1 addition & 1 deletion api/ctx.md
Expand Up @@ -1375,7 +1375,7 @@ app.Get("/back", func(c *fiber.Ctx) error {

## Render

Renders a view with data and sends a `text/html` response. By default `Render` uses the default [**Go Template engine**](https://golang.org/pkg/html/template/). If you want to use another View engine, please take a look at our [**Template middleware**](https://github.com/gofiber/template).
Renders a view with data and sends a `text/html` response. By default `Render` uses the default [**Go Template engine**](https://pkg.go.dev/html/template/). If you want to use another View engine, please take a look at our [**Template middleware**](https://github.com/gofiber/template).

{% code title="Signature" %}
```go
Expand Down
31 changes: 25 additions & 6 deletions api/middleware/monitor.md
Expand Up @@ -33,23 +33,40 @@ import (

func main() {
app := fiber.New()
app.Get("/dashboard", monitor.New())

app.Get("/metrics", monitor.New(monitor.Config{Title: "MyService Metrics Page"}))

log.Fatal(app.Listen(":3000"))
}
```
You can also access the API endpoint with
`curl -X GET -H "Accept: application/json" http://localhost:3000/metrics` which returns:
```json
{"pid":{ "cpu":0.4568381746582226, "ram":20516864, "conns":3 },
"os": { "cpu":8.759124087593099, "ram":3997155328, "conns":44,
"total_ram":8245489664, "load_avg":0.51 }}
```

## Config

```go
// Config defines the config for middleware.
type Config struct {
// Metrics page title
//
// Optional. Default: "Fiber Monitor"
Title string

// Refresh period
//
// Optional. Default: 3 seconds
Refresh time.Duration

// To disable serving HTML, you can make true this option.
//
// Optional. Default: false
APIOnly bool

// Next defines a function to skip this middleware when returned true.
//
// Optional. Default: nil
Expand All @@ -61,7 +78,9 @@ type Config struct {

```go
var ConfigDefault = Config{
Title: "Fiber Monitor",
Refresh: 3 * time.Second,
APIOnly: false,
Next: nil,
Next: nil,
}
```
```
2 changes: 1 addition & 1 deletion extra/faq.md
Expand Up @@ -55,7 +55,7 @@ Fiber currently supports 8 template engines in our [gofiber/template](https://gi
* [Amber](https://github.com/eknkc/amber)
* [Django](https://github.com/flosch/pongo2)
* [Handlebars](https://github.com/aymerick/raymond)
* [HTML](https://golang.org/pkg/html/template/)
* [HTML](https://pkg.go.dev/html/template/)
* [Jet](https://github.com/CloudyKit/jet)
* [Mustache](https://github.com/cbroglie/mustache)
* [Pug](https://github.com/Joker/jade)
Expand Down
2 changes: 1 addition & 1 deletion guide/error-handling.md
Expand Up @@ -22,7 +22,7 @@ app.Get("/", func(c *fiber.Ctx) error {
{% endtab %}
{% endtabs %}

Fiber does not handle [panics](https://blog.golang.org/defer-panic-and-recover) by default. To recover from a panic thrown by any handler in the stack, you need to include the `Recover` middleware below:
Fiber does not handle [panics](https://go.dev/blog/defer-panic-and-recover) by default. To recover from a panic thrown by any handler in the stack, you need to include the `Recover` middleware below:

{% code title="Example" %}
```go
Expand Down
6 changes: 3 additions & 3 deletions original/README.md
Expand Up @@ -6,13 +6,13 @@ description: An API documentation so you can start building web apps with Fiber.

[![](https://img.shields.io/github/release/gofiber/fiber?style=flat-square)](https://github.com/gofiber/fiber/releases) [![](https://img.shields.io/badge/go.dev-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/gofiber/fiber?tab=doc) [![](https://goreportcard.com/badge/github.com/gofiber/fiber?style=flat-square)](https://goreportcard.com/report/github.com/gofiber/fiber) [![](https://img.shields.io/badge/coverage-91%25-brightgreen?style=flat-square)](https://gocover.io/github.com/gofiber/fiber) [![](https://img.shields.io/github/workflow/status/gofiber/fiber/Test?label=tests&style=flat-square)](https://github.com/gofiber/fiber/actions?query=workflow%3ATest) [![](https://img.shields.io/github/workflow/status/gofiber/fiber/Gosec?label=gosec&style=flat-square)](https://github.com/gofiber/fiber/actions?query=workflow%3AGosec)

**Fiber** is an [Express](https://github.com/expressjs/express) inspired **web framework** build on top of [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for [Go](https://golang.org/doc/). Designed to **ease** things up for **fast** development with **zero memory allocation** and **performance** in mind.
**Fiber** is an [Express](https://github.com/expressjs/express) inspired **web framework** build on top of [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for [Go](https://go.dev/doc/). Designed to **ease** things up for **fast** development with **zero memory allocation** and **performance** in mind.

## Installation

First of all, [download](https://golang.org/dl/) and install Go. `1.11` or higher is required.
First of all, [download](https://go.dev/dl/) and install Go. `1.11` or higher is required.

Installation is done using the [`go get`](https://golang.org/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) command:
Installation is done using the [`go get`](https://pkg.go.dev/cmd/go/#hdr-Add_dependencies_to_current_module_and_install_them) command:

```bash
go get -u github.com/gofiber/fiber
Expand Down
4 changes: 2 additions & 2 deletions original/application.md
Expand Up @@ -275,7 +275,7 @@ app.Listen("127.0.0.1:8080")
```
{% endcode %}

To enable **TLS/HTTPS** you can append a [**TLS config**](https://golang.org/pkg/crypto/tls/#Config).
To enable **TLS/HTTPS** you can append a [**TLS config**](https://pkg.go.dev/crypto/tls/#Config).

{% code title="Example" %}
```go
Expand All @@ -291,7 +291,7 @@ app.Listen(":443", config)

## Serve

You can pass your own [`net.Listener`](https://golang.org/pkg/net/#Listener) using the `Serve` method.
You can pass your own [`net.Listener`](https://pkg.go.dev/net/#Listener) using the `Serve` method.

{% code title="Signature" %}
```go
Expand Down
2 changes: 1 addition & 1 deletion original/context.md
Expand Up @@ -956,7 +956,7 @@ app.Get("/", func(c *fiber.Ctx) {

## Render

Renders a template with data and sends a `text/html` response. By default `Render` uses the default [**Go Template engine**](https://golang.org/pkg/html/template/). If you want to use another engine, please take a look at our [**Template middleware**](middleware.md#template).
Renders a template with data and sends a `text/html` response. By default `Render` uses the default [**Go Template engine**](https://pkg.go.dev/html/template/). If you want to use another engine, please take a look at our [**Template middleware**](middleware.md#template).

{% code title="Signature" %}
```go
Expand Down
2 changes: 1 addition & 1 deletion original/middleware.md
Expand Up @@ -315,7 +315,7 @@ func main() {

## Template

By default Fiber comes with the [**default HTML template**](https://golang.org/pkg/html/template/) engine, but this middleware contains third party rendering engines.
By default Fiber comes with the [**default HTML template**](https://pkg.go.dev/html/template/) engine, but this middleware contains third party rendering engines.

**Installation**

Expand Down