Uniform trailing slashes, client.URL()

This commit is contained in:
Matthew Dillon 2015-01-12 12:58:48 -09:00
parent 980367e527
commit 02f46aab11
3 changed files with 16 additions and 8 deletions

View file

@ -10,6 +10,7 @@ import (
"github.com/thermokarst/bactdb/datastore"
"github.com/thermokarst/bactdb/models"
"github.com/thermokarst/bactdb/router"
)
func init() {
@ -29,7 +30,8 @@ var (
func setup() {
store = datastore.NewMockDatastore()
SetupCerts("../keys/")
resp, _ := httpClient.PostForm(apiClient.BaseURL.String()+"authenticate/",
u, _ := apiClient.URL(router.GetToken, nil, nil)
resp, _ := httpClient.PostForm(u.String(),
url.Values{"username": {"test_user"}, "password": {"password"}})
defer resp.Body.Close()
}

View file

@ -127,6 +127,12 @@ func (c *Client) url(apiRouteName string, routeVars map[string]string, opt inter
return url, nil
}
func (c *Client) URL(apiRouteName string, routeVars map[string]string, opt interface{}) (*url.URL, error) {
u, err := c.url(apiRouteName, routeVars, opt)
absURL := c.BaseURL.ResolveReference(u)
return absURL, err
}
// NewRequest creates an API request. A relative URL can be provided in urlStr,
// in which case it is resolved relative to the BaseURL of the Client. Relative
// URLs should always be specified without a preceding slash. If specified, the

View file

@ -9,7 +9,7 @@ func API() *mux.Router {
m.Path("/users").Methods("GET").Name(Users)
m.Path("/users").Methods("POST").Name(CreateUser)
m.Path("/users/{Id:.+}").Methods("GET").Name(User)
m.Path("/authenticate/").Methods("POST").Name(GetToken)
m.Path("/authenticate").Methods("POST").Name(GetToken)
// Genera
m.Path("/genera").Methods("GET").Name(Genera)
@ -47,22 +47,22 @@ func API() *mux.Router {
m.Path("/characteristics/{Id:.+}").Methods("DELETE").Name(DeleteCharacteristic)
// TextMeasurementTypes
m.Path("/text_measurement_types/").Methods("GET").Name(TextMeasurementTypes)
m.Path("/text_measurement_types/").Methods("POST").Name(CreateTextMeasurementType)
m.Path("/text_measurement_types").Methods("GET").Name(TextMeasurementTypes)
m.Path("/text_measurement_types").Methods("POST").Name(CreateTextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("GET").Name(TextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("PUT").Name(UpdateTextMeasurementType)
m.Path("/text_measurement_types/{Id:.+}").Methods("DELETE").Name(DeleteTextMeasurementType)
// UnitTypes
m.Path("/unit_types/").Methods("GET").Name(UnitTypes)
m.Path("/unit_types/").Methods("POST").Name(CreateUnitType)
m.Path("/unit_types").Methods("GET").Name(UnitTypes)
m.Path("/unit_types").Methods("POST").Name(CreateUnitType)
m.Path("/unit_types/{Id:.+}").Methods("GET").Name(UnitType)
m.Path("/unit_types/{Id:.+}").Methods("PUT").Name(UpdateUnitType)
m.Path("/unit_types/{Id:.+}").Methods("DELETE").Name(DeleteUnitType)
// Measurements
m.Path("/measurements/").Methods("GET").Name(Measurements)
m.Path("/measurements/").Methods("POST").Name(CreateMeasurement)
m.Path("/measurements").Methods("GET").Name(Measurements)
m.Path("/measurements").Methods("POST").Name(CreateMeasurement)
m.Path("/measurements/{Id:.+}").Methods("GET").Name(Measurement)
m.Path("/measurements/{Id:.+}").Methods("PUT").Name(UpdateMeasurement)
m.Path("/measurements/{Id:.+}").Methods("DELETE").Name(DeleteMeasurement)