HTTP JSON isteklerini işlemenin/doğrulamanın birçok yolu vardır, ancak kişisel projelerimde normalde ne kullanacağımı burada göstereceğim.


İstek paketi


package request

import (
"encoding/json"
"io"
"strings"

"github.com/pkg/errors"
)

// DecodeJSON decodes json formatted request body into incoming struct. All
// errors contain a response friendly error message.
func DecodeJSON(body io.Reader, input interface{}) error {
d := json.NewDecoder(body)
d.DisallowUnknownFields()

e := d.Decode(input)
if e != nil {
var (
se *json.SyntaxError
ute *json.UnmarshalTypeError
)

switch {
case
errors.Is(e, io.EOF),
errors.Is(e, io.ErrUnexpectedEOF),
errors.As(e, &se):
return errors.New("Malformed JSON payload.")
case
errors.As(e, &ute):
return errors.New("Unexpected field value.")
case
strings.HasPrefix(e.Error(), "json: unknown field "):
return errors.New("Unexpected field key.")
default:
return errors.New("Invalid request payload.")
}
}

return nil
}

Örnek kullanım


type Body struct {
Name string `json:"name"`
Address string `json:"address"`
}

var req Body

if err := request.DecodeJSON(body, &req); err != nil {
return err
}