MCPcopy
hub / github.com/dosco/graphjin / apiV1Rest

Method apiV1Rest

serv/http.go:244–331  ·  view source on GitHub ↗

apiV1Rest returns a handler that handles the REST API requests

(ns *string, ah auth.HandlerFunc)

Source from the content-addressed store, hash-verified

242
243// apiV1Rest returns a handler that handles the REST API requests
244func (s1 *HttpService) apiV1Rest(ns *string, ah auth.HandlerFunc) http.Handler {
245 rLen := len(routeREST)
246 dtrace := otel.GetTextMapPropagator()
247
248 h := func(w http.ResponseWriter, r *http.Request) {
249 var err error
250
251 start := time.Now()
252 s := s1.Load().(*graphjinService)
253
254 w.Header().Set("Content-Type", "application/json")
255
256 if isWebSocketUpgrade(r) {
257 s.apiV1Ws(w, r, ah)
258 return
259 }
260
261 var vars json.RawMessage
262 var span trace.Span
263
264 ctx, opts := newDTrace(dtrace, r)
265 ctx, span = s.spanStart(ctx, "REST Request", opts...)
266 defer span.End()
267
268 if len(r.RequestURI) <= rLen {
269 err := errors.New("no query name defined")
270 spanError(span, err)
271 renderErr(w, err)
272 return
273 }
274
275 queryName := r.RequestURI[rLen:]
276 if n := strings.IndexRune(queryName, '?'); n != -1 {
277 queryName = queryName[:n]
278 }
279
280 switch r.Method {
281 case "POST":
282 vars, err = parseBody(r)
283
284 case "GET":
285 vars = json.RawMessage(r.URL.Query().Get("variables"))
286 }
287
288 if err != nil {
289 spanError(span, err)
290 renderErr(w, err)
291 return
292 }
293
294 var rc core.RequestConfig
295
296 if rc.Vars == nil && len(s.conf.HeaderVars) != 0 {
297 rc.Vars = s.setHeaderVars(r)
298 }
299
300 if ns != nil {
301 rc.SetNamespace(*ns)

Callers 1

apiHandlerMethod · 0.95

Calls 15

SetNamespaceMethod · 0.95
newDTraceFunction · 0.85
spanErrorFunction · 0.85
renderErrFunction · 0.85
parseBodyFunction · 0.85
apiV1WsMethod · 0.80
setHeaderVarsMethod · 0.80
applyIdentityContextMethod · 0.80
GraphQLByNameMethod · 0.80
responseHandlerMethod · 0.80
isWebSocketUpgradeFunction · 0.70

Tested by

no test coverage detected