Rene Nochebuena 285293a75b docs(httputil): correct tier from 3 to 2
httputil depends on xerrors (Tier 0) and valid (Tier 1), placing it at
Tier 2. No infrastructure or lifecycle dependencies exist in this module.
2026-03-19 13:09:32 +00:00

httputil

Typed HTTP handler adapters and response helpers for stdlib net/http.

Install

go get code.nochebuena.dev/go/httputil

Typed handlers

// JSON body + validation + typed response
r.Post("/orders", httputil.Handle(validator, svc.CreateOrder))

// No request body (GET / DELETE)
r.Get("/orders/{id}", httputil.HandleNoBody(svc.GetOrder))

// Request body, no response body (204)
r.Delete("/orders/{id}", httputil.HandleEmpty(validator, svc.DeleteOrder))

// Manual handler with centralised error mapping
r.Get("/raw", httputil.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
    data, err := svc.Load(r.Context(), chi.URLParam(r, "id"))
    if err != nil {
        return err
    }
    return httputil.JSON(w, http.StatusOK, data)
}))

Error mapping

xerrors.Code → HTTP status:

Code Status
ErrInvalidInput 400
ErrUnauthorized 401
ErrPermissionDenied 403
ErrNotFound 404
ErrAlreadyExists 409
ErrInternal 500
ErrNotImplemented 501
ErrUnavailable 503
ErrDeadlineExceeded 504
unknown 500

Error response body:

{"code": "NOT_FOUND", "message": "record not found"}

Fields from xerrors.Err are merged into the top-level response object.

Dependencies

  • code.nochebuena.dev/go/xerrors
  • code.nochebuena.dev/go/valid
Description
Typed handler adapters and JSON response helpers.
Readme 40 KiB
2026-03-19 07:10:22 -06:00
Languages
Go 100%