// WriteResponseObject writes the status code and response object to the HttpResponseWriter in // the specified context, in the format best suited based on the request. // // Goweb uses the WebCodecService to decide which codec to use when responding // see http://godoc.org/github.com/stretchrcom/codecs/services#WebCodecService for more information. // // This method should be used when the Goweb Standard Response Object does not satisfy the needs of // the API, but other Respond* methods are recommended. func (a *GowebAPIResponder) WriteResponseObject(ctx context.Context, status int, responseObject interface{}) error { service := a.GetCodecService() acceptHeader := ctx.HttpRequest().Header.Get("Accept") extension := ctx.FileExtension() hasCallback := len(ctx.QueryValue("callback")) > 0 codec, codecError := service.GetCodecForResponding(acceptHeader, extension, hasCallback) if codecError != nil { return codecError } var options map[string]interface{} // do we need to add some options? if hasCallback { options = map[string]interface{}{constants.OptionKeyClientCallback: ctx.QueryValue("callback")} } output, marshalErr := codec.Marshal(responseObject, options) if marshalErr != nil { return marshalErr } // use the HTTP responder to respond ctx.HttpResponseWriter().Header().Set("Content-Type", codec.ContentType()) // TODO: test me a.httpResponder.With(ctx, status, output) return nil }
//add error catching here. func (r *UniversumController) Read(brand string, ctx context.Context) error { fmt.Println("rest") query := ctx.HttpRequest().URL.RawQuery //metric_name := GetQueryValue("name",query) since_str := GetQueryValue("since", query) const shortForm = "2006-Jan-02" since, _ := time.Parse(shortForm, since_str) until_str := GetQueryValue("until", query) until, _ := time.Parse(shortForm, until_str) resolution := "day" key := GetQueryValue("apikey", query) fmt.Println("the api key is " + key) user_id := db.Read("universum", "apikeys", key) if len(user_id) < 1 { errObject := "unverified api key" return goweb.API.RespondWithError(ctx, 500, errObject) } if brand == "ranking" { ranking := new(RankingData) ranking.Type = brand ranking.Brands, ranking.Change = GetMetrics(brand, query, since, until, resolution) return goweb.API.RespondWithData(ctx, ranking) } data := new(Data) data.Brand = brand data.Metrics, data.TimeStamp = GetMetrics(brand, query, since, until, resolution) fmt.Println("booyay") return goweb.API.RespondWithData(ctx, data) }