1
0
mirror of https://github.com/strongdm/comply synced 2024-11-16 21:04:54 +00:00
comply/vendor/github.com/kevinburke/rest
Justin McCarthy 7468711b3b
go.mod: update gitlab dep to v0.30.1
Releases after github.com/xanzy/go-gitlab@v0.31.0 introduce breaking
changes to the NewClient call.

Addresses #94
2020-09-14 11:31:56 -07:00
..
.gitignore go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
.travis.yml go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
CHANGELOG.md go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
client.go go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
ctx.go go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
LICENSE go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
Makefile go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
noctx.go go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
README.md go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
rest.go go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00
transport.go go.mod: update gitlab dep to v0.30.1 2020-09-14 11:31:56 -07:00

rest

This library contains a HTTP client, and a number of useful middlewares for writing a HTTP client and server in Go. For more information and package documentation, please see the godoc documentation.

Client

The Client struct makes it easy to interact with a JSON API.

client := rest.NewClient("username", "password", "http://ipinfo.io")
req, _ := client.NewRequest("GET", "/json", nil)
type resp struct {
    City string `json:"city"`
    Ip   string `json:"ip"`
}
var r resp
client.Do(req, &r)
fmt.Println(r.Ip)

Transport

Use the rest.Transport as the http.Transport to easily inspect the raw HTTP request and response. Set DEBUG_HTTP_TRAFFIC=true in your environment to dump HTTP requests and responses to stderr.

Defining Custom Error Responses

rest exposes a number of HTTP error handlers - for example, rest.ServerError(w, r, err) will write a 500 server error to w. By default, these error handlers will write a generic JSON response over the wire, using fields specified by the HTTP problem spec.

You can define a custom error handler if you like (say if you want to return a HTML server error, or 404 error or similar) by calling RegisterHandler:

rest.RegisterHandler(500, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    err := rest.CtxErr(r)
    fmt.Println("Server error:", err)
    w.Header().Set("Content-Type", "text/html")
    w.WriteHeader(500)
    w.Write([]byte("<html><body>Server Error</body></html>"))
}))

Debugging

Set the DEBUG_HTTP_TRAFFIC environment variable to print out all request/response traffic being made by the client.

rest also includes a Transport that is a drop in for a http.Transport, but includes support for debugging HTTP requests. Add it like so:

client := http.Client{
    Transport: &rest.Transport{
        Debug: true,
        Output: os.Stderr,
        Transport: http.DefaultTransport,
    },
}

Donating

Donations free up time to make improvements to the library, and respond to bug reports. You can send donations via Paypal's "Send Money" feature to kev@inburke.com. Donations are not tax deductible in the USA.