HTTP

Validation

Bind typed request data and return consistent validation failures.

Body binding

Bind JSON request bodies into a typed structure and validate them before application logic runs.

type CreateUserRequest struct {
    Name  string `json:"name" validate:"required,min=2"`
    Email string `json:"email" validate:"required,email"`
}

var request CreateUserRequest
if err := ctx.BindBody(&request); err != nil {
    return err
}

Query and parameter binding

Use separate structures for query strings and route parameters. This keeps transport contracts explicit and avoids mixing optional filters with domain objects.

Error shape

A consistent validation response should include a stable error code and field-level details:

{
  "code": "validation_failed",
  "message": "Request validation failed",
  "fields": {
    "email": "must be a valid email address"
  }
}

Safety considerations

Limit request body size, reject unknown formats, and avoid returning raw internal errors. Validation protects the application boundary but does not replace authorization or domain rules.