Skip to content

Problem Details Response

Learn how to send Problem Details responses according to RFC 7807.

Basic Problem Response

go
package main

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

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

    app.Get("/problem", func(ctx iris.Context) {
        problem := iris.NewProblem().
            Title("Validation Error").
            Type("/validation-error").
            Status(iris.StatusBadRequest).
            Detail("One or more fields failed validation").
            Key("errors", []string{
                "email is required",
                "password is too short",
            })

        ctx.Problem(problem)
    })

    app.Listen(":8080")
}

Custom Problem Types

go
type ValidationProblem struct {
    *iris.Problem
    Fields map[string]string `json:"fields,omitempty"`
}

app.Post("/validate", func(ctx iris.Context) {
    problem := &ValidationProblem{
        Problem: iris.NewProblem().
            Title("Validation Failed").
            Type("/validation-error").
            Status(iris.StatusBadRequest),
        Fields: map[string]string{
            "email": "invalid format",
            "age":   "must be over 18",
        },
    }

    ctx.Problem(problem)
})

Problem Middleware

go
func problemMiddleware(ctx iris.Context) {
    defer func() {
        if err := recover(); err != nil {
            problem := iris.NewProblem().
                Title("Internal Server Error").
                Type("/server-error").
                Status(iris.StatusInternalServerError).
                DetailErr(err.(error))

            ctx.Problem(problem)
        }
    }()

    ctx.Next()
}

app.Use(problemMiddleware)

Best Practices

  1. Structure:

    • Follow RFC 7807
    • Use proper types
    • Include details
    • Document format
    • Handle extensions
  2. Implementation:

    • Consistent format
    • Clear messages
    • Proper status codes
    • Handle errors
    • Document usage
  3. Security:

    • Validate input
    • Escape output
    • Set headers
    • Monitor usage
    • Handle sensitive data
  4. Maintenance:

    • Document types
    • Update structure
    • Monitor changes
    • Regular testing
    • Review security

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