-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathrest.go
88 lines (76 loc) · 2.09 KB
/
rest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package gofaas
import (
"bytes"
"io/ioutil"
"net/http"
"net/url"
)
// DefaultClient defines default client
type DefaultClient struct {
HTTPClient *http.Client
}
func (dc *DefaultClient) new() *DefaultClient {
return &DefaultClient{HTTPClient: http.DefaultClient}
}
// AddQueryParameters adds query parameters to the URL.
func (cl *OpenFaasClient) AddQueryParameters(req *http.Request, queryParams QueryParams) {
params := url.Values{}
for key, value := range queryParams {
params.Add(key, value)
}
req.URL.RawQuery = params.Encode()
}
// BuildHTTPRequest creates the HTTP request object.
func (cl *OpenFaasClient) BuildHTTPRequest(reqDef *FaasRequestDefinition) (*http.Request, error) {
// make new request
req, err := http.NewRequest(reqDef.Method, reqDef.URL, bytes.NewBuffer(reqDef.Body))
if err != nil {
return nil, err
}
// Add any query parameters to the URL.
if len(reqDef.QueryParams) != 0 {
cl.AddQueryParameters(req, reqDef.QueryParams)
}
// set headers
for key, value := range reqDef.Headers {
req.Header.Set(key, value)
}
_, exists := req.Header["Content-Type"]
if len(reqDef.Body) > 0 && !exists {
req.Header.Set("Content-Type", "application/json")
}
// return
return req, nil
}
// BuildSuccessResponse will builds the response struct.
func (cl *OpenFaasClient) BuildSuccessResponse(res *http.Response) (*HTTPResponse, error) {
body, err := ioutil.ReadAll(res.Body)
if err != nil {
return &HTTPResponse{}, err
}
response := &HTTPResponse{
StatusCode: res.StatusCode,
Body: string(body),
Headers: res.Header,
}
_ = res.Body.Close()
return response, nil
}
// SendHTTPRequest will send the http req and return http response
func (cl *OpenFaasClient) SendHTTPRequest(req *FaasRequestDefinition) (*HTTPResponse, error) {
httpReq, err := cl.BuildHTTPRequest(req)
if err != nil {
return nil, err
}
var dc DefaultClient
newDefaultClient := dc.new()
resp, err := newDefaultClient.HTTPClient.Do(httpReq)
if err != nil {
return nil, err
}
successResp, err := cl.BuildSuccessResponse(resp)
if err != nil {
return nil, err
}
return successResp, nil
}