我正在为https://clockify.me api创建一个简单的客户端来启动/停止计时器,并且它非常适合我自己的工作空间,在另一个工作空间中,我可以毫无问题地启动计时器,但是尝试停止会给我一个403状态代码。
如果我将用户权限更改为工作空间上的admin,则它可以正常工作而不会出现错误代码,或者如果我使用具有admin权限的apikey来停止其他人的计时器。
我不确定这是否是api中的错误,或者是否缺少我无需传递userId即可停止“我的计时器”的另一个端点,这是有关停止计时器https://clockify.me/developers-api#operation--v1-workspaces--workspaceId--user--userId--time-entries-patch的唯一文档。 / p>
我正在使用的端点是
https://clockify.me/api/v1/workspaces/{WORKSPACE_ID}/user/{USER_ID}/time-entries
我正在使用的代码:
func (cli Cli) prepareRequest(endpoint string, method string, body io.Reader) *http.Request {
request, _ := http.NewRequest(method, clockifySettings.Endpoint+endpoint, body)
request.Header.Add("X-Api-Key", clockifySettings.ApiKey)
if body != nil {
request.Header.Set("Content-Type", "application/json")
}
return request
}
func (cli Cli) doRequest(endpoint string, method string, body io.Reader, target interface{}) error {
request := cli.prepareRequest(endpoint, method, body)
client := http.Client{Timeout: 10 * time.Second}
response, _ := client.Do(request)
if response.StatusCode != 200 && response.StatusCode != 201 {
return errors.New(strconv.Itoa(response.StatusCode))
}
if target != nil {
return json.NewDecoder(response.Body).Decode(target)
}
return nil
}
func (cli Cli) StopTimer() error {
now, _ := goment.New()
endrequest := struct {
End string `json:"end"`
}{
End: now.UTC().Format("YYYY-MM-DDTHH:mm:ss")+"Z",
}
body, _ := json.Marshal(endrequest)
err := cli.doRequest("workspaces/"+clockifySettings.WorkspaceDefaultId+"/user/"+clockifySettings.UserID+"/time-entries", "PATCH", bytes.NewReader(body), nil)
return err
}