Easy JSON responses for Go on top of net/http
go get github.com/gompact/jopher
import Jopher to your project
import (
...
"github.com/gompact/jopher"
)
There is no need to initialize any thing, the usage is very simple, inside if your handlers use jopher to send a json response
e.g:
func fooHandler(w http.ResponseWriter, r *http.Request) {
name := "Foo"
jopher.Success(w, name)
}
The main function Jopher uses to send responses is Write(), you can use it for all of your responses, but alongside it, Jopher provides two other types of methods, error responses, and success responses.
func fooHandler(w http.ResponseWriter, r *http.Request) {
name := "Foo"
jopher.Write(w, http.StatusOK, name)
// or
jopher.Write(w, 200, name)
}
Success() returns a 200 response with the supplied message as the body of the response
func fooHandler(w http.ResponseWriter, r *http.Request) {
name := "Foo"
jopher.Success(w, name)
}
Success() returns a 201 response with the supplied message as the body of the response
func fooHandler(w http.ResponseWriter, r *http.Request) {
type post struct {
Title string
Body string
}
// e.g: save post to db:
db.Insert(&Post{"foo title", "bar body"})
jopher.Created(w, "Successfully created the new post")
}
Error() returns an error response with the supplied message as the body of the response and the a status code.
func fooHandler(w http.ResponseWriter, r *http.Request) {
type post struct {
Title string
Body string
}
// e.g: save post to db:
err := db.Insert(&Post{"foo title", "bar body"})
if err != nil {
jopher.Error(w, 500, err)
return
}
...
}
BadRequest() uses Error() to returns an error response with the supplied message as the body of the response and a status code of 400.
func fooHandler(w http.ResponseWriter, r *http.Request) {
type user struct {
Email string
Password string
}
...
// e.g: validate request body parameters
if req_body.Get("email") == nil {
jopher.BadRequest(w, errors.New("Email field is required"))
return
}
}
Unauthorized() uses Error() to returns an error response with the supplied message as the body of the response and a status code of 401.
func fooHandler(w http.ResponseWriter, r *http.Request) {
type User struct {
Email string
Password string
}
// e.g: save post to db:
db.Insert(&Post{"foo title", "bar body"})
if user == nil {
jopher.Unauthorized(w, errors.New("You dont have permission to create a new post"))
return
}
...
}
NotFound() uses Error() to returns an error response with the supplied message as the body of the response and a status code of 404.
func fooHandler(w http.ResponseWriter, r *http.Request) {
type user struct {
Email string
Password string
}
// e.g: trying to find user in db
c, _ := db.Count("users", &user{"foo@bar.com"})
if c < 1 {
jopher.NotFound(w, errors.New("User was not found"))
return
}
...
}
InternalServerError() uses Error() to returns an error response with the supplied message as the body of the response and a status code of 500.
func fooHandler(w http.ResponseWriter, r *http.Request) {
type post struct {
Title string
Body string
}
// e.g: save post to db:
err := db.Insert(&Post{"foo title", "bar body"})
if err != nil {
jopher.InternalServerError(w, err)
return
}
...
}