// Version allows you to specify an integer for the version of this // route. Version is chainable. func (r *APIRoute) Version(version int) *APIRoute { if version < 0 { grip.Warningf("%d is not a valid version", version) } else { r.version = version } return r }
// SetDefaultVersion allows you to specify a default version for the // application. Default versions must be 0 (no version,) or larger. func (a *APIApp) SetDefaultVersion(version int) { if version < 0 { grip.Warningf("%d is not a valid version", version) } else { a.defaultVersion = version grip.Noticef("Set default api version to /v%d/", version) } }
// SetPort allows users to configure a default port for the API // service. Defaults to 3000, and return errors will refuse to set the // port to something unreasonable. func (a *APIApp) SetPort(port int) error { defaultPort := 3000 if port == a.port { grip.Warningf("port is already set to %d", a.port) } else if port <= 0 { a.port = defaultPort return fmt.Errorf("%d is not a valid port numbaer, using %d", port, defaultPort) } else if port > 65535 { a.port = defaultPort return fmt.Errorf("port %d is too large, using default port (%d)", port, defaultPort) } else if port < 1024 { a.port = defaultPort return fmt.Errorf("port %d is too small, using default port (%d)", port, defaultPort) } else { a.port = port } return nil }
// WriteJSONResponse writes a JSON document to the body of an HTTP // request, setting the return status of to 500 if the JSON // seralization process encounters an error, otherwise return func WriteJSONResponse(w http.ResponseWriter, code int, data interface{}) { j := &JSONMessage{data: data} out, err := j.MarshalPretty() if err != nil { grip.CatchDebug(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } grip.Debug(j) w.Header().Set("Content-Type", "application/json; charset=utf-8") w.WriteHeader(code) size, err := w.Write(out) if err == nil { grip.Debugf("response object was %d", size) } else { grip.Warningf("encountered error %s writing a %d response", err.Error(), size) } }