Skip to content

Instantly share code, notes, and snippets.

@jonocairns
Last active August 29, 2015 14:15
Show Gist options
  • Save jonocairns/082d8ecb6f587b850ece to your computer and use it in GitHub Desktop.
Save jonocairns/082d8ecb6f587b850ece to your computer and use it in GitHub Desktop.
Example integration client
public class IntegrationClient : IIntegrationClient
{
private readonly ISettings _settings;
public IntegrationClient(ISettings settings)
{
if (settings == null) throw new ArgumentNullException("settings");
_settings = settings;
}
public async Task<T> ExecuteGetRequest<T>(RestRequest request)
{
if (request == null) throw new ArgumentNullException("request");
request = AddAuthenticationHeaders(request);
RestClient client = new RestClient(_settings.TargetRestEndPoint);
try
{
IRestResponse response = await client.ExecuteGetTaskAsync(request);
return JsonConvert.DeserializeObject<T>(response.Content);
}
catch (HttpRequestException exception)
{
throw CreateIntegrationException<T>(request, exception);
}
catch (JsonReaderException exception)
{
throw CreateIntegrationException<T>(request, exception);
}
}
private static IntegrationException CreateIntegrationException<T>(RestRequest request, Exception exception)
{
string errorMessage = CreateErrorMessageWithoutApiKey(request);
return new IntegrationException(errorMessage, exception);
}
private static string CreateErrorMessageWithoutApiKey(RestRequest request)
{
TryRemoveSensitiveParameters(request);
string errorMessage = "There was an issue hitting the endpoint: {0}".FormatWith(request.Resource,
JsonConvert.SerializeObject(request));
return errorMessage;
}
private static void TryRemoveSensitiveParameters(RestRequest request)
{
Parameter apiKey = request.Parameters.FirstOrDefault(r => r.Name.Equals("apikey"));
Parameter code = request.Parameters.FirstOrDefault(r => r.Name.Equals("code"));
if (apiKey != null)
{
request.Parameters.Remove(apiKey);
}
if (code != null)
{
request.Parameters.Remove(code);
}
}
private RestRequest AddAuthenticationHeaders(RestRequest request)
{
request.AddHeader("code", _igniteSettings.Code);
request.AddHeader("apikey", _igniteSettings.ApiKey);
request.AddHeader("format", "json");
return request;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment