mirror of
https://github.com/gosticks/go-mite.git
synced 2026-08-17 07:10:22 +00:00
111 lines
2.4 KiB
Go
111 lines
2.4 KiB
Go
package mite
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// -------------------------------------------------------------
|
|
// ~ Private Methods
|
|
// -------------------------------------------------------------
|
|
|
|
func (m *Mite) getFromMite(suffix string, params map[string]string) (*http.Response, error) {
|
|
|
|
client := &http.Client{}
|
|
|
|
url := m.mitePathWithParam(suffix)
|
|
|
|
req, err := http.NewRequest("GET", url, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
q := req.URL.Query()
|
|
|
|
// Add params
|
|
for k, v := range params {
|
|
q.Add(k, v)
|
|
}
|
|
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
req.Header.Add("User-Agent", m.AppName+"; mite-go/v0.5")
|
|
req.Header.Add("X-MiteApiKey", m.APIKey)
|
|
// Set auth key header
|
|
// req.Header.Set("X-MiteApiKey", m.ApiKey)
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func (m *Mite) postToMite(suffix string, data interface{}) (*http.Response, error) {
|
|
return m.sendToMite(suffix, data, http.MethodPost)
|
|
}
|
|
|
|
func (m *Mite) patchAtMite(suffix string, data interface{}) (*http.Response, error) {
|
|
return m.sendToMite(suffix, data, http.MethodPatch)
|
|
}
|
|
|
|
func (m *Mite) deleteFromMite(suffix string, data interface{}) (*http.Response, error) {
|
|
return m.sendToMite(suffix, data, http.MethodDelete)
|
|
}
|
|
|
|
func (m *Mite) sendToMite(suffix string, data interface{}, method string) (*http.Response, error) {
|
|
|
|
client := &http.Client{}
|
|
|
|
url := m.mitePathWithParam(suffix)
|
|
b, errMarshal := json.Marshal(data)
|
|
if errMarshal != nil {
|
|
return nil, errMarshal
|
|
}
|
|
|
|
req, err := http.NewRequest(method, url, bytes.NewBuffer(b))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
q := req.URL.Query()
|
|
|
|
// q.Add("api_key", m.ApiKey)
|
|
|
|
req.URL.RawQuery = q.Encode()
|
|
|
|
// Set auth key header
|
|
req.Header.Add("User-Agent", m.AppName+"; mite-go/v0.5")
|
|
req.Header.Add("X-MiteApiKey", m.APIKey)
|
|
|
|
res, err := client.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return res, nil
|
|
}
|
|
|
|
func (m *Mite) getAndDecodeFromSuffix(suffix string, target interface{}, params map[string]string) error {
|
|
resp, errResp := m.getFromMite(suffix, params)
|
|
if errResp != nil {
|
|
return errResp
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
return errors.New("Mite responded with error" + resp.Status + fmt.Sprint(resp.StatusCode))
|
|
}
|
|
|
|
// Unmarshal data
|
|
err := json.NewDecoder(resp.Body).Decode(target)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|