@@ -9,8 +9,13 @@ import (
99 "net/url"
1010)
1111
12- const contentType = "application/json"
13- const userAgentTemplate = "mite-go/%s (+github.com/leanovate/mite-go)"
12+ const (
13+ headerContentType = "Content-Type"
14+ headerUserAgent = "User-Agent"
15+ headerXMiteApiKey = "X-MiteApiKey"
16+ mediaTypeApplicationJson = "application/json"
17+ userAgentTemplate = "mite-go/%s (+github.com/leanovate/mite-go)"
18+ )
1419
1520type Api interface {
1621 domain.AccountApi
@@ -23,25 +28,31 @@ type Api interface {
2328}
2429
2530type api struct {
26- base string
27- key string
28- userAgent string
29- client * http.Client
31+ base * url. URL
32+ key string
33+ agent string
34+ client * http.Client
3035}
3136
32- func NewApi (base string , key string , version string ) Api {
33- ua := fmt .Sprintf (userAgentTemplate , version )
34- return & api {base : base , key : key , userAgent : ua , client : & http.Client {}}
37+ func NewApi (miteUrl string , miteKey string , clientVersion string ) (Api , error ) {
38+ base , err := url .Parse (miteUrl )
39+ if err != nil {
40+ return nil , err
41+ }
42+
43+ userAgent := fmt .Sprintf (userAgentTemplate , clientVersion )
44+
45+ return & api {base : base , key : miteKey , agent : userAgent , client : & http.Client {}}, nil
3546}
3647
37- func (a * api ) get (resource string , result interface {}) error {
38- req , err := http .NewRequest (http .MethodGet , a .url (resource ), nil )
48+ func (a * api ) get (resource string , query url. Values , result interface {}) error {
49+ req , err := http .NewRequest (http .MethodGet , a .encode (resource , query ), nil )
3950 if err != nil {
4051 return err
4152 }
4253
43- req .Header .Add ("User-Agent" , a .userAgent )
44- req .Header .Add ("X-MiteApiKey" , a .key )
54+ req .Header .Add (headerUserAgent , a .agent )
55+ req .Header .Add (headerXMiteApiKey , a .key )
4556
4657 res , err := a .client .Do (req )
4758 if err != nil {
@@ -56,28 +67,20 @@ func (a *api) get(resource string, result interface{}) error {
5667 return json .NewDecoder (res .Body ).Decode (result )
5768}
5869
59- func (a * api ) getParametrized (resource string , values url.Values , result interface {}) error {
60- u := & url.URL {}
61- u .Path = resource
62- u .RawQuery = values .Encode ()
63-
64- return a .get (u .String (), result )
65- }
66-
6770func (a * api ) post (resource string , body interface {}, result interface {}) error {
6871 b , err := json .Marshal (body )
6972 if err != nil {
7073 return err
7174 }
7275
73- req , err := http .NewRequest (http .MethodPost , a .url (resource ), bytes .NewBuffer (b ))
76+ req , err := http .NewRequest (http .MethodPost , a .encode (resource , nil ), bytes .NewBuffer (b ))
7477 if err != nil {
7578 return err
7679 }
7780
78- req .Header .Add ("Content-Type" , contentType )
79- req .Header .Add ("User-Agent" , a .userAgent )
80- req .Header .Add ("X-MiteApiKey" , a .key )
81+ req .Header .Add (headerContentType , mediaTypeApplicationJson )
82+ req .Header .Add (headerUserAgent , a .agent )
83+ req .Header .Add (headerXMiteApiKey , a .key )
8184
8285 res , err := a .client .Do (req )
8386 if err != nil {
@@ -102,14 +105,14 @@ func (a *api) patch(resource string, body interface{}, result interface{}) error
102105 return err
103106 }
104107
105- req , err := http .NewRequest (http .MethodPatch , a .url (resource ), bytes .NewBuffer (b ))
108+ req , err := http .NewRequest (http .MethodPatch , a .encode (resource , nil ), bytes .NewBuffer (b ))
106109 if err != nil {
107110 return err
108111 }
109112
110- req .Header .Add ("Content-Type" , contentType )
111- req .Header .Add ("User-Agent" , a .userAgent )
112- req .Header .Add ("X-MiteApiKey" , a .key )
113+ req .Header .Add (headerContentType , mediaTypeApplicationJson )
114+ req .Header .Add (headerUserAgent , a .agent )
115+ req .Header .Add (headerXMiteApiKey , a .key )
113116
114117 res , err := a .client .Do (req )
115118 if err != nil {
@@ -129,13 +132,13 @@ func (a *api) patch(resource string, body interface{}, result interface{}) error
129132}
130133
131134func (a * api ) delete (resource string , result interface {}) error {
132- req , err := http .NewRequest (http .MethodDelete , a .url (resource ), nil )
135+ req , err := http .NewRequest (http .MethodDelete , a .encode (resource , nil ), nil )
133136 if err != nil {
134137 return err
135138 }
136139
137- req .Header .Add ("User-Agent" , a .userAgent )
138- req .Header .Add ("X-MiteApiKey" , a .key )
140+ req .Header .Add (headerUserAgent , a .agent )
141+ req .Header .Add (headerXMiteApiKey , a .key )
139142
140143 res , err := a .client .Do (req )
141144 if err != nil {
@@ -154,8 +157,8 @@ func (a *api) delete(resource string, result interface{}) error {
154157 return nil
155158}
156159
157- func (a * api ) url (resource string ) string {
158- return fmt . Sprintf ( "%s/%s" , a .base , resource )
160+ func (a * api ) encode (resource string , query url. Values ) string {
161+ return a .base . ResolveReference ( & url. URL { Path : resource , RawQuery : query . Encode ()}). String ( )
159162}
160163
161164func (a * api ) check (res * http.Response ) error {
0 commit comments