Do will perform the user supplied function up to the value of retries before giving up
Explicit error messages are allowed to make testing more fault tolerant in unstable environments.
Request is a user provided function that performs an API request and returns an error
Existing functions can be adapted to meet the signature requirement of the Requst func type.