From 4f982bb9cda3c898a59a8ba94d77038c7d6e9239 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Mon, 24 Jun 2019 14:49:19 +0100 Subject: [PATCH] Default to json content-type in api --- api/handler/rpc/rpc.go | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/api/handler/rpc/rpc.go b/api/handler/rpc/rpc.go index 4ee2be8e38..0c01e10d33 100644 --- a/api/handler/rpc/rpc.go +++ b/api/handler/rpc/rpc.go @@ -120,61 +120,63 @@ func (h *rpcHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var rsp []byte switch { - // json codecs - case hasCodec(ct, jsonCodecs): - var request json.RawMessage + // proto codecs + case hasCodec(ct, protoCodecs): + request := &proto.Message{} // if the extracted payload isn't empty lets use it if len(br) > 0 { - request = json.RawMessage(br) + request = proto.NewMessage(br) } // create request/response - var response json.RawMessage + response := &proto.Message{} req := c.NewRequest( service.Name, service.Endpoint.Name, - &request, + request, client.WithContentType(ct), ) // make the call - if err := c.Call(cx, req, &response, client.WithSelectOption(so)); err != nil { + if err := c.Call(cx, req, response, client.WithSelectOption(so)); err != nil { writeError(w, r, err) return } // marshall response - rsp, _ = response.MarshalJSON() - // proto codecs - case hasCodec(ct, protoCodecs): - request := &proto.Message{} + rsp, _ = response.Marshal() + default: + // if json codec is not present set to json + if !hasCodec(ct, jsonCodecs) { + ct = "application/json" + } + + // default to trying json + var request json.RawMessage // if the extracted payload isn't empty lets use it if len(br) > 0 { - request = proto.NewMessage(br) + request = json.RawMessage(br) } // create request/response - response := &proto.Message{} + var response json.RawMessage req := c.NewRequest( service.Name, service.Endpoint.Name, - request, + &request, client.WithContentType(ct), ) // make the call - if err := c.Call(cx, req, response, client.WithSelectOption(so)); err != nil { + if err := c.Call(cx, req, &response, client.WithSelectOption(so)); err != nil { writeError(w, r, err) return } // marshall response - rsp, _ = response.Marshal() - default: - http.Error(w, "Unsupported Content-Type", 400) - return + rsp, _ = response.MarshalJSON() } // write the response