def METHOD_NAME(self, full_url: str, body: Dict[str, Any], method: str) -> Dict[str, Any]:
    if self.dry_run():
        logging.info(f"Dry run, would have requested a {method} to {full_url} with {body}")
        return self.testing_response(method, full_url)
    logging.info(f"Requesting {method} to {full_url} with {body}")
    req = request.Request(full_url, headers=self.headers(), method=method.upper())
    req.add_header("Content-Type", "application/json; charset=utf-8")
    data = json.dumps(body)
    data = data.encode("utf-8")
    req.add_header("Content-Length", len(data))
    try:
        with request.urlopen(req, data) as response:
            content = response.read()
    except error.HTTPError as e:
        msg = str(e)
        error_data = e.read().decode()
        raise RuntimeError(f"Error response: {msg}\n{error_data}")
    logging.info(f"Got response from {full_url}: {content}")
    try:
        response = json.loads(content)
    except json.decoder.JSONDecodeError as e:
        return content
    return response