Created
May 6, 2016 22:00
-
-
Save drichelson/103e7b6d87fb38f0036fe1a71606ddb4 to your computer and use it in GitHub Desktop.
api client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Attempt to minimize boilerplate code | |
func (l *LdApiClient) DoRequest(verb string, resource string, body interface{}, response interface{}, statusCodePredicate func(int) bool) error { | |
start := time.Now() | |
url := fmt.Sprintf("%s/%s", l.BaseUri, resource) | |
pre := verb + " " + url | |
var bodyJson []byte | |
var err error | |
if body != nil { | |
bodyJson, err = json.Marshal(body) | |
if err != nil { | |
return err | |
} | |
} | |
req, err := http.NewRequest(verb, url, bytes.NewBuffer(bodyJson)) | |
if err != nil { | |
log.Println(pre) | |
return err | |
} | |
req.Header.Add("Authorization", "api_key "+l.ApiKey) | |
req.Header.Add("Content-type", "application/json") | |
resp, err := l.client.Do(req) | |
if err != nil { | |
log.Printf("%s %v sent body: %s", pre, time.Now().Sub(start), string(bodyJson)) | |
return err | |
} | |
responseBody, err := ioutil.ReadAll(resp.Body) | |
if err != nil { | |
log.Printf("%s %v sent body: %s got response: %s", pre, time.Now().Sub(start), string(bodyJson), string(responseBody)) | |
return err | |
} | |
if !statusCodePredicate(resp.StatusCode) { | |
log.Printf("%s %d %v\n\tRequest body: %s \n\tResponse body: %s", pre, resp.StatusCode, time.Now().Sub(start), string(bodyJson), string(responseBody)) | |
return fmt.Errorf("Got unexpected response: %d", resp.StatusCode) | |
} | |
if len(responseBody) > 0 { | |
err = json.Unmarshal(responseBody, response) | |
if err != nil { | |
log.Printf("%s %d %v\n\tRequest body: %s\n\tResponse body: %s", pre, resp.StatusCode, time.Now().Sub(start), string(bodyJson), string(responseBody)) | |
return err | |
} | |
} | |
log.Printf("%s %d %v", pre, resp.StatusCode, time.Now().Sub(start)) | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment