Skip to content

MessagePack Request

Learn how to handle MessagePack requests in Iris.

Basic MessagePack Handling

go
package main

import "github.com/kataras/iris/v12"

type User struct {
    ID    int    `msgpack:"id"`
    Name  string `msgpack:"name"`
    Email string `msgpack:"email"`
}

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

    app.Post("/msgpack", func(ctx iris.Context) {
        var user User
        if err := ctx.ReadMsgPack(&user); err != nil {
            ctx.StopWithError(iris.StatusBadRequest, err)
            return
        }

        ctx.JSON(iris.Map{
            "received": user,
        })
    })

    app.Listen(":8080")
}

MessagePack Validation

go
type Product struct {
    ID    int     `msgpack:"id" validate:"required"`
    Name  string  `msgpack:"name" validate:"required"`
    Price float64 `msgpack:"price" validate:"required,gte=0"`
    Stock int     `msgpack:"stock" validate:"required,gte=0"`
}

app.Post("/validate", func(ctx iris.Context) {
    var product Product
    if err := ctx.ReadMsgPack(&product); err != nil {
        ctx.StopWithError(iris.StatusBadRequest, err)
        return
    }

    if err := validate.Struct(product); err != nil {
        ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
            Title("Validation Error").
            DetailErr(err))
        return
    }

    ctx.JSON(iris.Map{
        "message": "MessagePack validated successfully",
        "product": product,
    })
})

Custom MessagePack Handling

go
app.Post("/custom", func(ctx iris.Context) {
    data := ctx.GetBody()
    var result interface{}

    if err := msgpack.Unmarshal(data, &result); err != nil {
        ctx.StopWithError(iris.StatusBadRequest, err)
        return
    }

    ctx.JSON(iris.Map{
        "data": result,
    })
})

Best Practices

  1. Schema:

    • Use proper tags
    • Define clear types
    • Handle versioning
    • Document fields
    • Manage updates
  2. Validation:

    • Validate required fields
    • Check types
    • Handle defaults
    • Set limits
    • Document requirements
  3. Performance:

    • Use appropriate buffer
    • Handle large messages
    • Monitor memory
    • Implement timeouts
    • Clean resources
  4. Error Handling:

    • Handle parsing errors
    • Validate messages
    • Log issues
    • Document errors
    • Test edge cases

Built with excellence by Hellenic Development, delivering enterprise-grade solutions.