func (api *Api) ServeV1Shape(w http.ResponseWriter, r *http.Request, params httprouter.Params) int { var ses query.HttpSession switch params.ByName("query_lang") { case "gremlin": ses = gremlin.NewSession(api.ts, api.config.GremlinTimeout, false) case "mql": ses = mql.NewSession(api.ts) default: return FormatJson400(w, "Need a query language.") } bodyBytes, err := ioutil.ReadAll(r.Body) if err != nil { return FormatJson400(w, err) } code := string(bodyBytes) result, err := ses.InputParses(code) switch result { case query.Parsed: var output []byte var err error output, err = GetQueryShape(code, ses) if err != nil { return FormatJson400(w, err) } fmt.Fprint(w, string(output)) return 200 case query.ParseFail: return FormatJson400(w, err) default: return FormatJsonError(w, 500, "Incomplete data?") } http.Error(w, "", http.StatusNotFound) return http.StatusNotFound }
// TODO(barakmich): Turn this into proper middleware. func (api *Api) ServeV1Query(w http.ResponseWriter, r *http.Request, params httprouter.Params) int { var ses query.HttpSession switch params.ByName("query_lang") { case "gremlin": ses = gremlin.NewSession(api.handle.QuadStore, api.config.Timeout, false) case "mql": ses = mql.NewSession(api.handle.QuadStore) default: return FormatJson400(w, "Need a query language.") } bodyBytes, err := ioutil.ReadAll(r.Body) if err != nil { return FormatJson400(w, err) } code := string(bodyBytes) result, err := ses.InputParses(code) switch result { case query.Parsed: var output interface{} var bytes []byte var err error output, err = RunJsonQuery(code, ses) if err != nil { bytes, err = WrapErrResult(err) http.Error(w, string(bytes), 400) ses = nil return 400 } bytes, err = WrapResult(output) if err != nil { ses = nil return FormatJson400(w, err) } fmt.Fprint(w, string(bytes)) ses = nil return 200 case query.ParseFail: ses = nil return FormatJson400(w, err) default: ses = nil return FormatJsonError(w, 500, "Incomplete data?") } }