Skip to content

Latest commit

 

History

History
107 lines (81 loc) · 3.16 KB

File metadata and controls

107 lines (81 loc) · 3.16 KB
id advance-format
title 🐛 Advanced Format
description Learn how to use MessagePack (MsgPack) and CBOR for efficient binary serialization in Fiber applications.
sidebar_position 9

MsgPack

Fiber lets you use MessagePack for efficient binary serialization. Use one of the popular Go libraries below to encode and decode data in handlers.

  • Fiber can bind requests with the application/vnd.msgpack content type out of the box. See the Binding documentation for details.
  • Use Bind().MsgPack() to bind data to structs, similar to JSON. Ctx.AutoFormat() responds with MsgPack when the Accept header is application/vnd.msgpack. See the AutoFormat documentation for more.

Recommended Libraries

Installation

Install either library using:

go get github.com/vmihailenco/msgpack
# or
go get github.com/shamaton/msgpack/v3

Note: Fiber doesn't bundle a MsgPack implementation because it's outside the Go standard library. Pick one of the popular libraries in the ecosystem; the two below are widely used and well maintained.

Example: Using shamaton/msgpack/v3

import (
    "github.com/gofiber/fiber/v3"
    "github.com/shamaton/msgpack/v3"
)

type User struct {
    Name string `msgpack:"name"` // tag may vary depending on your MsgPack library
    Age  int   `msgpack:"age"`
}

func main() {
    app := fiber.New(fiber.Config{
        // Optional: Set custom MsgPack encoder/decoder
        MsgPackEncoder: msgpack.Marshal,
        MsgPackDecoder: msgpack.Unmarshal,
    })

    app.Post("/msgpack", func(c fiber.Ctx) error {
        var user User
        if err := c.Bind().MsgPack(&user); err != nil {
            return err
        }
        // Content type will be set automatically to application/vnd.msgpack
        return c.MsgPack(user)
    })

    app.Listen(":3000")
}

CBOR

Fiber doesn't ship with a CBOR implementation. Use a library such as fxamacker/cbor to add encoding and decoding.

  • Use Bind().CBOR() to bind CBOR to structs. Ctx.AutoFormat() replies with CBOR when the Accept header is application/cbor. See the AutoFormat documentation for details.
go get github.com/fxamacker/cbor/v2

Configure Fiber with the chosen library:

import (
    "github.com/gofiber/fiber/v3"
    "github.com/fxamacker/cbor/v2"
)

func main() {
    app := fiber.New(fiber.Config{
        CBOREncoder: cbor.Marshal,
        CBORDecoder: cbor.Unmarshal,
    })

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

    app.Post("/cbor", func(c fiber.Ctx) error {
        var user User
        if err := c.Bind().CBOR(&user); err != nil {
            return err
        }

        // Content type will be set automatically to application/cbor
        return c.CBOR(user)
    })

    app.Listen(":3000")
}