Utilities for a JSON-based API.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
Matt Baer 38cdc56928 Add ReqJSON func for determining JSON requests il y a 7 ans
.gitignore Add text editor temp files to gitignore il y a 8 ans
LICENSE Initial commit il y a 8 ans
README.md Add IRC badge to README il y a 8 ans
doc.go Rename impart.go to doc.go il y a 7 ans
errors.go Add func and package comments il y a 7 ans
request.go Add ReqJSON func for determining JSON requests il y a 7 ans
response.go Add WriteRedirect helper func il y a 7 ans

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 :("})
}