Implement generic http query

pull/1/head
Nikita Tokarchuk 2 years ago
parent e3c87d5eff
commit 29124c0490
Signed by: mainnika
GPG Key ID: A595FB7E3E56911C
  1. 51
      frontend/ghost/client.go
  2. 1
      go.mod

@ -1,8 +1,11 @@
package ghost
import (
"fmt"
"sync"
"time"
"github.com/mailru/easyjson"
"github.com/valyala/fasthttp"
)
// Ghost content data URIs:
@ -18,6 +21,8 @@ type HTTPClient struct {
Secured bool
client *fasthttp.HostClient
setupClientOnce sync.Once
}
// setupClient creates the default http client
@ -31,3 +36,49 @@ func (g *HTTPClient) setupClient() {
DisablePathNormalizing: true,
}
}
// doQuery does the method and unmarshals the result into the easyjson Unmarshaler
func (g *HTTPClient) doQuery(method string, v easyjson.Unmarshaler, params ...QueryParam) (err error) {
g.setupClientOnce.Do(g.setupClient)
req := fasthttp.AcquireRequest()
res := fasthttp.AcquireResponse()
defer func() {
fasthttp.ReleaseResponse(res)
fasthttp.ReleaseRequest(req)
}()
uri := req.URI()
uri.SetHost(g.Addr)
uri.SetPath(method)
uri.QueryArgs().Add("key", g.ContentKey)
if g.client.IsTLS {
uri.SetScheme("https")
}
for _, param := range params {
param.Apply(&req.Header, uri.QueryArgs())
}
err = g.client.DoTimeout(req, res, g.QueryTimeout)
if err != nil {
return
}
if res.StatusCode() != fasthttp.StatusOK {
return fmt.Errorf("non OK status code: %d", res.StatusCode())
}
resBytes := res.Body()
if resBytes == nil && v == nil {
return fmt.Errorf("nothing to unmarshal")
}
if resBytes == nil {
return
}
err = easyjson.Unmarshal(resBytes, v)
return
}

@ -4,6 +4,7 @@ go 1.17
require (
github.com/jackwhelpton/fasthttp-routing/v2 v2.0.0
github.com/mailru/easyjson v0.7.7
github.com/sirupsen/logrus v1.8.1
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.9.0

Loading…
Cancel
Save