Validation-Heavy APIs
Use declarative validation first. Keep hand-written field checks for rules that actually need application logic.
type InviteUserRequest struct { Email string `json:"email" validate:"required,email"` Role string `json:"role" validate:"required,oneof=admin|editor|viewer"` Name string `json:"name" validate:"required,min=2,max=120"`}Use custom request validation for cross-field invariants:
func (req InviteUserRequest) Validate(ctx sdk.Ctx) error { if req.Role == "admin" && !strings.HasSuffix(req.Email, "@company.com") { return ctx.Errors().Validation(). Field("email", "admin invites require a company address"). Err() } return nil}The compiler rejects malformed validation tags and unsupported fields before the app runs.