async fetch({ schema, url, httpErrors }) {
      throw new Error(
        `fetch() function not implemented for ${this.constructor.name}`,
      )
    }
Request data from an upstream API, transform it to JSON and validate against a schema

@param {object} attrs Refer to individual attrs
@param {Joi} attrs.schema Joi schema to validate the response transformed to JSON
@param {string} attrs.url URL to request
@param {object} [attrs.httpErrors={}] Key-value map of status codes
   and custom error messages e.g: `{ 404: 'package not found' }`.
   This can be used to extend or override the
   [default](https://github.com/badges/shields/blob/master/services/dynamic-common.js#L8)
@returns {object} Parsed response