Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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
}