code: func (r *Request) Watch() (watch.Interface, error) {
  	// We specifically don't want to rate limit watches, so we
  	// don't use r.throttle here.
  	if r.err != nil {
  		return nil, r.err
  	}
  	url := r.URL().String()
  	req, err := http.NewRequest(r.verb, url, r.body)
  	if err != nil {
  		return nil, err
  	}
  	client := r.client
  	if client == nil {
  		client = http.DefaultClient
  	}
  	time.Sleep(r.backoffMgr.CalculateBackoff(r.URL()))
  	resp, err := client.Do(req)
  	updateURLMetrics(r, resp, err)
  	if r.baseURL != nil {
  		if err != nil {
  			r.backoffMgr.UpdateBackoff(r.baseURL, err, 0)
  		} else {
  			r.backoffMgr.UpdateBackoff(r.baseURL, err, resp.StatusCode)
  		}
  	}
  	if err != nil {
  		// The watch stream mechanism handles many common partial data errors, so closed
  		// connections can be retried in many cases.
  		if net.IsProbableEOF(err) {
  			return watch.NewEmptyWatch(), nil
  		}
  		return nil, err
  	}
  	if resp.StatusCode != http.StatusOK {
  		defer resp.Body.Close()
  		if result := r.transformResponse(resp, req); result.err != nil {
  			return nil, result.err
  		}
  		return nil, fmt.Errorf("for request '%+v', got status: %v", url, resp.StatusCode)
  	}
  	return watch.NewStreamWatcher(watchjson.NewDecoder(resp.Body, r.content.Codec)), nil
  }
docs: // Watch attempts to begin watching the requested location.
  // Returns a watch.Interface, or an error.