Utilities for a JSON-based API.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Matt Baer b97c7b280f Add WriteRedirect helper func пре 7 година
.gitignore Add text editor temp files to gitignore пре 8 година
LICENSE Initial commit пре 8 година
README.md Add IRC badge to README пре 8 година
doc.go Rename impart.go to doc.go пре 7 година
errors.go Add func and package comments пре 7 година
response.go Add WriteRedirect helper func пре 7 година

README.md

impart

MIT license #writeas on freenode Public Slack discussion

impart is a library for the final layer between the API and the consumer. It’s used in the latest Write.as and HTMLhouse APIs.

We’re still in the early stages of development, so there may be breaking changes.

Example use

package main

import (
	"fmt"
	"github.com/writeas/impart"
	"net/http"
)

type handlerFunc func(w http.ResponseWriter, r *http.Request) error

func main() {
	http.HandleFunc("/", handle(index))
	http.ListenAndServe("127.0.0.1:8080", nil)
}

func index(w http.ResponseWriter, r *http.Request) error {
	fmt.Fprintf(w, "Hello world!")

	return nil
}

func handle(f handlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		handleError(w, r, func() error {
			// Do authentication...

			// Handle the request
			err := f(w, r)

			// Log the request and result...

			return err
		}())
	}
}

func handleError(w http.ResponseWriter, r *http.Request, err error) {
	if err == nil {
		return
	}

	if err, ok := err.(impart.HTTPError); ok {
		impart.WriteError(w, err)
		return
	}

	impart.WriteError(w, impart.HTTPError{http.StatusInternalServerError, "Internal server error :("})
}